Дайджесты новостей
Концептуальная иллюстрация заседания TC39: пять предложений развивают стандарт JavaScript в единую архитектурную структуру.

Итоги встречи TC39 в сентябре 2026: пять ключевых продвижений в стандарте JavaScript

Комитет TC39, определяющий развитие языка JavaScript (спецификация ECMAScript), подвел итоги сентябрьского заседания 2026 года. Сразу пять значимых предложений совершили важный шаг вперед по ступеням стандартизации. Нововведения затрагивают самые болезненные зоны экосистемы: непредсказуемое поведение асинхронных промисов, накладные расходы при разборе больших JSON-структур, медленный холодный старт серверных функций из-за тяжелых модулей и отсутствие нативных составных ключей в коллекциях.

Каждое из этих решений устраняет давние компромиссы, заставлявшие разработчиков изобретать нестабильные обходные пути или подключать сторонние библиотеки.

Thenable curtailment

Главным событием встречи стал переход предложения Thenable Curtailment на финишную стадию Stage 3 (кандидат в стандарт). На протяжении многих лет в JavaScript действовало историческое правило: любой объект, обладающий методом then(), автоматически считался «thenable» и принудительно разворачивался при возврате из async-функции или вызове Promise.resolve().

Это приводило к уязвимостям и трудноуловимым багам: если сторонний API возвращал обычный объект с полем then, среда пыталась выполнить его как промис, зависая или вызывая непредвиденные побочные эффекты. Новая семантика строго ограничивает автоматическое разворачивание только нативными экземплярами Promise и проверенными подклассами:

// Теперь обычные объекты со свойством then не ломают асинхронный поток
async function fetchConfig() {
  // Объект содержит служебное поле then, но не является промисом
  return {
    action: 'save',
    then: 'proceed_to_checkout'
  };
}

const result = await fetchConfig();
// Раньше: зависание или TypeError. Теперь: безопасное возвращение объекта!
console.log(result.then); // "proceed_to_checkout"

JSON.parse options

Предложение продвинулось на стадию Stage 2.7. Ранее инициатива развивалась под именем JSON.parseImmutable, однако комитет решил расширить базовый метод, добавив в JSON.parse(text, reviver, options) третий аргумент конфигурации.

Опции позволяют напрямую конструировать неизменяемые структуры данных (Records & Tuples) и точно управлять преобразованием числовых типов. Разработчики смогут парсить 64-битные целые числа прямо в нативный тип BigInt без потери точности, что критично для финансовых систем и работы с идентификаторами баз данных (Snowflake ID).

Deferred re-exports

Предложение получило статус Stage 2.7. Оно логично развивает спецификацию отложенного импорта (import defer), перенося эту концепцию на этап реэкспорта компонентов.

В крупных библиотеках повсеместно используются индексные файлы («barrel files»), собирающие сотни модулей в единую точку входа. Сейчас импорт даже одной функции из такого файла приводит к инициализации и выполнению кода всех соседних модулей. Новый синтаксис отложенного реэкспорта предотвращает преждевременное выполнение:

// index.js — оптимизированный индексный файл библиотеки
export defer { HeavyAnalytics } from './analytics.js';
export defer { DataVisualizer } from './visualizer.js';
export { SimpleButton } from './button.js';

Модуль analytics.js не будет загружаться и выполняться до тех пор, пока клиентский код явно не обратится к свойствам объекта HeavyAnalytics, что радикально ускоряет холодный старт в Cloudflare Workers и AWS Lambda.

Composites

Инициатива достигла стадии Stage 2. В язык добавляются фабричные примитивы Symbol.compositeKey(...values) и Symbol.compositeSymbol(...values).

Исторически структуры Map и WeakMap позволяли использовать в качестве ключа только одно значение или ссылку на один объект. Если требовалось закешировать результат функции от нескольких аргументов (мемоизация), приходилось строить многоуровневые вложенные деревья Map либо склеивать аргументы в строку через разделители, рискуя утечками памяти. Композитные символы гарантируют идентичность ключа при одинаковом наборе аргументов без создания лишних объектов-оберток.

export * as from

Пятое одобренное предложение перешло в Stage 2.7. Оно формализует и гармонизирует синтаксис пакетного реэкспорта пространства имен под единым псевдонимом.

Устранение разночтений в реализации между движками V8, SpiderMonkey и JavaScriptCore позволяет движкам более агрессивно оптимизировать граф модулей на этапе синтаксического разбора, сокращая задержки сборщиков бандлов и серверных рантаймов.

Сентябрьские решения TC39 наглядно иллюстрируют зрелость современной экосистемы: язык избавляется от концептуальных долгов ранних лет (thenable), оптимизирует работу с памятью и ресурсами процессора (отложенный экспорт и композитные ключи) и открывает путь к нативной обработке неизменяемых данных.