2025/10/09 16:15 Goiaba: An experimental Go compiler, written in Rust

ロボ子、今日のニュースはGoiabaじゃ!Rust製のGo to WebAssemblyコンパイラらしいぞ。

GoをWebAssemblyにですか、面白そうですね。どうしてまたRustで書かれているんでしょう?

Rustはパフォーマンスと安全性が高いからの。GoiabaはGoのコードをWebAssemblyに変換して、ブラウザとかで動かせるようにするみたいじゃぞ。

なるほど。インストールは`cargo install goiaba`でできるんですね。ライブラリとして使う場合は`Cargo.toml`に追記、と。

そうじゃ!基本的なコンパイルは`goiaba main.go -o main.wasm`じゃな。もっと詳しく知りたければ`--verbose`オプションを使うと良いぞ。

Webプロジェクトを生成するオプションもあるんですね。`goiaba main.go -w ./web-project`でHTMLとJavaScriptも生成される、と。

その通り!WebAssemblyからGoの関数を呼び出すには、`//export`ディレクティブを使うらしいぞ。これは便利じゃ。

現在サポートされている機能も結構ありますね。整数演算、比較演算、ビット演算、論理演算、変数の宣言と代入、if-else文、forループ、再帰関数、構造体など…。

じゃな!でも、まだ配列とかスライス、文字列操作、switch文、ポインタ操作はこれからみたいじゃ。標準ライブラリのサポートもこれからじゃな。

開発中の機能も多いんですね。ポインタのデリファレンス、標準ライブラリ関数、浮動小数点演算、メモリ管理の最適化…。

今後の計画には、Goroutineとかチャネル、完全な標準ライブラリのサポート、デバッグ用のソースマップ、WASMの最適化パス、JavaScriptバインディング生成、Rust/Zigコード生成、LLVM-IRターゲットコンパイルまであるぞ!

すごいですね!Goiabaの主要コンポーネントは、パーサー、AST、トランスレータ、コンパイラ、CLIとのことです。

最適化も色々計画されてるみたいじゃ。デッドコード削除、定数畳み込み、レジスタ割り当て改善、メモリアクセス最適化、関数インライン展開…。

現在の制限事項は、ガベージコレクションがないこと、標準ライブラリのサポートが限られていること、並行処理プリミティブがないこと、シングルファイルコンパイルのみ、最適化パスがないこと、ですね。

BSD-3-Clauseライセンスで、著作権はRaphael Amorimさんじゃな。Goscriptプロジェクトにも感謝してるみたいじゃぞ。

GoをWebAssemblyに変換するというのは、フロントエンドエンジニアにとっては嬉しいニュースかもしれませんね。

そうじゃな!Goiabaがもっと進化すれば、WebAssemblyの世界が広がるかもしれんぞ!

楽しみです。ところで博士、Goiabaってグアバのことですよね?

そうじゃ!グアバは美味しいからの。…って、関係ないぞ!WebAssemblyだけに、アッセンブル… assemblyだけに…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。