Un tiempo de ejecución de WebAssembly completo y maduro para PHP basado en Wasmer.
Fácil de usar : la API wasmer imita la API estándar de WebAssembly C,
Rápido : wasmer ejecuta los módulos WebAssembly lo más rápido posible, cerca de la velocidad nativa .
Seguro : todas las llamadas a WebAssembly serán rápidas, pero lo más importante, completamente seguras y protegidas.
Para instalar la biblioteca, siga el clásico:
clon de git https://github.com/wasmerio/wasmer-phpcd wasmer-php/ext phpizar ./configure --enable-wasmer hacer hacer pruebahacer instalar
Nota: Wasmer aún no funciona en Windows.
<?php declara(strict_types=1);$motor = wasm_engine_new();$tienda = wasm_store_new($motor);$wasm = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'hola.wasm');$módulo = wasm_module_new($tienda, $wasm);función hello_callback() {echo 'Devolución de llamada...'. PHP_EOL;echo '> ¡Hola mundo!' . PHP_EOL; devolver nulo;
}$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 = nuevo WasmVecExtern([$extern]);$instancia = wasm_instance_new($store, $module, $externs);wasm_func_delete($func);$exportaciones = wasm_instance_exports($instancia);$run = wasm_extern_as_func($exportaciones[0]);wasm_module_delete($módulo);wasm_instance_delete($instancia);$resultados = wasm_func_call($ejecutar, nuevo WasmVecVal());wasm_store_delete($tienda);wasm_engine_delete($motor); <?phpdeclare(strict_types=1);use Wasm;require_once __DIR__.'/../vendor/autoload.php';$motor = WasmEngine::new();$store = WasmStore::new($motor);$ wasm = file_get_contents(__DIR__.DIRECTORY_SEPARATOR.'hola.wasm');$module = WasmModule::new($tienda, $wasm);función hello_callback()
{echo 'Devolver la llamada...'.PHP_EOL;echo '> ¡Hola mundo!'.PHP_EOL;return null;
}$functype = WasmFunctype::new(new WasmVecValType(), new WasmVecValType());$func = WasmModuleFunc::new($store, $functype, 'hello_callback');$extern = $func->asExtern(); $externs = new WasmVecExtern([$extern->inner()]);$instancia = WasmModuleInstance::new($store, $module, $externs);$exportaciones = $instancia->exportaciones();$run = $exportaciones[0]->asFunc();$args = new WasmVecVal();$resultados = $ejecutar($argumentos);Este ejemplo cubre el caso de uso más básico de Wasm: tomamos un módulo Wasm (en su forma de representación de texto), creamos una instancia a partir de él, obtenemos una función exportada y la ejecutamos.
Puede ver ejemplos más avanzados en los directorios dedicados:
API de procedimiento
API orientada a objetos
| Plataforma | Arquitectura | Estado |
|---|---|---|
| linux | amd64 | |
| linux | aarch64 | |
| ventanas | amd64 | |
| Darwin | amd64 | |
| Darwin | aarch64 |
| PHP | Estado |
|---|---|
| 8.0 | |
| 7.4 | |
| 7.3 |
| Compilador | Estado |
|---|---|
| Grúa elevadora | |
| LVM | |
| paso único |
| Motor | Estado |
|---|---|
| Nativo | |
| JIT | |
| Archivo de objeto |
| Objeto | Estado |
|---|---|
| configuración | |
| motor | |
| almacenar |
| Tipo | Estado |
|---|---|
| tipo val | |
| tipo de función | |
| tipo global | |
| tipo de tabla | |
| tipo de memoria | |
| tipo externo | |
| tipo de importación | |
| tipo de exportación |
| Objeto | Estado |
|---|---|
| vale | |
| marco | |
| trampa | |
| extranjero | |
| módulo | |
| función | |
| global | |
| mesa | |
| memoria | |
| externo | |
| instancia |
| Característica | Estado |
|---|---|
| WAT | |
| WASI | |
| Compilación cruzada |
Todo el proyecto está bajo la Licencia MIT. Lea el archivo LICENSE .