Transcript
00:00:00TypeScript только что выпустил release candidate седьмой версии, и это будет та версия, где
00:00:04TypeScript — это уже не TypeScript. Если вы не следили за новостями, они работали над переписыванием
00:00:07компилятора TypeScript с самого TypeScript на Go, и, судя по всему, результаты в 10 раз быстрее.
00:00:12Они ожидают выпустить TypeScript 7 в следующем месяце, так что давайте разберем, что изменилось,
00:00:17насколько это быстро и есть ли критические изменения, о которых вам нужно знать перед установкой.
00:00:26Итак, если вы пропустили новости о переносе на Go, то они начали это около года назад,
00:00:29и суть в том, что они поняли: JavaScript никогда не был предназначен для тяжелой работы, связанной с процессором,
00:00:34которую выполняет проверка типов. Поэтому они начали переписывать его на Go, добившись раннего успеха. Они фактически начали с того,
00:00:39что переносили существующую реализацию TypeScript практически построчно, так что логика проверки типов
00:00:44была структурно идентичной и имела такое же поведение, и можно было даже заметить, что некоторые
00:00:48функции были почти идентичны, кроме самого языка. Я также почти уверен, что это было до того,
00:00:52как можно было просто натравить Claude на свою кодовую базу и сказать: “перенеси на любой язык, который хочешь”.
00:00:56Я смотрю на тебя, Bun. Результаты переноса говорят сами за себя. Здесь у меня
00:01:00репозиторий Playwright, и если я запущу проверку типов, используя старую версию TypeScript, мы увидим, что
00:01:04это занимает около шести секунд, и было пройдено 1400 файлов и полмиллиона строк
00:01:08кода. Если я теперь переключусь на release candidate, не меняя ничего, кроме этой команды,
00:01:12в сумме это заняло 0,87 секунды. Это серьезное улучшение. Он также нашел точно такое же количество
00:01:18ошибок, те же самые ошибки. Он прошел через те же файлы и все строки кода, так что он работает в точности
00:01:23так же, как TypeScript 6. Родной код на Go просто фундаментально быстрее, чем JavaScript для
00:01:27такой задачи, но это также позволяет им использовать параллелизм с общей памятью, так что там, где компилятор JavaScript
00:01:32был однопоточным, Go может распределять проверку типов по нескольким ядрам одновременно. В TypeScript
00:01:377 вы на самом деле можете принудительно сделать его однопоточным с помощью флага, возможно, вы занимаетесь отладкой
00:01:41или запускаете на машине с ограниченными ресурсами. И если я сделаю это в кодовой базе Playwright
00:01:46здесь с TypeScript 7, мы увидим, что в однопоточном режиме это занимает около двух секунд, что
00:01:50все равно в три раза быстрее, чем раньше. Говоря о запуске параллельно, они также открывают
00:01:54новый флаг checkers, который позволяет вам задать, сколько рабочих процессов проверки типов может работать параллельно,
00:01:58и по умолчанию это значение равно четырем. Увеличение этого числа может ускорить сборку в больших кодовых базах, если у вас
00:02:03много ядер процессора, но это будет стоить дополнительного использования памяти. Если я установлю checkers
00:02:08в значение 8 в этом репозитории Playwright, что вдвое больше значения по умолчанию, это действительно поможет сократить еще
00:02:12на треть время выполнения. Также есть новый флаг builders для распараллеливания сборок с project references, то есть сборки
00:02:16нескольких проектов одновременно. Этот флаг позволяет контролировать количество параллельных сборщиков, которые могут
00:02:20работать одновременно, и стоит отметить, что если вы объедините это с checkers, которые мы только что видели, давайте
00:02:24скажем, у вас по четыре каждого, это означает, что у вас может одновременно работать до 16 средств проверки типов. Теперь, помимо
00:02:29изменений в нативном коде и параллелизма, еще одним большим изменением в TypeScript 7 стал режим watch.
00:02:34Когда они переносили его на Go, это было немного сложнее, так как стандартная библиотека не предоставляет
00:02:38встроенных API для отслеживания файлов, а у сторонних библиотек, которые они пробовали, были проблемы с такими вещами, как
00:02:43стабильность, производительность и кроссплатформенная поддержка. Поэтому команда фактически посмотрела на сборщик Parcel,
00:02:47его файловый наблюдатель, который Microsoft на самом деле немного использует в VS Code, но поскольку он был на C++, им также
00:02:53пришлось перенести нужные им части на Go. Хорошая новость в том, что они сделали
00:02:57все, и это, кажется, работает очень гладко и лучше, чем раньше. Далее, поскольку это
00:03:01мажорное обновление версии, вы могли ожидать много критических изменений, особенно учитывая, что это большое
00:03:05переписывание, но я на самом деле не думаю, что их много, если вы обновляетесь с TypeScript 6 до 7. Если
00:03:10вы хотите перейти с 5 на 7, их будет довольно много, поэтому, похоже, они рекомендуют
00:03:14сначала перейти на 6, заставить всё работать, а затем переход на версию 7 не должен быть проблемой. Несколько
00:03:19больших изменений в TypeScript 6 заключались в удалении цели ES5, удалении baseUrl и отмене поддержки систем модулей
00:03:24AMD, UMD и SystemJS. Они также сделали strict равным true по умолчанию, заставили module по умолчанию использовать esnext,
00:03:31а target по умолчанию — текущая стабильная версия ECMAScript, непосредственно предшествующая esnext. Это было
00:03:36в основном избавление от прошлого и модернизация TypeScript, что мне очень нравится, так как
00:03:40иногда попытка поддерживать устаревшие проекты в каждой версии, которую вы делаете, может действительно замедлить
00:03:45прогресс инструмента. Просматривая остальную часть этого поста в блоге, кажется, что единственное новое
00:03:49функция или изменение, которое действительно касается самого языка TypeScript, — это то, что шаблонные литеральные
00:03:53типы теперь сохраняют кодовые точки Unicode. По сути, до TypeScript 7 TypeScript на самом деле разделял кодовые единицы UTF-16,
00:03:59поэтому он в итоге разбивал эмодзи пополам, и вы получали эти странные типы для заголовков
00:04:04и хвостов здесь. Однако в TypeScript 7 он на самом деле разделяет по целым кодовым точкам, то есть полным символам,
00:04:09так что теперь эмодзи сохраняются, и разделение происходит именно так, как вы бы ожидали. Я бы,
00:04:13честно говоря, был невероятно впечатлен, если кто-то из вас когда-либо сталкивался с этим за время использования TypeScript.
00:04:18В общем и целом, эти изменения должны сделать всё, что использует TypeScript, намного быстрее, как TypeScript
00:04:22в вашем редакторе, особенно для больших проектов. Стабильный релиз ожидается примерно через месяц,
00:04:27но стабильный программный API, то есть то, что авторы инструментов используют для создания надстроек поверх компилятора,
00:04:32появится в версии 7.1. Из-за этого также есть пакет совместимости, чтобы вы могли запускать
00:04:36TypeScript 6 и 7 бок о бок, не сталкиваясь с конфликтами. Дайте мне знать, что вы думаете обо всём
00:04:41этом, и мне интересно, чувствовали ли вы когда-нибудь, что TypeScript работает медленно. Дайте знать в
00:04:44комментариях. А пока вы там, подписывайтесь, и, как всегда, увидимся в следующем видео.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video