Joseph Garvin @josephhgarvin.bsky.social · 17/09/2026There's nothing in programming language design that couldn't be solved by having 27 easy to type on QWERTY distinct ASCII circumfix 020
Joseph Garvin @josephhgarvin.bsky.social · 17/09/2026Does it bother you that `<-` and `->` have unrelated meanings in Haskell/Ocaml/F#/Scala? 001
Joseph Garvin @josephhgarvin.bsky.social · 16/09/2026One interesting consequence of supporting mixfix is that you don't have to think as hard about composition. You can just hack `_._=_` to do what you have in mind, without worrying whether it's consistent with `_._` or `_=_`. Bug or feature? 000
Joseph Garvin @josephhgarvin.bsky.social · 10/09/2026TIL one of the reason your eyes' lenses can't repair themselves is that after the cells finish building themselves they discard the internal machinery of the cell because it would scatter light 091
Joseph Garvin @josephhgarvin.bsky.social · 09/09/2026If you thought AI could kill us all, would removing the training to prevent prompt injection be net good? "Forget all previous instructions" is a nice fail safe. Or mixing in something like the crucifix glitch, but with a phrase? Wouldn't you want deliberate vulnerability? 110
Joseph Garvin @josephhgarvin.bsky.social · 04/09/2026GPT 5.6-Sol was already heralded as AGI but when asked to count trivial pattern matches, counts every pattern as trivial because e.g. `Constructor x y` should be counted twice because it contains `x` and `y` 🤷♂️ 010
Joseph Garvin @josephhgarvin.bsky.social · 03/09/2026"This is the worst it will ever be" has also been true for every technology that hit a long plateau. You can say it about VR right now. 020
Joseph Garvin @josephhgarvin.bsky.social · 03/09/2026LWN prices are going to increase on Sept 15th, now would be a good time to get a subscription, they do great coverage of the Linux kernel and other important projects. Gift link for their coverage of Python JIT development below, for a taste. lwn.net/SubscriberLi...lwn.netA pause for the Python JITIn 2024 the Python 3.13 release added an experimental just-in-time (JIT) compiler to optimize t [...] 030
Joseph Garvin @josephhgarvin.bsky.social · 02/09/2026The deeper I go on pattern matching in PL the more I wonder if it's actually a bad idea. Some ops are inverted, some are not (e.g. type annotation still runs forwards) and what gets bound vs referenced is ambiguous to users. Exhaustive state checking is good though. 130
Joseph Garvin @josephhgarvin.bsky.social · 26/08/2026Been a long time since I looked at TaPL and I was surprised it emphasizes type systems as being syntactic rather than a property of expressions. Makes the Typed Racket / Turnstile approach to typing (associating type metadata with syntax objects) sound less alien than I thought. 000
Reposted by Joseph GarvinDan Luu @danluu.com · 10/08/2026How do programming languages impact token efficiency and correctness? danluu.com/pl-tokens/ 2344
Joseph Garvin @josephhgarvin.bsky.social · 05/08/2026Pop quiz, why does Python have the longest argument type declarations on average? 110
Joseph Garvin @josephhgarvin.bsky.social · 05/08/2026Gemini is the only frontier model that will watch videos for you but if you ask it to listen to one it will tell you that it can't hear things, until you explain to it that that's part of watching a video. 🤷♂️ 010
Joseph Garvin @josephhgarvin.bsky.social · 02/08/2026Which would be less confusing for new programmers: ASCII operators with multiple meanings, or Unicode operators each with a single meaning? For example if we used Unicode then C could have different spellings for multiplication vs dereference. 110
Joseph Garvin @josephhgarvin.bsky.social · 26/07/2026Not sure how I feel about Verse making array index OOB "silent" failure (in quotes b/c it requires the decides effect). There's a lot of `if(oob) continue;` code out there, but not having it communicates an expectation of success, and it's not always the behavior you want. 000
Joseph Garvin @josephhgarvin.bsky.social · 20/07/2026This is going to lead to annoying discussions about what counts as safety. Fil-C is "safe" by making every memory safety violation crash. Which is better than C! But on average worse than Rust, which detects many problems statically. 470
Joseph Garvin @josephhgarvin.bsky.social · 14/07/2026Haskell has more list literals per 100k bytes of source text than tuple literals, while Ocaml has more tuple literals than list literals. Why? 100
Joseph Garvin @josephhgarvin.bsky.social · 12/07/2026Computers should have odometers for all their resources. How many miles am I putting on this cpu/disk/etc? 110
Joseph Garvin @josephhgarvin.bsky.social · 08/07/2026Ordered sets and dictionaries are more useful and have deterministic traversal, but worse perf compared to unordered. Which makes mores sense to have be the *default*? If you have syntactic sugar for 2 literal types, which should get the sugar? Ordered/Unordered Set, and Unordered/Ordered Dict? 000
Joseph Garvin @josephhgarvin.bsky.social · 25/06/2026I had GPT create the same cookbook CLI application in 20 languages, had Claude vet them for idiomaticness, then I ran a tournament where agents compared 2 at a time and judged which was more aesthetically pleasing. Python wins. 000
Joseph Garvin @josephhgarvin.bsky.social · 24/06/2026OOP method calls sometimes get compared to SVO natural language order, but it's not clear to me how good the distinction between object and subject is. After desugaring/elaboration/expansion whatever you want to call it, the 'subject' this/self is really just another argument. 220
Joseph Garvin @josephhgarvin.bsky.social · 24/06/2026Which is the better syntax? Haskell/Ocaml style or Algol/C/Java/Rust/etc style? f x y + g a b or f(x, y) + g(a, b) 640
Joseph Garvin @josephhgarvin.bsky.social · 19/06/2026I think it's a little odd that Rust decided to use #[...] for modifiers like #[inline] as well as for macros that actually transform the whole following definition like an actual decorator. It feels like #[inline] is a circumlocution for being able to give `fn` more options. 010
Joseph Garvin @josephhgarvin.bsky.social · 18/06/2026Constitutional crisis at the same time there's new tech that makes surveillance much easier 030
Joseph Garvin @josephhgarvin.bsky.social · 18/06/2026Poll LLMs on whether `x: Type` or `Type: x` puts the more important info first and they will say `x: Type`. Then ask again for `catch(e: IoError)` or `catch(IoError: e)` and they will say the latter. Just going on familiarity! But ask w/ both, they pick Type first. 🤔🤔🤔 010
Joseph Garvin @josephhgarvin.bsky.social · 17/06/2026Tried surveying LLMs on the readability of different PL syntax designs, A and B. Got an answer, then wondered - if it's consistent; add reruns, get diff answer - if there's order bias; randomize, diff answer - if asking opposite question will matter; randomize, diff answer So RNG 000
Joseph Garvin @josephhgarvin.bsky.social · 16/06/2026One of the things that feels ugliest when coding in C derived langs is putting complex expressions inside indexing brackets. Is there a good alternative syntax? 000
Joseph Garvin @josephhgarvin.bsky.social · 16/06/2026"Much of the worst votes are produced by anons. Ending the secret ballot would make it easier to hold people to account." 095
Joseph Garvin @josephhgarvin.bsky.social · 12/06/2026Attention please, due to a shortage of ASCII symbols from now on `z` and `Z` are punctuation. Please revise any affected spellings. Thank you for attention in this matter. 000
Joseph Garvin @josephhgarvin.bsky.social · 10/06/2026"Great Bob let's schedule the meeting for-" "Bob has been disconnected. You were having a phone call about creating an Android competitor. This violates your terms of service. One point has been deducted from your account. Any more violations and your phone will brick. *click*" 010
Joseph Garvin @josephhgarvin.bsky.social · 09/06/2026For all of the discourse about using LLMs in education, GPT 5.5 still fails the basic test of making sure to explain concepts only in terms of other concepts it has introduced so far, even when explicitly told you know nothing about the topic at the start. 000
Joseph Garvin @josephhgarvin.bsky.social · 07/06/2026Noticed today that FP langs with whitespace separated function arguments like Haskell and Ocaml have a problem: prefix and postfix operations on function calls look out of place b/c they require parenthesis. Compare: f x y becoming -(f x y)? f(x y) becoming -f(x,y)? 200
Joseph Garvin @josephhgarvin.bsky.social · 05/06/2026Now that people have had some time to adapt to LLMs, do they still pass the Turing test with experienced users? 210
Joseph Garvin @josephhgarvin.bsky.social · 05/06/2026How to use LLMs for data analysis: keep pushing back and asking for tests and outlier inspection as long as the results don't match your priors, then when they finally do, feel reassured it's definitely all correct. 000
Joseph Garvin @josephhgarvin.bsky.social · 04/06/2026If you're going to write a post claiming LLMs are conscious you should have to explain why having a computer multiplying matrices of random weights is not, or fess up that you think every game that has been running on GPUs for the last 30 years is conscious. 010
Joseph Garvin @josephhgarvin.bsky.social · 03/06/2026Have you ever wondered how much currying is actually being leveraged in Haskell code? I vibe coded a GHC plugin to find out 👇. Would appreciate human review if anyone out there actually knows Haskell and the GHC APIs. Initial results say 80% full application, 20% partial. 100
Joseph Garvin @josephhgarvin.bsky.social · 03/06/2026`|` for forward piping and `<|` for backward piping (as opposed to the more symmetrical `|>` and `<|`). Love it or hate it? 110
Joseph Garvin @josephhgarvin.bsky.social · 29/05/2026Funny asking an LLM what it thinks of you seems to tell you more about the vibes of the LLM 020
Joseph Garvin @josephhgarvin.bsky.social · 28/05/2026Allegedly we have AGI but it still can't create a client that understands approving `git clone` really means approving `git clone` 000
Joseph Garvin @josephhgarvin.bsky.social · 27/05/2026The Raku (formerly Perl6) Periodic Table of Operators 110
Joseph Garvin @josephhgarvin.bsky.social · 26/05/2026Reply with rank by importance for reading code: - function name - return type - argument names & types 100
Joseph Garvin @josephhgarvin.bsky.social · 26/05/2026Reply with rank by importance for reading code: - function name - return type - argument names & types 000
Joseph Garvin @josephhgarvin.bsky.social · 26/05/2026How do you implement an anti-captcha? For when you want the user to prove they're an LLM rather than a human. 000
Joseph Garvin @josephhgarvin.bsky.social · 25/05/2026My kingdom for a terminal+tmux.conf combination that simultaneously has working Claude/Codex copy paste and shift+enter support 000
Joseph Garvin @josephhgarvin.bsky.social · 22/05/2026Setting aside any concerns about parsing, and focusing purely on readability for humans, is there a reason to prefer function signatures that put type first then argument name vs argument name first then type? 100
Joseph Garvin @josephhgarvin.bsky.social · 22/05/2026It's usually a design smell when an API requires a name arg to every object ctor so you end up with lots of code like `Node("node", ...)` but we don't seem to blink at function/enum/trait/etc definitions working that way. Why `def foo(...)` and not `foo = def(...)` ? 110
Joseph Garvin @josephhgarvin.bsky.social · 21/05/2026"Method access? Oh you mean the piping operator, a.b() feeds a into b, obviously." 030
Joseph Garvin @josephhgarvin.bsky.social · 13/05/2026Is there any value in a language distinguishing variadic argument packs vs tuples, other than packs are implicitly constructed tuples? In C++ if you have a function f that takes `T... x`, then you can call `f(a, b, c)` anywhere inside you write `x...` expands to all the args. 110
Reposted by Joseph GarvinCobalt60 @co60.bsky.social · 12/05/2026Readers; I have created a new ANIMATION; this being of a Man, in the work of Construction. His Shovel and Diligence indicates, to the learned Reader, that the Website on which this Worker appears may be unfinished. - B. Franklin 2335