Cloudflare и VoidZero теперь работают вместе с Max Schwenk из Owner.com над tsrs, портом компилятора TypeScript на Rust. Мы делаем эту работу в тесном сотрудничестве с командой TypeScript и инкубируем tsrs в составе набора инструментов компилятора Oxc для JavaScript.
Наша цель — помочь разработчикам тратить меньше времени на ожидание проверки кода и больше времени на создание продуктов. Повышение скорости и эффективности использования памяти TypeScript также помогает перенести полноценные среды разработки в самые разные места, в том числе прямо в ваш браузер.
Сразу уточним: мы не делаем форк TypeScript. Мы считаем, что команда TypeScript должна сохранять полный контроль над дизайном и направлением развития языка. Они поддерживают долгосрочное видение, направляя внедрение TypeScript в сообществе JavaScript. Мы не хотим это менять.
Команда TypeScript может двигаться довольно быстро во многих вопросах, но для некоторых функций они могут годами намеренно изучать возможности и создавать прототипы перед тем, как выбрать правильную реализацию. Порт на Rust должен строго следовать этим решениям, иначе он в конечном итоге развалится и станет несовместимым. Мы должны сохранить язык TypeScript в строгом соответствии с его оригинальной реализацией, и команда TypeScript должна нести исключительную ответственность за принятие решений о том, как она выглядит.
Улучшения производительности и памяти
Ранние тесты производительности нашего порта TypeScript на Rust обнадеживают: tsrs работает до 8 раз быстрее и использует примерно на 70% меньше памяти по сравнению с TypeScript 7.0 при использовании одинакового количества воркеров проверки типов:
Как видите, следующая версия TypeScript уже приносит множество улучшений производительности, делая TypeScript 7.1 beta до 2,5 раз быстрее TypeScript 7.0. Некоторые из этих оптимизаций были перенесены в upstream из tsrs, и мы надеемся найти новые.
Вы могли видеть недавние тесты различных портов TypeScript с самыми разными заявлениями о производительности, которые часто обусловлены использованием более мощных типов машин и параметров, отличных от настроек TypeScript по умолчанию. Мы поработали с командой TypeScript, чтобы убедиться, что указанные выше тесты сравнивают одинаковую конфигурацию.
По умолчанию tsrs поставляется с адаптивной конфигурацией, зависящей от типа машины, которая использует больше памяти, но работает еще быстрее:
Попробуйте tsrs
TypeScript на Rust призван быть точным портом TypeScript. Вы можете попробовать экспериментальный выпуск, установив пакет tsrs из npm:
Почему именно сейчас?
За прошедшие годы мы видели множество попыток портировать TypeScript на другие языки. Из-за связанной с этим сложности преуспел только один порт: перенос TypeScript командой разработчиков с JavaScript на Go.
Тем не менее, передовые модели ИИ теперь могут выполнять масштабные портирования практически самостоятельно за считанные дни. Мы уже видели некачественные форки, точные порты и полностью переработанные версии TypeScript на Rust или C++. Очевидно, что существует спрос на еще более быстрый TypeScript.
Почему именно Rust?
Вы можете подумать: «Порт TypeScript на Go уже сделал TypeScript в 10 раз быстрее и значительно эффективнее по памяти, чем предыдущая версия, написанная на TypeScript. Почему этого недостаточно?»
Однако дело не только в скорости. Rust предлагает некоторые уникальные преимущества: запуск в WebAssembly. Разработка на Rust + Wasm всегда была сильна, и одна из причин кроется в основах проектирования языка Rust. Когда вы компилируете программу на Go в Wasm, вам приходится компилировать сборщик мусора Go вместе с ней. Но модель управления памятью Rust обеспечивает простую работу с памятью между гостевым окружением WebAssembly и хостом. Это один из ключевых факторов, делающих Rust гораздо более подходящим для использования с WebAssembly: эффективность использования памяти.
Cloudflare Workers уже давно поддерживают Wasm. Всего несколько недель назад мы объявили о поддержке нативного Rust в Workers с новым целевым объектом Emscripten для wasm-bindgen. Когда вы запускаете целые системы сборки и развертывания программного обеспечения в тесных циклах на Workers, преимущества малого объема памяти окупаются очень быстро. Это означает, что вы можете запускать такие рабочие нагрузки настолько эффективно, что теперь можно запускать полностью изолированные системы разработки там, где раньше это было невозможно.
Это открывает новые возможности в сочетании с агентами: теперь вы можете запускать цепочку инструментов разработки от начала до конца в полностью изолированной среде на Cloudflare. Но с помощью Wasm вы также можете безопасно запускать эти среды на стороне клиента в вашем браузере, на встраиваемом устройстве или в приложении Интернета вещей (IoT).
Как будет поддерживаться порт tsrs?
Во-первых, мы работаем с Тео Брауном (Theo Browne), чтобы объединить tsc-rs и tsrs в единый пакет, поддерживающий все функции TypeScript, включая протокол языкового сервера (LSP) и сопоставители контента. Во-вторых, мы добились больших успехов в том, как поддерживаем Vinext в синхронизации с его вышестоящим репозиторием Next.js. Мы рассказывали о том, как мы это делаем, в недавней статье в блоге:
Каждое утро агент просматривает изменения, получает различия (diff) и открывает задачи отслеживания для всего, что может повлиять на Vinext. Каждую ночь матрица совместимости пересоздается по мере запуска набора тестов Next.js для Vinext. Когда один из таких тестов или проблем обнаруживает пробел, агенты получают возможность определить изменения в обеих кодовых базах, создать воспроизведение, перенести все соответствующие тесты и предложить исправление.
Мы применим тот же процесс к TypeScript, уделяя особое внимание тому, чтобы не допустить появления расхождений в поведении с оригинальным TypeScript. Когда мы сталкиваемся с улучшениями производительности, мы стараемся вернуть их в кодовую базу TypeScript на Go, чтобы в выигрыше остались все.
Наконец, мы признаем, что в настоящее время существуют некоторые отличия от оригинальной версии TypeScript, например, порядок вывода диагностических сообщений. К моменту выпуска стабильного релизного пакета мы стремимся свести эти отличия к минимуму.
Что дальше?
Cloudflare уже является домом для многих бесплатных инструментов с открытым исходным кодом на Rust, которые поддерживают экосистему JavaScript, таких как Vite, Rolldown, Oxlint и Oxfmt. Поскольку на Cloudflare создают проекты более 10 миллионов разработчиков, мы очень заботимся о том, чтобы базовый набор инструментов разработчика работал быстрее, был более портативным и простым в запуске в самых разных средах. Мы рады экспериментировать с более глубокой интеграцией tsrs в наш стек, например, для правил линтинга с учетом типов в Oxlint.
Как и в случае с Vinext, наша цель — развивать tsrs как хорошо поддерживаемый и здоровый проект с открытым исходным кодом, не мешая самому TypeScript. Команда Oxc уже начала рефакторинг кодовой базы, чтобы сделать ее быстрее, снизить потребление памяти и облегчить ее поддержку. Мы знаем, что команда TypeScript относится к этому серьезно — они экспериментируют с улучшениями памяти и производительности для tsc. Мы рады сотрудничать с командой TypeScript и сообществом JavaScript, чтобы вместе создать лучшую и самую быструю реализацию TypeScript.

.png)






