Un runtime WebAssembly complet et mature pour PHP basé sur Wasmer.
Facile à utiliser : L'API wasmer imite l'API C WebAssembly standard,
Rapide : wasmer exécute les modules WebAssembly le plus rapidement possible, proche de la vitesse native ,
Sûr : tous les appels à WebAssembly seront rapides, mais plus important encore, totalement sûrs et en bac à sable.
Pour installer la bibliothèque, suivez le classique :
git clone https://github.com/wasmerio/wasmer-phpcd wasmer-php/ext phpize ./configure --enable-wasmer faire faire un test, faire une installation
Remarque : Wasmer ne fonctionne pas encore sous Windows.
<?php declare(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 'Rappel...' . PHP_EOL;echo '> Bonjour tout le monde !' . PHP_EOL ; renvoie null ;
}$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 = nouveau 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);fonction hello_callback()
{echo 'Rappel...'.PHP_EOL;echo '> Bonjour tout le monde !'.PHP_EOL;return null;
}$functype = WasmFunctype::new(new WasmVecValType(), new WasmVecValType());$func = WasmModuleFunc::new($store, $functype, 'hello_callback');$extern = $func->asExtern(); $externs = nouveau WasmVecExtern([$extern->inner()]);$instance = WasmModuleInstance::new($store, $module, $externs);$exports = $instance->exports();$run = $exports[0]->asFunc();$args = new WasmVecVal();$results = $run($args);Cet exemple couvre le cas d'utilisation le plus basique de Wasm : nous prenons un module Wasm (sous sa forme de représentation textuelle), créons une instance à partir de celui-ci, obtenons une fonction exportée et l'exécutons.
Vous pouvez parcourir des exemples plus avancés dans les répertoires dédiés :
API procédurale
API orientée objet
| Plate-forme | Architecture | Statut |
|---|---|---|
| Linux | amd64 | |
| Linux | aarch64 | |
| Fenêtres | amd64 | |
| Darwin | amd64 | |
| Darwin | aarch64 |
| PHP | Statut |
|---|---|
| 8.0 | |
| 7.4 | |
| 7.3 |
| Compilateur | Statut |
|---|---|
| Grue élévatrice | |
| LLVM | |
| Passe unique |
| Moteur | Statut |
|---|---|
| Indigène | |
| JIT | |
| Fichier objet |
| Objet | Statut |
|---|---|
| configuration | |
| moteur | |
| magasin |
| Taper | Statut |
|---|---|
| valtype | |
| type de fonction | |
| type global | |
| type de table | |
| type de mémoire | |
| type externe | |
| type d'importation | |
| type d'exportation |
| Objet | Statut |
|---|---|
| Val | |
| cadre | |
| piège | |
| étranger | |
| module | |
| fonction | |
| mondial | |
| tableau | |
| mémoire | |
| externe | |
| exemple |
| Fonctionnalité | Statut |
|---|---|
| QUOI | |
| WASI | |
| Compilation croisée |
L'ensemble du projet est sous licence MIT. Veuillez lire le fichier LICENSE .