Měřím, neodhaduji
Čísla, která tu uvádím, mají vždy za sebou konkrétní sadu: celý toml-test, diferenciální test proti Go toolchainu, interoperabilita s linuxovým jádrem. Tvrzení bez měření raději nenapíšu.
Výzkum
Každá linie směřuje k artefaktu, který si kdokoli stáhne, spustí a změří; u většiny už dnes existuje, u experimentálních je to zatím cíl. Společné pravidlo je jediné: tvrzení bez měření není výsledek, jen slib. A rozdíl mezi domněnkou a výsledkem bývá přesně ten krok, který se vynechat nedá.
C samo kdysi nahradilo assembler. Dnes existuje celá doména softwaru, kterou nikdo nezpochybní jen proto, že v ní C sedí už padesát let.
Jádrové síťové protokoly, numerika, jazykové toolchainy: padesát let se to píše v C a dnes to už nikdo nebere jako rozhodnutí, ale jako stav přírody. Hypotéza zní, že rozhodnout jde i jinak. Čistý Go s moderním runtime a standardní knihovnou má v těchto doménách podat stejnou spolehlivost, bez cgo, bez balíku závislostí a bez třetiny chyb, které přicházejí z ruční správy paměti.
Důkazů už je několik. NFS je server i klient NFSv4.2, tedy protokol, který linuxové jádro implementuje v C, postavený v čistém Go jen se standardní knihovnou a ověřený proti tomu jádru. Tensor dává Go numeriku, kterou dosud psal svět Fortranu a C, bez jediného řádku cgo. A GAsm SDK nahrazuje C toolchain přesně tam, kde se vývojář setkává s assemblerem.
Stejný vstup dá totéž číslo na každém stroji. Zní to jako samozřejmost a v numerice to samozřejmost není.
Výpočet, který se chová na dvou strojích jinak, kazí vědu: laboratoř nedokáže říct, který výsledek je správný, a o reprodukovatelnost přichází. Determinismus proto u mě není vlastnost na přání: je to smlouva, psaná v dokumentaci a testovaná napříč platformami.
To je ale jen první krok. Cílem je výpočet rozdělený na více strojů, který zůstane reprodukovatelný i po rozdělení, takže každý uzel dojde k témuž výsledku. Bez deterministického jádra z toho není výpočetní model, ale loterie.
Oddělit assembler od Go toolchainu a udělat z něj samostatný, přenositelný nástroj.
Plan 9 assembler je uvězněný uvnitř Go toolchainu: nedá se spustit bez celého toolchainu, nemá formátovač, linter ani debugger a o kódu vloženém do runtime se člověk často dozvídá až z pádu. Přitom je to podlaha, na které stojí každý běžící Go program.
Tato linie ho odděluje. Výsledkem je GAsm SDK: lexer, parser, formátovač, linter, standalone assembler, disassembler, debugger a jazykový server v jednom self-contained binárním souboru, čistě v Go, bez externích toolchain. Přenositelnost se tady nedeklaruje: přesnost parseru i formátovače ověřuje diferenciální test proti samotnému Go toolchainu na čtyřech architekturách a dvě nezávislé implementace musí na stejném vstupu souhlasit bit po bitu.
Webový vývoj se naučil stavět přes toolchain: bundler, transpiler, stovky balíků. Hypotéza: platforma dnes stačí sama.
Moderní web se skoro nikdy nepíše v HTML, CSS a JavaScriptu; píše se v něčem, co se na něj přeloží pomocí stovky závislostí. Hypotéza této linie zní, že platforma mezitím dospěla tak daleko, že pro drtivou většinu webů celý ten stroj není potřeba: popover bez JavaScriptu, dva barevné režimy bez duplikace CSS, nativní validace formulářů, formátování dat přes Intl.
Co z toho vzešlo: JSbox, vlastní toolchain v jednom binárním souboru. Server s live reloadem, formátovač HTML, CSS i JavaScriptu přes skutečné parsování, statický check a testy v reálném prohlížeči. Žádný Node, žádný npm, žádný build. Dokladem je tento web: dvě jazykové verze, dva barevné režimy, formulář s vlastním backendem a nula závislostí.
Všechny linie běží ve stejném cyklu a všechny v jedné tradici: teoretik u téhož stroje jako provozovatel, papír vznikající ze systému, nikoli naopak. Základem je dialektický materialismus: materiál má vždy pravdu a rozpor je místo, kde návrh začíná.
Návrh se zapíše tak, aby se dal vyvrátit: co má platit, za jakých podmínek a co by ho popřelo. Návrh, který se nedá vyvrátit, není návrh, ale přání.
Benchmark, test, protokol. K číslu patří i postup, jak k němu dojít, a ten musí zvládnout zopakovat kdokoli, nejen jeho autor.
Řešení platí, dokud drží. Přijde lepší, a staré jde pryč bez sentimentu; loajalita k vlastnímu dřívějšímu rozhodnutí není argument.
Čísla, která tu uvádím, mají vždy za sebou konkrétní sadu: celý toml-test, diferenciální test proti Go toolchainu, interoperabilita s linuxovým jádrem. Tvrzení bez měření raději nenapíšu.
Většina mých go.mod souborů nemá v require ani řádek a provozní skripty v Perlu berou jen to, co umí samotný interpret. Závislost, která se přece jen objeví, musí své místo obhájit číslem.
Repozitář bez dokumentace a testů beru jako rozepsaný, ne hotový. Dokumentace, testy i naměřená čísla patří do stejné změny jako kód, který popisují; artefakt, který se za deset let nedá přečíst, je dluh.
Když JSbox dostal vlastní sitegen, původní generátor tohoto webu v Go jsem smazal celý, přestože fungoval. Udržovat dvě řešení téhož úkolu je horší než jedno přepsat; lepší řešení ruší to staré.
Když ano, napište mi. Rád si na něj posvítím z obou stran: z výzkumu i z produkce.
Napsat mi