The Goose Programming Language
bobbydigitales
320 points
214 comments
October 24, 2026
https://twitter.com/ID_AA_Carmack/status/2113704269274636568
Related Discussions
Found 5 related stories in 122.6ms across 10,486 title embeddings via pgvector HNSW
- The Goose Programming Language andsoitis · 172 pts · October 24, 2026 · 100% similar
- Goose:experimental lang 1.16x faster than C++ and 1.12x than safe Rust, mem safe bobbydigitales · 49 pts · September 18, 2026 · 77% similar
- EYG: A Programming Language for Humans crowdhailer · 48 pts · July 28, 2026 · 55% similar
- A pure scheme web programming tool guenchi · 74 pts · July 12, 2026 · 52% similar
- 27.5KB language-agnostic WebGPU syntax highlighter bpierre · 45 pts · September 09, 2026 · 50% similar
Discussion Highlights (19 comments)
bobbydigitales
"That looks really neat! The automatic analysis and use of multiple data stacks and resizable fields takes it from "lots of work can be done this way" to "basically everything can be". The relative references and built in binary structure validation also enable direct memory mapping of data structures and immediate use of network data. "Parsing" file and network data is often 100x slower than it needs to be." - John Carmack
mi_lk
Obviously the guy is replying to something that you can't see without logging in twitter. And without context this means little
AnEro
Such a cool idea! I've been toying around making a few libraries to force languages to do that direct io zero-read mapping to data structures. Ofcourse this looks way better and infinity less hacky, but it is a fun and trippy experience to find someone working in the same direction as you independently.
Aardappel
Btw I made the language, AMA. repo: https://github.com/aardappel/goose
geoffbp
No relation to https://goose-docs.ai/ I guess?
iacuobos
I can't see a reason to use this and not C++ It reads like slop text
FrustratedMonky
Looks cool, and well developed. But really, cover pages need some better TL;DR, about the purpose. What is it for? There are a ton of languages out there. What gap is this filling? What is the purpose, the use case. Why do I need to keep reading further? Edit Man, two posting about Goose back to back. Carmack alone might be enough to read further. https://news.ycombinator.com/item?id=50224100
pulse7
Educate me: how to create a program in Goose which reads a JSON structure, prints it out and finishes. How is memory for JSON allocated on stack? It can be from 1K to 1M - depending on the file...
andsoitis
Lobster is the author's other programming language, previously discussed on HN: https://news.ycombinator.com/item?id=47239955
weinzierl
Rust's appeal (to me) is safety, performance, DX in that order . Where does Goose sit when classified along these dimensions? Sure, performance is right there on the packaging but no word about UB in the README. I read "Goose has syntax familiar to C and Rust" as DX in the same ballpark, but is it a performance first or safety first language. If it is the former it occupies the same crowded niche as C++ and its many cousins and will have a hard time. If it's the latter it will have much more room to prosper. We don't have enough languages in the niche that Rust and Ada fill right now.
baalimago
Do android dream of goose?
IshKebab
PLEASE rewrite this without AI-isms. AI can write perfectly good code now, but its prose - even the latest models - is just awful to read. It hurts my brain to read this.
rfgplk
Keep going, and I hope more people start rolling their own languages. If anyone is interested, I'm fairly close to finalizing Slang and I'm considering open-sourcing it in the near future. What originally started as a simple register based lang for an embeddable VM turned into an insanely expressive meta?programming language. Full system Fω, expansive whole program reflection (you can reflect on absolutely anything), string memory & logic safety.. You can do stuff like this: (fn answer () -> i64 0) (defpass build-answer (phase source) (transform (lambda (f) (fn-with f 'body '(let ((a (arr (42)))) (at a 0))))) (safety (lambda (goal) (syntax (refl))))) (run-pass build-answer answer) (fnmut answer (transform (lambda (f) (if (memory-safe? (check-memory (current-program))) f (syntax-error 'unproved-memory))))) (defpass inspect-ssa (phase ssa) (transform (lambda (f) (if (memory-safe? (check-memory (ssa-current-program))) f (syntax-error 'unproved-ssa-memory)))) (proof (lambda (goal) (syntax (refl))))) (run-pass inspect-ssa answer) (answer) or this: (fn next ((i i64)) -> i64 (+ i 1)) (fncontract next (ensures result (successor (Eq i64 result (+ (old i) 1)) auto))) (fn read-second ((i i64)) -> i64 (let ((a (arr (0 42)))) (at a i))) (fncontract read-second (requires (one (Eq i64 i 1)))) (let ((i (next 0))) (with-proof ((one (Eq i64 i 1) (result-proof i successor))) (print (read-second i)))) it also supports full inline asm or llvm ir: (var answer 0) (asm (input rdi 20) (input rsi 22) (output rax answer) (mov rdi rax) (add rsi rax)) (print answer) (macroop \ (a) (asm (mov a rax))) (\ 42) (print (llvm add 20 22)) (print (->i64 (llvm fused-multiply-add (f64) 6.0 7.0 0.0))) (llvm fn sum32 ((x i32) (y i32)) -> i32 (block entry (value answer (llvm add x y (declare (flags nsw)))) (llvm return answer))) (print (->i64 (sum32 (the i32 20) (the i32 22)))) Even though you can write this by hand, the core idea is to get a very dense and terse language that LLMs can emit while guaranteeing safety and performance.
ebiederm
I seem to remember the ML guys went down this route. I believe they called it regions. From what little I read in the literature I seem to recall that there were enough programs with quite a bit more memory usage that they decided this approach was a dead end. Does anyone know anymore details?
FrankWilhoit
The right ideas. Not optimized for reallocation. Creates pressure to overload types, making secure software unattainable.
mihaaly
Oh, is this then the Holy Grail of memory handling or what?! Please share it with logistics guys, since putting stuff from here and there into warehouse storage, then taking away, put some more in than planned sometimes, keeps spinning their heads. They need all the good logic! So, yet another programming language, that's nice. I never thought there will be one more beyond English. Evolution of programming languages: - 1940s → Machine Code ( 0s 1s ) - 1949 → Assembly - 1957 → FORTRAN - 1959 → COBOL - 1964 → BASIC - 1970 → Pascal - 1972 → C - 1983 → C++ - 1991 → Python - 1993 → Ruby - 1995 → Java - 1995 → JavaScript - 1995 → PHP - 2000 → C# - 2009 → Go - 2010 → Rust - 2011 → Kotlin - 2011 → Elixir - 2012 → TypeScript - 2014 → Swift - 2015 → Solidity - 2026 → English
anigbrowl
This looks very interesting! I mostly write in garbage-collected languages (to the extent that I still write anything by hand...) so I'm just a spectator in memory management debates, but it's often struck me that heap management is more of an art than a science. The idea of treating memory more like stacks made immediate intuitive sense to me. I'm also fascinated by the thread implementation, although I'm not knowledgeable enough to to think through the potential benefits/costs vs other approaches to concurrency. I wonder if the name of the language was inspired by the way geese fly in formation, with trailing birds saving energy by flying inside the aerodynamic shadow of the leaders, and swapping in and out as needed. If so, a very nice metaphor for the memory management model. I was also impressed by the documentation. As we know AI-generted docs tends to be rather mediocre, but the author has clearly invested time in making in readable such that the relevance and rationale of design decisions provide the context that a curious programmer needs to understand why things are implemented in a particular way. I really appreciated the detailed samples, ranging from simple algorithmic theorems up to a small game. Again, I don't have the experience to rate the language vs others, but I was struck by readable the code was and how easy it was to follow task flow. Not having to think about classes is always a plus! Anyway, I usually the the offering of a new language with dispassionate interest, as something to be aware of and but not get too invested in or familiar with until it gains enough popularity to have a good shot at longevity. Goose is the first language in a long time where I looked at it and immediately thought that I'd like to use it for its own sake.
malisper
I'm curious, for someone more familiar with Goose: how do you represent an arbitrary number of dynamically sized values? If you have a fixed number of stacks, it seems like only a fixed number of values can change size at any given time. For instance, how would you represent a hash table where the values are strings and at random, the program inserts or deletes a random string? This doesn't seem like something you could easily represent. The only way I can think of is to keep a stack that holds all of your strings, and you periodically compact it. Edit: Maybe you could also have a separate stack for strings of various sizes. One each for strings less than 8, 16, ... bytes. But at that point you're basically implementing your own malloc by hand. Edit: Fwiw I do think Goose is very cool! I've had to hand-roll a lot of similar stuff in Rust before to speed up memory management
rvz
If you can't be bothered to read and structure your own README after getting an AI agent to write more than 10,000+ lines on a single page, it becomes a DONTREADME.md. Yet, the author expects YOU to read all of what they didn't write. So I ain't reading all of that.