William J. Bowman
williamjbowman.com · Personal blog · on HN since 2014
William J. Bowman is a programming languages researcher who writes about types, compilers, Racket, and when generative models are useful.
What HN saysCommenters call his post 'Against Vibes' a really useful read, and also cite his invited talk on ethical compilers.
16HN people shared it
6linked it in comments
20stories submitted
313story points
8 months agolast shared
2014people per year2026
Most-shared posts
- 1Untyped Programs Don’t Exist3 people · 49 points · first shared 2018 · 97 comments on HN
- 2Against Vibes: When Is a Generative Model Useful3 people · 1 points · first shared 2026 · discussion on HN
- 3Dependent Type Systems as Macros [pdf]2 people · 95 points · first shared 2020 · 7 comments on HN
- 4Fully Abstract Compilation via Universal Embedding [pdf]2 people · 70 points · first shared 2016 · 9 comments on HN
- 5What's higher-order about so-called higher-order references?2 people · 3 points · first shared 2025 · discussion on HN
- 6Indexed types for a statically safe WebAssembly [pdf]1 people · 51 points · first shared 2024 · 4 comments on HN
- 7Macro-Embedding Compiler Intermediate Languages in Racket [pdf]1 people · 26 points · first shared 2022 · discussion on HN
- 8A Low-Level Look at A-Normal Form1 people · 4 points · first shared 2024 · 1 comments on HN
- 9Do compilers respect programmers? [pdf]1 people · 3 points · first shared 2021 · discussion on HN
- 10“What Is Syntax?”1 people · 2 points · first shared 2023 · discussion on HN
- 11Experimenting with Languages in Redex1 people · 2 points · first shared 2019 · discussion on HN
- 12What even is compiler correctness?1 people · 2 points · first shared 2017 · discussion on HN
- 13A low-level look at A-normal form1 people · 2 points · first shared 2024 · discussion on HN
- 14Auto-starting/stopping minecraft server using xinetd1 people · 1 points · first shared 2014 · discussion on HN
- 15The Syllabus1 people · 1 points · first shared 2022 · discussion on HN
What HN people wrote when they linked it
HalfEmptyDrum · 2026-03-11
If you read this: https://www.williamjbowman.com/blog/2026/03/05/against-vibes-when-is-a…
you will notice that this may not even be the correct workflow (depending on what you want to achieve of course. If you just verifiable web-dev, you can keep on doing what you do; even then there may be counter-args).
Generally, I noticed that when I went back to my old work flow of writing rough pseudo code (which aggregated doesn't add a lot of time), I was more efficient. I could then let the LLM translate the pseudo code.
What I was missing though was that the LLM also suggested changes to my pseudo code in my pseudo code style as well.
This is why I built the following skill (you can use /translate then):
https://github.com/HalfEmptyDrum/Pseudo-Code-Flow
I have written about it here:
https://news.ycombinator.com/item?id=47331647
matt_d · 2025-06-21
Preprint: https://williamjbowman.com/resources/wjb2024-ethical-compiler.pdf
DOI: https://doi.org/10.1145/3704253.3706135
William J. Bowman. The 2025 ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM) – Invited Talk.
Abstract:
"The is-ought gap is a problem in moral philosophy observing that ethical judgments ("ought") cannot be grounded purely in truth judgments ("is"): that an ought cannot be derived from an is.
This gap renders the following argument invalid: "It is true that type safe languages prevent bugs and that bugs cause harm, therefore you ought to write in type safe languages".
To validate ethical claims, we must bridge the gap between is and ought with some ethical axiom, such as "I believe one ought not cause harm".
But what do ethics have to do with manipulating programs?
A lot!
Ethics are central to correctness!
For example, suppose an algorithm infers the type of is Bool, and is in fact a Bool; the program type checks.
Is the program correct-does it behave as it ought?
We cannot answer this without some ethical axioms: what does the programmer believe ought to be?
I believe one ought to design and implement languages ethically.
We must give the programmer the ability to express their ethics-their values and beliefs about a program-in addition to mere computational content, and build tools that respect the distinction between is and ought.
This paper is a guide to ethical language design and implementation possibilities."
EmptyDrum · 2026-03-11
Btw, I got inspired by this: https://www.williamjbowman.com/blog/2026/03/05/against-vibes-when-is-a…
Really useful read!
Y_Y · 2025-11-21
I've been trying to get LLMs to make Racket "hashlangs"† for years now, both for simple almost-lisps and for honest-to-god different languages, like C. It's definitely possible, raco has packages‡ for C, Python, J, Lua, etc.
Anyway so far I haven't been able to get any nice result from any of the obvious models, hopefully they're finally smart enough.
† https://williamjbowman.com/tmp/how-to-hashlang/
‡ https://pkgd.racket-lang.org/pkgn/search?tags=language
naasking · 2025-01-08
> Generic things should be parametric most of the time, and non-parametricity should be visible, so that people don't do it accidentally.
Economy of mechanism is powerful though, it's one of the reasons C is still so popular. The comptime approach that provides both parametric and ad-hoc polymorphism using a single mechanism seems to fit Zig quite well. I'm still a bit of a typaholic, but I've really come to appreciate economy of mechanism instead of deeply inscrutable types.
I think a good language would take something like Zig's approach to comptime, where the template/macro language is the same as the value language, with a deep consideration of TURNSTILE from "Type Systems as Macros":
https://www.khoury.northeastern.edu/home/stchang/pubs/ckg-popl2017.pdf
You can even get to dependent type systems as macros:
https://www.williamjbowman.com/resources/wjb2019-depmacros.pdf