17 сентября 2025 года консорциум W3C сообщил о выпуске спецификации, стандартизирующей промежуточный код WebAssembly 3.0 и связанный с ним API, позволяющий создавать высокопроизводительные приложения, переносимые между браузерами и аппаратными платформами.
WebAssembly (Wasm) — это современный бинарный формат инструкций, предназначенный для выполнения кода в веб‑браузерах с высокой производительностью. Например, кодирования видео, обработки звука, манипуляции с графикой и 3D, разработки игр, криптографических операций и математических вычислений через организацию выполнения в браузере кода, написанного на компилируемых языках, таких как C/C++.
Благодаря задействованию JIT для WebAssembly можно добиться уровня производительности близкого к нативному коду. Wasm был разработан как универсальная целевая платформа для компиляции высокоуровневых языков программирования, таких как C, C++, Rust и других. Это позволяет запускать приложения на веб‑страницах с почти нативной скоростью. Wasm поддерживается основными браузерами и позволяет разработчикам создавать сложные и ресурсоёмкие приложения без необходимости использования JavaScript в качестве единственного языка программирования.
Среди основных задач WebAssembly выделяется обеспечение переносимости, предсказуемость поведения и идентичности выполнения кода на разных платформах. WebAssembly не ограничивается браузерами и также продвигается в качестве универсальной платформы для безопасного выполнения кода в любых инфраструктурах, операционных системах и устройствах.
По информации OpenNET, доступны следующие спецификации Wasm:
WebAssembly Core — описывает низкоуровневую виртуальную машину для выполнения промежуточного кода WebAssembly. Связанные с WebAssembly ресурсы поставляются в формате ».wasm», схожем с файлами ».class» в Java и содержащем статические данные и сегменты кода для работы с этими данными;
WebAssembly JavaScript API — предоставляет API для интеграции с JavaScript. Позволяет получать значения и передавать параметры в функции WebAssembly. Выполнение WebAssembly соответствует модели безопасности JavaScript и всё взаимодействие с основной системой производится по аналогии с выполнением JavaScript‑кода;
WebAssembly Web API — определяет программный интерфейс на основе механизма Promise для запроса и выполнения ресурсов «.wasm». Формат ресурсов WebAssembly оптимизирован для начала выполнения, не дожидаясь полной загрузки файла, что позволяет повысить отзывчивость web‑приложений;
WASI API — определяет модульный системный интерфейс для запуска WebAssembly вне браузеров и предоставления доступа к таким ресурсам, как файлы, сетевые соединения, генератор псевдослучайных чисел и системные часы.
В новой версии стандарта WebAssembly значительно улучшена поддержка компиляции высокоуровневых языков. Например, реализована возможность компиляции в WebAssembly проектов на языках Java, OCaml, Scala, Kotlin, Scheme и Dart. Основные изменения в WebAssembly 3.0, по сравнению со второй версией стандарта:
реализована поддержка 64-разрядного адресного пространства. Для адресации памяти теперь может применяться тип i64, а не только i32, что расширяет доступное для приложений адресное пространство с 4 ГБ до 16 ЕБ (при выполнении в браузере выставлено ограничение в 16 ГБ);
предоставлена возможность одновременного использования в одном WebAssembly‑модуле нескольких объектов памяти и работы с разными адресными пространствами. Среди прочего, возможно копирование данных между разными экземплярами объектов памяти, размещёнными в разных адресных пространствах;
добавлена поддержка сборки мусора. Помимо ранее доступной линейной памяти предложен отдельный тип хранилища, автоматически управляемый при помощи сборщика мусора. Компилятор теперь может использовать отдельные структуры данных, массивы и переменные, за выделение памяти и управление жизненным циклом которых отвечает WebAssembly;
добавлена поддержка типизированных ссылок, которые могут описывать точную структуру значения, на которое указывает ссылка, что позволяет избежать дополнительных проверок во время выполнения. Поддерживаются подтипы, рекурсия типов и возможность безопасного использования ссылок на функции, не требующих проверок типов и границ во время выполнения;
добавлена поддержка хвостовых вызовов (Tail call), при которых текущая функция сразу завершает выполнение после вызова другой функции, не расходуя место в стеке;
добавлена поддержка обработки исключений;
добавлена поддержка «ослабленных» (relaxed) векторных SIMD‑инструкций, позволяющих добиться более высокой производительности за счёт отказа от строгого соблюдения семантики на всех аппаратных платформах;
добавлена поддержка детерминированного профиля выполнения, который определяет не зависящее от текущей платформы поведение для инструкций, результаты выполнения которых могут отличаться на разных платформах (операции с плавающей запятой, возвращение значения NaN, ослабленные векторные инструкции). При выборе данного профиля Wasm обеспечивает детерминированное поведение, воспроизводимость и переносимость;
добавлен синтаксис для создания собственных аннотаций, позволяющих прикрепить дополнительную информацию к коду WebAssembly. Ранее поддержка пользовательских секций, позволяющих хранить произвольную информацию, имелась в бинарном формате WebAssembly, но отсутствовала в текстовом формате WebAssembly. Теперь есть возможность добавлять эту информацию в читаемом и редактируемом виде;
в JavaScript API добавлены встроенные функции для работы со строками. Ранее строки JavaScript можно было передавать в WebAssembly только как внешние ссылки, а теперь можно напрямую обращаться к строкам и манипулировать ими внутри WebAssembly.
Источник: habr.com