Сегодня начинается 77я встреча #TC39, которая продлится 4 дня. В поветске очень много интересного и целых 6 пропозалов в ECMAScript и ECMAScript Internationalization API готовятся попасть на stage 4 (эти темы запланированы на завтра). Я как всегда буду рассказывать всё самое интересное в этом канале. Если что-то невероятно интересное или важное, то сразу же лайвом, а также буду публиковать результаты каждого дня ближе к ночи или утром следующего дня.
Время проведения встреч — 20:00 - 01:00 по Москве, Киеву, Минску.
Напоминаю, что можно поддержать этот канал на Patreon.
Время проведения встреч — 20:00 - 01:00 по Москве, Киеву, Минску.
Напоминаю, что можно поддержать этот канал на Patreon.
Результаты первого дня июльской встречи #TC39.
Отчёт секретариата TC39
Слайды: https://github.com/tc39/agendas/blob/master/2020/tc39-2020-036.pdf
Тут ничего нового (если Вы читали канал внимательно 😉). Самое главное — вышли версии стандартов ES2020 и ECMA402 2020
Отчёт редакторов ECMA262
Слайды: https://docs.google.com/presentation/d/1O8wGWehzMhqb_Jz2JfmyUxyUepxanc8sEVMlTRUVnfo/edit
В слайдах указаны основные нормативные и редакторские изменения с последней встречи, а также родмап на ближайшее время.
Отчёт редакторов ECMA402
Слайды: https://docs.google.com/presentation/d/1C54jVjcuE27wq658CbMi0KEfa5ded_WIWvdq1JP8QDI/edit#slide=id.g442f4955c0_0_50
Некоторые пропозалы готовятся продвигаться на stage 4 в сентябре.
Отчёт мейнтейнеров Test262
Слайды: https://docs.google.com/presentation/d/1tsqTUZioHi8YxRF_CapxcZTjZQYDClEgXOFUm0W4gHg/edit#slide=id.p
Всё как обычно. Много-много новых тестов для новых и старых пропозалов.
Нормативное изменение: Retroactive consensus on Unicode 13 property names and aliases
PR 1: https://github.com/tc39/ecma262/pull/1896
PR 2: https://github.com/tc39/ecma262/pull/1939
Эти два пулл реквеста были влиты, так как считались редакторскими изменениями (не затрагивающими работу движков), но оказалось, что они всё же нормативные. Был достигнут консенсус, чтобы оставить эти изменения.
Нормативное изменение: Specify \8 and \9 in sloppy (non-template) strings
Этот PR покрывает неспицифицированное ранее поведение. Был достигнут консенсус, PR будет влит.
Нормативное изменение: Adding Reflect[Symbol.toStringTag]
Reflect оставался единственным встроенным объектом, у которого не было
Нормативное изменение: Should eval?.() be direct eval?
Решено было оставить данный вызов непрямым вызовом
Обсуждене: Forbid Numeric Separators in NonOctalDecimalIntegerLiteral fractional / exponent parts
Issue в репозитории пропозала: https://github.com/tc39/proposal-numeric-separator/issues/49
Issue в репозитории спецификации: https://github.com/tc39/ecma262/issues/2090
Эта особенность блокировала переход пропозала Numeric separators на stage 4. Больше не блокирует, был достигнут консенсус.
Обсуждение: Cognitive Dimensions of Notation: a framework for reflecting on language design
Было предложено заменить TC39-специфичный сленг на более общепринятый.
Пропозал Class static blocks (stage 1 -> stage2)
Слайды: https://onedrive.live.com/view.aspx?resid=934F1675ED4C1638!291940&ithint=file%2cpptx&authkey=!ADFod3jufA89iM8
Пропозал был оценен достаточно позитивно, но продвижение было заблокировано некоторомы делегатами ввиду того, что он был добавлин в повестку после дедлайна для продвижения, поэтому не все смогли заранее ознакомиться с ним. Остаётся на stage 1.
Нормативное изменение: Host hooks for Job callbacks
Слайды: https://docs.google.com/presentation/d/19S97ZqhibJABqzeP5ZU6Flk6TVgWzXuvJWFbNTTfpWs
Дискуссия будет продолжена, консенсус не достигнут.
Нормативное изменение: Handle awkward rounding behaviour
Слайды: https://docs.google.com/presentation/d/1QGUTz61o-X_HEgYrkTUXtScoRpu_KhXsoKxGyMQJthc
Консенсус достигнут.
Отчёт секретариата TC39
Слайды: https://github.com/tc39/agendas/blob/master/2020/tc39-2020-036.pdf
Тут ничего нового (если Вы читали канал внимательно 😉). Самое главное — вышли версии стандартов ES2020 и ECMA402 2020
Отчёт редакторов ECMA262
Слайды: https://docs.google.com/presentation/d/1O8wGWehzMhqb_Jz2JfmyUxyUepxanc8sEVMlTRUVnfo/edit
В слайдах указаны основные нормативные и редакторские изменения с последней встречи, а также родмап на ближайшее время.
Отчёт редакторов ECMA402
Слайды: https://docs.google.com/presentation/d/1C54jVjcuE27wq658CbMi0KEfa5ded_WIWvdq1JP8QDI/edit#slide=id.g442f4955c0_0_50
Некоторые пропозалы готовятся продвигаться на stage 4 в сентябре.
Отчёт мейнтейнеров Test262
Слайды: https://docs.google.com/presentation/d/1tsqTUZioHi8YxRF_CapxcZTjZQYDClEgXOFUm0W4gHg/edit#slide=id.p
Всё как обычно. Много-много новых тестов для новых и старых пропозалов.
Нормативное изменение: Retroactive consensus on Unicode 13 property names and aliases
PR 1: https://github.com/tc39/ecma262/pull/1896
PR 2: https://github.com/tc39/ecma262/pull/1939
Эти два пулл реквеста были влиты, так как считались редакторскими изменениями (не затрагивающими работу движков), но оказалось, что они всё же нормативные. Был достигнут консенсус, чтобы оставить эти изменения.
Нормативное изменение: Specify \8 and \9 in sloppy (non-template) strings
Этот PR покрывает неспицифицированное ранее поведение. Был достигнут консенсус, PR будет влит.
Нормативное изменение: Adding Reflect[Symbol.toStringTag]
Reflect оставался единственным встроенным объектом, у которого не было
Symbol.toStringTag. Теперь у него он тоже будет, консенсус достигнут.Нормативное изменение: Should eval?.() be direct eval?
Решено было оставить данный вызов непрямым вызовом
eval.Обсуждене: Forbid Numeric Separators in NonOctalDecimalIntegerLiteral fractional / exponent parts
Issue в репозитории пропозала: https://github.com/tc39/proposal-numeric-separator/issues/49
Issue в репозитории спецификации: https://github.com/tc39/ecma262/issues/2090
Эта особенность блокировала переход пропозала Numeric separators на stage 4. Больше не блокирует, был достигнут консенсус.
Обсуждение: Cognitive Dimensions of Notation: a framework for reflecting on language design
Было предложено заменить TC39-специфичный сленг на более общепринятый.
Пропозал Class static blocks (stage 1 -> stage2)
Слайды: https://onedrive.live.com/view.aspx?resid=934F1675ED4C1638!291940&ithint=file%2cpptx&authkey=!ADFod3jufA89iM8
Пропозал был оценен достаточно позитивно, но продвижение было заблокировано некоторомы делегатами ввиду того, что он был добавлин в повестку после дедлайна для продвижения, поэтому не все смогли заранее ознакомиться с ним. Остаётся на stage 1.
Нормативное изменение: Host hooks for Job callbacks
Слайды: https://docs.google.com/presentation/d/19S97ZqhibJABqzeP5ZU6Flk6TVgWzXuvJWFbNTTfpWs
Дискуссия будет продолжена, консенсус не достигнут.
Нормативное изменение: Handle awkward rounding behaviour
Слайды: https://docs.google.com/presentation/d/1QGUTz61o-X_HEgYrkTUXtScoRpu_KhXsoKxGyMQJthc
Консенсус достигнут.
Сегодня должно быть поинтереснее. Должно быть много продвижений предложений в спецификацию на следующие стейджи.
В проекте V8 создана ветка для версии v8.5. Из нового там появятся:
- Promise.any и AggregateError (stage 3)
- String.prototype.replaceAll (ES2020)
- Logical assignment operators (stage 3)
- бейслайн компилатор #WebAssembly Liftoff теперь работает на всех платформах
- поддержка WebAssembly Multi-value (добавлены в спецификацию в мае)
- поддержка JavaScript BigInt в WebAssembly (добавлены в спецификацию в июне)
- Promise.any и AggregateError (stage 3)
- String.prototype.replaceAll (ES2020)
- Logical assignment operators (stage 3)
- бейслайн компилатор #WebAssembly Liftoff теперь работает на всех платформах
- поддержка WebAssembly Multi-value (добавлены в спецификацию в мае)
- поддержка JavaScript BigInt в WebAssembly (добавлены в спецификацию в июне)
v8.dev
V8 release v8.5 · V8
V8 release v8.5 features Promise.any, String#replaceAll, logical assignment operators, WebAssembly multi-value and BigInt support, and performance improvements.
⚡️ Promise.any и AggregateError отправляются на stage 4!
MDN Web Docs
Promise.any() - JavaScript | MDN
The Promise.any() static method takes an iterable of promises as input and returns a single Promise. This returned promise fulfills when any of the input's promises fulfills, with this first fulfillment value. It rejects when all of the input's promises reject…
⚡️ WeakRefs отправляются на stage 4, также от них отделяется CleanupSome, которому присваивается stage 2!
MDN Web Docs
WeakRef - JavaScript | MDN
A WeakRef object lets you hold a weak reference to another object, without preventing that object from getting garbage-collected.
⚡️ Numeric separators отправляются на stage 4!
GitHub
GitHub - tc39/proposal-numeric-separator: A proposal to add numeric literal separators in JavaScript.
A proposal to add numeric literal separators in JavaScript. - GitHub - tc39/proposal-numeric-separator: A proposal to add numeric literal separators in JavaScript.
⚡️ .item() переходит на stage 2!
GitHub
GitHub - tc39/proposal-relative-indexing-method: A TC39 proposal to add an .at() method to all the basic indexable classes (Array…
A TC39 proposal to add an .at() method to all the basic indexable classes (Array, String, TypedArray) - GitHub - tc39/proposal-relative-indexing-method: A TC39 proposal to add an .at() method to al...
Improving HTTP with structured header fields — статья о новой спецификации, которая добавит структурированные заголовки в HTTP. Уже доступны различные имплементации, в том числе имплементация в Chrome.
Fastly
Improving HTTP with structured header fields | Fastly
The HTTP community has been busy modernizing the web’s protocol over the last decade, with multiple revisions of the core specification, a number of extensions, HTTP/2, and now HTTP/3. Unfortunately, the way we define and use HTTP header fields hasn’t changed…
В Firefox 79 (выйдет 28 июля) собираются снова включить SharedArrayBuffer по умолчанию. Ранее поддержка SAB была выключена во всех браузерах в начале 2018 из-за уязвимости и Spectre. Для использования SAB в Firefox потребуется добавить заголовки COOP и COEP.
Mozilla Hacks – the Web developer blog
Safely reviving shared memory
At Mozilla, we want the web to be capable of running high-performance applications so that users and content authors can choose the safety, agency, and openness of the web platform. ...
В Chrome 85 (выйдет 25 августа) появится поддержка Houdini Properties and Values API прямо в CSS.
https://web.dev/at-property/
https://web.dev/at-property/
web.dev
@property: giving superpowers to CSS variables | Articles | web.dev
Learn how to implement CSS custom properties with semantic typing, a fallback value, and more, directly in your CSS file.
В Svelte реализовали одну из самых долгожданных фич — поддержку TypeScript.
https://svelte.dev/blog/svelte-and-typescript
https://svelte.dev/blog/svelte-and-typescript
svelte.dev
Svelte <3 TypeScript
Typernetically enhanced web apps
Результаты второго дня июльской встречи #TC39. Результаты первого дня здесь.
Пропозал: Promise.any & AggregateError (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1PcfPP5nLVG8w5OosQt5PWwOmFUPuD5pg1rgGaF1JVis
Несказанно счастлив переходу этого пропозала на stage 4, т.к. я один из авторов и мной написана значительная часть текста спецификации.
Нормативное изменение: Strictness check for object's SetMutableBinding
Слайды: https://docs.google.com/presentation/d/1O_YdntfiZMTsxX_2FPk1YZypEy1vncL3X1NCg-vmC1E
Поведение, которое Вы никогда бы не обнаружили, потому что так не надо писать код. В любом случае, оно исправлено.
Пропозал: Intl.ListFormat (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/13gxxnt-JMuWXJhzwuU2jtBRZ8RGJgJ0Y8RsIvHEQU7k/edit#slide=id.p
Пропозал для локалезависимого отображения списков переходит на stage 4.
Пропозал: Intl.DateTimeFormat dateStyle/timeStyle (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1USMb1b_1zDMAlw3Aw5k9DpqZsZ3NS_q9gOyhRCQc-qg
Локалезависимое форматирование времени и даты также переходит на stage 4
Нормативное изменение: Fix Function.toString for builtins
Не достигло консенсуса, обсуждение продолжится в четверг (если хватит времени)
Пропозал: WeakRefs (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1NYhEELzOnhJGU7inKz0r0TrEa0h33krr1nEb3X_ze5w
Слабые ссылки переходят на stage 4, а CleanupSome ответвляется в отдельный stage 2 пропзал.
Пропозал: Logical Assignment (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1rq448C-mzxWzBs6RTInczGTjs4xv5gQenDJY1fGogX0
Берёт stage 4.
Пропозал: Decorators (stage 2 обновление)
Слайды: <позже>
Тут всё сложно. Чемпионы выявили ограничения, которые не позволяют удовлетворить всем требованиям к декораторам. Были представлены эти ограничения, комитет в процессе поиска наиболее удачного решения.
Пропозал: Numeric Separator (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1rLT5m3d0yk2KMlka4KZKf2uz9oITdpfr6evAV_jaKcc
Наконец-то решены последние спорные вопросы, и пропозал (уже очень давно реализованный во всех браузерах) попадает на stage 4.
Пропозал: Slice notation (stage 1 -> stage 2)
Слайды: https://docs.google.com/presentation/d/1EBpiGuYn2ChDvcd67fpz6gGY14kO8VCuAKOhFMxOqEQ
Остаётся на stage 1. Некоторые делегаты не одобрили текущую версию предложения.
Пропозал: Temporal (stage 2 обновление)
Слайды: https://pipobscure.dev/slides/temporal-2020-07/
Ну тут всё хорошо. Общими усилиями (в том числе и вашими, дорогие читательи!) собирается нужный фидбек. Думаю, есть все шансы увидеть пропозал на stage 3 уже в этом году.
Пропозал: Import Conditions (stage 2 -> stage 3)
Слайды: https://docs.google.com/presentation/d/18THsm_ZAog70m0ZlEokRCfyrarMiA1yr6YDAvFXjVNU
Пропозал пока что не переходит на stage 3, но в целом, больших проблем нет. Ждём на stage 3 на следующих встречах TC39.
Пропозал: Intl.Segmenter (stage 2 -> stage 3)
Слайды: https://docs.google.com/presentation/d/1LOOt4WPvQdOK3banHkz1V8sdl8Z-7Z9jXBRRS9Ek8-M
Stage 3 взят.
Пропозал: Iterator Helpers (stage 2 обновление)
Слайды: https://docs.google.com/presentation/d/1YNLzi_ENRtxp5bjhXMUplQ0VIQBUFLyucbNFt_oaNgQ
В Firefox уже есть тестовая рабочая имплементация (можне даже найти её под флагом в
Пропозал: .item() (stage 1 -> stage 2)
Слайды: https://docs.google.com/presentation/d/1N-oXRRKDA7patBA4HIYkzN67j1pbyOxuDZoYRvPFmuA
Stage 2 взят, определены ревьюеры для stage 3.
Пропозал: Promise.any & AggregateError (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1PcfPP5nLVG8w5OosQt5PWwOmFUPuD5pg1rgGaF1JVis
Несказанно счастлив переходу этого пропозала на stage 4, т.к. я один из авторов и мной написана значительная часть текста спецификации.
Нормативное изменение: Strictness check for object's SetMutableBinding
Слайды: https://docs.google.com/presentation/d/1O_YdntfiZMTsxX_2FPk1YZypEy1vncL3X1NCg-vmC1E
Поведение, которое Вы никогда бы не обнаружили, потому что так не надо писать код. В любом случае, оно исправлено.
Пропозал: Intl.ListFormat (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/13gxxnt-JMuWXJhzwuU2jtBRZ8RGJgJ0Y8RsIvHEQU7k/edit#slide=id.p
Пропозал для локалезависимого отображения списков переходит на stage 4.
Пропозал: Intl.DateTimeFormat dateStyle/timeStyle (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1USMb1b_1zDMAlw3Aw5k9DpqZsZ3NS_q9gOyhRCQc-qg
Локалезависимое форматирование времени и даты также переходит на stage 4
Нормативное изменение: Fix Function.toString for builtins
Не достигло консенсуса, обсуждение продолжится в четверг (если хватит времени)
Пропозал: WeakRefs (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1NYhEELzOnhJGU7inKz0r0TrEa0h33krr1nEb3X_ze5w
Слабые ссылки переходят на stage 4, а CleanupSome ответвляется в отдельный stage 2 пропзал.
Пропозал: Logical Assignment (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1rq448C-mzxWzBs6RTInczGTjs4xv5gQenDJY1fGogX0
Берёт stage 4.
Пропозал: Decorators (stage 2 обновление)
Слайды: <позже>
Тут всё сложно. Чемпионы выявили ограничения, которые не позволяют удовлетворить всем требованиям к декораторам. Были представлены эти ограничения, комитет в процессе поиска наиболее удачного решения.
Пропозал: Numeric Separator (stage 3 -> stage 4)
Слайды: https://docs.google.com/presentation/d/1rLT5m3d0yk2KMlka4KZKf2uz9oITdpfr6evAV_jaKcc
Наконец-то решены последние спорные вопросы, и пропозал (уже очень давно реализованный во всех браузерах) попадает на stage 4.
Пропозал: Slice notation (stage 1 -> stage 2)
Слайды: https://docs.google.com/presentation/d/1EBpiGuYn2ChDvcd67fpz6gGY14kO8VCuAKOhFMxOqEQ
Остаётся на stage 1. Некоторые делегаты не одобрили текущую версию предложения.
Пропозал: Temporal (stage 2 обновление)
Слайды: https://pipobscure.dev/slides/temporal-2020-07/
Ну тут всё хорошо. Общими усилиями (в том числе и вашими, дорогие читательи!) собирается нужный фидбек. Думаю, есть все шансы увидеть пропозал на stage 3 уже в этом году.
Пропозал: Import Conditions (stage 2 -> stage 3)
Слайды: https://docs.google.com/presentation/d/18THsm_ZAog70m0ZlEokRCfyrarMiA1yr6YDAvFXjVNU
Пропозал пока что не переходит на stage 3, но в целом, больших проблем нет. Ждём на stage 3 на следующих встречах TC39.
Пропозал: Intl.Segmenter (stage 2 -> stage 3)
Слайды: https://docs.google.com/presentation/d/1LOOt4WPvQdOK3banHkz1V8sdl8Z-7Z9jXBRRS9Ek8-M
Stage 3 взят.
Пропозал: Iterator Helpers (stage 2 обновление)
Слайды: https://docs.google.com/presentation/d/1YNLzi_ENRtxp5bjhXMUplQ0VIQBUFLyucbNFt_oaNgQ
В Firefox уже есть тестовая рабочая имплементация (можне даже найти её под флагом в
about:config 😉). Были определены ревьюеры для stage 3.Пропозал: .item() (stage 1 -> stage 2)
Слайды: https://docs.google.com/presentation/d/1N-oXRRKDA7patBA4HIYkzN67j1pbyOxuDZoYRvPFmuA
Stage 2 взят, определены ревьюеры для stage 3.
⚡️ новый пропозал await operations переходит на stage 1!
GitHub
GitHub - tc39/proposal-await.ops: Introduce await.all / await.race / await.allSettled / await.any to simplify the usage of Promises
Introduce await.all / await.race / await.allSettled / await.any to simplify the usage of Promises - tc39/proposal-await.ops
⚡️ новый пропозал Array.prototype.unique() берёт stage 1!
GitHub
GitHub - tc39/proposal-array-unique: ECMAScript proposal for Deduplicating method of Array
ECMAScript proposal for Deduplicating method of Array - GitHub - tc39/proposal-array-unique: ECMAScript proposal for Deduplicating method of Array