Sign in

Joseph Garvin

@josephhgarvin.bsky.social
570 followers 1.9K following 1.1K posts

voicecoding latency and throughput hacker. How did I get here and what am I doing in this hand basket? he/him

PostsRepliesMedia
Joseph Garvin @josephhgarvin.bsky.social · 17/09/2026
There'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/2026
Does it bother you that `<-` and `->` have unrelated meanings in Haskell/Ocaml/F#/Scala?
001
Joseph Garvin @josephhgarvin.bsky.social · 16/09/2026
One 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/2026
TIL 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/2026
If 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/2026
GPT 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/2026
LWN 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.net
A pause for the Python JIT
In 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/2026
The 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/2026
Been 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.
A type system is a tractable syntactic method for proving the absence of certain program behaviors by classifying phrases according to the kinds of values they compute
000
Joseph Garvin @josephhgarvin.bsky.social · 20/08/2026
not bad
020
Reposted by Joseph Garvin
Dan Luu @danluu.com · 10/08/2026
How do programming languages impact token efficiency and correctness? danluu.com/pl-tokens/
[image described in post][image described in post][image described in post]
2344
Joseph Garvin @josephhgarvin.bsky.social · 05/08/2026
Pop quiz, why does Python have the longest argument type declarations on average?
110
Joseph Garvin @josephhgarvin.bsky.social · 05/08/2026
Gemini 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/2026
Which 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/2026
Not 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/2026
This 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.
Zig: introduce an actually memory safe (unlike Rust) compilation mode inspired by Fil-C
470
Joseph Garvin @josephhgarvin.bsky.social · 14/07/2026
Haskell 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/2026
Computers 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/2026
Ordered 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/2026
I 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/2026
OOP 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/2026
Which 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/2026
I 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/2026
Constitutional crisis at the same time there's new tech that makes surveillance much easier
030
Joseph Garvin @josephhgarvin.bsky.social · 18/06/2026
Poll 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/2026
Tried 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/2026
One 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/2026
Attention 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/2026
For 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/2026
Noticed 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/2026
Now 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/2026
How 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/2026
If 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/2026
Have 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.
Have you ever wondered how much currying is actually being leveraged in Haskell code? Functions in Haskell are curried by default, which makes partial application cheap and idiomatic: map (+1) passes a function that is still waiting for one argument, while f x y supplies all the visible arguments of f. This project tries to put numbers on that distinction by counting where source code uses functions fully applied versus partially applied. Note that using $ to immediately provide the last argument as an expression is still counted as a full application.

This repository contains a vibe coded GHC plugin for counting source-level Haskell applications as either full or partial. No guarantees about the accuracy, the only due diligence has been having agents track down why calls were categorized as unknown, using /review, and insisting on tests.
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/2026
Funny asking an LLM what it thinks of you seems to tell you more about the vibes of the LLM
Based on your personal experience when talking to me, give me a character from a movie or show who is just like me, just give their name 

GPT: SpockBased on your personal experience when talking to me, give me a character from a movie or show who is just like me, just give their name 

Claude: Rick Sanchez
020
Joseph Garvin @josephhgarvin.bsky.social · 28/05/2026
Allegedly 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/2026
The Raku (formerly Perl6) Periodic Table of Operators
110
Joseph Garvin @josephhgarvin.bsky.social · 26/05/2026
Reply with rank by importance for reading code: - function name - return type - argument names & types
100
Joseph Garvin @josephhgarvin.bsky.social · 26/05/2026
Reply with rank by importance for reading code: - function name - return type - argument names & types
000
Joseph Garvin @josephhgarvin.bsky.social · 26/05/2026
How 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/2026
My 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/2026
Setting 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/2026
It'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/2026
Is 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 Garvin
Cobalt60 @co60.bsky.social · 12/05/2026
Readers; 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