В мае 2025 года прошло очередное пленарное заседание комитета TC39, важного органа, создающего и развивающего стандарт ECMAScript, определяющий язык программирования JavaScript. Это заседание стало особенно значимым, так как его организовала и принимала команда Igalia в своем головном офисе в испанском городе А-Коруна. Благодаря этому событию участники смогли не только обсудить важные предложения по языку, но и укрепить сотрудничество в сообществе разработчиков. Впечатляющие новшества, достигшие новых этапов подготовки для включения в стандарт ECMAScript, демонстрируют активную работу комитета над улучшением языка, а также поддержку растущих потребностей разработчиков по всему миру. Одной из важных тем заседания стало рассмотрение предложений, которые достигли стадии 4 — последнего этапа перед официальным включением в стандарт.
Среди них выделяется метод Array.fromAsync, который предлагает асинхронный аналог стандартного метода Array.from, предназначенного для преобразования итерируемых объектов в массивы. Array.fromAsync позволяет работать с асинхронными итераторами так же удобно, как использование оператора for await, и уже год поддерживается во всех основных движках JavaScript, включая V8, SpiderMonkey и JavaScriptCore.
Несмотря на популярность и широкое использование, метод долгое время оставался вне окончательного стандарта из-за технических бюрократических причин. На текущем заседании благодаря совместной работе редакторов спецификации он был окончательно утвержден к включению в стандарт. Другим важным завершенным предложением стала Explicit Resource Management — явное управление ресурсами, вводящее возможность автоматического освобождения ресурсов, таких как файлы, подключенные внутри блока кода, по завершении работы с ними. Новая конструкция using x = ..
. позволяет задать временные объекты с гарантией их корректного закрытия и очистки, что особенно актуально для серверных и системных приложений, где управление ресурсами критично. Хотя функциональность уже появилась в популярных движках, таких как Chrome, Node.js и Deno, в Firefox она пока реализована за экспериментальным флагом. Тем не менее, комитет дал принципиальное согласие на принятие инициативы в стандарт, после доработки тестов и финального просмотра спецификации.
Еще одно долгожданное нововведение — метод Error.isError, направленный на повышение надежности идентификации объектов ошибок. В JavaScript можно выбрасывать практически любые значения, включая числа и булевы значения, что затрудняет однозначное обнаружение объектов ошибок в коде. Метод Error.isError обеспечивает единый способ проверки и теперь официально входит в стандарт, что позволит сделать отладку и обработку ошибок более прозрачной и предсказуемой.
В части международной поддержки язык также получил значительные улучшения. Объекты Intl.Locale, используемые для работы с локалями, получили возможность доступа к вариантам (variants) локали — дополнительным параметрам, отображающим особые предпочтения, например, традиционную орфографию или используемый порядок сортировки. Это нововведение улучшает детальное описание локалей и позволяет приложениям точнее адаптировать поведение к региональным особенностям, что крайне важно для глобальных проектов. В числе предложений на стадии 3 уделялось внимание усовершенствованию Intl.
Locale Info, расширяющему метаданные локалей, например, дни недели, считающиеся выходными в разных регионах. Комитет согласился с тем, что для некоторых локалей направление текста может быть неизвестным, и в таких случаях теперь будет возвращаться неопределенное значение, а не предположение по умолчанию. Это изменение повышает точность представления информации в приложениях с поддержкой международных пользователей. Параллельно с развитием этих предложений обсуждался прогресс по Temporal — новому API для управления временем и датами в JavaScript, который давно ожидается сообществом. Последнее положительное известие — полноценная интеграция Temporal в свежий релиз браузера Firefox, а также близкая к завершению реализация в других движках.
Одновременно в спецификации уточняется трактовка компонентов UTC-смещения с учетом редких случаев с необычными временными сдвигами. Это свидетельствует о детальном подходе к созданию надежного и удобного для разработчиков инструментария работы со временем. В качестве перспективных тем рассматривались решения для уменьшения сложности работы с итераторами. Это касается обновлений предложения Iterator Sequencing с новым методом Iterator.concat, способным объединять несколько итераторов в один, а также Iterator Chunking, который позволяет разбивать поток данных на куски фиксированного размера или накладывающиеся окна.
Подобные методы значительно упрощают работу с асинхронными и ленивыми структурами данных, делая код лаконичнее и выразительнее. Одной из сложных тем пленума стала интеграция предложения AsyncContext, предназначенного для сохранения состояния исполнения в асинхронных потоках, включая события браузера и сложные цепочки вызовов. Вопросы возникли из-за сложности реализации таких функций в браузерах, что требует согласования между инженерами движков и веб-API. Однако обсуждения, а также организованный непосредственно после пленарного заседания Web Engines Hackfest в А-Коруне, дали позитивные результаты, и представители Mozilla выразили готовность рассмотреть способы облегчения реализации с сохранением полезности для разработчиков. Среди свежих идей и предложений стоит отметить Math.
clamp, метод ограничения числового значения заданным диапазоном. Было решено реализовать его в виде метода Number.prototype.clamp, а также уточнены нюансы работы с типом Number и обработкой крайних случаев, что говорит о внимательном рассмотрении удобства и предсказуемости API. Еще одно интересное направление разработки — создание локально определяемого генератора случайных чисел с возможностью задания начального значения (seed).
Это важный шаг для улучшения тестирования и воспроизводимости поведения программ. Новое глобальное пространство имен Random позволит создавать предсказуемые последовательности псевдослучайных чисел, что по достоинству оценят разработчики, занимающиеся сложными приложениям, игровыми движками и научными расчетами. На начальной стадии находится также предложение о расширении возможностей генерации случайных значений за счет различных утилит, таких как получение случайного булева значения или перемешивания массива. Эти функции направлены на упрощение повседневных задач с генерацией случайных данных в JavaScript. Кроме того, рассматриваются улучшения в области интернационализации с точки зрения сохранения всех десятичных знаков, включая завершающие нули, что важно для корректного отображения и склонения числовых значений в разных языках.
Важным направлением стало обсуждение интеграции IDL (Interface Definition Language) в спецификацию ECMAScript. Это позволит упростить поддержку и согласование интерфейсов API между разными реализациями, особенно учитывая активное развитие веб-платформы. Хотя напрямую использовать существующий Web IDL не представляется возможным из-за особенностей ECMAScript, предлагаются различные пути адаптации и расширения языка описания интерфейсов. Пленарное заседание TC39 мая 2025 года стало знаковым событием, бизнесом новых стандартов и укреплением международного сообщества разработчиков JavaScript. Важно отметить, что открытость этих обсуждений и активное участие команд, таких как Igalia, позволяют поддерживать высокий уровень взаимопонимания и ускорять внедрение инноваций в язык.
Представленные и доработанные предложения направлены на повышение удобства, производительности и широты возможностей JavaScript, отвечая на реальные запросы программистов и меняя облик современного веба. Все изменения и ход обсуждений доступны в подробных протоколах и на платформе GitHub, что гарантирует прозрачность процесса и вовлечение сообщества в развитие стандарта. Это пленарное заседание показало, что JavaScript продолжает активно эволюционировать, сохраняя свою гибкость и адаптируясь к самым современным вызовам в области разработки программного обеспечения.