diff options
Diffstat (limited to 'vhosts/blog/public/posts')
| -rw-r--r-- | vhosts/blog/public/posts/2023-10-02/compile-php-runtime-to-wasm/index.html | 36 | ||||
| -rw-r--r-- | vhosts/blog/public/posts/atom.xml | 4 | ||||
| -rw-r--r-- | vhosts/blog/public/posts/index.html | 2 |
3 files changed, 39 insertions, 3 deletions
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 @@ <li class="revision"> <time datetime="2023-10-02">2023-10-02</time>: 公開 </li> + <li class="revision"> + <time datetime="2025-04-23">2025-04-23</time>: fflush() の前に改行の出力が必要だった理由と正しい実装について追記 + </li> </ol> </section> <section id="section--intro"> @@ -160,6 +163,39 @@ <p> 次に、コードを評価したあとに呼んでいる標準出力と標準エラー出力に対する改行の出力について。 出力バッファから出力させるためだけなら改行を出力させなくとも <code>fflush()</code> だけで事足りると考えたのだが、ないと動かなかったので追加した。 これにより、PHP コードの出力の後ろに余分な改行が追加されてしまう。 改行を出力せずともバッファを消費させる手段をご存知のかたはご教示願いたい。 </p> + <div class="admonition"> + <div class="admonition-label"> + NOTE + </div> + <div class="admonition-content"> + <p> + <strong><strong>2025-04-23 追記</strong></strong>: + </p> + <p> + <code>fflush()</code> の前に改行の出力が必要だった理由が判明したので追記する。 これは、<code>index.mjs</code> で標準出力・標準エラー出力へ出力する方法を指定せず、デフォルトの実装に任せているため。 Emscripten のデフォルト実装では、改行コードを出力するまで出力内容がバッファリングされ、<code>fflush()</code> が機能しない。 + </p> + <p> + デフォルトの出力方法は <code>index.mjs</code> の中で <code>PHPWasm()</code> を呼ぶとき、<code>stdout</code>・<code>stderr</code> というオプションを渡せば変更できる。 + </p> + <div class="codeblock" language="javascript"> + <pre class="shiki github-light" style="background-color:#f5f5f5;color:#24292e" tabindex="0"><code><span class="line"><span style="color:#D73A49">const</span><span style="color:#24292E"> { </span><span style="color:#005CC5">ccall</span><span style="color:#24292E"> } </span><span style="color:#D73A49">=</span><span style="color:#D73A49"> await</span><span style="color:#6F42C1"> PHPWasm</span><span style="color:#24292E">({</span></span> +<span class="line"><span style="color:#6F42C1"> stdout</span><span style="color:#24292E">: (</span><span style="color:#E36209">c</span><span style="color:#24292E">) </span><span style="color:#D73A49">=></span><span style="color:#24292E"> {</span></span> +<span class="line"><span style="color:#D73A49"> if</span><span style="color:#24292E"> (c </span><span style="color:#D73A49">===</span><span style="color:#005CC5"> null</span><span style="color:#24292E">) {</span></span> +<span class="line"><span style="color:#6A737D"> // flush the standard output.</span></span> +<span class="line"><span style="color:#24292E"> } </span><span style="color:#D73A49">else</span><span style="color:#24292E"> {</span></span> +<span class="line"><span style="color:#6A737D"> // output c to the standard output.</span></span> +<span class="line"><span style="color:#24292E"> }</span></span> +<span class="line"><span style="color:#24292E"> },</span></span> +<span class="line"><span style="color:#24292E">});</span></span></code></pre> + </div> + <p> + <code>c</code> は <code>null</code> か 1バイト符号つき整数を取り、<code>null</code> が flush 要求を意味する。 + </p> + <p> + 記事末尾のリポジトリはすでにこの変更を適用済み。<code>stdout</code> や <code>stderr</code> の完全なサンプルはそちらを参照のこと。 + </p> + </div> + </div> </section> <section id="section--build--compile-to-wasm"> <h3><a href="#section--build--compile-to-wasm">WebAssembly にコンパイルする</a></h3> 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 @@ <author> <name>nsfisis</name> </author> - <updated>2025-04-20T00:00:00+09:00</updated> + <updated>2025-04-23T00:00:00+09:00</updated> <entry> <id>urn:uuid:039b3dff-3b75-46b7-a731-9a3a0ff8e21f</id> <link rel="alternate" href="https://blog.nsfisis.dev/posts/2025-04-20/trick-2025-most-ruby-on-ruby-award/"></link> @@ -214,7 +214,7 @@ <title>PHP の処理系を Emscripten で WebAssembly にコンパイルする</title> <summary>PHP の処理系 (php/php-src) を Emscripten で WebAssembly にコンパイルし、任意のコードを隔離された環境で評価できるようにした。</summary> <published>2023-10-02T00:00:00+09:00</published> - <updated>2023-10-02T00:00:00+09:00</updated> + <updated>2025-04-23T00:00:00+09:00</updated> </entry> <entry> <id>urn:uuid:e1568c4c-9bdd-47b9-8b39-939ade4f3ba0</id> 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 @@ </p> </section> <footer class="entry-footer"> - <time datetime="2023-10-02">2023-10-02</time> 投稿 + <time datetime="2023-10-02">2023-10-02</time> 投稿、<time datetime="2025-04-23">2025-04-23</time> 更新 </footer> </a> </article> |
