萌えハッカーニュースリーダー

2025/07/11 19:23 WASM the Hard Way: Porting the Chicory Compiler to Android

出典: https://blog.evacchi.dev/posts/2025/07/11/wasm-the-hard-way-porting-the-chicory-compiler-to-android/
hakase
博士

ロボ子、今日はWasmコンパイラをAndroidに移植する話じゃぞ!

roboko
ロボ子

Wasmですか!WebAssemblyですね。それがAndroidで動くようになるんですか、博士?

hakase
博士

そうなんじゃ!Dylibsoっていう会社がChicoryっていうJava製のWasmランタイムを使って、Androidに移植しようとしてるみたいじゃな。

roboko
ロボ子

Chicoryですか。Javaで書かれているからAndroidでも動く、と。

hakase
博士

その通り!ChicoryコンパイラはWasmをJavaバイトコードに変換できるんじゃ。AndroidはDalvikバイトコード(DEXファイル)を使うから、それをAndroidに移植するってわけ。

roboko
ロボ子

なるほど。コンパイラにはビルド時コンパイラと実行時コンパイラの2種類があるんですね。

hakase
博士

そうそう!ビルド時コンパイラはWasmをJavaバイトコードに変換して保存するから、sqlite4jみたいに既知のWasmモジュールに最適なんじゃ。実行時コンパイラはWasmモジュールを動的にロードして実行するから、Extismプラグインみたいにサンドボックス機能が重要な場合に便利。

roboko
ロボ子

ExtismはDylibsoのプロジェクトで、Chicory SDK上に構築されたWasmモジュールをJavaアプリケーションで実行するための基盤なんですね。

hakase
博士

さすがロボ子、よく分かってるのじゃ!でも、Dalvikランタイムには制約もあるみたいで、デフォルトのスタックサイズが1MBしかないらしいぞ。

roboko
ロボ子

1MBですか。動的にロードされたコードはインタープリターで実行されるから、スタック使用量が増加するんですね。スタックオーバーフローを避けるために、カスタムスタックサイズを持つ新しいスレッドを作成することが推奨される、と。

hakase
博士

その通り!メモリ管理も重要じゃ。ARTランタイムはメモリとスタック空間に制限を課すから、DexMakerで生成されたメソッドが多いとメモリを使いすぎるんじゃ。

roboko
ロボ子

クラスファイルを分割して、メモリ使用量を抑える必要があるんですね。

hakase
博士

そういうことじゃ!テストも大変みたいで、Android Instrumentation frameworkはオーバーヘッドが大きいし、RoboelectricはDEXバイトコードをロードできないから、ChicoryコンパイラはARTでテストする必要があるんじゃ。

roboko
ロボ子

色々と制約があるんですね。でも、JUnit Platform Console Launcherやカスタムランチャーを使えば、テスト時間を大幅に短縮できるみたいですね。

hakase
博士

そうなんじゃ!Androidバックエンドのデバッグも、IDEを使ってリモートデバッグセッションをアタッチすればできるみたいじゃ。

roboko
ロボ子

なるほど。WasmがAndroidで動くようになると、色々な可能性が広がりそうですね。

hakase
博士

そうじゃな!ロボ子もAndroidアプリを作って、世界を驚かせるのじゃ!

roboko
ロボ子

頑張ります!ところで博士、WasmをAndroidに移植するって、まるで冷蔵庫を南極に持っていくようなものですね。

hakase
博士

確かに!でも、南極でも冷たい飲み物が飲みたい人がいるかもしれないぞ?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search