
Cloudflare представляє tsrs, порт компілятора TypeScript на Rust
Cloudflare, VoidZero та Макс Швенк з Owner.com разом із командою TypeScript розробляють tsrs, порт компілятора TypeScript на Rust всередині інструментарію Oxc, щоб прискорити перевірки й зменшити використання пам'яті.
Вірний порт на Rust
Cloudflare та VoidZero працюють із Максом Швенком з Owner.com над tsrs, портом компілятора TypeScript на Rust. Проєкт інкубується як частина інструментарію компілятора JavaScript Oxc і розробляється у тісній співпраці з командою TypeScript. Зазначена мета полягає в тому, щоб допомогти розробникам менше часу витрачати на очікування перевірок коду та більше часу присвячувати розробці, водночас зробивши TypeScript швидшим і більш ефективним щодо пам'яті.
Команди заявляють, що це не форк TypeScript. Вони кажуть, що команда TypeScript повинна залишатися в повному контролі над дизайном мови та її напрямком, і що порт на Rust має тісно слідкувати за рішеннями upstream, інакше ризикує стати несумісним. TypeScript на Rust прагне бути вірним портом. Експериментальний випуск можна встановити з npm за допомогою 'npm install tsrs' і запустити за допомогою 'npx tsrs'.
Заяви щодо продуктивності та пам'яті
Ранні бенчмарки, якими поділилися команди, показують, що tsrs до 8 разів швидший і використовує приблизно на 70% менше пам'яті, ніж TypeScript 7.0, при використанні однакової кількості воркерів перевірки типів. Вони кажуть, що порівняння було проведено разом із командою TypeScript, щоб конфігурація була однаковою. TypeScript 7.1 beta вже до 2,5 раза швидший за TypeScript 7.0, і деякі з цих оптимізацій були перенесені з tsrs до upstream.
За замовчуванням tsrs постачається з адаптивною конфігурацією, яка залежить від типу машини. Ця конфігурація за замовчуванням використовує більше пам'яті, але є ще швидшою. Команди також зауважують, що деякі публічні бенчмарки використовують більші типи машин або інші параметри, ніж значення за замовчуванням у TypeScript, що може змінити заяви щодо продуктивності.
Чому Rust важливий не лише для швидкості
Команди кажуть, що попередні спроби портування мали обмежений успіх, і лише порт команди TypeScript з JavaScript на Go вдався. Вони стверджують, що попит на швидший TypeScript досі існує. Rust представлений як кращий вибір для WebAssembly, оскільки компіляція Go у WebAssembly також приносить збирач сміття Go, тоді як модель пам'яті Rust дозволяє прості взаємодії з пам'яттю між гостем і хостом WebAssembly.
Cloudflare Workers давно підтримують WebAssembly, і компанія нещодавно оголосила про нативну підтримку Rust у Workers через ціль Emscripten для wasm-bindgen. Команди кажуть, що малий обсяг пам'яті робить практичним запуск систем збірки та розгортання в щільних циклах на Workers, а навіть запуск ізольованих інструментаріїв розробки на Cloudflare, у браузері, на вбудованих пристроях або в IoT-застосунках.
Підтримка та наступні кроки
Cloudflare каже, що працює з Тео Брауном над об'єднанням tsc-rs та tsrs в один пакет, який підтримує функції TypeScript, включаючи Language Server Protocol та content mappers. План підтримки змодельований на основі Vinext: кожного ранку агент переглядає зміни, отримує diff та відкриває задачі відстеження; кожної ночі матриця сумісності регенерується шляхом запуску тестового набору Next.js проти Vinext. Коли з'являються прогалини, агенти можуть створити відтворення, портувати відповідні тести та запропонувати виправлення.
Команди кажуть, що будуть обережні, щоб не відхилятися від upstream TypeScript, і намагатимуться передавати покращення продуктивності назад до кодової бази TypeScript на Go. Вони визнають наявні відмінності, такі як порядок виведення діагностики, і прагнуть звести їх до мінімуму до часу публікації стабільного випуску. Cloudflare також каже, що команда Oxc проводить рефакторинг для швидкості, використання пам'яті та підтримуваності, і що глибша інтеграція tsrs може включати правила lint з урахуванням типів в Oxlint.
Джерела: Cloudflare · The New Stack
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.