tsrs: نسخهٔ Rust کامپایلر TypeScript با سرعت تا ۸ برابر
خلاصهٔ کاملتر
کلودفلر تو این پست اعلام کرده که همراه VoidZero و Max Schwenk از شرکت Owner.com روی tsrs کار میکنه؛ یه پورت Rust از کامپایلر TypeScript. این پروژه با همکاری نزدیک تیم TypeScript و بهعنوان بخشی از Oxc (یعنی مجموعه ابزارهای Rust برای کامپایل و لینت جاوااسکریپت) جلو میره. هدفشون اینه که برنامهنویس کمتر منتظر type check بمونه و محیط توسعهٔ کامل بتونه جاهای بیشتری اجرا بشه، حتی توی مرورگر.
نویسندهها تأکید میکنن که TypeScript رو فورک نمیکنن. طراحی و مسیر زبان کاملاً دست تیم TypeScript میمونه و tsrs باید دقیقاً پشت سر تصمیمهای اونا حرکت کنه، وگرنه کمکم ناسازگار میشه و از هم میپاشه. یعنی رفتار tsrs قراره همون رفتار پیادهسازی اصلی باشه، نه یه نسخهٔ جدا با قواعد خودش.
بنچمارکهای اولیه نشون میدن tsrs با همون تعداد worker برای type check تا ۸ برابر سریعتر از TypeScript 7.0 هست و حدود ۷۰ درصد حافظهٔ کمتر مصرف میکنه. خود TypeScript 7.1 beta هم تا ۲.۵ برابر از 7.0 سریعتره و بخشی از این بهینهسازیها از tsrs به upstream رفته. کلودفلر میگه تنظیمات بنچمارک رو با تیم TypeScript یکی کرده تا مقایسه منصفانه باشه، چون خیلی از ادعاهای پورتهای دیگه روی ماشینهای قویتر یا تنظیمات متفاوت گرفته شدن.
شاید بپرسی وقتی پورت Go خود TypeScript اونو حدود ۱۰ برابر سریعتر کرده، چرا Rust؟ جواب نویسندهها WebAssembly هست (یعنی فرمتی که کد رو داخل مرورگر یا یه سندباکس اجرا میکنه). وقتی برنامهٔ Go رو به Wasm کامپایل میکنی، garbage collector خود Go هم باید همراهش بیاد. ولی مدل مدیریت حافظهٔ Rust تبادل حافظه بین Wasm و میزبان رو ساده و کممصرف نگه میداره.
این برای Cloudflare Workers مهمه که تازگیها با تارگت Emscripten برای wasm-bindgen از Rust بومی پشتیبانی میکنه. با حافظهٔ کم میشه کل تولچین توسعه رو توی یه محیط کاملاً سندباکس روی کلودفلر اجرا کرد، که برای ایجنتهای هوش مصنوعی خیلی بهدرد میخوره. همین محیط رو میشه سمت کلاینت توی مرورگر، یا روی دستگاههای embedded و IoT هم بالا آورد.
برای نگهداری، کلودفلر داره با Theo Browne پروژهٔ tsc-rs رو با tsrs یکی میکنه تا همهٔ قابلیتها از جمله LSP پوشش داده بشه. همون روشی که برای همگام نگه داشتن Vinext با Next.js دارن اینجا هم اجرا میشه: ایجنتها هر روز تغییرات upstream رو بررسی میکنن و هر شب تستها اجرا میشن تا اختلافها پیدا بشن. فعلاً تفاوتهای کوچیکی مثل ترتیب چاپ diagnosticها هنوز هست که قراره تا نسخهٔ پایدار به حداقل برسه.
نکات کلیدی:
- tsrs تا ۸ برابر سریعتر از TypeScript 7.0 و با حدود ۷۰ درصد حافظهٔ کمتر، با تعداد worker یکسان
- TypeScript 7.1 beta خودش تا ۲.۵ برابر از 7.0 سریعتره و بخشی از بهینهسازیهاش از tsrs اومده
- tsrs بهطور پیشفرض یه تنظیم تطبیقی بر اساس نوع ماشین داره که حافظهٔ بیشتری میگیره ولی سریعتره
- نسخهٔ آزمایشی بهصورت پکیج npm با اسم tsrs و نسخهٔ Wasm با اسم @tsrs/wasm منتشر شده
- tsc-rs از Theo Browne قراره با tsrs ادغام بشه تا LSP هم پشتیبانی بشه
- قراره tsrs برای قوانین لینت type-aware توی Oxlint هم استفاده بشه




