2 ポイント 投稿者 GN⁺ 2025-02-05 | 1件のコメント | WhatsAppで共有

WebAssemblyとは?

  • WebAssemblyは、Webブラウザ上で信頼できないクライアント側コードをほぼネイティブ速度で実行するために設計された、標準化された命令セットおよびバイトコード形式である。
  • EmscriptenはC/C++からJavaScriptへのコンパイラとして発展し、当初はLLVM IRをJavaScriptに変換することで、Web上でCおよびC++コードを実行できるようにしていた。
  • 時間が経つにつれ、ブラウザ開発者たちはEmscriptenプロジェクトと協力して、性能最適化のためのJavaScriptの単純なサブセットを作り上げ、これはasm.jsとして標準化された。
  • その後、JavaScriptのオーバーヘッドを避けるために独立したバイトコード形式が設計され、これがWasmである。
  • 最近では、WebAssemblyはブラウザ外でも人気を集めており、FastlyとShopifyはWebAssemblyエンジンを基盤としてEdge ComputeやFunctions製品を構築している。
  • WebAssemblyは、さまざまなソース言語からターゲットにできるという特性により、プラグインエコシステムを構築するうえで魅力的なプラットフォームである。

なぜWebAssemblyインタプリタなのか?

  • 多くのソフトウェアエンジニアと同じように、新しいサイドプロジェクトを始めては数週間後に興味を失うというパターンにはまっていた。
  • 継続的に努力を注げる大きなプロジェクトが必要であり、それによってコンピューティングスタックの低レイヤーに触れられるようにしたかった。
  • WebAssemblyの盛り上がりに関心を持つようになり、カスタムシステムコールを設計できるプラットフォームエンジニアリングのツールとして魅力的に見えた。

Semblance

  • WebAssembly Core Specificationに慣れるため、WebAssemblyインタプリタを書くことにした。
  • このプロジェクトの目的は学習だったため、すべてのopcodeを実装したり、コアテストスイートに合格したりするつもりはなかった。
  • "Hello, World!" を実行できれば満足だった。

結果

  • このプロジェクトは大きな成功だったと考えている。opcodeのカバレッジは完全ではないが、簡単な "Hello, World!" プログラムを実行できる。
  • コードは散らかっていて遅く、メモリリークもあり、悪意のあるモジュールに対して脆弱かもしれないが、それでも動作する。
  • WebAssemblyのコア仕様について多くを学び、エンジニアとしての自分のコンフォートゾーンから抜け出すことができた。
  • 今では、Wasmtimeのような産業向けランタイムに貢献できるだけのWebAssemblyの知識を得られたと感じている。

1件のコメント

 
GN⁺ 2025-02-05
Hacker Newsのコメント
  • WasmインタープリタをSchemeで書いたことがあるので、ほかの人が自分で書いているのを見るのはうれしい。Wasmは思ったほど難しくなく、すべての命令を実装しなくても、楽しめる範囲だけ試してみることを勧めたい

    • 作者へのヒント: spec-testには複雑な形式のテキストwasmが含まれているが、wast2jsonコンバーターを使えば、より簡単なJSONの説明と一般的なバイナリwasmファイルを得られる
  • 初心者の質問:

    • インタープリタを自分でコーディングしない場合、どうやってデバッグするのか気になる
    • 文字列のopcodeをファジングするのがどれくらい効果的なのか気になる
    • サーバー側のWASMエンジンとブラウザベースのエンジンに実質的な違いがどれほどあるのか、一方をもう一方に変換するにはどれだけ作業が必要なのか気になる
  • WASMの直接解釈に関する興味深い記事を見つけた

  • 興味深いアプローチで、素晴らしい仕事

  • Wasm-C-APIを標準インターフェースとして採用するのは良いアイデアだったと思う

    • これはほとんどのWasmランタイム(Wasmmer、V8、wasmiなど)が採用しているAPIで、Cで書かれているため、このAPIに慣れた開発者なら簡単に試せる
    • 作者がWasmに詳しいなら、Wasmerにパッチや改善を貢献するのも歓迎されるはず
  • 議論の余地がある点:

    • 初期の末尾呼び出し命令を追加することに興味があるのか気になる
    • WASM仕様の担当者たちはこれを「高水準」だとして拒否したが、C委員会もDennis Ritchieの提案を拒否した。Rob PikeもRitchieの方向性を支持しているように見える。そうでなければ、なぜGolangを作ったのだろうか? 末尾呼び出しは、呼び出しが高水準であるときにだけ高水準なのだ
  • Orcaを見てみることを勧める。貢献できる良い機会になるはず: https://orca-app.dev

  • WebAssemblyを深く掘り下げ、インタープリタをゼロから構築する過程を見るのは本当にすごい

  • 素晴らしい記事で、WASM実装に戻りたくなる動機を与えてくれる

  • 本当に素晴らしい仕事