Microsoft izlaida TypeScript 7.0 — kompilatoru, kas no jauna uzrakstīts Go valodā un uz lielas koda bāzes strādā ap desmit reižu ātrāk nekā līdzšinējais. Uz Visual Studio Code pirmkoda, kurā ir aptuveni 1,5 miljoni rindu, komanda tsc agrāk skrēja 77,8 sekundes. Jaunā versija to pašu darbu paveic 7,5 sekundēs.
Vecais kompilators bija rakstīts pašā TypeScript valodā un darbojās uz JavaScript dzinēja. Jaunais ir atsevišķa Go programma, kas kompilējas mašīnkodā. Valoda un tipu sistēma nemainās — mainās rīks, kas kodu pārbauda un tulko uz JavaScript.
Cik ātrāk tas ir
Microsoft izmēra ātrumu ar tsc pilnu palaišanu uz atvērtā koda projektiem. VS Code kods no 77,8 sekundēm nokrita uz 7,5 — 10,4 reizes. Playwright projektā ātrums pieauga 10,1 reizi, TypeORM — 13,5 reizes. Testētajos projektos paātrinājums svārstās no 9,1 līdz 13,5 reizēm atkarībā no koda apjoma.
Uz VS Code koda
tsclaiks krita no 77,8 uz 7,5 sekundēm. Redaktora projekta ielāde saruka no 9,6 uz aptuveni 1,2 sekundēm, un atmiņas patēriņš nokrita uz aptuveni pusi.
Daļa ieguvuma nāk no mašīnkoda, daļa — no paralēlisma. Vecais tsc visu tipu pārbaudi darīja vienā pavedienā, jo JavaScript dzinējs tā strādā. Go versija sadala darbu pa vairākiem kodola pavedieniem un pārbauda failus vienlaikus. Tāpēc uz astoņu kodolu mašīnas paātrinājums ir lielāks nekā uz diviem.
Redaktorā efektu jūt uzreiz. Valodas serveris, kas apkalpo autopabeigšanu, kļūdu pasvītrojumus un pāreju uz definīciju, arī ir pārrakstīts Go. Iepriekš to darbināja tsserver uz Node. Projekta atvēršanas laiks VS Code kodā nokrita no 9,6 uz aptuveni 1,2 sekundēm. Atmiņas patēriņš ir aptuveni uz pusi mazāks, kas lielās monorepozitorijās un CI serveros nozīmē mazāku RAM prasību. Detaļas un mērījumi ir Microsoft paziņojumā par native kompilatoru.
Kāpēc Go valodā
Izvēle nāca no Andersa Hejlsberga vadītās komandas, un tā izraisīja plašas diskusijas — daudzi gaidīja Rust vai C++. Komanda skaidroja, ka Go struktūra ir tuva esošajam TypeScript kodam: tas balstās uz funkcijām un datu struktūrām, nevis smagu objektorientāciju, tāpēc pārnešana varēja būt gandrīz mehāniska, saglabājot to pašu algoritmu uzbūvi. Klāt nāca Go labā mašīnkoda ģenerēšana un iebūvētais paralēlisms, kas ļauj tipu pārbaudi sadalīt pa vairākiem kodola pavedieniem.
Rust komanda apsvēra un noraidīja. Kompilators iekšēji glabā tipu un simbolu grafu ar daudzām savstarpējām atsaucēm, un Rust īpašumtiesību modelis būtu prasījis šo struktūru pārprojektēt no pamatiem. Go atmiņas savācējs ļāva paturēt esošās datu struktūras gandrīz nemainītas, tāpēc pārnešana bija ātrāka un mazāk riskanta.
Pārrakstīšana notiek atsevišķā repozitorijā microsoft/typescript-go. Ilgtermiņā komanda plāno šo kodu iepludināt galvenajā TypeScript projektā. Līdz tam vecais, JavaScript rakstītais kompilators turpina dzīvot kā TypeScript 6.x, tā ka abas līnijas kādu laiku pastāv līdzās.
Ko tas maina izstrādātājiem
Valodā nekas nemainās. Tipi, sintakse un pārbaudes noteikumi paliek tie paši — mērķis ir pilna atbilstība vecajam kompilatoram, lai esošie projekti kompilējas bez izmaiņām. Atšķirība ir gaidīšanas laikā: pilna projekta pārbaude, kas ilga minūti, tagad beidzas dažās sekundēs, un redaktors reaģē ātrāk uz lielām koda bāzēm.
Izmēģināt var jau tagad. Priekšskatījuma būvējumi ir pieejami npm kā pakotne @typescript/native-preview, un ir arī atsevišķs VS Code paplašinājums. Komandrindā jaunais binārais fails ir tsgo, kas darbojas paralēli parastajam tsc, tā ka to var pārbaudīt bez esošās uzstādīšanas aiztikšanas.
Ne viss vēl ir gatavs. API, ko rīki izmanto koda analīzei un pārveidošanai, tiek pārprojektēts, tāpēc daži spraudņi un būvēšanas rīki, kas pieslēdzas tieši kompilatora iekšienei, sākumā var nestrādāt. Šo pārmaiņu Microsoft skaidro atsevišķi, jo ekosistēmai tā ir lielākā praktiskā sekas.
Migrāciju atvieglo divu līniju modelis. TypeScript 6.x turpina uz vecā koda bāzes un saņem brīdinājumus par tām retajām vietām, kur 7.0 uzvedas citādi, lai izstrādātāji tās izlabo pirms pāriešanas. Tā projekti var atjaunināties pakāpeniski, nevis pārslēgties vienā solī. Kad native versija sasniegs pilnu stabilitāti, tā kļūs par noklusējumu.
Kā šis laidiens iekļaujas gadā
Sākotnēji Microsoft cerēja uz 7.0 laist līdz 2025. gada beigām. Termiņš aizkavējās, kamēr komanda dzina native versiju līdz funkciju paritātei ar veco. Nedēļas atvērtā koda apkopojumā This Week in Open Source 7.0 laidiens datēts ar 8. jūliju, blakus tādām ziņām kā Debian 13.6 un Proton 11.0.
Lielākā praktiskā ietekme skars būvēšanas konveijerus. Tipu pārbaude ir viens no lēnākajiem soļiem daudzos CI procesos, un projektā ar minūti garu pārbaudi tas nokrīt zem desmit sekundēm. Uz katru izmaiņu, ko izstrādātājs nosūta, konveijers pabeidz ātrāk, un izmaksas par CI minūtēm samazinās.
Priekšskatījuma pakotne @typescript/native-preview npm ir pieejama jau tagad, un tajā tips uz VS Code koda skrien 7,5 sekundēs.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.