Дата публикации:Thu, 18 Sep 2025 06:55:13 +0300
Консорциум W3C объявил о готовности спецификации, стандартизирующей промежуточный код WebAssembly 3.0 и связанный с ним API, позволяющий создавать высокопроизводительные приложения, переносимые между браузерами и аппаратными платформами. WebAssembly предоставляет не зависящий от браузера универсальный низкоуровневый промежуточный код для выполнения приложений, скомпилированных из различных языков программирования.
Технология WebAssembly может применяться для выполнения в браузере задач, требующих высокой производительности, например, кодирования видео, обработки звука, манипуляции с графикой и 3D, разработки игр, криптографических операций и математических вычислений через организацию выполнения в браузере кода, написанного на компилируемых языках, таких как C/C++. Благодаря задействованию JIT для WebAssembly можно добиться уровня производительности близкого к нативному коду.
Среди основных задач WebAssembly выделяется обеспечение переносимости, предсказуемость поведения и идентичности выполнения кода на разных платформах. WebAssembly не ограничивается браузерами и также продвигается в качестве универсальной платформы для безопасного выполнения кода в любых инфраструктурах, операционных системах и устройствах.
Доступны следующие спецификации:
- 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 вне браузеров и предоставления доступа к таким ресурсам, как файлы, сетевые соединения, генератор псевдослучайных чисел и системные часы.
- Реализована поддержка 64-разрядного адресного пространства. Для адресации памяти теперь может применяться тип i64, а не только i32, что расширяет доступное для приложений адресное пространство с 4 ГБ до 16 ЕБ (при выполнении в браузере выставлено ограничение в 16 ГБ). Предоставлена возможность одновременного использования в одном WebAssembly-модуле нескольких объектов памяти и работы с разными адресными пространствами. Среди прочего, возможно копирование данных между разными экземплярами объектов памяти, размещёнными в разных адресных пространствах. Добавлена поддержка сборки мусора. Помимо ранее доступной линейной памяти предложен отдельный тип хранилища, автоматически управляемый при помощи сборщика мусора. Компилятор теперь может использовать отдельные структуры данных, массивы и переменные, за выделение памяти и управление жизненным циклом которых отвечает WebAssembly. Добавлена поддержка типизированных ссылок, которые могут описывать точную структуру значения, на которое указывает ссылка, что позволяет избежать дополнительных проверок во время выполнения. Поддерживаются подтипы, рекурсия типов и возможность безопасного использования ссылок на функции, не требующих проверок типов и границ во время выполнения. Добавлена поддержка хвостовых вызовов (Tail call), при которых текущая функция сразу завершает выполнение после вызова другой функции, не расходуя место в стеке. Добавлена поддержка обработки исключений. Добавлена поддержка "ослабленных" (relaxed) векторных SIMD-инструкций, позволяющих добиться более высокой производительности за счёт отказа от строгого соблюдения семантики на всех аппаратных платформах. Добавлена поддержка детерминированного профиля выполнения, который определяет не зависящее от текущей платформы поведение для инструкций, результаты выполнения которых могут отличаться на разных платформах (операции с плавающей запятой, возвращение значения NaN, ослабленные векторные инструкции). При выборе данного профиля Wasm обеспечивает детерминированное поведение, воспроизводимость и переносимость. Добавлен синтаксис для создания собственных аннотаций, позволяющих прикрепить дополнительную информацию к коду WebAssembly. Ранее поддержка пользовательских секций, позволяющих хранить произвольную информацию, имелась в бинарном формате WebAssembly, но отсутствовала в текстовом формате WebAssembly. Теперь есть возможность добавлять эту информацию в читаемом и редактируемом виде. В JavaScript API добавлены встроенные функции для работы со строками. Ранее строки JavaScript можно было передавать в WebAssembly только как внешние ссылки, а теперь можно напрямую обращаться к строкам и манипулировать ими внутри WebAssembly.
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=63899