Eine vollständige und ausgereifte WebAssembly-Laufzeitumgebung für PHP basierend auf Wasmer.
Einfach zu verwenden : Die wasmer -API ahmt die Standard-WebAssembly-C-API nach.
Schnell : wasmer führt die WebAssembly-Module so schnell wie möglich aus, nahe der nativen Geschwindigkeit .
Sicher : Alle Aufrufe von WebAssembly erfolgen schnell, aber was noch wichtiger ist, absolut sicher und in einer Sandbox.
Um die Bibliothek zu installieren, befolgen Sie die klassische Anleitung:
Git-Klon https://github.com/wasmerio/wasmer-phpcd wasmer-php/ext phpize ./configure --enable-wasmer machen testmake installieren
Hinweis: Wasmer funktioniert noch nicht unter Windows.
<?php define(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 'Rückruf...' . PHP_EOL;echo '> Hallo Welt!' . PHP_EOL;null zurückgeben;
}$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 = neu 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);function hello_callback()
{echo 'Rückruf...'.PHP_EOL;echo '> Hello World!'.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()]);$instance = WasmModuleInstance::new($store, $module, $externs);$exports = $instance->exports();$run = $exports[0]->asFunc();$args = new WasmVecVal();$results = $run($args);Dieses Beispiel deckt den grundlegendsten Wasm-Anwendungsfall ab: Wir nehmen ein Wasm-Modul (in seiner Textdarstellungsform), erstellen daraus eine Instanz, rufen eine exportierte Funktion ab und führen sie aus.
Weitere Beispiele für Fortgeschrittene finden Sie in den entsprechenden Verzeichnissen:
Prozedurale API
Objektorientierte API
| Plattform | Architektur | Status |
|---|---|---|
| Linux | amd64 | |
| Linux | aarch64 | |
| Windows | amd64 | |
| Darwin | amd64 | |
| Darwin | aarch64 |
| PHP | Status |
|---|---|
| 8,0 | |
| 7.4 | |
| 7.3 |
| Compiler | Status |
|---|---|
| Kranlift | |
| LLVM | |
| Singlepass |
| Motor | Status |
|---|---|
| Einheimisch | |
| JIT | |
| Objektdatei |
| Objekt | Status |
|---|---|
| config | |
| Motor | |
| speichern |
| Typ | Status |
|---|---|
| Valtyp | |
| Funktionstyp | |
| globaltype | |
| Tabellentyp | |
| Speichertyp | |
| externer Typ | |
| Importtyp | |
| Exporttyp |
| Objekt | Status |
|---|---|
| val | |
| rahmen | |
| fangen | |
| ausländisch | |
| Modul | |
| Funktion | |
| global | |
| Tisch | |
| Erinnerung | |
| extern | |
| Beispiel |
| Besonderheit | Status |
|---|---|
| WAS | |
| WASI | |
| Cross-Compilation |
Das gesamte Projekt steht unter der MIT-Lizenz. Bitte lesen Sie die LICENSE Datei.