HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>WebAssembly - портируемый бинарный формат. Это значит, что один и тот же файл может быть запущен везде. Но каждая платформа, на которой мы захотим запускать этот самый "один и тот же файл", должна уметь выполнять Wasm-код - и делать это максимально быстро и максимально безопасно.</p>
1 <p>WebAssembly - портируемый бинарный формат. Это значит, что один и тот же файл может быть запущен везде. Но каждая платформа, на которой мы захотим запускать этот самый "один и тот же файл", должна уметь выполнять Wasm-код - и делать это максимально быстро и максимально безопасно.</p>
2 <p>Wasmer - это среда исполнения WebAssembly, написанная на Rust. И среда эта - встраиваемая. Она может быть включена в состав программ на Rust, а ещё её можно подключить из других языков: PHP (<a>php-ext-wasm</a>), Python (<a>PyPI:wasmer</a>), Ruby (<a>Gem:wasmer</a>) и других.</p>
2 <p>Wasmer - это среда исполнения WebAssembly, написанная на Rust. И среда эта - встраиваемая. Она может быть включена в состав программ на Rust, а ещё её можно подключить из других языков: PHP (<a>php-ext-wasm</a>), Python (<a>PyPI:wasmer</a>), Ruby (<a>Gem:wasmer</a>) и других.</p>
3 <p>Wasmer полностью сфокусирован на запуске модулей WebAssembly на стороне сервера. Мы начинали с запуска сгенерированных с помощью Emscripten модулей, но постепенно добавляли поддержку других ABI (application binary interface, двоичный интерфейс приложений) - WASI, Wascap и так далее.</p>
3 <p>Wasmer полностью сфокусирован на запуске модулей WebAssembly на стороне сервера. Мы начинали с запуска сгенерированных с помощью Emscripten модулей, но постепенно добавляли поддержку других ABI (application binary interface, двоичный интерфейс приложений) - WASI, Wascap и так далее.</p>
4 <p>Вы можете запускать разные программы с каждым ABI, например, Nginx (Emscripten) и Cowsay (WASI).</p>
4 <p>Вы можете запускать разные программы с каждым ABI, например, Nginx (Emscripten) и Cowsay (WASI).</p>
5 <p>Со временем мы поняли, что среда исполнения выполняла много проверок перед запуском экземпляра приложения, чтобы убедиться, что модуль совместим с определенным ABI (Emscripen или WASI). Это означает проверку соответствия импортов и экспортов модуля ожиданиям среды. Например, речь идёт о проверке сигнатур функций или совпадении глобальных типов.</p>
5 <p>Со временем мы поняли, что среда исполнения выполняла много проверок перед запуском экземпляра приложения, чтобы убедиться, что модуль совместим с определенным ABI (Emscripen или WASI). Это означает проверку соответствия импортов и экспортов модуля ожиданиям среды. Например, речь идёт о проверке сигнатур функций или совпадении глобальных типов.</p>
6 <p>Оказывается, эти проверки важны не только потому, что позволяют убедиться в совместимости модуля со средой исполнения. Они также полезны тем, что позволяют убедиться в совместимости модуля с конкретным API.</p>
6 <p>Оказывается, эти проверки важны не только потому, что позволяют убедиться в совместимости модуля со средой исполнения. Они также полезны тем, что позволяют убедиться в совместимости модуля с конкретным API.</p>
7 <p>Это может быть ключом к созданию экосистемы плагинов для любой программы, использующей WebAssembly как часть системы плагинов, в которой каждый модуль должен быть совместимым с определённым интерфейсом, например, с заголовочными файлами в C.</p>
7 <p>Это может быть ключом к созданию экосистемы плагинов для любой программы, использующей WebAssembly как часть системы плагинов, в которой каждый модуль должен быть совместимым с определённым интерфейсом, например, с заголовочными файлами в C.</p>
8 <p>С помощью интерфейсов WebAssembly и WAPM (<a>WebAssembly Package Manager</a>) вы можете легко использовать всю экосистему WAPM для создания, верификации и распространения плагинов.</p>
8 <p>С помощью интерфейсов WebAssembly и WAPM (<a>WebAssembly Package Manager</a>) вы можете легко использовать всю экосистему WAPM для создания, верификации и распространения плагинов.</p>
9 <p>Поэтому мы решили поработать над способами проверки и<a>предложить их как стандарт определения наборов импортов и экспортов</a>, которые должны быть в модуле.</p>
9 <p>Поэтому мы решили поработать над способами проверки и<a>предложить их как стандарт определения наборов импортов и экспортов</a>, которые должны быть в модуле.</p>
10 <h2>Содержание</h2>
10 <h2>Содержание</h2>
11 <ul><li><a>Покажите мне интерфейсы Wasm</a></li>
11 <ul><li><a>Покажите мне интерфейсы Wasm</a></li>
12 <li><a>Как использовать интерфейсы Wasm</a></li>
12 <li><a>Как использовать интерфейсы Wasm</a></li>
13 <li><a>Ручная проверка интерфейса модуля</a></li>
13 <li><a>Ручная проверка интерфейса модуля</a></li>
14 <li><a>Автоматическая проверка интерфейсов для модуля с помощью WAPM</a></li>
14 <li><a>Автоматическая проверка интерфейсов для модуля с помощью WAPM</a></li>
15 <li><a>Как создать новый интерфейс с помощью WAPM</a></li>
15 <li><a>Как создать новый интерфейс с помощью WAPM</a></li>
16 </ul><h2>Покажите мне интерфейсы Wasm</h2>
16 </ul><h2>Покажите мне интерфейсы Wasm</h2>
17 <p>Интерфейсы WebAssembly созданы под влияением ЛИСП-подобного текстового формата Wasm. Мы намеренно настаивали, чтобы формат не зависел от будущих предложений, так как хотели, чтобы интерфейсы были близки к внутренним форматам Wasm (только четыре типа: i32, i64, f32, f64).</p>
17 <p>Интерфейсы WebAssembly созданы под влияением ЛИСП-подобного текстового формата Wasm. Мы намеренно настаивали, чтобы формат не зависел от будущих предложений, так как хотели, чтобы интерфейсы были близки к внутренним форматам Wasm (только четыре типа: i32, i64, f32, f64).</p>
18 <p>Ниже представлены интерфейсы WebAssembly для WASI:</p>
18 <p>Ниже представлены интерфейсы WebAssembly для WASI:</p>
19 <p>Это значит, что модуль, в котором реализуется интерфейс WASI, должен быть совместимым с представленными сигнатурами.</p>
19 <p>Это значит, что модуль, в котором реализуется интерфейс WASI, должен быть совместимым с представленными сигнатурами.</p>
20 <h2>Как использовать интерфейсы Wasm</h2>
20 <h2>Как использовать интерфейсы Wasm</h2>
21 <p>Некоторые проекты уже используют представленный синтаксис для определения модулей WebAssembly. Пионером интеграции интерфейсов Wasm стал WAPM.</p>
21 <p>Некоторые проекты уже используют представленный синтаксис для определения модулей WebAssembly. Пионером интеграции интерфейсов Wasm стал WAPM.</p>
22 <p>Если вы используете<a>wapm cli</a>, модули будут автоматически проверяться с помощью имеющегося интерфейса перед публикацией в реестре. Так мы убеждаемся в совместимости новых модулей с ABI, которые они призваны реализовывать.</p>
22 <p>Если вы используете<a>wapm cli</a>, модули будут автоматически проверяться с помощью имеющегося интерфейса перед публикацией в реестре. Так мы убеждаемся в совместимости новых модулей с ABI, которые они призваны реализовывать.</p>
23 <p>В настоящее время в WAPM доступны такие интерфейсы:</p>
23 <p>В настоящее время в WAPM доступны такие интерфейсы:</p>
24 <ul><li><a>WASI</a>. Это модульный системный интерфейс Wasm (WASI - WebAssembly System Interface). Он сфокусирован на безопасности и портативности.</li>
24 <ul><li><a>WASI</a>. Это модульный системный интерфейс Wasm (WASI - WebAssembly System Interface). Он сфокусирован на безопасности и портативности.</li>
25 <li><a>Wascap</a>. Это набор стандартов и соглашений, которые заполняют пробел в облачной среде модулей Wasm.</li>
25 <li><a>Wascap</a>. Это набор стандартов и соглашений, которые заполняют пробел в облачной среде модулей Wasm.</li>
26 </ul><h2>Ручная проверка интерфейса модуля</h2>
26 </ul><h2>Ручная проверка интерфейса модуля</h2>
27 <p>Когда вы используете WAPM и поле interfaces в кофигурациях, мы проверяем модуль на совместимость с интерфейсом. Также мы создали бинарный файл wasm-interface, который доступен на<a>WAPM</a>:</p>
27 <p>Когда вы используете WAPM и поле interfaces в кофигурациях, мы проверяем модуль на совместимость с интерфейсом. Также мы создали бинарный файл wasm-interface, который доступен на<a>WAPM</a>:</p>
28 <h2>Автоматическая проверка интерфейсов для модуля с помощью WAPM</h2>
28 <h2>Автоматическая проверка интерфейсов для модуля с помощью WAPM</h2>
29 <p>Публиковать модули для WASI или Wascap очень просто. Убедитесь, что используете последнюю версию wasmer и wapm с помощью команды wasmer self-update.</p>
29 <p>Публиковать модули для WASI или Wascap очень просто. Убедитесь, что используете последнюю версию wasmer и wapm с помощью команды wasmer self-update.</p>
30 <p>Отредактируйте файл wapm.toml и добавьте секцию [module.interfaces]:</p>
30 <p>Отредактируйте файл wapm.toml и добавьте секцию [module.interfaces]:</p>
31 <p>Как только вы добавите новый интерфейс в модуль и опубликуете его на WAPM, он появится в UI. Смотрите тег WASI рядом с названием.</p>
31 <p>Как только вы добавите новый интерфейс в модуль и опубликуете его на WAPM, он появится в UI. Смотрите тег WASI рядом с названием.</p>
32 <h2>Как создать новый интерфейс с помощью WAPM</h2>
32 <h2>Как создать новый интерфейс с помощью WAPM</h2>
33 <p>Скоро каждый желающий сможет создавать новые интерфейсы WebAssembly на WAPM. Мы решили начать с ручного создания новых интерфейсов, чтобы ускорить итерации при необходимости небольших изменений синтаксиса.</p>
33 <p>Скоро каждый желающий сможет создавать новые интерфейсы WebAssembly на WAPM. Мы решили начать с ручного создания новых интерфейсов, чтобы ускорить итерации при необходимости небольших изменений синтаксиса.</p>
34 <p><em>Адаптированный перевод статьи<a>Introducing WebAssembly Interfaces</a>by Syrus Akbary. Мнение автора оригинальной публикации может не совпадать с мнением администрации "Хекслета".</em></p>
34 <p><em>Адаптированный перевод статьи<a>Introducing WebAssembly Interfaces</a>by Syrus Akbary. Мнение автора оригинальной публикации может не совпадать с мнением администрации "Хекслета".</em></p>