Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Programování

Cloudflare a VoidZero přepisují překladač TypeScriptu do Rustu

Cloudflare, VoidZero a vývojář Max Schwenk pracují na projektu tsrs, přepisu překladače TypeScriptu do Rustu. Podle měření Cloudflaru je při stejném počtu kontrolních vláken až osmkrát rychlejší než TypeScript 7.0 a bere asi o 70 procent méně paměti. Normou je přepisu verze překladače v Go: každá odchylka od ní se v projektu počítá jako chyba.

· 23 zhlédnutí

Okno editoru Visual Studio Code s otevřeným projektem a vysunutou nabídkou našeptávání
Našeptávání v editoru Visual Studio Code. U TypeScriptu tuhle službu obstarává jazykový server překladače a projekt tsrs ho přepisuje spolu s ním. Foto: Gátomo Dev, Wikimedia Commons (CC BY-SA 4.0)

Překladač TypeScriptu se jednou stěhoval nedávno: Microsoft ho přepsal z JavaScriptu do jazyka Go a vydal jako TypeScript 7. Teď vzniká druhý přepis, do Rustu, a stojí za ním firmy, které dodávají velkou část nástrojů kolem JavaScriptu.

Cloudflare, VoidZero a vývojář Max Schwenk z firmy Owner.com oznámili 20. října projekt tsrs. Je to port překladače a jazykového serveru TypeScriptu do Rustu a vyvíjí se pod hlavičkou sady nástrojů Oxc. Autoři v oznámení píšou, že o odštěpení jazyka nejde a že o jeho podobě má dál rozhodovat tým TypeScriptu.

Repozitář je starý necelý měsíc

Repozitář oxc-project/tsrs vznikl 1. října 2026 a je pod licencí Apache 2.0. K 26. říjnu měl 2 311 hvězd, 47 odnoží a 17 otevřených hlášení. Rustového kódu je v něm 23 MB, k tomu 3,6 MB TypeScriptu a 123 kB Go.

V registru npm se balíček tsrs objevil 10. října, poslední zveřejněná verze 0.18.0 je z 19. října. Vyzkoušet se dá dvěma příkazy:

pnpm add -D tsrs
pnpm exec tsrs --noEmit

Označení verze nese i datum překladače, proti kterému je přepis připnutý – třeba 0.18.0-ts7.1.0-dev.20260929. Port tedy nemíří na vydaný TypeScript, ale na konkrétní vývojové sestavení jeho chystané verze 7.1.

Čísla přicházejí ze dvou stran

Cloudflare uvádí, že tsrs je při stejném počtu kontrolních vláken až osmkrát rychlejší než TypeScript 7.0 a bere zhruba o 70 procent méně paměti. V témže grafu stojí, že i samotná beta TypeScriptu 7.1 je proti 7.0 až dvaapůlkrát rychlejší a že část jejích zrychlení pochází z tsrs.

Microsoft vydal betu TypeScriptu 7.1 týž den a změřil si ji sám. Na čtyřech kontrolních vláknech a s přepínačem --noEmit klesla doba kontroly u projektu mui-docs z 22,2 na 11,9 sekundy, u editoru Visual Studio Code z 21,6 na 17,7 sekundy a u kódu sítě Bluesky z 4,48 na 3,89 sekundy. Nejvyšší zrychlení v tabulce Microsoftu je 1,9násobné, ne dvaapůlnásobné; každá strana ale měřila na jiných projektech a s jiným nastavením. Paměť ubrala beta nejvíc opět u mui-docs, z 8 093 na 4 079 MiB.

Normou je verze v Go

Zajímavější než čísla je pravidlo, podle kterého se přepis píše. Dokument o shodě popisuje tsrs jako port funkce po funkci z go verze překladače a dodává, že kód v Go je pro něj specifikace. Jakýkoli rozdíl ve hlášeních, v jejich pořadí, ve znění zprávy nebo v návratovém kódu je podle projektu chyba tsrs – i tehdy, když výstup tsrs vypadá lépe.

Shoda se měří, ne tvrdí. Ověření zapsané 25. října sedí podle projektu se všemi 13 700 vzory chybových výpisů, s 12 998 vzory typů i symbolů a s 13 626 vzory vygenerovaného JavaScriptu a deklarací. Nad tisícovkou oblíbených repozitářů na GitHubu se navíc hlášení porovnávají proti připnutému překladači v Go pokaždé, když do hlavní větve přibude významná změna.

Proč Rust, když Go už jednou zrychlilo

Microsoft u sedmičky uváděl, že proti šestce bývá zhruba desetkrát rychlejší. Cloudflare odpovídá na otázku, proč to nestačí, odkazem na WebAssembly: program v Go si do něj musí vzít s sebou i vlastní uklízeč paměti, kdežto způsob, jakým s pamětí zachází Rust, dovoluje mezi kódem ve WebAssembly a jeho hostitelem jednoduché předávání dat. Menší paměťová stopa se podle firmy vyplatí tam, kde se celé sestavovací prostředí spouští dokola v krátkých cyklech – a otevírá možnost provozovat vývojový řetězec v prohlížeči nebo na vestavěném zařízení.

Výchozí nastavení popisuje každý zdroj jinak

Tady se oznámení a dokumentace rozcházejí. Cloudflare píše, že tsrs se dodává s nastavením, které se přizpůsobí stroji, bere víc paměti a je ještě rychlejší. Dokumentace v hlavní větvi repozitátu k 26. říjnu ale uvádí, že tahle sada je volitelná, zapíná se přepínačem --fast nebo proměnnou prostředí a ve zveřejněných balíčcích zatím není; výchozí běh prý drží nastavení připnutého překladače TypeScriptu, tedy čtyři kontrolní vlákna.

Rozdíl není kosmetický. Rychlý režim mění rozvrh práce mezi vlákny, a projekt sám u něj upozorňuje, že chyby se v některých případech můžou objevit, zmizet, přesunout nebo mít jiné znění a že se může změnit i návratový kód. Právě proto se dokumentace drží pravidla, že normou zůstává chování připnuté verze v Go.

Sladit se to má nočním porovnáváním

Udržovat přepis v kroku s původním překladačem chce Cloudflare stejně, jako to dělá u své odnože Next.js: agent ráno projde změny, stáhne rozdíly a založí hlášení, v noci se znovu sestaví tabulka shody. K tomu se má tsrs spojit s projektem tsc-rs vývojáře Thea Browna do jediného balíčku, který zvládne i jazykový server a mapování obsahu.

Rozdíly proti předloze přiznává Cloudflare už teď – jmenuje pořadí, ve kterém se hlášení vypisují. Ke stabilnímu vydání je chce stlačit na minimum. Zatím je tsrs pokus, který si každý může změřit na vlastním projektu; výsledek nejspíš řekne víc než graf v oznámení.

Zdroje: oznámení Cloudflare, repozitář oxc-project/tsrs a jeho dokument o shodě, záznam balíčku v registru npm, oznámení bety TypeScriptu 7.1.

Programování

Rust TypeScript Cloudflare

← zpět na výpis