WebAssembly

Формат программ для браузера, который выполняется почти со скоростью обычных приложений: так в веб попадают тяжелые программы на C++ и Rust.

WebAssembly (сокращенно Wasm) — компактный двоичный формат программ, который браузеры выполняют почти так же быстро, как обычные программы на компьютере. Код пишут не на нем напрямую, а на C, C++, Rust, Go или других языках и затем компилируют в WebAssembly. Так в браузер переносят задачи, для которых JavaScript медленен: графические редакторы, обработку видео, сложные вычисления.

История и статус

Первая версия заработала во всех основных браузерах в 2017 году, а в 2019-м WebAssembly стал официальной рекомендацией W3C — четвертым языком веба после HTML, CSS и JavaScript. С тех пор формат дополняют: потоки, векторные вычисления, сборка мусора для языков вроде Kotlin и Java.

Как это работает

  1. Программу на C++ или Rust компилируют в файл .wasm.
  2. Страница загружает этот файл вместе с обычным JavaScript.
  3. Браузер проверяет код и переводит его в машинные команды процессора.
  4. JavaScript вызывает функции из WebAssembly и получает результат.

Код выполняется в той же изолированной «песочнице», что и JavaScript: у него нет прямого доступа к файлам и устройствам компьютера, поэтому формат безопасен для веба.

Где используется

  • Графические редакторы — движок Figma написан на C++ и работает в браузере через WebAssembly.
  • Тяжелые настольные программы в вебе — веб-версии AutoCAD и Photoshop используют WebAssembly для своего ядра.
  • Обработка медиа — конвертация видео и изображений прямо в браузере, без загрузки файлов на сервер.
  • Вычисления на устройстве — шифрование, сжатие, распознавание, запуск небольших моделей машинного обучения.
  • Вне браузера — стандарт WASI позволяет запускать WebAssembly на серверах как легкую и изолированную альтернативу контейнерам.

Чего WebAssembly не делает

Он не заменяет JavaScript. У WebAssembly нет прямого доступа к DOM, поэтому кнопки, формы и логику интерфейса по-прежнему пишут на JavaScript, а WebAssembly берет на себя вычислительное ядро. Для обычного сайта или личного кабинета он не нужен — его выбирают, когда в браузере требуется производительность настольного приложения или когда нужно перенести в веб уже существующую программу на C++ или Rust, не переписывая ее.