Anders Hejlsberg, TypeScripti peaarchitect, kes on varem loonud programmeerimiskeeled C#, Delphi ja Turbo Pascal, tutvustas uut projekti, et arendada uus kompilaator TypeScripti jaoks — typescript-go (tsgo), mis on kirjutatud Go keeles. Nagu vana kompilaator, levitatakse ka uus projekt Apache 2.0 litsentsi alusel.
Algne TypeScripti kompilaator on kirjutatud TypeScripti keeles ja tõlgitakse JavaScriptiks, mis tekitab probleemide suurendamisel, kui seda kasutatakse väga suurtes projektides. Arendajad peavad leppima suurte viivitustega koodi laadimisel ja kontrollimisel integreeritud arenduskeskkondades ning ohverdama arendamise mugavuse, keelates redigeerijate koodikontrollimise funktsioonid viivituste vähendamiseks. Ökosüsteemis on ka nõudlus käsurea tööriistade järele, mis võimaldavad kiiresti koguda koodi selle funktsionaalsuse kontrollimiseks.
Eeldatakse, et native kompilaatori ja tööriistade loomine TypeScriptile suurendab oluliselt kogumise kiirus, vähendab mälu kasutamist ja lühendab koodiredigeerijate käivitusaega. Tööriistade kõrge jõudlus teeb arendamisprotsessi mugavamaks kaasaegsetes koodiredigeerijates, võimaldab kiiresti kontrollida kogu projekti koodi, annab võimaluse rakendada keerukamaid refaktooringu ja koodi analüüsi tehnikaid, mille sissetoomine oli varem liiga ressursimahukas.
TypeScripti arendajate hinnangul võimaldab uus tööriistade komplekt vähendada kompileerimise aega märkimisväärselt. Praeguses vormis töötleb uus kompilaator tsc VS Code projekti koodibaasi 7,5 sekundiga, samas kui vanale kompilaatorile kulus selleks 77,8 sekundit. Playwrighti koodibaasi puhul vähenes laadimisaeg 11,1 sekundilt 1,1 sekundile, TypeORM-i puhul 17,5-lt 1,3-le, date-fns 6,5-lt 0,7-le, tRPC 5,5-lt 0,6-le ja rxjs 1,1-lt 0,1-le.
Uue kompilaatori arendus on kestnud alates 2024. aasta oktoobrist, koos Microsofti 9 töötajaga. Praeguses etapis on töötav prototüüp juba testimiseks saadaval. Eelversioon käsurea tööriistadele koos uue tsc teostusega, mis toetab tüübi kontrollimist, plaanitakse avaldada aasta keskpaigaks. Esimese täielikult funktsionaalse versiooni, mis suudab projekte koguda ja pakkuda LSP teenuseid arenduskeskkondadele, väljaandmine on planeeritud aasta lõpuks.
TypeScripti 6.x haru jätkab vana kompilaatori levitamist ja sisaldab eraldi muudatusi, et valmistuda uue teostuse migratsiooniks. Esimene väljaanne, mis on üle viidud uude tööriistade komplekti, on TypeScript 7. Teatud aja jooksul toetatakse paralleelselt TypeScript 6.x ja TypeScript 7.x koodibaase ning need eksisteerivad koos, kuni TypeScript 7 haru saavutab küpse seisundi, mis suudab täielikult asendada vana tööriistade komplekti.
Enne projekti alustamist uurisid arendajad erinevate programmeerimiskeelte kasutamise võimalusi ja katsetasid prototüüpe erinevates keeltes. Lõpuks valiti uue kompilaatori loomiseks Go keel, kuna see on optimaalseim variant vana kompilaatori koodibaasi ümberkirjutamiseks. Võrreldes selliste keeltes nagu Rust, on Go semantiliselt ja koodi struktuurilt TypeScriptile lähemal, mis võimaldab säilitada olemasolevad mallid portimise ajal. Go kasutamine lihtsustab muudatuste ülekandmist koodibaaside vahel ja vähendab vana ja uue variandi kõrvuti toetamise töökoormust.
Go keel tagab hea jõudluse, areneb silmas pidades mitmeõpetuse programmeerimist ja tõhusat töötamist mitme südamiku süsteemides ning omab sisseehitatud kaitsevahendeid mälu probleemide vastu. Turvalise mälu töötamise hind on prügikoristaja, mis võib põhjustada viivitusi töö käigus, kuid kompilaatori puhul ei ole sellised viivitused olulised.
Teisi keeli, nagu Rust, kaaluti samuti, kuid need erinevad liiga palju TypeScriptist ja nende kasutamine tooks portimise keeruliseks, muutes selle täiesti uue kompilaatori arendamiseks, mis saavutaks täieliku ühilduvuse vana kompilaatoriga. See tähendaks, et oleks vaja taaskorda lahendada juba vanas koodibaasis lahendatud probleemid ja projekt vajaks oluliselt rohkem aega ja ressursse.
TypeScripti keel laiendab JavaScripti võimalusi, jäädes samas täielikult tagurpidi ühilduvaks, mis lihtsustab olemasolevate rakenduste tõlkimist TypeScripti. Lõplik rakendus TypeScriptis kompileeritakse tavaliseks JavaScriptiks, mida saab käivitada igas kaasaegses veebibrauseris või kasutada platvormidel Node.js, Bun ja Deno. JavaScriptist erineb TypeScript tüübid selgelt defineerimise võimaluste ja täielike klasside ning moodulite toetamise poolest. Statiline tüübistamine aitab vältida arendamise käigus paljusid vigu, võimaldab kasutada täiendavaid optimeerimistehnikasid, lihtsustab tõrkeotsingut, muudab koodi loetavamaks ning hõlbustab sellele jätkuvalt töötamist ja hooldamist.
Allikas: opennet.ru
