C++ теперь официально поддерживает WASI: новый этап кроссплатформенной разработки
Комитет по стандартизации языка C++ (ISO/IEC JTC1/SC22/WG21) совместно с группой разработчиков LLVM и проектом WebAssembly анонсировали долгожданное событие: язык C++ получил официальную, документированную поддержку платформы WebAssembly System Interface (WASI). Это означает, что теперь разработчики могут писать системный код на C++, который будет работать не только на традиционных ОС (Windows, Linux, macOS), но и в среде WebAssembly за пределами браузера — на серверах, в IoT-устройствах и облачных edge-системах.
Что такое WASI и почему это важно для C++?
WASI (WebAssembly System Interface) — это стандартизированный системный интерфейс, который предоставляет WebAssembly-модулям доступ к файловой системе, сетевым сокетам, времени и другим ресурсам операционной системы. Ранее C++ мог компилироваться в WebAssembly, но взаимодействие с внешним миром было ограничено браузерным окружением. Теперь, с официальной поддержкой WASI, C++ получает полноценную изолированную среду для безопасного выполнения кода вне браузера.
- Безопасность: Модули C++ выполняются в песочнице с контролем доступа к ресурсам — идеально для многопользовательских сервисов.
- Портативность: Один бинарный файл .wasm работает на любой ОС, где есть среда выполнения WASI (Wasmer, Wasmtime, WAMR).
- Производительность: Компиляция C++ напрямую в нативный WebAssembly-код (через Clang/LLVM) даёт почти нативную скорость выполнения, без накладных расходов виртуальной машины.
Что изменилось в экосистеме C++?
Главное новшество — появление официального руководства по портированию кода C++ под WASI и включение поддержки WASI в основной репозиторий LLVM. Теперь любой проект на C++ может быть скомпилирован для WASI с помощью простого флага компилятора:
clang++ --target=wasm32-wasi -O3 my_program.cpp -o my_program.wasm
Кроме того, были обновлены стандартные библиотеки C++ (libc++, libc++abi) для корректной работы с системными вызовами WASI. Разработчикам больше не нужно вручную настраивать линковку с внешними библиотеками — всё работает «из коробки».
Где это уже применяется?
- Облачные вычисления: Запуск C++-микросервисов в изолированных WASI-контейнерах (например, в Fastly Compute@Edge или Cloudflare Workers с поддержкой WASI).
- Встраиваемые системы: Использование WASI для безопасного обновления прошивок IoT-устройств, написанных на C++.
- Научные расчёты: Перенос вычислительно ёмких модулей C++ (библиотеки линейной алгебры, симуляции) в WASI для кроссплатформенного запуска без перекомпиляции.
Что дальше?
В ближайших планах — полная поддержка многопоточности C++ в WASI (сейчас доступна только однопоточная модель) и интеграция с C++20/23 корутинами. Сообщество уже работает над адаптацией популярных библиотек (Boost, Qt, OpenCV) для компиляции под WASI. Следите за обновлениями на официальном сайте wasi.dev и в репозитории LLVM.
Если вы пишете на C++ и хоти