Kvituju použití Zigu coby ukázky použitelnosti nového jazyka. Na stránkách Bunu píšou, že namísto V8 používají JavaScriptCore, který (prý) nabíhá rychleji a má lepší výkon. Ta "ruční optimalizace" by se ale hodila nějak dovysvětlit - nahrazuje kód v Zigu nějakou část Node.js, která je napsána přímo v JS?
Z jejich stránky:
"Why is Bun fast?
An enormous amount of time spent profiling, benchmarking and optimizing things. The answer is different for every part of Bun, but one general theme:
Zig's low-level control over memory and lack of hidden control flow makes it much simpler to write fast software."
C++ má hodně hidden control flow (ve smyslu, jak to definují v Zig dokumentaci hned na začátku) – destruktory, automatickou alokaci v std:: kontejnerech, výjimky, přetěžování operátorů atd.
Destruktory používat ale v C++ nemusíš. A obecně C++ (a Rust a asi další jazyky) mají vlastnost zvanou zero overhead abstractions, tzn. že kdybys chtěl mít podobné možnosti v C nebo v Zigu, bylo by to srovnatelně pomalé. Konkrétně k tomu přetěžování operátorů - to je přece jasné, že se volá funkce, když má člověk vlastní typ, ale každý programátor v C++ nebo Rustu si toho je (doufám) vědom a ví, jaký je rozdíl mezi i8, i64 a nějakým BigIntem z knihovny 3. strany.
Možná by bylo zajímavé zkusit přepsat Bun do C++ a pak dělat benchmark.
Však jo, to nebyl komentář k té výkonnosti (IMO zrovna hidden control flow na pomalost/rychlost vliv mít nebude; bude trochu náročnější sémantická analýza ale výslednej IR a binárka nemá důvod být jiná). Je to jen o čitelnosti.
Zig má taky zero cost abstractions, značná část jazyka má compile-time vyhodnocování takže lze dělat cokoliv v compile time, a do binárky dostat už jen formálně verifikovaný korektní minimální kód.