Working on the game Voxile. Prev. Wasm / FlatBuffers / games&VR at Google. Made TreeSheets, PLs (Goose, Lobster, False, Amiga E) and game engines (Cube..).
Some startups make unbelievable financial returns, but most don't. I'm fortunate enough to have a reasonably good track record as an investor, but I never know which will be which deterministically.
I realized that fact a long time ago and resolved to try to work with founders that I love in a deep and intangible way. Folks I wake up wanting to help every day. People I try to help however I can, whether it's a weekday or weekend, a personal matter or a work one, a happy situation or a sad one.
I want to work with founders where I deeply care and enjoy the holistic journey, no matter the outcome. I optimistically believe if I do that, the aggregate returns will take care of themselves. That's the beauty of real venture capital.
@stevekrouse is a real one. I loved every minute of Val Town and I'm excited to continue the journey with him for another few decades if he'll have me
@lucasmeijer Though I presume that path is really hard, because you'd want to test against some representative set of C/C++/Rust/Zig/.. Goose? programs to know you're not regressing, and some of these less useful looking passes are indeed not needed. Or regain speed elsewhere.
@lucasmeijer A non-1:1 translation would first analyze what we do different first: see which passes are actually necessary, and see which passes can use improved algorithms and so forth. Can we make something that on average generates same runtime speed but way simpler?
software factory rewrote part of @tobi's qmd in @wvo's goose, speeding up indexing by ~30x.
also wrote a LoRA trainer that uses ~5x less memory than PyTorch and completes runs ~80% faster.
this weekend. since saturday morning.
@johnzabroski@kellabyte yes, that is the idea.. in our design so that is a special loop type that asks the compiler to check there are no inter-loop dependencies, and thus multiple iterations of the loop can be run at once in SIMD
@dhh A bit late to the party, but Campfire in Goose is now in the shared harness (PR #13), matching Rails (main) response for response.
- Posting: 1.26x Jai, 1.74x Rust
- Pages: on par with Jai, 8-9x Rust
- Memory posting: 16 MiB vs Jai 77, Rust 90, Rails 889
https://t.co/M2zOHNhkLE
@lucasmeijer@dhh Yup when I first worked on Goose I thought, who wants a new language in 2026? Does AI make languages irrelevant? Turns out, if it offers something new, a lot of people care, in fact, moreso now, as "does my code run faster in Goose" can now be answered in no time.
Goose: my latest programming language. Safer, faster and less memory than Rust/C++ for algorithms where tightly packed, flat data structures matter.
It can represent more kinds of data structures as flat, pointer-free bytes than any language I know.
https://t.co/qqC3RFD0BS
1/
@lcamtuf I so want one. I've searched for these in past and even had a hw friend prototype one haha.
The pseudo is probably a better UI for most.. mine was purely logarithmic.
@johnzabroski@kellabyte Goose currently has no explicit SIMD yet, it only has `simd` functions which will use the max SIMD the machine has, plus we have some "assist the auto vectorizer" functionality for that. So not "supporting" 16bit SIMD means auto vectorizing is not working.
Wow, Carmack just describes a programming system that matches Goose almost exactly. Address space reservation for huge stacks with safe lifetime management.
I always thought it was a shame that modest default stack setups made alloca() a generally-frowned-upon technique in C/C++. With 64 bit architectures, give every stack a virtual address space equal to the physical memory by default!
You can do a surprisingly good job of memory management with just the stack, and I contend that it has both correctness and performance advantages.
Allocations are a trivial pointer adjustment, and frees are literally free. Keeping everything linearly packed is friendlier for all layers of the cache hierarchy, and it makes keeping everything in huge / gigantic pages easy.
Leaving temporary intermediate blocks on the stack can seem wasteful, but unless you are dealing with algorithms that make > O(n) temporary allocations, it is usually not a big deal.
Static analysis can check if you store a stack pointer into a structure deeper in the stack, which is a use-after-free, and then memory management correctness is guaranteed.
The discipline of caller-allocates-return is awkward in some dynamic cases. It would take a change in low level calling conventions, but you could plausibly have functions that return with the stack extended from where it was when they were called. Iโm not holding my breath for that.
It isnโt obvious if having AI coding agents makes discussions of software architecture more or less important!