WebAssembly(Wasm)にコンパイルできる言語は何ですか?

WebAssembly(Wasm)にコンパイルできる言語は何ですか?

現在、C、C++、Rust(実験的)がllvmコンパイラのバックエンドでWebAssemblyにコンパイルできると思います。Java、Swift、C#などの言語は現在サポートしていませんが、今後の開発の候補になると思います。

JavaScriptはWasmにコンパイルできないと思っています。 https://github.com/WebAssembly/design/issues/219

WebAssemblyのサポートは常に進化しています。現在、以下の言語でサポートされています。

  • C / C++** - EmScripten または他の 最小限の LLVM ベースのツールチェーン を介して非常に良い(生産準備)サポートがあります。

  • Rust** - WebAssembly は公式にサポートされているターゲットであり、その周辺には 非常に活発なコミュニティ が存在します。

  • Go** - Now supports WebAssembly が公式の、しかし実験的なターゲットとしてサポートされている。

  • C#** - Blazorによる実験的なサポートがありますが、現在、Wasmに.NETランタイムを埋め込む必要があります。Blazor は実験的な技術として Microsoft によって公式に採用され、recent preview release が公開されています。

  • D** - D の "betterC" サブセットは、LDC4 (LLVM コンパイラ) を通して WebAssembly にコンパイルすることができます。

  • TypeScript** - AssemblyScript経由、非常に実験的だが、勢いがある。

  • Java** - TeaVMまたはBytecoderを経由する。

  • Haxe** - サポートが発表されたばかり

  • Kotlin** - WebAssembly の Kotlin/Native 0.4 実験的サポートを獲得、および TeaVM 経由。

  • Python** - PyodideはWebAssemblyへのPythonの移植で、科学的Pythonスタックのコアパッケージ(Numpy、Pandas、matplotlib)を含んでいます。

  • PHP - 実験的ですが、ワーキングプロトタイプがあります。

  • Perl** - WebPerl は Perl バイナリを WebAssembly に移植したもので、Web 上で Perl スクリプトを実行できるようにしたものです。

  • Scala - Emscriptenコンパイラを使用します。

  • ルビー** - run.rbプロジェクト経由

  • Swift** - 現在開発中のSwiftWasmを使用。

また、商用ソリューションもあります。

JavaScriptについては、WebAssemblyが静的型付けアセンブリ言語であるため、サポートされる可能性は低いと思われます。

また、WebAssemblyをサポートする、より無名で趣味的な言語もいろいろあります。詳細は、より包括的な Awesome WebAssembly Languages のリストで見ることができます。

解説 (4)

https://github.com/mbasso/awesome-wasm#compilers -- 今はC/C++だけで、他は実験的なものですが、quot;experimental"の部分が大きくなっています。

現在、WebAssemblyはフラットリニアメモリだけをサポートしています。これはC/C++/Rustや他の多くの言語には適していますが、最近の一般的な言語ではガベージコレクタがないと動きません。これはWebAssemblyのポストMVP機能(https://github.com/WebAssembly/design/issues/1079)です。今のところ、唯一の選択肢は、いくつかのカスタムコードでwasmの内部にガベージコレクタを実装することです

解説 (1)

TeaVMは、JVMバイトコードをWebAssemblyにトランスパイルするために使用することができます。プロジェクトのホームページは https://github.com/konsoletyper/teavm でチェックアウトできます。

TeaVMは、JVMバイトコードをJSおよびWebAssemblyにトランスパイルすることができます。WebAssemblyのサポートは初期段階ですが、簡単なJBox2DシミュレーションをGWT、TeaVM(JS出力)、TeaVM(WASM出力)で比較するデモがあり、かなり印象的です。

なお、WebAssemblyは現在、DOMや他のJavaScript APIに直接アクセスすることはできません。また、現在のMVPでは、不透明なデータ型やGCさえもサポートされていません。しかし、前述のデモにあるように、JSのトリックを使ってJSからWASMへのアップ/ダウンコールを行ったり来たりすることは可能です。

解説 (0)