Six days ago I published a ledger that didn't flatter: the compiled Lobsters served ten of twenty-six routes, thirty-nine of 354 of its own tests passed, and the benchmark page opened with a banner declining to stand behind its own timings. The deal I made was to keep publishing the ledger either way. This is the update, under the same rules. The numbers, as of this afternoon The compiled binary…
Go look at rubyonrails.org right now. The first thing you see: Accelerate your agents with convention over configuration. Ruby on Rails scales from PROMPT to IPO. Token-efficient code that's easy for agents to write and beautiful for humans to review. I want to sit with that for a second, because I think it's more interesting than it first appears. The property Rails is selling The argument on…
Two days ago I ended a post deliberately in mid-air: the Roda spike's results were sitting in front of Jeremy Evans, and whether it lived, died, or got tweaked was his call to make, not mine. That was the point of the seating chart — for this episode, the keeper of the oracle is the framework's author. The verdict came back Tuesday evening , and it's worth watching what a keeper actually does with…
Spinel is Matz's ahead-of-time Ruby-to-C compiler, and this month it acquired an unusual asset: a 40,000-line application it could not compile. When Roundhouse transpiles Lobsters for the Spinel target, it emits a ~370-file tree of plain Ruby — the app, its views desugared into methods, and the reified framework runtime. Two weeks ago, pointing Spinel at that tree produced a single core pinned at…
At RubyConf on Thursday I argued that there is no server — that Rails is a declarative spec, the compiler is the query planner, and the deployment target is the execution plan. Afterwards, Jeremy Evans asked me the question that keeps a thesis honest: could you do Roda too? It's the right question precisely because Roda is Rails' opposite number. Rails is macros all the way down — has_many ,…
In the talk , the tenth rung of the ladder gets a single line and a "hold that thought": typed Ruby ─▶ Spinel ─▶ C ─▶ machine code That rung is three compilers standing on each other's shoulders: Roundhouse turns a Rails application into the subset of Ruby that Spinel , Matz's ahead-of-time compiler, accepts; Spinel turns that Ruby into C; the system C compiler turns the C into a native binary.…
send is the method that isn't supposed to compile. Everything else Rails does dynamically — associations, callbacks, scopes, the whole metaprogramming apparatus — is elaborate , but it resolves: given the whole program, you can follow each one to the concrete method it names. send is different in kind. obj.send(name) calls whatever method name holds at runtime , and if name is a value that arrived…
Every performance number in this series so far has come from a single application: the quintessential Rails blog demo , five endpoints, modernized with Turbo and Tailwind. It was chosen deliberately — small enough that I could hold every emitted line in my head, and hold Roundhouse's output to Rails' byte for byte through a compare gate. But a five-endpoint blog is exactly the application most…
The posts in this series so far have described machinery — an oracle , an IDE , a flow analyzer — and gestured at a destination. This post states the destination plainly, because I've learned that goals you state plainly are the ones you can't quietly shrink. The goal has a two-part success condition: Mastodon — a real, large, heavily-deployed Rails application — passes its own test suite when…
Live Types for Rails made an observation: the type inference Roundhouse builds because transpilation demands it — what class is @status , what does this scope return, can this be nil — is worth having on its own. This post is the next step of that observation. You can't infer types in a Rails app without tracking flow . What class @account is depends on which before_action assigned it — which…
Two recent posts made promises. Hover Over the Difference ended by admitting Roundhouse's emit was calibrated to one small fixture, and that the only way to learn how far the subset extends "is to feed it bigger applications — which will be the subject of a later post, not this one." Live Types for Rails named the stretch target: Mastodon, seventy-five thousand lines of application code. This is…
A follow-on to The Drucker Inversion and The Oracle Is the Asset — and, it turns out, to Bring Me a Rock , whose unfinished question this post finally starts to answer. It began as an observation about throwaway versus evolutionary prototyping that I didn't expect to end up here. The background is that I developed a CRUD application named Showcase to schedule dance events. I picked Rails because…
I'm back, and I said I'd report once I found out how much of what I brought survived contact with a room that knew the subject better than I do. First, the easy and entirely true things. The venue was gorgeous. The organizers were professional in the way that only looks effortless — the unconference ran so smoothly you forgot how much arranging that takes, and when more people wanted to lead…
A few days ago, in The Rungs , I reached for a phrase to describe something I'd found reassuring: two doors, one room . I'd been teaching a Rails application to compile itself into nine languages, and learned that someone I'd never met had, in the same months, written a complete Swift compiler and SwiftUI runtime in dependency-free C, retargeting Apple's platform into a browser tab. Different…
This week I'm in Switzerland, at a retreat on the future of software development , in a room full of people who have thought about that future longer and harder than I have. I haven't come to out-theorize them. I've come with a sample of one — a single project, built in retirement with an agent as co-author — and a few months' worth of posts arguing about what it might mean. This is the map of…
In 1991, a young student from Finland changed the world. In the mid-1990s I lead a team working on software configuration management tools for IBM — loosely an on-prem, pre-internet GitHub, with version control, issue tracking, and continuous integration. Overly ambitious for its time; trivial by today's standards — in no small part because that same student from Finland came back in 2005 and…
For fifteen years the answer to "what are you building it in" has quietly stopped being a language and started being a framework. Nobody chooses Ruby; they choose Rails. Not Elixir but Phoenix, not JavaScript but React or Next. The language became the substrate you stand on and mostly stop thinking about, and the framework became the thing you actually decide, hire for, argue about, and identify…