Meta tags:
Headings (most frequently used words):
the, you, what, on, rails, roda, spinel, intertwingly, nav, bar, standing, behind, numbers, happens, after, ipo, can, rewrite, your, way, out, of, big, there, is, no, server, three, compilers, one, concern, each, dynamic, dispatch, bigger, fixture, mastodon, flow, analysis, for, an, ide, don, install, maintaining, oracle, survived, contact, in, plain, sight, scarce, thing, do, recommend, conformance, vs, comprehension, rungs, bring, me, rock,
Text of the page (most frequently used words):
the (265), and (95), that (52), one (30), from (28), for (24), what (24), this (24), rails (22), you (21), not (19), with (19), can (19), two (17), its (16), compiler (14), code (13), oracle (13), out (13), own (13), post (13), into (12), where (12), time (11), now (11), ruby (11), same (11), which (11), roda (11), real (10), has (10), when (10), #spinel (10), because (9), over (9), against (9), was (9), all (9), every (9), but (8), three (8), app (8), test (8), are (8), application (8), about (7), work (7), way (7), made (7), cost (7), agent (7), each (7), building (7), never (7), question (7), mastodon (7), rewrite (7), instead (6), behind (6), didn (6), turns (6), thing (6), conformance (6), months (6), read (6), room (6), line (6), both (6), first (6), twenty (6), live (6), numbers (6), they (5), just (5), gets (5), been (5), whole (5), few (5), spec (5), build (5), than (5), objective (5), reference (5), page (5), said (5), how (5), hand (5), target (5), number (5), request (5), them (5), days (5), his (5), bar (4), rock (4), manager (4), away (4), once (4), together (4), cheap (4), iteration (4), years (4), software (4), ladder (4), rung (4), answers (4), everything (4), tool (4), person (4), asset (4), behavior (4), built (4), collapsed (4), generated (4), had (4), most (4), comes (4), method (4), posts (4), here (4), could (4), holds (4), running (4), then (4), wrong (4), four (4), roundhouse (4), ide (4), your (4), type (4), including (4), ten (4), static (4), honest (4), next (4), upstream (4), analysis (4), suite (4), memory (4), blog (4), benchmark (4), compile (4), ahead (4), dispatch (4), six (4), send (4), wrote (4), jeremy (4), sequel (4), bring (3), want (3), doesn (3), used (3), peer (3), place (3), stop (3), full (3), stack (3), left (3), team (3), only (3), artifact (3), authored (3), sample (3), versus (3), comprehension (3), have (3), rigor (3), does (3), asked (3), almost (3), drucker (3), stake (3), week (3), implementation (3), still (3), worth (3), plain (3), open (3), fix (3), load (3), bearing (3), whether (3), right (3), neither (3), prose (3), holding (3), answer (3), author (3), write (3), keep (3), weeks (3), mine (3), referenced (3), small (3), get (3), earlier (3), coverage (3), front (3), already (3), maintaining (3), turned (3), even (3), keeper (3), exists (3), applications (3), status (3), ago (3), measured (3), flow (3), too (3), renders (3), server (3), filed (3), came (3), identical (3), stage (3), part (3), program (3), talk (3), rubyconf (3), there (3), after (3), matz (3), frameworks (3), verdict (3), big (3), lobsters (3), slur (2), names (2), who (2), serial (2), rejection (2), their (2), under (2), inverts (2), better (2), things (2), quietly (2), harder (2), removes (2), signal (2), tell (2), rising (2), walks (2), goes (2), being (2), invisible (2), new (2), reaches (2), require (2), institution (2), funded (2), abstraction (2), discipline (2), separates (2), keeps (2), source (2), retired (2), inferred (2), authoring (2), did (2), couldn (2), vanish (2), court (2), last (2), experience (2), less (2), reason (2), down (2), stopped (2), recommend (2), move (2), named (2), shape (2), worker (2), manage (2), word (2), human (2), retreat (2), strand (2), through (2), arrangement (2), managing (2), starts (2), links (2), language (2), history (2), ever (2), proof (2), tests (2), fast (2), run (2), back (2), near (2), extended (2), hire (2), llm (2), use (2), rather (2), non (2), pull (2), requests (2), hold (2), direct (2), outcome (2), second (2), actually (2), standing (2), those (2), blind (2), something (2), prototyping (2), search (2), self (2), property (2), correctness (2), architecture (2), runs (2), silent (2), depends (2), promises (2), bigger (2), later (2), other (2), browser (2), instance (2), variable (2), typed (2), notes (2), gaps (2), don (2), published (2), traceroute (2), detection (2), turning (2), described (2), projection (2), types (2), observation (2), inference (2), builds (2), having (2), query (2), top (2), chain (2), call (2), progress (2), found (2), bug (2), fixed (2), series (2), machinery (2), destination (2), compiled (2), configuration (2), plan (2), node (2), authenticated (2), 114 (2), database (2), output (2), route (2), why (2), tempting (2), data (2), sql (2), string (2), today (2), lobste (2), name (2), computed (2), dynamic (2), set (2), finite (2), table (2), pass (2), case (2), refuses (2), compilers (2), emits (2), compiles (2), garbage (2), collector (2), seat (2), well (2), evans (2), idiomatic (2), exemplar (2), existed (2), intermediate (2), representation (2), passes (2), native (2), spike (2), spent (2), 000 (2), hundred (2), seconds (2), five (2), ran (2), cap (2), loop (2), wasn (2), comment (2), between (2), ipo (2), speed (2), thirty (2), nine (2), 354 (2), ledger (2), stand (2), routes (2), linkedin, bluesky, nav, substitutes, saying, makes, pay, unfinished, thinking, argue, conditions, exist, dysfunction, defensible, got, imposed, latency, exploited, patience, peers, exploring, tireless, boss, imposing, subordinate, discernment, expensive, dithering, framing, means, recognition, shared, fifteen, defined, nobody, chooses, choose, migration, framework, becomes, targets, exercises, student, finally, around, questions, motion, old, engine, standards, body, requires, afternoon, graveyard, kept, view, base, telling, boundary, essential, rungs, durable, relocating, inspect, red, hat, sold, certification, kernel, ecma, standardized, tree, claims, convinced, axis, expressive, safe, really, annotated, artifacts, institutions, claim, augment, replaced, judged, moved, overwhelming, appeal, speak, using, surprised, year, field, words, hear, slop, hallucination, hasn, change, early, accident, issuing, choices, started, asking, unlock, learned, leading, nineties, good, lead, value, rarely, knowledgeable, drawing, whoever, peter, 1959, knows, more, haven, resolved, contributes, like, navigating, mismatch, borrowing, instincts, worked, version, hoping, bite, future, development, perspective, bringing, explore, argues, make, since, implies, notice, relocates, moves, stalled, decade, needed, climbing, again, leaves, anyone, know, answering, piece, argued, caveat, scarce, specification, whose, thesis, should, regenerated, maintained, ash, agree, longer, replaces, differ, narrow, throw, gives, issued, licenses, regenerating, checking, result, probabilistic, renderer, trials, validate, watching, start, blank, difference, medium, sight, report, easy, truths, gorgeous, venue, organizers, welcome, ideas, brought, ledgers, spine, held, writes, migrates, while, scope, spilled, economics, ethics, geopolitics, worry, arrives, evidenced, hope, permission, dissolves, older, worried, stakeless, supply, evaluate, bdd, system, caveats, marked, carried, opening, leave, board, parallel, candidates, restart, evolve, else, engineer, principal, model, teams, stitched, issues, large, systems, composed, survived, contact, staked, positions, inversion, depth, lack, approximations, describes, day, level, continuous, lands, bucket, custodian, objectives, checked, powers, itself, extend, overrule, verdicts, certifies, reject, decide, computes, truth, cases, imagined, reachable, swaps, goal, nearest, hit, calling, role, extra, steps, generation, throwaway, architectures, falsification, fatal, migrating, misplaced, risk, unattainable, unbearable, maintenance, topology, felt, founding, defect, recurred, scale, reached, strangler, fig, match, behavioral, convergence, infinite, wandering, returns, thin, find, far, subset, extends, feed, subject, stretch, argument, rubys, github, 337, controllers, haml, views, included, analyzed, tab, hover, dot, completion, reads, 721, errors, 3806, warnings, 6600, 304, ingest, ones, flatter, along, underneath, performance, percent, see, term, explorations, queued, long, arc, partial, evaluation, jruby, futamura, prerequisite, install, accurate, transpilation, step, infer, without, tracking, before_action, assigns, action, feeds, template, preloaded, iterates, graph, features, sit, traverses, clickable, mcp, incomplete, missing, preload, alone, boot, traffic, annotations, previous, hinted, states, plainly, deadline, passing, offered, supported, curiosity, end, 2026, swallow, decomposes, subsystems, replacement, streaming, public, repo, 300, connections, 16mb, 202mb, also, banked, wire, protocol, libraries, package, index, merged, defects, reasoning, reports, roughly, times, size, community, visit, sequence, replayed, 42mb, production, bench, project, uses, measure, yjit, visits, return, http, 200, transpiled, structurally, matches, throughput, hardware, couple, analyze, groundwork, profiler, says, multiple, amdahl, law, heavy, spends, proportionally, interpretive, compilation, deletes, sentence, rest, irreducible, actual, execution, wall, remainder, object, hydration, ceremony, emit, specialize, roadmap, sits, ceiling, fixture, poster, child, runtime, defeats, resolution, look, nowhere, entire, surface, sites, idioms, possible, statically, provable, happened, longhand, recovers, rewrites, ordinary, guessing, dual, making, reach, approach, correctly, params, tenth, machine, stacked, easier, looks, register, allocator, jobs, traced, struct, layout, shadow, implications, proverbial, performed, market, rates, cascade, backwards, compression, ratio, decides, altitude, humans, llms, has_many, comments, concern, online, slides, speaker, demos, embedded, best, audience, participation, opener, works, couch, devtools, flourish, reproducible, home, breakpoint, controller, chrome, homework, click, seats, beautiful, weird, robots, elapsed, hours, reviewed, before, any, transpiles, twin, 130, lowered, methods, byte, unchanged, 559, binary, via, boots, served, milliseconds, orm, router, melted, supposed, point, specializer, record, seating, chart, recently, job, episode, isn, decided, lives, dies, tweaked, deepest, problem, exactly, such, solution, social, june, rewriting, hosted, lines, pushed, minutes, july, met, took, faithfully, translated, faster, became, discovery, fixpoint, trivial, 128, terminate, anyway, deeper, moral, bought, dev, clean, profiles, algorithmic, done, workbench, need, due, converged, deliver, results, sat, tuesday, evening, himself, independently, reproduced, kind, review, finds, answered, posed, reversing, arrow, translator, would, interesting, useful, usefulness, failure, policy, acceptance, wednesday, morning, lunch, converter, gems, round, trip, committed, gate, nineteen, check, scores, failures, places, written, supposedly, domain, genuinely, disagree, proved, secretly, shaped, directions, translate, deterministically, equivalence, leads, convention, pitch, coding, agents, token, efficient, machines, needs, homepage, path, prompt, backed, issue, tracker, lanes, frozen, snapshot, fidelity, head, examples, happens, refused, timings, update, fifth, lane, tripled, stands, growing, generational, forcing, function, intertwingly,
Text of the page (random words):
ails on roda two days ago i wrote that the roda spike s verdict wasn t mine to deliver the results sat in front of jeremy evans the keeper of this oracle the verdict came back tuesday evening he built and ran both generated applications himself independently reproduced the memory numbers filed the kind of review that finds what ci can t and then answered a question i d posed about reversing the arrow a translator from rails to roda sequel he said would be both interesting and useful and in the same comment he set the usefulness bar the failure policy and the acceptance test wednesday morning between his comment and lunch the converter existed target roda turns the rails blog into a roda sequel application that runs on his real gems his round trip test passes as a committed gate and his exemplar s own nineteen check suite scores 17 of 19 against the output with both failures turning out to be places where two hand written supposedly domain identical applications genuinely disagree the intermediate representation that last week proved it wasn t secretly rails shaped is now load bearing in both directions not just compile roda too but translate between frameworks deterministically with an equivalence test you can t rewrite your way out of big o in june matz spent a week rewriting spinel his ahead of time ruby compiler from self hosted ruby into c because whole program type analysis over the compiler s own 80 000 lines had pushed builds to twenty minutes in july the same analysis met a 40 000 line application and took two hundred seconds because the rewrite had faithfully translated its o n² into a faster language over two days and five upstream pull requests that two hundred seconds became five including the discovery that the inference fixpoint had never once converged on a non trivial program every compile ran to its 128 iteration cap and the cap made it terminate anyway every fix was the same bug one loop deeper the moral is not that the rewrite was wrong the rewrite bought the fast native dev loop and clean profiles the algorithmic work was done on you can t rewrite your way out of big o but the rewrite can build the workbench you ll need when big o comes due roda on spinel after my rubyconf talk jeremy evans asked me a question could you do roda too four days and a few elapsed hours of work later an idiomatic roda sequel application an exemplar jeremy reviewed line by line before any compiler code existed transpiles to the same intermediate representation as its rails twin 93 of 130 lowered methods byte identical passes its own test suite unchanged and compiles to a 559 kb native binary via spinel matz s ahead of time ruby compiler that boots to its first served request in ten milliseconds at 4 5 mb of memory at request time there is no roda no sequel no orm no router every query left the building at build time as a sql string the frameworks melted away which is what frameworks are supposed to do when you point a specializer at them but the part i most want on the record is the seating chart i recently wrote that maintaining the oracle is the human job and in this episode the keeper s seat isn t mine jeremy extended the spec where it was blind decided how correctness gets computed and holds the verdict on whether this spike lives dies or gets tweaked the deepest open problem in that earlier post was behavior for which no reference exists idiomatic roda is exactly such a behavior and the solution turned out to be social the reference is a person there is no server my rubyconf talk there is no server beautiful ruby weird ruby and the robots we live with is now online slides full speaker notes and the live demos embedded in them if you can t be in the room this post is the next best seat the audience participation opener works just as well from your couch the devtools flourish is reproducible at home a breakpoint in a rails controller in chrome on a static page and the homework links the room can t click from their seats are all here three compilers one concern each the tenth rung of the ladder gets one line in the talk typed ruby spinel c machine code three compilers stacked this post is about why that stack is easier to build than it looks because spinel emits c it never wrote a register allocator because roundhouse emits the ruby spinel compiles it never wrote a garbage collector no compiler in the chain does two jobs one line of rails has_many comments traced through all three with the artifact at every stage down to the struct layout and the gc shadow stack in the generated c then two implications the proverbial go rewrite as this same projection performed by hand at market rates and the cascade read backwards as a compression ratio the number that decides at what altitude humans and llms get to reason dynamic dispatch send is the poster child for you can t compile ruby ahead of time a method name computed at runtime defeats the whole program resolution an ahead of time compiler depends on but when you look at what real rails code actually does with send the name almost never comes from nowhere lobste rs entire dynamic dispatch surface is six call sites in three idioms and in every one the set of possible names is finite and statically provable a dispatch table the author happened to write in longhand this post walks the pass that recovers that table and rewrites send k into an ordinary case every target can compile the discipline that keeps it from ever guessing wrong and a second dual way of making a dispatch finite that could reach even the send params x case the first approach correctly refuses a bigger fixture for two months the numbers in this series came from one small blog application this post reports the first numbers from a real one lobste rs roughly ten times the size measured against its own community benchmark the same 114 visit authenticated sequence replayed against a 42mb production database that the ruby bench project uses to measure yjit all 114 visits return http 200 from the transpiled ruby with output that structurally matches rails route by route at 3 03 rails throughput on identical hardware it came together in a couple of days on top of weeks of analyze stage groundwork and the honest part is what the profiler says about why the multiple is 3 here and not the blog s 5 9 the tempting answer is amdahl s law a data heavy app spends proportionally less time in the interpretive machinery compilation deletes and the tempting next sentence the rest is irreducible database work turns out to be wrong actual sql execution is under 9 of wall time and most of the remainder is object hydration and string ceremony the emit can still specialize with a filed roadmap against it 3 is where this app sits today not a ceiling mastodon on spinel previous posts in this series have described machinery and hinted at a destination this one states the destination plainly up front with a deadline mastodon the real application passing its own test suite compiled by spinel offered as a supported configuration rather than a curiosity by the end of 2026 the plan is not to swallow the application whole mastodon s own architecture decomposes it into subsystems and the first of them is already running a replacement for the node js streaming server live in a public repo holding 300 authenticated connections in 16mb of memory where node holds them in 202mb also already banked two wire protocol libraries published to spinel s new package index an n 1 fix merged into mastodon upstream and three compiler defects found filed and fixed this post is the plan the status and the reasoning including the honest number that didn t go my way flow analysis for rails live types for rails made an observation the type inference roundhouse builds for accurate transpilation 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 which before_action assigns which instance variable which action feeds which template what a query has preloaded by the time something iterates it that flow graph turns out to be worth having on its own too two features now sit on top of it static n 1 detection and a request traceroute that renders everything a request traverses as one clickable chain in the browser ide or as one mcp call for an llm agent the implementation is a work in progress and even incomplete it found a real missing preload bug in mastodon now fixed upstream all from static analysis alone no app boot no test traffic no annotations an ide you don t install two earlier posts made promises one said the way to find out how far roundhouse s subset extends was to feed it bigger applications the subject of a later post the other named the stretch target mastodon this is that post and it comes with an artifact instead of an argument an ide at rubys github io roundhouse ide with mastodon all 337 controllers the haml views included analyzed in your browser tab hover an instance variable and read its inferred type type a dot and get typed completion the status bar reads 721 errors 3806 warnings 6600 coverage notes 304 ingest gaps and every one of those numbers is load bearing including the ones that don t flatter me along the way the post about silent coverage gaps turned out to have one underneath it and the performance number i published two weeks ago was measured over the ten percent of the app the tool could see two near term explorations are queued a request traceroute and static n 1 detection and behind them the long arc turning the hand built partial evaluation the jruby post described into an honest futamura projection for which every number in that status bar is prerequisite maintaining the oracle two earlier posts staked out positions i still hold the drucker inversion said i direct by outcome not method because the agent holds the depth i lack the oracle is the asset said the outcome i direct by is a thing i author both are right as first approximations and neither describes what i do all day this post is the second level what i actually do is continuous and lands in neither bucket i m the standing custodian of the oracle those objectives are checked against holding four powers it can t hold over itself i extend its coverage where it s blind overrule its verdicts when it certifies something i reject decide how it computes truth referenced from a live rails not authored from cases i imagined and use it to keep a reachable target in front of the agent so it never quietly swaps my goal for the nearest one it can already hit i m calling it maintaining the oracle the proof that this is a real role and not drucker with extra steps is the prototyping history cheap generation turned throwaway prototyping into a search over architectures each built to self falsification the fatal property migrating from misplaced risk to unattainable correctness to unbearable maintenance topology the search didn t stop when an architecture felt right they all did it stopped when the founding defect recurred at small scale and i reached for a strangler fig instead of a match a behavioral tell that starts to answer the question i left open in bring me a rock once cheap iteration removes cost as the signal what separates real convergence from infinite cheap wandering and the one place even the keeper runs out is the behavior for which no reference exists where the referenced oracle goes silent authoring returns and the stake the whole arrangement depends on gets thin what survived contact i m back from the retreat i said i d report on the easy truths first a gorgeous venue near invisible organizers and a welcome extended not just to me but to the ideas i brought then three ledgers twenty one weeks on the spine held rigor doesn t vanish when the agent writes the code it migrates while the scope spilled out into economics ethics and geopolitics and the worry now arrives better evidenced than the hope a hire not a tool the manager who reaches for an llm didn t use one they made a hire so the permission question dissolves into an older one manage by objective not method and the stake i d worried a stakeless peer couldn t supply turns out to live in the objective not the worker which turns everything on how you evaluate that objective the room s word is bdd mine is the same move with the then referenced from a running system instead of authored by hand a sample of one caveats marked the question i carried in what s the cost of building the wrong thing collapsed opening four i d rather leave on the board parallel candidates over serial iteration when to restart versus evolve what else the non engineer principal can hand to the model and whether small teams stitched together by issues and pull requests are how large systems now get composed in plain sight plain is an open source specification language whose thesis is that code should be regenerated not maintained you fix the spec and the code is ash i agree with almost all of it the implementation is no longer the asset and the cost of building what replaces it has collapsed where i differ is narrow and load bearing not whether to throw the code away but what gives you the right to history only ever issued two licenses for that a proof or a reference and plain holds neither regenerating from a prose spec and checking the result with tests generated from that same prose by the same probabilistic renderer a court holding its own trials my answer is to author the reference instead write the app fast in rails validate it by watching it run and keep the running thing as the oracle we both start from a blank page the difference is the medium a prose spec can t run so it can never be its own oracle a rails app can so it is the scarce thing this week i m at a retreat on the future of software development and this is the perspective i m bringing to explore in one place a few months of posts argues it strand by strand here is the shape they make together for a few months now retired i m building a compiler i can t read against an oracle i could and the through line of everything since is what that arrangement implies once you notice that the cost of building it has collapsed from an institution and years to a person and a few months the asset relocates from the implementation to the oracle rigor moves from comprehension to conformance managing the agent inverts into managing by objective and the abstraction ladder stalled for a decade because each rung needed a funded team starts climbing again which leaves one question for the room when anyone can build the thing code answers to do we still know which things are worth answering to with links to where each piece is argued in full and the sample of one caveat over all of it what do you recommend i was asked to speak to my experience using ai to build software and it surprised me i ve been at this less than a year in a field where the words you hear most are slop and hallucination that hasn t been my experience...
|