Microsoft разрабатывает на Go проект TypeScript 7

Команда разработчиков из Microsoft представила наработки открытого проекта TypeScript 7 (компилятора TypeScript на языке Go), написанные на Go под лицензией Apache 2.0. Нативное решение уже сейчас в части тестов в 10 раз быстрее текущей реализации на TypeScript на основе JavaScript.

Исходный компилятор TypeScript написан на языке TypeScript и транслируется в JavaScript, что создаёт проблемы с масштабированием при использовании в очень больших проектах. Разработчикам приходится мириться с большими задержками при загрузке и проверке кода в интегрированных средах разработки, и жертвовать удобством разработки в пользу сокращения задержек, отключая в редакторах возможности для проверки кода. В экосистеме также назрела потребность в инструментарии командной строки, позволяющем быстро собирать код для проверки его работоспособности.

Предполагается, что создание нативного компилятора и инструментария для TypeScript существенно увеличит скорость сборки, уменьшит потребление памяти и сократит время запуска редакторов кода. Высокая производительность инструментария сделает более удобным процесс разработки в современных редакторах кода, позволит добиться быстрой проверки кода всего проекта, даст возможность реализовать более продвинутые техники рефакторинга и анализа кода, включение которых раньше было слишком затратно в плане потребления ресурсов.

По оценке разработчиков TypeScript, новый инструментарий позволит добиться сокращения времени сборки на порядок.

Главный архитектор языка TypeScript Андерс Хейлсберг (создатель C#, Delphi и Turbo Pascal) пояснил ситуацию про портирование TypeScript на Go в блоге Microsoft.

«Наш последний релиз TypeScript был TypeScript 5.8, а TypeScript 5.9 выйдет скоро. Кодовая база на основе JS продолжит развиваться в серии 6.x, а TypeScript 6.0 представит некоторые устаревшие и критические изменения для соответствия будущей собственной кодовой базе. Когда собственная кодовая база достигнет достаточного паритета с текущим TypeScript, мы выпустим её как TypeScript 7.0. Она все ещё находится в разработке, и мы будем объявлять о вехах стабильности и функций по мере их появления. Для ясности мы будем называть их просто TypeScript 6 (JS) и TypeScript 7 (нативный), поскольку это будет номенклатурой в обозримом будущем. В то время как некоторые проекты могут перейти на TypeScript 7 после выпуска, другие могут зависеть от определённых функций API, устаревших конфигураций или других ограничений, которые требуют использования TypeScript 6. Признавая важную роль TypeScript в экосистеме разработки JS, мы по-прежнему будем поддерживать кодовую базу JS в линейке 6.x до тех пор, пока TypeScript 7+ не достигнет достаточной зрелости и принятия. Наша долгосрочная цель — поддерживать эти версии как можно более тесно связанными, чтобы вы могли обновиться до TypeScript 7, как только он будет соответствовать вашим требованиям, или вернуться к TypeScript 6 при необходимости», — уточнил Хейлсберг.

Разработка нового компилятора ведётся с октября 2024 года командой из 9 сотрудников Microsoft. На текущем этапе для тестирования уже доступен рабочий прототип. Предварительную версию инструментария командной строки с новой реализацией tsc, поддерживающей проверку типов, планируют опубликовать до середины года. Выпуск первой полнофункциональной версии, способной собирать проекты и предоставлять LSP-сервисы для сред разработки, намечен к концу года.

Перед началом работы над проектом разработчики изучили возможность использования различных языков программирования и поэкспериментировали с прототипами на разных языках. В итоге для создания нового компилятора был выбран язык Go, как оптимальный вариант для выполнения работы по переписыванию кодовой базы старого компилятора. По сравнению с такими языками, как Rust, Go ближе к TypeScript по семантике и структуре кода, что позволяет сохранить при портировании существующие шаблоны. Использование Go упрощает перенос изменений между кодовыми базами и снижает трудоёмкость задачи по сопровождению старого и нового вариантов

Разработчик Microsoft Райан Кавано рассказал про выбор Go для порта TypeScript.

Выбор языка — всегда горячая тема! Мы тщательно оценили множество вариантов языка, как недавно, так и в предыдущих исследованиях. Мы также рассматривали гибридные подходы, когда определенные компоненты могли быть написаны на родном языке, сохраняя основные алгоритмы проверки типов в JavaScript. Мы написали несколько прототипов, экспериментируя с различными представлениями данных на разных языках, и провели глубокие исследования подходов, используемых существующими собственными парсерами TypeScript, такими как swc, oxc и esbuild. Для ясности, многие языки подойдут для ситуации переписывания с нуля. Go показал себя лучше всего, рассмотрев несколько критериев, которые являются специфическими для этой ситуации, и стоит объяснить некоторые из них.

Безусловно, самым важным аспектом является то, что нам нужно сохранить новую кодовую базу максимально совместимой как с точки зрения семантики, так и с точки зрения структуры кода. Мы рассчитываем поддерживать обе кодовые базы в течение довольно долгого времени в будущем. Языки, которые допускают структурно схожую кодовую базу, предлагают значительное благо для любого, кто вносит изменения в код, поскольку мы можем легко переносить изменения между двумя кодовыми базами. Напротив, языки, которые требуют фундаментального переосмысления управления памятью, мутации, структурирования данных, полиморфизма, могут лучше подойти для переписывания с нуля, но мы предпринимаем это скорее как порт, который сохраняет существующее поведение и критические оптимизации, которые мы встроили в язык. Идиоматический Go сильно напоминает существующие шаблоны кодирования кодовой базы TypeScript, что делает эти усилия по переносу гораздо более податливыми.

Go также предлагает отличный контроль над распределением и выделением памяти (как на уровне объектов, так и на уровне полей), не требуя, чтобы вся кодовая база постоянно занималась управлением памятью. Хотя это подразумевает сборщик мусора, недостатки GC не особенно заметны в нашей кодовой базе.

В качестве варианта в Microsoft рассматривались и другие языки, такие как Rust, но они слишком сильно концептуально отличаются от TypeScript и при их использовании портирование превратилось бы в разработку компилятора с нуля, при которой было бы трудно добиться полной совместимости со старым компилятором, пришлось бы заново решать уже решённые в старой кодовой базе проблемы и проект потребовал бы значительно больше времени и ресурсов.

Более подробный обзор деталей, стоящих за портом Go компилятора TypeScript.

В начале марта 2025 года Microsoft представила релиз TypeScript 5.8 Предыдущая версия проекта популярного языка программирования, работающего на основе JavaScript, вышла в ноябре 2024 года. Исходный код TypeScript опубликован на GitHub под лицензией Apache License 2.0.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии