tstst: کامپایلر TypeScript که داخل سیستم تایپ خود TypeScript اجرا میشه
خلاصهٔ کاملتر
tstst یه پروژهست که tsgo (یعنی نسخهی Go کامپایلر TypeScript که مایکروسافت داره میسازه) رو به TypeScript سطح تایپ تبدیل کرده. یعنی برنامهها فقط از type alias ساخته شدن و «اجرا»ی اونا همون چیزیه که type checker موقع حساب کردن تایپها انجام میده. ورودی برنامه Main هست و تایپی که در نهایت به دست میاد، خروجی برنامهست.
پروژه چند بخش داره: programs/tsc.ts خط فرمان tsc مربوط به tsgo هست، programs/baseline.ts تستهای tsgo رو اجرا میکنه و lib/pure/ یه runtime کامل در سطح تایپه که اعداد صحیح ۶۴ بیتی، رشته، اعداد اعشاری IEEE، heap، map و panic رو پیاده کرده. سازنده میگه هر type checkerی این کد رو به یه شکل حساب میکنه.
بخش جالبتر tstc هست؛ یه کامپایلر حدود ۶۵۰ خطی که خودش هم در سطح تایپ نوشته شده و برنامههای سطح تایپ رو به LLVM IR (یعنی کد میانیای که میشه ازش کد native ساخت) تبدیل میکنه. این کامپایلر میتونه خودش رو هم کامپایل کنه و دوباره همون IR رو تحویل بده. برای سرعت قابل قبول، برنامهها با همین tstc به کد native تبدیل میشن، چون checkerهای معمولی به سقف recursion میخورن و خیلی کندن.
نتیجهی تستها در برابر مخزن microsoft/TypeScript در commit fed0bf24149f اینه: ۳۴۴۹۹ از ۳۴۴۹۹ baseline کامپایلر، ۳۲۲۰۶ از ۳۲۲۰۶ baseline سازگاری و ۴۱ از ۴۱ baseline ترنسپایل دقیقاً یکی بودن. روی پروژههای واقعی هم خروجی tsc.ts بایت به بایت با tsgo برابره.
سرعتش طبق بنچمارک روی Apple M2 Max بهصورت تکرشتهای: type-fest توی ۸۲ ثانیه، Outline توی ۱۰۰.۳ ثانیه و VS Code توی ۱۷۴.۳ ثانیه. این حدود ۷ تا ۸ برابر کندتر از همون tsgo هست، برای مقایسه، tsc 6 جاوااسکریپتی روی VS Code حدود ۱۰۱.۸ ثانیه طول میکشه. مصرف حافظه هم بالاست؛ مثلاً روی VS Code از ۷.۳ به ۲۶ گیگابایت میرسه.
نکات کلیدی:
- کل tsgo فقط با type alias پیاده شده و خروجیش بایت به بایت با tsgo یکیه.
- همهی ۳۴۴۹۹ baseline کامپایلر و ۳۲۲۰۶ baseline سازگاری پاس میشن.
- tstc یه کامپایلر حدود ۶۵۰ خطی سطح تایپ به LLVM IR هست که خودش رو هم کامپایل میکنه.
- روی VS Code حدود ۱۷۴ ثانیه طول میکشه که ۸ برابر کندتر از tsgo هست.
- مصرف حافظه روی VS Code به ۲۶ گیگابایت میرسه و لایسنس پروژه MIT هست.




