Вебня
4.69K subscribers
89 photos
2 videos
3 files
2.08K links
JS VMs, спецификации, пропозалы, встречи #TC39, #WebAssembly, #W3C, браузеры, нёрдство.
Download Telegram
В блоге V8 вышла статья о сжатии указателей в движке. Вместо 64-битных указателей используются отступы в 32 байта, компрессия и декомпрессия которых происходит при записи и чтении. Это позволило уменьшить размер кучи примерно на 40% на популярных сайтах, что в свою очередь уменьшило потребление памяти процесса рендерера на 20%. Кроме того, снизилась утилизация центрального процессора и время работы сборщика мусора.
Ross Kirsling, разработчик из Sony в команде WebKit, некоторое время назад в IRC канале TC39 вместе с другими делегатами обсуждал особености пункта 3.3 дополнения B в спецификации ECMA-262 — Block-Level Function Declarations Web Legacy Compatibility Semantics, которое браузеры должны имплементировать для сохранения совместимости со старыми сайтами. Обсуждения этой одной из самых непредсказуемых частей спецификации вылилось в статью, о которой уже успел написать Defront.
Росс Кирслинг — участвует в разработке спецификации ECMAScript — написал статью про самую ужасающую часть спецификации — "Tales from "Ecma's Crypt": Annex B.3.3".

В JavaScript всегда была возможность использовать блоки ( {} ) не только с операторами if, while, for, но и как обособленную синтаксическую конструкцию (standalone block). Спецификация не описывала ситуацию, когда внутри блока определялась функция, поэтому исторически в разных браузерах этот сценарий был реализован по-разному. Для исправления этой проблемы в спецификацию был добавлен раздел, который фактически говорит о том, что определение функции внутри блока должно себя вести одновременно как var и let. Например, вот этот код не в strict-режиме выведет в консоль 1:
var a = -1;
(function () {
const printOuter = () => console.log(a);
{
a = 1;
function a() {}
a = 2;
printOuter();
}
})();


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

#js #specification

https://dev.to/rkirsling/tales-from-ecma-s-crypt-annex-b-3-3-56go
🦠 Сегодня было принято окончательное решение о том, что 76я встреча #TC39, которая должна была пройти со 2 по 4 июня в чикагском офисе PayPal, также будет полностью удалённой из-за карантинных мер и угрозы распространения коронавирусной инфекции.

📅 Последующие запланированные встречи в данный момент остаются оффлайновыми.
21-23 июля — Redmond, Microsoft
22-24 сентября — Tokyo, Bloomberg
17-19 ноября — Budapest, IBM

👀 Также сегодня начнётся 75я встреча TC39, которая также будет полностью удалённой (изначально должна была пройти в Купиертино, Apple), на которой я как всегда буду присутствовать и расскажу всё из первых уст. Актуальную повестку дня можно посмотреть тут.
Доброе утро. Немного апрельских новостей по релизам.

- Python 2 🐍 вроде как всё 💀 (но сперва должна выйти еще версия 2.7.18, спасибо @bro0ke).
- Node.js 10 LTS 🐢🚀 в этом месяце переходит в статус Maintainance, а 21 апреля ожидается релиз Node.js 14.
- сегодня или завтра должен произойти feature freeze ES2020 🧊 и мастер должен будет стать ES2021 (но с этим есть некоторые проблемы, об этом сегодня позже в отчете о первом дне встречи TC39)
- релиза Chrome 82, который был намечен на 28 апреля, не будет 🦠
- 7 апреля выйдет Firefox 75, в котором появится поддержка публичных статических полей классов
Вышла третья часть из серии Understanding the ECMAScript spec о том, как читать и понимать спецификацию.

Предыдущие части:
- первая
- вторая
В блоге WebKit вышла статья обо всех нововведениях в Safari 13.1. Список внушительный:
- Pointer and Mouse Events on iPadO
- Web Animations API
- Async Clipboard API
- JavaScript Improvements
- ResizeObserver
- HTML enterkeyhint Attribute
- CSS Shadow Parts
- More CSS Additions
- Media APIs
- Subtitles and Captions
- WebRTC Legacy Audio and Proxy Support
- Performance Improvements
- Security Improvements
- Intelligent Tracking Prevention Updates
- Web Platform Quality Improvements
- Web Inspector Updates
- Customized AR QuickLook
Разработчики Chromium начинают откатывать изменения, связанные с SameSite. Указывается, что причина такого решения — COVID-19, и они хотят чтобы банки, онлайн магазины, сайты правительства и здравоохранения работали стабильно.
Node.js вводит некоторые изменения в календарь релизов. Это касается только веток 10 (фаза maintainance продлена) и 12 (релизы будут отложены). Изменения вводятся из-за пандемии COVID-19.
Гуглеры написали статью Ensure your website is available and usable for everyone during COVID-19. Кажется в ближайшее время компания собирается эксплуатировать трендовое инфекционное заболевание везде, где только можно.
Ещё в 2018 WHATWG заметили, что браузеры не следуют спецификации HTML и начинают исполнять <script defer> ещё до того, как завершен парсинг стилей. Единственным браузером, который соблюдал спецификацию, был старый дохромиумный Microsoft Edge. Firefox 76 (выйдет 5 мая) изменяет свое поведение, чтобы ожидать загрузку и парсинг стилей до начала исполнения отложенных скриптов. Проверить поведение уже можно в Firefox 76 Nightly.

Кстати, сегодня должен выйти Firefox 75.
Вышла версия 11.2 Beta браузера Samsung Internet для Android. Из нового:
- кастомизация UI
- новая фича приватности Block unwanted webpages
- улучшенный анти-трекинг
- опция для блокировки открытия приложений по ссылке
🥁Все главные результаты 75й встречи #TC39 в одном посте.

🚀 предложение import.meta перешло на stage 4 (слайды)
предложение Logical Assignment Operators переходит на stage 3 (слайды)
🐣 новое предложение Number.range & BigInt.range отправляется на stage 1 (слайды)
🐣 новое предложение Ergonomic brand checks for Private Fields отправляется на stage 1
🐣 новое предложение Compartments переходит на stage 1
🐣 новое ECMA402 предложение Intl.NumberFormat V3 переходит на stage 1 (слайды)

Не продвинулись на следующий stage:
- TypedArray stride parameter не переходит на stage 2 (слайды)
- this argument reflection of functions не переходит на stage 1 (слайды)
- Relax Hashbang Syntax не переходит на stage 1 (слайды)

Обновления предложений:
- Temporal (stage 2) (слайды)
- Decorators (stage 2) (слайды)
- Decimal (stage 1) (слайды)
- у Pattern Matching (stage 1) новые чемпионы
- для добавления новых типов Record и Tuple (stage 1) понадобились два новых пропозала RefCollection и Deep Path Properties in Record Literals, которые теперь stage 0 (слайды)

Принятые нормативные изменения в спецификацию:
- Surrogate pairs in RegExp capture groups
- SharedArrayBuffer станет опциональным для хостов, что делает многопоточной необязательным требованием к имплементациям
- опшнл чейнинг теперь можно будет использовать с приватными идентификаторами. При это было решено, что попытка o?.#field все еще должна приводить к выбросу исключения
- WeakRefs FinalizationRegistry API
- исправления Atomics.waitAsync
- Generically forbid extensions of all 402 methods
- Aligning atomics with wasm: allow it on non-shared ArrayBuffers

Другие презентации:
- отчёт секретариата TC39. Из интересной статистики: на стандарты TC39 (и в первую очередь спецификацию JavaScript, ECMA-262) приходится половина скачиваний всех стандартов Ecma; очень много посещений страниц у устаревших версий спецификиции — ES6/ES2015 и ES5.1
- отчёт редакторов ECMA-262. Была создана ветка для версии стандарта ES2020, опубликован релиз кандидат. Мастер ветка теперь 2021.
- отчёт редакторов ECMA-402. Была создана ветка для версии стандарта 2020 года и опубликован релиз кандидат. Мастер ветка теперь 2021.
- презентация от Google об изменении графиков релизов Chrome
- всем пропозалам, которые хотят получить stage 1, теперь обязательно нужно иметь публичный репозиторий
- Gus Caplan из OpenJS Foundation представил свой проект engine262, который представляет собой реализацию движка JavaScript на языке JavaScript и используется, например, мейнтейнерами Test262 suite
- (Remote) Plenary 2020 - 2021
- на прошлой встрече в процессы комитета были внесены некоторые изменения. По этим изменениям была представлена презентация.
Новый пропозал https://github.com/bmeck/proposal-from-import предлагает добавить синтаксис from "foo" import {bar}; для импорта модулей. Это поможет редакторам кода легко имплементировать подсказки автодополнения.
Вышел Firefox 75.

Из интересного:
- поддержка атрибута loading для тега <img>
- поддержка функций min(), max() и clamp() в CSS
- улучшения accessibility
- поддержа Public static class fields (stage 3)
- поддержка Intl.Locale (ECMA-402 выпуска 2020)
- улучшения Web Animations API

Списки изменений:
- для разработчиков
- для пользователей
- совместимости
Состоялся отложенный ранее выпуск Chrome 81. В нём появились:
- поддержка NFC (в рамках origin trial)
- Hit Test API для обнаружения позиций пересечения объектов WebXR и реального мира
- Badging API
- V8 получил поддержку Intl.DiaplayNames (stage 3).

Более подробно нововведения и изменения рассмотрены в статье на блоге Chromium.

Ещё статьи:
- What's new in Chrome DevTools (81)
- Chrome 81 deprecations & removals
- ChromeStatus.com updates for Chrome 81
- What's new in JavaScript in Chrome 81

Короткое обзорное видео: https://www.youtube.com/watch?v=ihjL0mcnlQs