Vercel переписала компилятор TypeScript на самом TypeScript
tsc-ts: TypeScript written in TypeScript
Эксперимент Vercel Labs: порт компилятора TypeScript 7.0.2 (tsgo) на идиоматичный TypeScript, скомпилированный в нативный код через scriptc. Каждую часть — сканер, парсер, биндер, разрешение модулей, эмит JavaScript и деклараций, проверку типов — сверяют с tsgo на корпусе из примерно 12 500 файлов (17 000 юнитов), и все результаты совпадают. Пакет tsc-ts ставится из npm и умеет работать как API-сервер, совместимый с tsc --api.
Каждая часть сравнивается с tsgo на тестовом корпусе TypeScript (около 12 500 файлов, 17 000 юнитов после разбиения многофайловых случаев).
- pizlonator
Подтверждаю, это быстрее, чем версия на Go, что очень удивительно и супер впечатляюще!
Оговорки:
- Я не думаю, что правильно говорить, что это «написано на TypeScript». На самом деле это написано на подмножестве TypeScript, которое поддерживает scriptc. scriptc — это не просто подмножество ts; он даже хитроумно расходится с семантикой ts, чтобы облегчить свои оптимизации. Так что эти ребята на самом деле создали TypeScript-подобный нативный язык с неким гибридом RC-GC и кучей оговорок. Неясно, лучше ли это, чем просто создать новый язык.
- Весьма вероятно, что он разрабатывался совместно с scriptc, поэтому получает максимальную выгоду именно от тех идиом, которые scriptc хорошо поддерживает. И я готов поспорить, что они внедрили оптимизации в scriptc специально, чтобы получить этот результат.
Это может быть полезно, при условии, что они вложатся в его поддержку, и если вы из тех, кому нужна компиляция ts в 2 раза быстрее.
- nektro
> Экспериментальный порт компилятора TypeScript 7.0.2 (TypeScript-Go, или tsgo) на TypeScript, скомпилированный в нативный код с помощью scriptc.
Разве не было бы проще начать с v6, той, что уже есть в typescript?
- _1tan
Кто-нибудь делал бенчмарк против нового тайпчекера Buns, появившегося в v 1.4.3? Я бы сделал, но сейчас слишком далеко от своей машины.
- tallowen
Чередование написания инструментов на javascript и на go или rust сейчас, похоже, находится в неустойчивом равновесии:
- Go / Rust: Переписывать существующие инструменты на более производительных языках сейчас проще, чем когда-либо.
- Javascript: Среда выполнения v8 для vercel или cloudflare workers — гораздо более дешёвый способ запускать определённые рабочие нагрузки (например, разговорных агентов), чем запуск тяжёлой виртуальной машины. См. just bash как ещё один пример проекта, использующего это преимущество (https://github.com/vercel-labs/just-bash).
Мне любопытно, что получится!
- drewbitt
Я уже не знаю, что мем, а что нет..