Перейти к основному содержимому

Релиз V8 версии 8.5

· 4 мин. чтения
Зейнеп Чанкера, отслеживающий некоторые Карты

Каждые шесть недель мы создаем новую ветку V8 в рамках нашего процесса релиза. Каждая версия отделяется от основной ветки Git V8 непосредственно перед этапом бета-релиза Chrome. Сегодня мы рады объявить о нашей новейшей ветке, V8 версии 8.5, которая находится в стадии бета до своего релиза вместе с Chrome 85 Stable через несколько недель. V8 v8.5 наполнен множеством полезных функций для разработчиков. Этот пост предоставляет предварительный обзор некоторых ключевых моментов в ожидании релиза.

Релиз V8 версии 8.4

· 4 мин. чтения
Камилло Бруни, наслаждающийся свежими булевыми значениями

Каждые шесть недель мы создаем новую ветку V8 в рамках нашего процесса релиза. Каждая версия создается из основной ветки Git V8 незадолго до достижения Chrome Beta. Сегодня мы рады объявить о нашей новой ветке V8 версия 8.4, которая будет находиться в бета-тестировании до ее выпуска вместе со стабильной версией Chrome 84 через несколько недель. В версии V8 v8.4 полно полезных функций для разработчиков. В этом посте представлен предварительный обзор некоторых ключевых моментов перед выпуском.

Высокопроизводительный сборщик мусора для C++

· 9 мин. чтения
Антон Бикинеев, Омер Катц ([@omerktz](https://twitter.com/omerktz)), и Михаэль Липпаутц ([@mlippautz](https://twitter.com/mlippautz)), эксперты по памяти C++

В прошлом мы уже писали статьи о сборке мусора для JavaScript, объектной модели документа (DOM) и о том, как все это реализовано и оптимизировано в V8. Однако не весь Chromium написан на JavaScript — большая часть браузера и его движка рендеринга Blink, где встроен V8, написаны на C++. JavaScript используется для взаимодействия с DOM, который затем обрабатывается рендерингом.

Понимание спецификации ECMAScript, часть 4

· 6 мин. чтения
[Марья Хёльтта](https://twitter.com/marjakh), зритель спекулятивной спецификации

Все эпизоды

Тем временем в других частях Веба

Джейсон Орендорф из Mozilla опубликовал отличный подробный анализ синтаксических особенностей JS. Несмотря на различия в деталях реализации, все движки JS сталкиваются с одинаковыми проблемами, связанными с этими особенностями.

До 4 ГБ памяти в WebAssembly

· 7 мин. чтения
Андреас Хаас, Якоб Куммероу и Алон Закай

Введение

Благодаря недавней работе в Chrome и Emscripten теперь вы можете использовать до 4 ГБ памяти в приложениях WebAssembly. Это больше предыдущего ограничения в 2 ГБ. Может показаться странным, что вообще было ограничение, ведь не требовалось никаких изменений, чтобы использовать 512 МБ или 1 ГБ памяти! - но оказывается, что в переходе от 2 ГБ к 4 ГБ происходят особенные вещи, как в браузере, так и в цепочке инструментов, о которых мы расскажем в этом посте.

Релиз V8 v8.3

· 3 мин. чтения
[Виктор Гомес](https://twitter.com/VictorBFG), безопасно работает из дома

Каждые шесть недель мы создаем новую ветвь V8 в рамках нашего процесса выпуска. Каждая версия ветвится от мастер-ветки Git сразу перед выходом Chrome Beta. Сегодня мы рады объявить о нашей новой ветви, V8 версии 8.3, которая находится в бета-версии до релиза совместно со стабильной версией Chrome 83 через несколько недель. V8 v8.3 наполнена множеством новшеств для разработчиков. В этом посте представлен обзор некоторых ключевых изменений.

Что находится в этом `.wasm`? Представляем: `wasm-decompile`

· 6 мин. чтения
Ваутер ван Оортмерссен ([@wvo](https://twitter.com/wvo))

У нас растет число компиляторов и других инструментов, которые генерируют или обрабатывают файлы .wasm, и иногда вам может захотеться посмотреть, что находится внутри. Возможно, вы разработчик такого инструмента, или, более непосредственно, программист, нацеленный на Wasm, и вам интересно, как выглядит сгенерированный код, например, с точки зрения производительности или по другим причинам.

Понимание спецификации ECMAScript, часть 3

· 11 мин. чтения
[Марья Хёлтта](https://twitter.com/marjakh), наблюдатель за спекулятивными спецификациями

Все эпизоды

В этом эпизоде мы углубимся в определение языка ECMAScript и его синтаксис. Если вы не знакомы с контекстно-свободными грамматиками, сейчас самое время изучить основы, так как спецификация использует контекстно-свободные грамматики для определения языка. Ознакомьтесь с главой о контекстно-свободных грамматиках в "Crafting Interpreters" для доступного введения или со страницей Википедии для более математического определения.

Сжатие указателей в V8

· 20 мин. чтения
Игорь Шелудько и Сантьяго Абой Соланес, *главные* сжиматели указателей

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

Понимание спецификации ECMAScript, часть 2

· 10 мин. чтения
[Марья Хёльтта](https://twitter.com/marjakh), наблюдатель за спекулятивной спецификацией

Давайте ещё немного попрактикуемся в наших замечательных навыках чтения спецификации. Если вы ещё не посмотрели предыдущий эпизод, сейчас самое время это сделать!

Все эпизоды

Готовы ко второй части?

Весёлый способ узнать спецификацию — начать с функции JavaScript, о которой мы знаем, и узнать, как она описана.

Внимание! Этот эпизод содержит скопированные алгоритмы из спецификации ECMAScript состоянием на февраль 2020 года. Они со временем устареют.

Мы знаем, что свойства ищутся в цепочке прототипов: если объект не имеет свойства, которое мы пытаемся считать, мы поднимаемся по цепочке прототипов, пока не найдем его (или пока не найдем объект, у которого больше нет прототипа).

Например:

const o1 = { foo: 99 };
const o2 = {};
Object.setPrototypeOf(o2, o1);
o2.foo;
// → 99

Где определена проходка по прототипу?

Попробуем найти, где определено такое поведение. Хорошее место для начала — это список внутренних методов объекта.

Есть как [[GetOwnProperty]], так и [[Get]] — нас интересует версия, которая не ограничена только собственными свойствами, поэтому мы выбираем [[Get]].

К сожалению, тип спецификации описателя свойства также имеет поле [[Get]], поэтому при просмотре спецификации для [[Get]] нам нужно тщательно различать два независимых использования.