TC39 Stage 0–4
TC39 — комитет ECMAScript; процесс Stage 0–4 определяет путь фичи от идеи до стандарта, и Senior-инженер должен понимать, какие риски несёт использование Stage 1–2 фич в production (история с decorators — наглядный пример).
// Стадии TC39 и их смысл:// Stage 0: Strawperson — произвольная идея (нет требований)// Stage 1: Proposal — определена проблема, есть champion в TC39// ← только изучение, production ЗАПРЕЩЁН// Stage 2: Draft — начальная спецификация на TC39-языке// ← API может измениться (decorators: 2015–2023 итераций!)// Stage 2.7: Spec complete — полная спецификация, тесты в progress// Stage 3: Candidate — финальная спецификация, impl feedback// ← браузеры начинают реализацию, стабильно для polyfill// Stage 4: Finished — принято в стандарт, 2+ реализации// ← включается в следующий ECMAScript ежегодный snapshot
// Годовой релиз: ES20XX = все Stage 4 proposals до января того года// ES2024 = Temporal (Stage 4), Array.groupBy → Object.groupBy и др.// Stage 3 proposals (2024–2025): можно с polyfill
// Temporal API (замена Date — Stage 3)import { Temporal } from '@js-temporal/polyfill';const now = Temporal.Now.plainDateTimeISO();console.log(now.toString()); // '2025-04-27T10:30:00'
// Iterator helpers (Stage 3 → Stage 4 в ES2025)const result = [1, 2, 3, 4, 5] .values() // Iterator .filter(x => x > 2) // LazyIterator — нет промежуточного массива! .map(x => x * 2) .toArray(); // [6, 8, 10]
// Decorator metadata (Stage 3)@Injectableclass Service { }// Старый @babel/plugin-proposal-decorators несовместим с новым стандартом!// Риски при использовании Stage < 3// Реальный пример: decorators (2015 → 2023)// - 2015: Stage 1 proposal, Babel начал поддержку// - Angular/MobX/TypeScript использовали early proposal// - 2023: Stage 3 с ДРУГОЙ семантикой (define vs set semantics)// - Весь экосистемный код сломался при переходе!
// Безопасная стратегия:// Stage 0–1: только эксперименты, изолированные прототипы// Stage 2: только если готовы к migration cost// Stage 3: production с официальным polyfill (e.g. @js-temporal/polyfill)// Stage 4: native, проверяйте target browsers через caniuse.com
// TypeScript: "target" (куда компилировать) vs "lib" (что типизировать)// — это разные настройки! "lib": ["ES2025"] не означает компиляцию под ES2025Итог: TC39 Stage — многолетний pipeline от идеи до стандарта; использование фич до Stage 3 несёт риск breaking changes; Stage 4 производственно стабильно, Stage 3 — только с официальным polyfill.