Анонсирован порт TypeScript на Go, который показывает двухкратное уменьшение использования памяти и десятикратное улучшение скорости работы!
В этой статье мы разберем в деталях часовое интервью с автором TypeScript Андерсом Хейлсбергом об этом портировании.
Чего не хватает для лучшей производительности node.js?
Официальный анонс: https://devblogs.microsoft.com/typescript/typescript-native-port/.
Исходный код: https://github.com/microsoft/typescript-go.
Далее, мои (https://t.me/artalog) заметки и комментарии по интервью.
Улучшение перформанса TS — основной фича-реквест в комьюнити, о нем говорят чаще, чем о запросе новых функций.
Переписывание 80% функционала (на момент анонса) заняло полгода (началось в августе 2024). Например, еще не поддерживаются JSDoc, JSX и еще несколько вещей. И дошлифовать остальные 20% займет еще пару лет. Это важно для больших существующих продуктов, но новые проекты или проекты без использования каких-то менее популярных фич TS смогут использовать новый компилятор уже до конца года!
Выбор языка
Переписывать с нуля такой большой проект нереально, решено было портировать код файл за файлом с минимальными отличиями. Важной целью стояло сохранение "99.999%" поведения существующей версии для надежной миграции продуктовых команд.
Go оказался наилучшим вариантом для порта по ряду факторов:
он достаточно низкоуровневый и в целом всегда дизайнился под перф,
именно на него лучше всего ложится текущий код TS, который содержит огромное количество рекурсивных данных (это же отметает Rust),
он очень кроссплатформенный (это же отметает C#).
Производительность
Текущий код TS написан в нормальном функциональном стиле, т.е. просто функции и структуры данных, преимущественно иммутабельные, никаких высокоуровневых ООП или ФП абстракций. Огромный лайк за это
