Niemand betaalde ons hiervoor. We wilden één project dat beter dan welke dienstenlijst ook laat zien wat onze engineers op een gewone werkdag doen. Dus kozen we een probleem waarin je je nergens kunt verstoppen.
Geen fork, geen geleende code. Een handgeschreven lexer, parser, evaluator, regex-engine, rekenen met willekeurige precisie en volledige Unicode-tabellen.
C++17 en de standaardbibliotheek. Nul third-party dependencies, dus het bouwt overal waar een compiler draait.
Getoetst aan de eigen uitvoerbare specificatie van de taal — niet aan onze eigen mening over wat "werkend" betekent.
Een compiler op zichzelf is een curiositeit. Om nuttig te zijn heeft hij een manier nodig om geïnstalleerd te worden, om uitgeprobeerd te worden, om dingen op te zoeken, en om te bewijzen dat hij klopt.
Eén binary draait je programma, of maakt er een zelfstandige native executable van.
Geen herschrijving — dezelfde broncode, client-side draaiend zonder server erachter.
Een live editor, een gedragsspecificatie van ~700 pagina's, achttien lessen, 150 nagekeken oefeningen — allemaal met de engine in je tabblad.
Homebrew, Guix, Nix, release-archieven voor drie systemen, een CI-action — plus test- en benchmarkharnassen die op de compiler draaien.
Elke meetlat is blind voor wat de andere opmerken. Ze allemaal draaien — en telkens vertrouwen op degene die op dat moment naar een probleem wijst — is wat het werk eerlijk hield.
Specificaties testen features geïsoleerd. Echte software niet. Dus richtten we de compiler op code die niemand voor ons gemak had geschreven.
Een feature kan volgens de specificatie "klaar" zijn en toch stilletjes fout, op een manier die alleen echte code blootlegt. Daarom bestaat dit front.
Een kleine native binary zonder virtuele machine die moet opstarten: ~2 ms koud, beste van 200 starts 1,8 ms. Bij één run is dat onzichtbaar. Bij de tweehonderdste run van een bewerk-en-genereer-lus — of in een shellscript dat hem herhaaldelijk aanroept — is het het verschil tussen gereedschap dat je denken onderbreekt en gereedschap dat dat niet doet.
Engines die een runtime met zich meedragen besteden doorgaans een flinke fractie van een seconde voordat je eerste regel wordt uitgevoerd. Wij behandelden die kosten als een bug.
We vervingen de syntax-highlighter van de site door de onze. Die is sneller én correcter: hij parseert de code in plaats van woorden te matchen, dus een methode met de naam role wordt niet langer als sleutelwoord gekleurd.
Er zijn drie verdedigbare manieren om het slagingspercentage te berekenen. Wij zetten de hardste in de kop, noemen beide kerncijfers samen, en schrijven de methode op.
Hoe beter het wordt, hoe verder kapotte bestanden komen — dus declareren ze meer tests en groeit de noemer. Dat documenteerden we in plaats van een vriendelijkere basislijn te kiezen.
Meer dan eens legde een correctheidsfix een test bloot die per ongeluk slaagde. Houd de fix, herijk, en zeg het erbij.
Elk gesloten defect wordt er één. Geen enkele release gaat uit zonder ze allemaal te doorstaan.
Een release kán geen performance-regressie bevatten: een vastgelegde basislijn wordt automatisch opnieuw gemeten en laat de build falen.
Optimalisaties die we maten en verwierpen staan naast de geslaagde beschreven — zodat niemand er nog een week aan verspilt.
Eén universele binary voor Apple Silicon en Intel, te installeren met één Homebrew-commando.
Statisch gelinkt, zonder runtime-afhankelijkheden — plus een Guix-kanaal en een Nix-flake voor distributies die vanaf de bron bouwen.
Een statische build die geen redistributable-pakketten ernaast nodig heeft.
Dezelfde engine als WebAssembly, client-side draaiend zonder dat er iets naar een server gaat.
Elke push wordt automatisch gebouwd en getest op alle drie de desktopsystemen. Externe bijdragers zijn eigen packaging gaan insturen — wat op zijn eigen manier bewijst dat de codebase schoon genoeg is om vreemden erin te laten werken.
Raku++ is open source en gratis, en is nooit aan iemand gefactureerd. Het bestaat omdat het de meest complete demonstratie is die we konden bouwen van hoe we werken.