wasmer php
1.1.0
Wasmer をベースにした PHP 用の完全で成熟した WebAssembly ランタイム。
使いやすさ: wasmer
API は標準の WebAssembly C API を模倣しています。
高速: wasmer
WebAssembly モジュールをネイティブ速度に近い速度で実行します。
安全: WebAssembly へのすべての呼び出しは高速ですが、さらに重要なのは、完全に安全でサンドボックス化されていることです。
ライブラリをインストールするには、従来の手順に従います。
git clone https://github.com/wasmerio/wasmer-phpcd wasmer-php/ext phpize ./configure --enable-wasmer 作る テストメイクをインストールする
注: Wasmer はまだ Windows では動作しません。
<?php destroy(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);関数 hello_callback() {エコー「折り返し電話中...」 PHP_EOL;echo '> Hello World!' 。 PHP_EOL;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 = 新しい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);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 '> 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);
この例では、最も基本的な Wasm の使用例を説明します。Wasm モジュール (テキスト表現形式) を取得し、そこからインスタンスを作成し、エクスポートされた関数を取得して実行します。
専用ディレクトリで、より高度な例を確認できます。
手続き型API
オブジェクト指向API
プラットフォーム | 建築 | 状態 |
---|---|---|
Linux | amd64 | |
Linux | aarch64 | |
窓 | amd64 | |
ダーウィン | amd64 | |
ダーウィン | aarch64 |
PHP | 状態 |
---|---|
8.0 | |
7.4 | |
7.3 |
コンパイラ | 状態 |
---|---|
クレーンリフト | |
LLVM | |
シングルパス |
エンジン | 状態 |
---|---|
ネイティブ | |
ジット | |
オブジェクトファイル |
物体 | 状態 |
---|---|
構成 | |
エンジン | |
店 |
タイプ | 状態 |
---|---|
ヴァルタイプ | |
関数タイプ | |
グローバルタイプ | |
テーブルタイプ | |
メモリタイプ | |
外部タイプ | |
インポートタイプ | |
エクスポートタイプ |
物体 | 状態 |
---|---|
ヴァル | |
フレーム | |
トラップ | |
外国 | |
モジュール | |
機能 | |
グローバル | |
テーブル | |
メモリ | |
外部 | |
実例 |
特徴 | 状態 |
---|---|
ワット | |
ワシ | |
クロスコンパイル |
プロジェクト全体は MIT ライセンスの下にあります。 LICENSE
ファイルをお読みください。