TypeScript'in özü ilə yazılmış son versiyası olan TypeScript 6-nı native ikili fayla çevirmək mümkündürmü? Remo Jansen adlı tərtibatçı bunu sınadı və nəticədə maraqlı bir hekayə ortaya çıxdı. O, scriptc adlı yeni bir kompilyatordan istifadə edərək, TypeScript kompilyatorunun özünü (tsc) native binary'ə çevirməyə çalışdı.
scriptc, TypeScript kodunu birbaşa native maşın koduna çevirən, heç bir Node.js və ya V8 mühərriki tələb etməyən eksperimental bir alətdir. İlk baxışdan məqsəd sadə idi: əgər scriptc ən mürəkkəb TypeScript kodlarından birini – yəni öz kompilyatorunu – native edə bilərsə, demək o, hər şeyi edə bilər. Jansen, scriptc'in əhatə alətini işə saldıqda 56.117 ifadədən 51.045-inin (təxminən 90%) statik şəkildə kompilyasiya olunduğunu gördü. Qalan 10% isə dinamik xüsusiyyətlərə görə --dynamic bayrağı tələb edirdi.
Ancaq --dynamic rejimində kompilyasiya cəhdi uğursuz oldu. scriptc'in öz daxili alqoritmlərində stack overflow və digər daxili xətalar meydana gəldi. Altı xəta üç fərqli nümunədən ibarət idi: seyrək massiv inisializatoru, void qaytaran şərt operatoru və anlaşılması çətin "union u50: arm 0 is jsval" xətası. İlk iki problemi kiçik kod dəyişiklikləri ilə həll etmək mümkün olsa da, altıncı xəta – union tipi ilə bağlı olan – scriptc'in hal-hazırki versiyasında (0.0.17) həll edilə bilməz idi.
Beləliklə, native tsc əldə edilmədi. Lakin Jansen, əldə etdiyi məlumatları boş yerə sərf etmədi. O, TypeScript 6-nı Node.js üzərində, TypeScript 7-ni (Go dilində yazılmış yeni kompilyator) və scriptc'in kiçik proqramlar üzərindəki performansını müqayisə etdi. Nəticələr maraqlıdır: TypeScript 7 (Go) öz mənbə kodunu tip yoxlamada Node.js-dəki TypeScript 6'dan təxminən 5 dəfə sürətli oldu (523 ms'ə qarşı 107 ms). scriptc isə cold start zamanı Node.js'dən 13 dəfə sürətli idi (3.6 ms'ə qarşı 48.9 ms), lakin hesablama ağır işlərdə Node.js'in V8 mühərriki təxminən 9.6 dəfə öndə idi.
Xülasə, bu təcrübə göstərir ki, scriptc'in gələcəyi olsa da, hələ çox gəncdir. TypeScript 7'nin Go ilə yenidən yazılması isə doğru bir qərar olub – performans artımı göz qabağındadır. Ancaq scriptc'in təklif etdiyi "asılılıqsız, dərhal başlayan binary" ideyası cəlbedicidir və gələcəkdə yetkinləşdikdə fərqli bir istiqamət təklif edə bilər.


