WASI¶
Стабильность: 1 – Экспериментальная
Фича изменяется и не допускается флагом командной строки. Может быть изменена или удалена в последующих версиях.
API WASI предоставляет реализацию спецификации WebAssembly System Interface. WASI предоставляет изолированным приложениям WebAssembly доступ к базовой операционной системе через набор POSIX-подобных функций.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Чтобы выполнить описанный выше пример, создайте новый файл WebAssembly в текстовом формате с именем demo.wat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
Используйте wabt для компиляции .wat в .wasm.
1 | |
Для запуска этого примера необходим аргумент CLI --experimental-wasi-unstable-preview1.
Класс: WASI¶
Класс WASI предоставляет API системных вызовов WASI и дополнительные удобные методы для работы с приложениями на базе WASI. Каждый экземпляр WASI представляет собой отдельную среду "песочницы". В целях безопасности каждый экземпляр WASI должен иметь свои аргументы командной строки, переменные среды и структуру каталога песочницы, настроенные явным образом.
новый WASI([опции])¶
options<Object>args<Array>Массив строк, которые приложение WebAssembly будет воспринимать как аргументы командной строки. Первый аргумент - это виртуальный путь к самой команде WASI. По умолчанию:[].env<Object>Объект, подобныйprocess.env, который приложение WebAssembly будет воспринимать как свое окружение. По умолчанию:{}.preopens<Object>Этот объект представляет структуру каталогов "песочницы" приложения WebAssembly. Строковые ключиpreopensрассматриваются как каталоги внутри песочницы. Соответствующие значения вpreopens- это реальные пути к этим директориям на хост-машине.returnOnExit<boolean>По умолчанию приложения WASI завершают процесс Node.js с помощью функции__wasi_proc_exit(). Установка этой опции вtrueзаставляетwasi.start()возвращать код выхода, а не завершать процесс. По умолчанию:false.stdin<integer>Дескриптор файла, используемый в качестве стандартного ввода в приложении WebAssembly. По умолчанию:0.stdout<integer>Дескриптор файла, используемый в качестве стандартного вывода в приложении WebAssembly. По умолчанию:1.stderr<integer>Дескриптор файла, используемый в качестве стандартной ошибки в приложении WebAssembly. По умолчанию:2.version<string>Запрашиваемая версия WASI. В настоящее время поддерживаются только версииunstableиpreview1. По умолчанию:preview1.
wasi.getImportObject()¶
Возвращает объект импорта, который может быть передан в WebAssembly.instantiate(), если не требуется никаких других импортов WASM, кроме тех, которые предоставляются WASI.
Если в конструктор была передана версия unstable, он вернет:
1 | |
Если в конструктор была передана версия preview1 или версия не была указана, он вернет:
1 | |
wasi.start(instance)¶
instance{WebAssembly.Instance}
Попытка начать выполнение instance как команды WASI, вызвав ее экспорт _start(). Если instance не содержит экспорта _start(), или если instance содержит экспорт _initialize(), то возникает исключение.
start() требует, чтобы instance экспортировала WebAssembly.Memory с именем memory. Если instance не экспортирует memory, то возникает исключение.
Если start() вызывается более одного раза, возникает исключение.
wasi.initialize(instance)¶
instance{WebAssembly.Instance}
Попытка инициализировать instance как реактор WASI, вызывая его экспорт _initialize(), если он присутствует. Если instance содержит экспорт _start(), то будет выброшено исключение.
initialize() требует, чтобы instance экспортировал WebAssembly.Memory с именем memory. Если instance не экспортирует memory, то возникает исключение.
Если initialize() вызывается более одного раза, возникает исключение.
wasi.wasiImport¶
wasiImport - это объект, реализующий API системных вызовов WASI. Этот объект должен быть передан как импорт wasi_snapshot_preview1 во время инстанцирования WebAssembly.Instance.