Вебня
4.66K subscribers
89 photos
2 videos
3 files
2.08K links
JS VMs, спецификации, пропозалы, встречи #TC39, #WebAssembly, #W3C, браузеры, нёрдство.
Download Telegram
Microsoft и Google вместе работают над тем, чтобы движок V8, используемый в Edge и Chrome, догнал в тестах JetStream 2 и Octane движок JavaScriptCore, используемый в WebKit. Для этого ведётся работа над промежуточным JIT-компилятором TurboProp, который по сути является заимствованием из архитектуры JavaScriptCore.

На скриншоте приведён тест двухфазовой компиляции проекта TypeScript. Сначала компилируется более старая (предыдущая) версия комилятора TypeScript (TSC), которая затем компилирует последнюю версию TSC. JavaScriptCore на этих тестах примерно в 1.32-1.42 раза быстрее V8.
Ой, что-то я пропустил новость о том, что месяц назад (25 февраля), вышел релиз Scala.js 1.0.0 (а 10 марта уже и патч 1.0.1 с багфиксами). Как и предполагалось ранее, RC2 стал финальной версией. Изменений довольно много, осовные из них:
- улучшенный интероп с JavaScript бибилиотеками
- улучшено портирование кода со Scala/JVM
- улучшенная производительность
Вышли macOS 10.15.4 и iOS 13.4, а с ними и Safari 13.1. По этому случаю в блоге WebKit вышла статья Full Third-Party Cookie Blocking And More о приватности в новой версии браузера.
Движок JavaScriptCore получил поддержку Promise.allSettled (ES2020), Numeric Separators (stage 3). Кроме того появилась поддержка фунций CSS фукций max, min и clamp, значения свойства display: contents. Ещё из нового: Picture-in-Picture, отключение TLS 1.0/1.1, поддержка ResizeObserver, MediaRecorder API и частичная реализация Web Animations API.
Также вышел LLVM 10.0.0. Нас конечно же больше всего интересует что там с #WebAssembly:
- Multivalue function signatures теперь поддерживаются в объектных файлах WebAssembly
- новая инструкция atomic.fence
- поддержка Thread-Local Storage (TLS)
- значительное улучшение поддержки SIMD

Кроме того, Clang 10.0.0 научился использовать wasm-opt для уменьшения размера, если тот есть в PATH.

Полный список релизных записей LLVM и тулинга:
https://llvm.org/releases/10.0.0/docs/ReleaseNotes.html
https://llvm.org/releases/10.0.0/tools/clang/docs/ReleaseNotes.html
https://llvm.org/releases/10.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html
https://llvm.org/releases/10.0.0/tools/lld/docs/ReleaseNotes.html
https://llvm.org/releases/10.0.0/tools/polly/docs/ReleaseNotes.html
https://llvm.org/releases/10.0.0/projects/libcxx/docs/ReleaseNotes.html
Все 3 находящиеся на phase 4 пропозала в #WebAssembly, а именно Non-trapping float-to-int conversions, Sign-extension operators и Multi-value, будут переведены на phase 5 (добавлены в стандарт) на встрече wasm WG 8го апреля.
Отличные новости! Microsoft передаёт движок ChakraCore в опенсорс коммьюнити. Инженеры компании будут выпускать патчи безопасности до 9 марта 2021, после чего надеются, что разработку подхватит коммьюнити.
Andy Wingo из Igalia опубликовал статью о Baseline #WebAssembly компиляторе в составе SpiderMonkey. Статья скорее вводная, она написана простям языком и объясняет самые основы, которые свойствены не только baseline компилятору из SpiderMonkey, но и V8, и JSC.
На блоге Google для веб-разработчиков опубликована статья об использовании Trusted Types для предотвращения DOM-based XSS атак. Фича должна была появиться в Chrome 82, релиз которого, как мы знаем, будет пропущен. Так что ждём теперь в Chrome 83.
Вышел TypeScript 3.9 Beta. В нём:
- улучшен вывод типов значений, обёрнутых в Promise combinators
- оператор типа awaited отложен на последующие релизы
- значительно увеличена скорость компиляции (например, для material-ui время компиляци уменьшилось на 40%)
- добавлена поддержка комментария // @ts-expect-error, который позволяет указать, что ошибка TypeScript ожидаема (например, для тестов)
- проверку на невызванную функцию теперь работают и в тернарных операторах
- улучшения поддержки редакторов и IDE
- поддержка автоимпорта CommonJS модулей
- улучшения рефакторинга
- несколько breaking changes (да, TypeScript не использует semver)
В Chrome обсуждается возможность включения #WebAssembly SIMD в origin trails для экспериментов на реальных приложениях. Эта фаза должна продлиться с Chrome 84 (изначально был запланирован на 4 августа, но график может поменяться) по Chrome 89, что займет примерно полгода.
Разработчики Edge и Chrome обновили внешний вид элементов форм в Chromium. Эти изменения можно включить флагом chrome://flags/#form-controls-refresh. На десктопах они появятся по умолчанию в Chrome 83, а на Android позже.

https://blog.chromium.org/2020/03/updates-to-form-controls-and-focus.html
В блоге 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, в котором появится поддержка публичных статических полей классов