تایپاسکریپت ۷٫۰ اومد؛ اینبار با Go
خلاصهٔ کاملتر
تیم TypeScript از نسخهٔ Release Candidate تایپاسکریپت ۷٫۰ رونمایی کرده و مهمترین خبر اینه که این نسخه روی یه پایهٔ کاملاً جدید ساخته شده. طی یه سال گذشته، کل کدبیس TypeScript از خود TypeScript (که به JavaScript کامپایل میشد) به زبان Go پورت شده. نتیجهاش اینه که کامپایلر جدید معمولاً حدود ۱۰ برابر سریعتر از نسخهٔ ۶٫۰ کار میکنه.
به گفتهٔ تیم، این کدبیس Go بهجای بازنویسی از صفر، بهدقت از پیادهسازی قبلی پورت شده و منطق type-checkingاش از نظر ساختاری با نسخهٔ ۶٫۰ یکسانه، پس همون معناشناسی قبلی رو حفظ میکنه. این نسخه با مجموعهتستِ یهدههایِ تیم سنجیده شده و الان هم داخل چند کدبیس چند میلیون خطی — هم داخل مایکروسافت و هم شرکتهایی مثل Figma، Google، Slack و Vercel — در حال استفادهست.
بخشی از این جهش سرعت از موازیسازیه: حالا مراحلی مثل پارس، type-checking و emit بهصورت موازی انجام میشن. type-checking با تعدادی worker مجزا (پیشفرض ۴ تا) اجرا میشه که با فلگ جدید --checkers قابلتنظیمه، و فلگ --builders هم تعداد بیلدرهای موازیِ پروژهها رو کنترل میکنه که مخصوصاً برای مونوریپوها مفیده. زیاد کردن این عددها میتونه سریعتر باشه ولی مصرف حافظه رو بالا میبره.
چند تغییر شکننده هم داره؛ به گفتهٔ تیم غیرمنتظرهترینها اینن که rootDir حالا پیشفرض ./ میشه و types پیشفرض خالی ([])ه، پس باید پکیجهای type موردنیاز رو صریح لیست کنی. یهسری گزینهٔ قدیمی هم دیگه پشتیبانی نمیشن، مثل target: es5، حالتهای قدیمی moduleResolution و module، و baseUrl. یه تغییر ظریف دیگه هم اینه که template literal typeها حالا کدپوینتهای یونیکد (مثل ایموجی) رو بهجای شکستن به دو نیمهٔ surrogate، بهعنوان یه واحد در نظر میگیرن.
این بهبود سرعت به تجربهٔ ادیتور هم میرسه. برای VS Code یه افزونهٔ TypeScript Native Preview هست و چون پایهاش روی پروتکل LSPه، تو خیلی از ادیتورها هم کار میکنه؛ تیم میگه خطاهای language server نسبت به نسخهٔ ۶٫۰ بیش از ۲۰ برابر کم شده. برای اجرای همزمان با ۶٫۰ هم پکیج سازگاری @typescript/typescript6 با اجراپذیرِ tsc6 منتشر شده. برنامه اینه که نسخهٔ نهایی ۷٫۰ ظرف یه ماه آینده بیاد.
نکات کلیدی:
- TypeScript 7.0 RC روی پایهٔ جدید Go ساخته شده و حدود ۱۰ برابر سریعتر از ۶٫۰ه
- منطق type-checking از نظر ساختاری با ۶٫۰ یکسانه، پس همون رفتار قبلی حفظ میشه
- موازیسازی با فلگهای --checkers و --builders قابلتنظیمه
- تغییرات شکننده: پیشفرض جدید rootDir و types و حذف گزینههای قدیمی مثل target: es5
- نسخهٔ نهایی قراره ظرف حدوداً یه ماه منتشر شه




