scriptc؛ تایپاسکریپت بدون Node اجرا میشه
خلاصهٔ کاملتر
تو صفحهٔ معرفی scriptc اومده که این ابزار یه کامپایلر تایپاسکریپت به کد نیتیوئه: کد معمولی تایپاسکریپت رو میگیره و یه باینری کوچیک و سریع میسازه که نه Node لازم داره، نه V8، نه هیچ موتور جاوااسکریپت دیگهای. ادعای اصلی سازندهها اینه که چیزی که کامپایل میشه، بایتبهبایت مثل Node رفتار میکنه. روی macOS، لینوکس و ویندوز کار میکنه و کد هم بدون هیچ تغییری تایپچک میشه؛ نه انوتیشن خاصی میخواد، نه دیالکت جدید، نه stdlib جداگانه.
نمونهای که خودشون نشون دادن یه فایل تایپاسکریپت کاملاً معمولیه که هم میشه مستقیم اجراش کرد و هم ازش باینری گرفت:
function fib(n: number): number {
return n < 2 ? n : fib(n - 1) + fib(n - 2);
}
console.log(fib(30));معماری ابزار سه سطح داره و هر ساختار زبانی دقیقاً تو یکی از این سهتا میافته. سطح اول حالت پیشفرضه: کلاسها، کلوژرها، async/await، کتابخونهٔ استاندارد و بخش fs/path/process/http از Node مستقیم به کد نیتیو تبدیل میشن.
سطح دوم با فلگ --dynamic فعال میشه و یه موتور جاوااسکریپت حدوداً ۶۲۰ کیلوبایتی رو جاسازی میکنه تا چیزهایی مثل جاوااسکریپت آمادهٔ پکیجهای npm یا کد any-تایپ اجرا بشن؛ هر مقداری هم که از اونجا به کد استاتیک برگرده، موقع اجرا اعتبارسنجی میشه. سطح سوم یعنی بیلد رد میشه، اون هم با کد خطای مشخص و معمولاً یه پیشنهاد برای بازنویسی.
به گفتهٔ سازندهها بیشتر کدهای تایپاسکریپت خیلی استاتیکتر از چیزی هستن که اکوسیستم فکر میکنه، و دستور scriptc coverage دقیقاً همینو نشون میده: جملهبهجمله میگه چه چیزی استاتیک کامپایل میشه، کدوم نقطه به موتور داینامیک نیاز داره و چی جلوی بقیه رو گرفته. نکتهٔ مهمش اینه که باینری هیچوقت بیسروصدا موتور نمیگیره؛ سطح داینامیک اختیاریه و گزارش هم اسم تکتک جاهایی که بهش نیاز دارن رو میاره.
از نظر عدد و رقم، یه باینری hello-world حدود ۳۲۰ کیلوبایته، تقریباً ۴ میلیثانیه بالا میاد و بهجز libSystem به چیزی لینک نمیشه؛ Node برای چاپ همون یه خط به یه رانتایم ۱۲۰ مگابایتی و حدود ۳۵ میلیثانیه احتیاج داره. برای اینکه سازگاری فقط حرف نباشه، هر برنامهٔ مجموعهٔ تست هم زیر Node و هم به شکل باینری نیتیو اجرا میشه و stdout، stderr و exit code باید بایتبهبایت یکی دربیان. کل این مجموعه دوباره زیر AddressSanitizer هم اجرا میشه.
نکات کلیدی:
- کد تایپاسکریپت معمولی بدون تغییر به باینری نیتیو تبدیل میشه، بدون Node و بدون موتور جاوااسکریپت
- سه سطح مشخص: کامپایل استاتیک (پیشفرض)، اجرای داینامیک با فلگ --dynamic، و ردشدن موقع بیلد
- موتور داینامیک حدود ۶۲۰ کیلوبایت جا میگیره و فقط وقتی اضافه میشه که خودت بخوای
- باینری hello-world حدود ۳۲۰ کیلوبایت و استارت ۴ میلیثانیه، مقابل ۱۲۰ مگابایت و ۳۵ میلیثانیهٔ Node
- خروجی با تست تفاضلی مقابل Node سنجیده میشه: stdout و stderr و exit code باید یکی باشن




