Je to stejné ako u akéhokoľvek iného programovacieho jazyka... či už sa jedná o runtime alebo compiléry... aj pre C/C++ máš asi desať kompilérov, pre Python 10 runtimov, pre Javu tiež desiatky JDK.
To je proste ako funguje svet. Ku všetkému máš alternatívy od rôznych firiem či ľudí. A to je práve dobré. Aj keď nie všetky uspejú, ale aj tak niečo dajú, a často krát sa nejaké featury s ktorými príde jeden prevezme na druhý už existujúci.
11. 7. 2022, 11:58 editováno autorem komentáře
Node.js má spoustu historické zátěže, je založený na starších verzích V8. Deno nijak zvlášť neřeší zpětnou kompatibilitu s Node.js – je to vlastně „máme stejné cíle, jako Node.js, ale udělali jsme to znovu na zelené louce tak, jak nejlépe umíme“. A je od původního autora Node.js. Takže Deno je rychlejší, rovnou podporuje TypeScript a WebAssembly, je napsané v Rustu. Má lepší DX, podporuje další funkcionality jako bundlování nebo export do spustitelného souboru, import z webu apod. Kolem Deno se staví ekosystém služeb (běh funkcí v cloudu na edge).
Bun prakticky neznám, ale chápu ho tak, že jeho hlavním cílem je rychlost a snaží se integrovat různé technologie kolem JS – runtime JS, kompatibilita s Node.js, npm klient, transpiler, bundler, dokonce SQLlite klient. Je to v podstatě one-man show, navíc v exotickém jazyce – osobně si nemyslím, že by se nějak výrazně rozšířil. Ale co autor za rok zvládl napsat, to je obdivuhodné.
"Takže Deno je rychlejší,"
Blbosť, práve naopak je pomalší.
"Má lepší DX"
V čom?
"Kolem Deno se staví ekosystém služeb (běh funkcí v cloudu na edge)."
Rovnako ako kolem Node.
"osobně si nemyslím, že by se nějak výrazně rozšířil."
To súhlasím, ale skôr to vidím tak podobne ako u Deno že Node prebere featury z konkurencie.
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.