Полная и зрелая среда выполнения WebAssembly для PHP на основе Wasmer.
Простота в использовании : API wasmer имитирует стандартный API WebAssembly C.
Быстро : wasmer выполняет модули WebAssembly максимально быстро, близко к нативной скорости ,
Безопасно : все вызовы WebAssembly будут быстрыми, но, что более важно, полностью безопасными и изолированными.
Для установки библиотеки следуйте классической схеме:
git клон https://github.com/wasmerio/wasmer-phpcd wasmer-php/ext phpize ./configure --enable-wasmer делать сделать тестовую установку
Примечание. Wasmer пока не работает в Windows.
<?phpdeclare(strict_types=1);$engine = wasm_engine_new();$store = wasm_store_new($engine);$wasm = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'hello.wasm');$module = wasm_module_new($store, $wasm);function hello_callback() {echo 'Обратный вызов...' . PHP_EOL;echo '> Привет, мир!' . PHP_EOL; вернуть ноль;
}$functype = wasm_functype_new(new WasmVecValType(), new WasmVecValType());$func = wasm_func_new($store, $functype, 'hello_callback');wasm_functype_delete($functype);$extern = wasm_func_as_extern($func);$externs = новый WasmVecExtern([$extern]);$instance = wasm_instance_new($store, $module, $externs);wasm_func_delete($func);$exports = wasm_instance_exports($instance);$run = wasm_extern_as_func($exports[0]);wasm_module_delete($module);wasm_instance_delete($instance);$results = wasm_func_call($run, new WasmVecVal());wasm_store_delete($store);wasm_engine_delete($engine); <?phpdeclare(strict_types=1);use Wasm;require_once __DIR__.'/../vendor/autoload.php';$engine = WasmEngine::new();$store = WasmStore::new($engine);$ wasm = file_get_contents(__DIR__.DIRECTORY_SEPARATOR.'hello.wasm');$module = WasmModule::new($store, $wasm);функция hello_callback()
{echo 'Обратный вызов...'.PHP_EOL;echo '> Привет, мир!'.PHP_EOL;return null;
}$functype = WasmFunctype::new(new WasmVecValType(), new WasmVecValType());$func = WasmModuleFunc::new($store, $functype, 'hello_callback');$extern = $func->asExtern(); $externs = новый WasmVecExtern([$extern->inner()]);$instance = WasmModuleInstance::new($store, $module, $externs);$exports = $instance->exports();$run = $exports[0]->asFunc();$args = new WasmVecVal();$results = $run($args);В этом примере рассматривается самый простой вариант использования Wasm: мы берем модуль Wasm (в форме его текстового представления), создаем из него экземпляр, получаем экспортированную функцию и запускаем ее.
Вы можете просмотреть более сложные примеры в специальных каталогах:
Процедурный API
Объектно-ориентированный API
| Платформа | Архитектура | Статус |
|---|---|---|
| Линукс | amd64 | |
| Линукс | aarch64 | |
| Окна | amd64 | |
| Дарвин | amd64 | |
| Дарвин | aarch64 |
| PHP | Статус |
|---|---|
| 8.0 | |
| 7.4 | |
| 7.3 |
| Компилятор | Статус |
|---|---|
| Кранлифт | |
| ЛЛВМ | |
| Однопроходный |
| Двигатель | Статус |
|---|---|
| Родной | |
| ТОЧНО в срок | |
| Объектный файл |
| Объект | Статус |
|---|---|
| конфигурация | |
| двигатель | |
| магазин |
| Тип | Статус |
|---|---|
| вальтип | |
| тип функции | |
| глобальный тип | |
| тип таблицы | |
| тип памяти | |
| внешний тип | |
| тип импорта | |
| тип экспорта |
| Объект | Статус |
|---|---|
| вал | |
| рамка | |
| ловушка | |
| иностранный | |
| модуль | |
| функция | |
| глобальный | |
| стол | |
| память | |
| внешний | |
| пример |
| Особенность | Статус |
|---|---|
| ВАТ | |
| ВАСИ | |
| Кросс-компиляция |
Весь проект находится под лицензией MIT. Пожалуйста, прочтите файл LICENSE .