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
.