From 85394c5613f1f52407020abab650fda6b9da91ad Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 23 Apr 2025 04:03:19 +0900 Subject: feat(blog/content): update post /posts/2023-10-02/compile-php-runtime-to-wasm/ --- .../2023-10-02/compile-php-runtime-to-wasm.dj | 30 ++++++ vhosts/blog/nuldoc.md | 104 --------------------- vhosts/blog/public/atom.xml | 4 +- .../compile-php-runtime-to-wasm/index.html | 36 +++++++ vhosts/blog/public/posts/atom.xml | 4 +- vhosts/blog/public/posts/index.html | 2 +- vhosts/blog/public/tags/php/atom.xml | 4 +- vhosts/blog/public/tags/php/index.html | 2 +- vhosts/blog/public/tags/wasm/atom.xml | 4 +- vhosts/blog/public/tags/wasm/index.html | 2 +- 10 files changed, 77 insertions(+), 115 deletions(-) delete mode 100644 vhosts/blog/nuldoc.md (limited to 'vhosts/blog') diff --git a/vhosts/blog/content/posts/2023-10-02/compile-php-runtime-to-wasm.dj b/vhosts/blog/content/posts/2023-10-02/compile-php-runtime-to-wasm.dj index da7438ab..0f74de70 100644 --- a/vhosts/blog/content/posts/2023-10-02/compile-php-runtime-to-wasm.dj +++ b/vhosts/blog/content/posts/2023-10-02/compile-php-runtime-to-wasm.dj @@ -11,6 +11,10 @@ tags = [ [[article.revisions]] date = "2023-10-02" remark = "公開" + +[[article.revisions]] +date = "2025-04-23" +remark = "fflush() の前に改行の出力が必要だった理由と正しい実装について追記" --- {#intro} # はじめに @@ -102,6 +106,32 @@ int EMSCRIPTEN_KEEPALIVE php_wasm_run(const char* code) { これにより、PHP コードの出力の後ろに余分な改行が追加されてしまう。 改行を出力せずともバッファを消費させる手段をご存知のかたはご教示願いたい。 +::: note +**2025-04-23 追記**: + +`fflush()` の前に改行の出力が必要だった理由が判明したので追記する。 +これは、`index.mjs` で標準出力・標準エラー出力へ出力する方法を指定せず、デフォルトの実装に任せているため。 +Emscripten のデフォルト実装では、改行コードを出力するまで出力内容がバッファリングされ、`fflush()` が機能しない。 + +デフォルトの出力方法は `index.mjs` の中で `PHPWasm()` を呼ぶとき、`stdout`・`stderr` というオプションを渡せば変更できる。 + +```javascript +const { ccall } = await PHPWasm({ + stdout: (c) => { + if (c === null) { + // flush the standard output. + } else { + // output c to the standard output. + } + }, +}); +``` + +`c` は `null` か 1バイト符号つき整数を取り、`null` が flush 要求を意味する。 + +記事末尾のリポジトリはすでにこの変更を適用済み。`stdout` や `stderr` の完全なサンプルはそちらを参照のこと。 +::: + {#compile-to-wasm} ## WebAssembly にコンパイルする diff --git a/vhosts/blog/nuldoc.md b/vhosts/blog/nuldoc.md deleted file mode 100644 index 9133ff88..00000000 --- a/vhosts/blog/nuldoc.md +++ /dev/null @@ -1,104 +0,0 @@ -# Posts - -## Meta Information - -``` -struct Revision { - date: string - remark: string -} - -struct PostMeta { - title: string - description: string - tags: string[] - revisions: Revision[] -} -``` - -## Elements - -table -tbody -td -tfoot -th -thead -tr -col -colgroup -caption - -blockquote -cite -q - -figure -img - -section -h -p - -ul -ol -li - -a -email - -time -kbd - -sub -sup - -dl -dt -dd - -summary -details - -del -ins - -br -hr - -ruby -rt - -note - -mark -s -strong - -code -filename -codeblock - -footnote -footnoteref - - -# Slides - -## Meta Information - -``` -struct Revision { - date: string - remark: string -} - -struct Slide { - title: string - event: string - talkType: string - link: string - tags: string[] - revisions: Revision[] -} -``` diff --git a/vhosts/blog/public/atom.xml b/vhosts/blog/public/atom.xml index c1c128f2..9711df67 100644 --- a/vhosts/blog/public/atom.xml +++ b/vhosts/blog/public/atom.xml @@ -7,7 +7,7 @@ nsfisis - 2025-04-20T00:00:00+09:00 + 2025-04-23T00:00:00+09:00 urn:uuid:039b3dff-3b75-46b7-a731-9a3a0ff8e21f @@ -310,7 +310,7 @@ PHP の処理系を Emscripten で WebAssembly にコンパイルする PHP の処理系 (php/php-src) を Emscripten で WebAssembly にコンパイルし、任意のコードを隔離された環境で評価できるようにした。 2023-10-02T00:00:00+09:00 - 2023-10-02T00:00:00+09:00 + 2025-04-23T00:00:00+09:00 urn:uuid:d6118e00-5fb1-4230-9d94-854260beae04 diff --git a/vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html b/vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html index 61ed2092..933253a3 100644 --- a/vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html +++ b/vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html @@ -58,6 +58,9 @@
  • : 公開
  • +
  • + : fflush() の前に改行の出力が必要だった理由と正しい実装について追記 +
  • @@ -160,6 +163,39 @@

    次に、コードを評価したあとに呼んでいる標準出力と標準エラー出力に対する改行の出力について。 出力バッファから出力させるためだけなら改行を出力させなくとも fflush() だけで事足りると考えたのだが、ないと動かなかったので追加した。 これにより、PHP コードの出力の後ろに余分な改行が追加されてしまう。 改行を出力せずともバッファを消費させる手段をご存知のかたはご教示願いたい。

    +
    +
    + NOTE +
    +
    +

    + 2025-04-23 追記: +

    +

    + fflush() の前に改行の出力が必要だった理由が判明したので追記する。 これは、index.mjs で標準出力・標準エラー出力へ出力する方法を指定せず、デフォルトの実装に任せているため。 Emscripten のデフォルト実装では、改行コードを出力するまで出力内容がバッファリングされ、fflush() が機能しない。 +

    +

    + デフォルトの出力方法は index.mjs の中で PHPWasm() を呼ぶとき、stdoutstderr というオプションを渡せば変更できる。 +

    +
    +
    const { ccall } = await PHPWasm({
    +  stdout: (c) => {
    +    if (c === null) {
    +      // flush the standard output.
    +    } else {
    +      // output c to the standard output.
    +    }
    +  },
    +});
    +
    +

    + cnull か 1バイト符号つき整数を取り、null が flush 要求を意味する。 +

    +

    + 記事末尾のリポジトリはすでにこの変更を適用済み。stdoutstderr の完全なサンプルはそちらを参照のこと。 +

    +
    +

    WebAssembly にコンパイルする

    diff --git a/vhosts/blog/public/posts/atom.xml b/vhosts/blog/public/posts/atom.xml index db060626..376821f4 100644 --- a/vhosts/blog/public/posts/atom.xml +++ b/vhosts/blog/public/posts/atom.xml @@ -7,7 +7,7 @@ nsfisis - 2025-04-20T00:00:00+09:00 + 2025-04-23T00:00:00+09:00 urn:uuid:039b3dff-3b75-46b7-a731-9a3a0ff8e21f @@ -214,7 +214,7 @@ PHP の処理系を Emscripten で WebAssembly にコンパイルする PHP の処理系 (php/php-src) を Emscripten で WebAssembly にコンパイルし、任意のコードを隔離された環境で評価できるようにした。 2023-10-02T00:00:00+09:00 - 2023-10-02T00:00:00+09:00 + 2025-04-23T00:00:00+09:00 urn:uuid:e1568c4c-9bdd-47b9-8b39-939ade4f3ba0 diff --git a/vhosts/blog/public/posts/index.html b/vhosts/blog/public/posts/index.html index 79305084..9eb39417 100644 --- a/vhosts/blog/public/posts/index.html +++ b/vhosts/blog/public/posts/index.html @@ -428,7 +428,7 @@

    - 投稿 + 投稿、 更新
    diff --git a/vhosts/blog/public/tags/php/atom.xml b/vhosts/blog/public/tags/php/atom.xml index 8c0841fc..08de6822 100644 --- a/vhosts/blog/public/tags/php/atom.xml +++ b/vhosts/blog/public/tags/php/atom.xml @@ -7,7 +7,7 @@ nsfisis - 2025-04-12T00:00:00+09:00 + 2025-04-23T00:00:00+09:00 urn:uuid:c6c7c241-46c1-44b5-95b2-c30c3a500df3 @@ -174,7 +174,7 @@ PHP の処理系を Emscripten で WebAssembly にコンパイルする PHP の処理系 (php/php-src) を Emscripten で WebAssembly にコンパイルし、任意のコードを隔離された環境で評価できるようにした。 2023-10-02T00:00:00+09:00 - 2023-10-02T00:00:00+09:00 + 2025-04-23T00:00:00+09:00 urn:uuid:d6118e00-5fb1-4230-9d94-854260beae04 diff --git a/vhosts/blog/public/tags/php/index.html b/vhosts/blog/public/tags/php/index.html index 7c025ace..320f5583 100644 --- a/vhosts/blog/public/tags/php/index.html +++ b/vhosts/blog/public/tags/php/index.html @@ -354,7 +354,7 @@

    - 投稿 + 投稿、 更新
    diff --git a/vhosts/blog/public/tags/wasm/atom.xml b/vhosts/blog/public/tags/wasm/atom.xml index 4901b4ef..c0051ba4 100644 --- a/vhosts/blog/public/tags/wasm/atom.xml +++ b/vhosts/blog/public/tags/wasm/atom.xml @@ -7,7 +7,7 @@ nsfisis - 2024-03-15T00:00:00+09:00 + 2025-04-23T00:00:00+09:00 urn:uuid:da7b1d5a-70df-4c4a-936c-1b49ca1a7c37 @@ -30,6 +30,6 @@ PHP の処理系を Emscripten で WebAssembly にコンパイルする PHP の処理系 (php/php-src) を Emscripten で WebAssembly にコンパイルし、任意のコードを隔離された環境で評価できるようにした。 2023-10-02T00:00:00+09:00 - 2023-10-02T00:00:00+09:00 + 2025-04-23T00:00:00+09:00 diff --git a/vhosts/blog/public/tags/wasm/index.html b/vhosts/blog/public/tags/wasm/index.html index 3b3c9acd..2f42b09f 100644 --- a/vhosts/blog/public/tags/wasm/index.html +++ b/vhosts/blog/public/tags/wasm/index.html @@ -84,7 +84,7 @@

    -- cgit v1.2.3-70-g09d2