Tsrs: پورتی از TypeScript برای زنگ زدن
آدرس مقاله: https://blog.cloudflare.com/typescript-rust-port/ آدرس نظرات: https://news.ycombinator.com/item?id=50165953 امتیاز: 295 # نظرات: 138
Cloudflare و VoidZero اکنون با Max Schwenk از Owner.com روی tsrs، یک پورت Rust از کامپایلر TypeScript کار می کنند. ما این کار را با همکاری نزدیک با تیم TypeScript انجام میدهیم و tsrs را به عنوان بخشی از زنجیره ابزار کامپایلر Oxc JavaScript انکوبه میکنیم.
هدف ما این است که به توسعه دهندگان کمک کنیم زمان کمتری را در انتظار بررسی کدشان صرف کنند و زمان بیشتری را صرف ساختن کنند. ایجاد TypeScript سریعتر و کارآمدتر از نظر حافظه همچنین کمک می کند تا محیط های توسعه کامل را به مکان های بیشتری از جمله درست در مرورگر شما بیاورید.
برای واضح بودن، ما TypeScript را فورک نمی کنیم. ما معتقدیم که تیم TypeScript باید کنترل کامل طراحی و جهت زبان را در اختیار داشته باشد. آنها در حالی که پذیرش TypeScript را در جامعه جاوا اسکریپت هدایت می کنند، چشم انداز بلندمدت خود را حفظ کرده اند. ما نمی خواهیم آن را تغییر دهیم.
تیم TypeScript میتواند روی بسیاری از چیزها بسیار سریع حرکت کند، اما برای برخی ویژگیها ممکن است سالها به طور عمدی به بررسی گزینهها و ساختن نمونههای اولیه قبل از انتخاب پیادهسازی مناسب بپردازند. یک پورت Rust باید آن تصمیمات را به دقت دنبال کند، در غیر این صورت در نهایت از بین می رود و ناسازگار می شود. ما باید زبان TypeScript را کاملا بر اساس پیاده سازی اصلی آن حفظ کنیم - و تیم TypeScript باید به تنهایی مسئول تصمیم گیری در مورد ظاهر آن باشد.
معیارهای اولیه پورت Rust ما در TypeScript امیدوارکننده است: tsrs تا 8 برابر سریعتر است و در مقایسه با TypeScript 7.0 در حدود 70% حافظه کمتری در هنگام استفاده از تعداد کارمندان بررسی نوع استفاده میکند:
همانطور که می بینید، نسخه بعدی TypeScript در حال حاضر بهبودهای عملکردی زیادی را به همراه دارد و TypeScript 7.1 بتا را تا 2.5 برابر سریعتر از TypeScript 7.0 می کند. برخی از این بهینهسازیها از tsrs بالادستی شدهاند، و ما امیدواریم موارد بیشتری را پیدا کنیم.
ممکن است بنچمارکهای اخیر پورتهای TypeScript مختلف را با ادعاهای عملکرد متفاوت دیده باشید، که اغلب به دلیل استفاده از انواع ماشینهای بزرگتر و گزینههای متفاوت در مقایسه با پیشفرضهای TypeScript است. ما با تیم TypeScript کار کردیم تا اطمینان حاصل کنیم که معیارهای بالا پیکربندی مشابهی را با هم مقایسه میکنند.
به طور پیشفرض، tsrs با یک پیکربندی تطبیقی وابسته به نوع دستگاهی که از حافظه بیشتری استفاده میکند اما سریعتر نیز ارسال میشود:
TypeScript در Rust قصد دارد یک پورت وفادار از TypeScript باشد. با نصب بسته tsrs از npm می توانید نسخه آزمایشی را امتحان کنید:
ما طی سالها تلاشهای زیادی برای انتقال TypeScript به زبانهای دیگر دیدهایم. به دلیل پیچیدگی موجود، تنها یکی از پورت ها موفق شد: پورت TypeScript تیم TypeScript از JavaScript to Go.
با این حال، مدلهای هوش مصنوعی مرزی اکنون میتوانند پورتهای مقیاس بزرگ را تقریبا مستقل در عرض چند روز انجام دهند. ما اکنون slopfork ها، پورت های وفادار و نسخه های کاملا بازسازی شده TypeScript را در Rust یا C++ دیده ایم. واضح است که تقاضا برای TypeScript حتی سریعتر وجود دارد.
ممکن است فکر کنید: "درگاه Go TypeScript قبلا TypeScript را 10 برابر سریعتر و حافظه بسیار کارآمدتر از نسخه قبلی نوشته شده در TypeScript کرده است. چرا این کافی نیست؟"
با این حال، این فقط در مورد سرعت نیست. Rust مزایای منحصر به فردی را ارائه می دهد: اجرای در WebAssembly. داستان Rust + Wasm همیشه قوی بوده است و یکی از دلایل آن به اصول طراحی زبان Rust برمی گردد. هنگامی که یک برنامه Go را در Wasm کامپایل می کنید، باید جمع کننده زباله Go را نیز به همراه آن کامپایل کنید. اما مدل مدیریت حافظه Rust تعاملات حافظه را بین مهمان و میزبان WebAssembly امکان پذیر می کند. این یکی از موارد کلیدی است که Rust را برای WebAssembly مناسبتر میکند: کارایی حافظه.
کارگران Cloudflare برای مدت طولانی از Wasm پشتیبانی می کنند. همین چند هفته پیش ما از حمایت بومی Rust in Workers با هدف جدید Emscripten برای wasm-bindgen خبر دادیم. وقتی کل سیستمهای ساخت و استقرار نرمافزار را در حلقههای محکم روی Workers اجرا میکنید، مزایای یک حافظه کوچک به سرعت جواب میدهد. این بدان معناست که میتوانید این بارهای کاری را چنان کارآمد اجرا کنید که اکنون میتوانید سیستمهای توسعه کاملا کپسولهشده را در مکانهایی اجرا کنید که قبلا نمیتوانستند اجرا شوند.
هنگامی که با عوامل ترکیب میشود، امکانات جدیدی را ممکن میسازد: اکنون میتوانید یک زنجیره ابزار توسعه را به صورت انتها به انتها در یک محیط کاملا sandboxed در Cloudflare اجرا کنید. اما با Wasm، میتوانید آن محیطها را بهطور ایمن در سمت مشتری در مرورگر خود، یا در یک دستگاه تعبیهشده یا یک برنامه IoT اجرا کنید.
ابتدا، ما در حال کار با Theo Browne هستیم تا tsc-rs و tsrs را در یک بسته واحد ادغام کنیم که از همه ویژگیهای TypeScript از جمله پروتکل سرور زبان (LSP) و نگاشت محتوا پشتیبانی میکند. دوم، ما موفقیت های زیادی را با نحوه همگام سازی Vinext با بالادست آن، Next.js، دیده ایم. نحوه انجام این کار را در یک پست وبلاگ اخیر توضیح دادیم:
ما همین فرآیند را برای TypeScript اعمال خواهیم کرد، و بسیار مراقب هستیم که رفتارهای متفاوت از TypeScript بالا را معرفی نکنیم. وقتی با بهبود عملکرد مواجه می شویم، سعی می کنیم آنها را به پایگاه کد TypeScript Go برگردانیم تا همه برنده شوند.
در نهایت، میدانیم که در حال حاضر تفاوتهایی با نسخه بالادستی TypeScript وجود دارد، مانند ترتیب چاپ عیبیابی. ما قصد داریم تا زمانی که یک نسخه پایدار را منتشر می کنیم، این تفاوت ها را به حداقل برسانیم.
Cloudflare در حال حاضر خانه بسیاری از ابزارهای Rust رایگان و منبع باز است که اکوسیستم جاوا اسکریپت را تقویت می کنند، مانند Vite، Rolldown، Oxlint و Oxfmt. با بیش از 10 میلیون توسعهدهنده که بر روی Cloudflare کار میکنند، ما به ساخت زنجیره ابزار توسعهدهنده زیربنایی سریعتر، قابل حملتر و آسانتر در مکانهای بیشتر اهمیت میدهیم. ما هیجانزدهایم که ادغامهای عمیقتر tsrs را در پشته خود آزمایش کنیم، به عنوان مثال برای قوانین پرز آگاه از نوع در Oxlint.
مانند Vinext، هدف ما این است که tsrs را به عنوان یک پروژه منبع باز سالم و سالم اجرا کنیم - بدون اینکه مانع خود TypeScript شویم. تیم Oxc در حال حاضر بازسازی پایگاه کد را برای سریعتر کردن، استفاده از حافظه کمتر و قابل نگهداری آن آغاز کرده است. ما می دانیم که تیم TypeScript این را جدی می گیرد - آنها در حال آزمایش بهبود حافظه و عملکرد برای tsc هستند. ما مشتاق همکاری با تیم TypeScript و جامعه جاوا اسکریپت هستیم تا بهترین و سریع ترین پیاده سازی های TypeScript را با هم بسازیم.
متن اصلی (انگلیسی)
Tsrs: A Port of TypeScript to Rust
Article URL: https://blog.cloudflare.com/typescript-rust-port/ Comments URL: https://news.ycombinator.com/item?id=50165953 Points: 295 # Comments: 138