Три года разработки и восемь лет ожидания. Консорциум W3C представил WebAssembly 3.0

Три года разработки и восемь лет ожидания. Консорциум W3C представил WebAssembly 3.0

Новый стандарт принес 64-битную память, сборщик мусора и другие важные функции.

image

Консорциум W3C объявил о готовности спецификации WebAssembly 3.0. Это первое масштабное обновление после выхода Wasm 2.0 три года назад, которое принесло поддержку векторных инструкций, работу с памятью, множественные возвращаемые значения и простые ссылочные типы. Теперь стандарт получил целый набор функций, разработка которых велась последние шесть–восемь лет.

Главное новшество — 64-битное адресное пространство . Если раньше приложения могли использовать до 4 ГБ памяти, то теперь — теоретически до 16 эксабайт. В браузерах действует ограничение на 16 ГБ, но для автономных систем это открывает путь к гораздо более крупным приложениям и массивам данных.

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

Одним из ключевых шагов стало внедрение сборщика мусора . Среда выполнения теперь может автоматически управлять памятью для структур и массивов. При этом стандарт не навязывает объектных моделей: компиляторы сами определяют их устройство, а Wasm отвечает лишь за выделение и освобождение памяти.

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

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

Производительность SIMD-инструкций улучшена за счёт «ослабленных» вариантов , поведение которых зависит от конкретного железа. Для критических задач введён детерминированный профиль , обеспечивающий одинаковые результаты вычислений на разных платформах.

Новый стандарт позволяет использовать аннотации в текстовом формате , аналогичные пользовательским секциям в бинарном виде. Это облегчает перенос дополнительной информации в удобочитаемом виде.

Для интеграции с JavaScript добавлена библиотека JS string builtins , позволяющая модулям напрямую работать со строками JS.

С новыми возможностями Wasm стал лучше подходить для компиляции высокоуровневых языков. Уже появились реализации для Java , OCaml , Scala , Kotlin , Scheme и Dart , которые активно используют GC-расширение.

Кроме того, Wasm 3.0 стал первым релизом, подготовленным с использованием SpecTec , нового инструментария для спецификаций. Это должно повысить надёжность и точность стандарта.

Поддержка Wasm 3.0 уже реализована в большинстве браузеров и движков, включая Wasmtime. Статус поддержки можно отслеживать на странице статуса Wasm .