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

Новый способ эффективной интеграции языков программирования с автоматическим управлением памятью в WebAssembly

· 25 мин. чтения
Алон Закай

Недавняя статья о WebAssembly Garbage Collection (WasmGC) на высоком уровне объясняет, как предложение по сборке мусора (GC) направлено на улучшение поддержки языков со сборкой мусора в Wasm, что крайне важно в свете их популярности. В этой статье мы углубимся в технические детали того, как такие языки, как Java, Kotlin, Dart, Python и C#, могут быть портированы в Wasm. По сути, существуют два основных подхода:

Защита целостности управления потоком в V8

· 8 мин. чтения
Стивен Рёттгер

Защита целостности управления потоком (Control-flow integrity, CFI) — это функция безопасности, направленная на предотвращение атак, связанных с захватом управления потоком. Идея заключается в том, что даже если злоумышленнику удается повредить память процесса, дополнительные проверки целостности могут предотвратить выполнение произвольного кода. В этом посте мы обсуждаем нашу работу по внедрению CFI в V8.

Ускорение создания снимков кучи V8

· 10 мин. чтения
Хосе Дапена Паз

Этот блог-пост подготовлен Хосе Дапена Пазом (Igalia) при содействии Джейсона Уильямса (Bloomberg), Эшли Клеймора (Bloomberg), Роба Пальмера (Bloomberg), Джойи Чюн (Igalia) и Шу-Юй Гуо (Google).

В этом посте о снимках кучи V8 я расскажу о некоторых проблемах производительности, обнаруженных инженерами Bloomberg, и о том, как мы их решили, чтобы сделать анализ памяти JavaScript быстрее, чем когда-либо.

Проблема

Инженеры Bloomberg работали над диагностикой утечки памяти в JavaScript-приложении. Оно завершалось с ошибками Out-Of-Memory. Для тестируемого приложения предел кучи V8 был настроен примерно на 1400 МБ. Обычно сборщик мусора V8 должен быть способен удерживать использование кучи ниже этого предела, поэтому сбои указывали на вероятную утечку.

Вызовы хвостов WebAssembly

· 8 мин. чтения
Тибо Мишо, Томас Лайвли

Мы внедряем вызовы хвостов WebAssembly в V8 v11.2! В этом посте мы кратко рассмотрим это предложение, покажем интересный пример использования копрограмм C++ с Emscripten и продемонстрируем, как V8 обрабатывает вызовы хвостов внутри.

Что такое оптимизация хвостовых вызовов?

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

Это особенно полезно для рекурсивных функций. Например, рассмотрим эту C-функцию, которая суммирует элементы связного списка:

int sum(List* list, int acc) {
if (list == nullptr) return acc;
return sum(list->next, acc + list->val);
}

При обычном вызове это потребляет 𝒪(n) памяти стека: каждый элемент списка добавляет новый фрейм в стеке вызовов. С достаточно длинным списком это может быстро привести к переполнению стека. Заменяя вызов на переход, оптимизация хвостовых вызовов фактически превращает эту рекурсивную функцию в цикл, который использует 𝒪(1) памяти стека:

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

· 13 мин. чтения
Антон Бикинеев и Михаэль Липпаутц ([@mlippautz](https://twitter.com/mlippautz)), исследователи дизассемблирования

Это абсолютно глупо иметь 64-битные указатели, когда я компилирую программу, использующую менее 4 гигабайт оперативной памяти. Когда такие значения указателей оказываются внутри структуры, они не только занимают половину памяти, но и фактически используют лишь половину кеша.

Дональд Кнут (2008)

Прекращение публикации блогов о релизах

· 3 мин. чтения
Шу-Юй Го ([@shu_](https://twitter.com/_shu))

Исторически для каждой новой ветки релиза V8 публиковался блог. Вы могли заметить, что с версии 9.9 блоги о релизах больше не публикуются. Начиная с версии 10.0, мы прекращаем публикацию блогов о релизах для каждой новой ветки. Но не волнуйтесь, вся информация, к которой вы привыкли через блоги о релизах, по-прежнему доступна! Читайте дальше, чтобы узнать, где можно найти эту информацию в будущем.

Модификация временной безопасности памяти в C++

· 10 мин. чтения
Антон Бикинеев, Михаэль Липпаутц ([@mlippautz](https://twitter.com/mlippautz)), Ханнес Пайер ([@PayerHannes](https://twitter.com/PayerHannes))
примечание

Примечание: Этот пост был первоначально опубликован в Google Security Blog.

Безопасность памяти в Chrome — это постоянные усилия по защите наших пользователей. Мы постоянно экспериментируем с различными технологиями, чтобы опередить злоумышленников. В этом духе эта публикация рассказывает о нашем опыте использования технологий сканирования кучи для улучшения безопасности памяти в C++.

Более быстрая инициализация экземпляров с новыми функциями классов

· 11 мин. чтения
[Joyee Cheung](https://twitter.com/JoyeeCheung), инициализатор экземпляров

Классовые поля были внедрены в V8 начиная с версии v7.2, а приватные методы классов — с версии v8.4. После того как предложения достигли этапа 4 в 2021 году, началась работа по улучшению поддержки новых функций классов в V8. До этого существовало две основные проблемы, влияющие на их принятие:

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

· 3 мин. чтения
Ингвар Степанян ([@RReverser](https://twitter.com/RReverser)), на его 99%

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

Библиотека Oilpan

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

Хотя название этой публикации может предположить углубление в сборник книг о масляных поддонах — тема, которая, учитывая строительные нормы для поддонов, оказалась неожиданно богатой литературой — мы вместо этого взглянем немного ближе на Oilpan, сборщик мусора для C++, который интегрирован в V8 как библиотека с версии V8 v9.4.