WebAssembly は、ネイティブに近いパフォーマンスで Web ブラウザーで実行できる、コンパクトなバイナリ形式を備えた低レベルのアセンブリのような言語です。 Parellel WebAssembly は、C/C++ 、C#、 RustGoKotlin 、Swift およびその他のプログラミング言語に移植可能なコンパイル ターゲットを提供します。

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

WebAssembly は、 Web アプリケーションのパフォーマンスを最適化する方法として評価されているだけではありません。このブラウザ ツールは、 JavaScript以外のプログラミング言語を Web アプリケーションの開発に確実に使用できるようにすることも目的としています。 WebAssembly は、ブラウザ エンジンでこのテクノロジーを使用している Google、Mozilla、Apple、Microsoft によってサポートされています。

知っておくべき 14 の WebAssembly プロジェクト

WebAssembly は、その能力を活用したまったく新しいプログラミング言語など、多くの新しいテクノロジーの開発にも貢献してきました。 WebAssembly に基づく次の 14 のコンパイラおよびプログラミング言語プロジェクトを知っておく必要があります。

1. ビナレン

Binaryen は、WebAssembly 用のコンパイラ ツールチェーン インフラストラクチャ ライブラリです。これは C++ で書かれており、WebAssembly へのコンパイルをできるだけシンプル、効果的、迅速にすることを目的としています。 Binaryen は単一ヘッダーに C API を組み込み、JavaScript 経由で使用できます。入力は WebAssembly のようなフォームで受け入れられます。これを好むコンパイラの場合は、一般的な制御グラフも使用できます。

Binaryen の内部中間表現 (IR) はコンパクトなデータ構造を使用し、すべての CPU コアを活用してコードの生成と最適化を同時に行います。 IR は基本的に WebAssembly のサブセットであるため、WebAssembly にコンパイルするのも簡単です。 WebAssembly 固有の最適化により、コード サイズと速度の両方が向上します。これにより、Binaryen 自体がコンパイラ バックエンドとしても役立ちます。

Binaryen はGitHub 経由でダウンロードできます

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

2.Blazor WebAssembly

Blazor WebAssembly は、.NET を使用して対話型のクライアント側の単一ページ Web アプリを構築し、最新のブラウザーで実行するためのフレームワークです。プラグインやコードを他の言語に再コンパイルする必要はありません。ランタイムにより、.NET コードが WebAssembly の JavaScript API を介してブラウザ機能にアクセスできるようになります。

Blazor WebAssembly アプリケーションがブラウザーで実行されると、C# コード ファイルと Razor ファイルが .NET アセンブリにコンパイルされ、.NET ランタイムとともにブラウザーにダウンロードされます。 WebAssembly の .NET コードはブラウザの JavaScript サンドボックスで実行されるため、クライアント マシン上の悪意のあるアクションから保護されます。 Blazor WebAssembly アプリケーションは、スタンドアロンで展開することも、サーバー側のサポートを使用して展開することもできます。

Blazor を使い始めるためのチュートリアルは、ここにあります

3. 乾杯

Leaning Technologies の Cheerp は、Web 用のエンタープライズ グレードの C/C++ コンパイラーとして位置付けられています。 C および C++ (C++17 まで) を WebAssembly、JavaScript、または両方の組み合わせにコンパイルします。 Cheerp はLLVM/Clang インフラストラクチャに統合されており、パフォーマンスを向上させ、コンパイルされた出力のサイズを最小限に抑えるためのカスタム最適化機能を備えています。コンパイラは主に、既存の C/C++ ライブラリおよびアプリケーションを HTML5 に移植するために使用されます。ただし、Web アプリケーションや WebAssembly コンポーネントの作成にも使用できます。 Cheerp はオープンソースおよび商用ライセンスで提供されます。

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

Cheerp は Leaning Technologies の Web サイトからダウンロードできます。

4.チアプJ

「Web 用 Ja​​va コンパイラ」として販売されているこの LLVM ベースのコンパイラは、Java クライアント アプリケーションを WebAssembly、JavaScript、および HTML に変換します。これにより、最新のブラウザで実行できるようになります。 CheerpJ は、AOT コンパイラー (AOT = 事前)、WebAssembly および JavaScript ランタイム、Java から DOM にアクセスするための JavaScript DOM 相互運用性 API の 3 つのコンポーネントを使用します。 CheerpJ では、AOT コンパイラを使用して JAR アーカイブをコンパイルすることもできます。コンパイラはサーバー側のサポートを必要としません。

CheerpJ は、Leaning Technologies の Web サイトからダウンロードすることもできます

5.エムスクリプト

このオープン ソースコンパイラ ツールチェーンは、C および C++、または LLVM コンパイラ テクノロジを使用するその他の言語を、Web、Node.js、または Wasmer などの Wasm ランタイムで使用するために WebAssembly にコンパイルします。 Emscripten は、Unreal Engine 4 や Unity 3D プラットフォームなどの商用コードベースを含む、多くの現実世界のコードベースを WebAssembly に変換するためにすでに使用されています。 Emscripten は、C および C++ 標準ライブラリ、C++ 例外、OpenGL/WebGL グラフィックス コマンドをサポートしています。 Emscripten ツールチェーン (emcc、LLVM など) のインストールに使用される Emscripten SDK は、 Linux 、MacOS およびWindowsと互換性があります。

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

Emscripten はプロジェクトの公式 Web サイトからダウンロードできます。

6. 排外主義

Extism は、アプリ内で WebAssembly 拡張機能を実行するためのプラグイン システムです。目標は、ソフトウェア全体をプログラム可能にすることです。 Extism の一般的な使用例は次のとおりです。

  • コマンドラインツールに機能を追加する

  • データベースにカスタム関数を作成する

  • コード不要のアプリケーション拡張機能と

  • コンテンツ管理システムの拡張機能を開発します。

Extism を使用すると、開発者は Go、Ruby、Python、Rust、C++ などのプログラミング言語で慣用的なホスト SDK を使用できます。

Extism のインストール手順については、こちらを参照してください

7.森

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

Forest は、WebAssembly にコンパイルされる関数型プログラミング言語です。 Forest の目標は、このアプローチに伴う従来のオーバーヘッドを排除しながら、複雑でインタラクティブな機能的な Web アプリケーションの開発を簡素化することです。その開発者は現在、Forest を「プレアルファ段階の実験的で概念的な研究ソフトウェア」と説明しています。

この言語は、静的型付け、パターン マッチング、不変のデータ構造、複数の構文、および自動コード フォーマットを特徴としています。

Forest プログラミング言語の設計原則には次のものが含まれます。

  • 簡単なコラボレーション、

  • 可能な限り単純なテスト、および

  • 均一な構造とセマンティクス。

開発者のニック・ジョンストン氏は、複雑なゲームを開発できるようコーディング言語を高速化するよう努力していると語った。これが成功すれば、通常の Web アプリケーションは実際に信じられないほど高速に実行されるはずです。

Forest はGitHub からダウンロードできます

8粒

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

プロジェクトの Web サイトに記載されているように、Grain プログラミング言語は学術言語と関数型言語の機能を 21 世紀にもたらします。 Binaryen ツールチェーンとコンパイラ インフラストラクチャを介して WebAssembly にコンパイルすることにより、Grain はブラウザ上、サーバー上、および場合によってはどこでも実行できます。実行時の型エラーはなく、型の注釈も必要ありません。 Grain ツールチェーンには、CLI、コンパイラ、ランタイム環境、および単一バイナリの形式で出荷される標準ライブラリが含まれています。開発者がソースから Grain を構築するには、Node.js と Yarn が必要です。バイナリは、 Linux 、MacOS、およびWindowsで利用できます。

公式 Web サイトのチュートリアルは、 Grain を使い始めるのに役立ちます

9. JWebAssembly

I-Net Software の JWebAssembly は、Java クラス ファイルを入力として受け入れ、WebAssembly バイナリ (.wasm) またはテキスト (.wat ファイル) 形式を出力として生成する Java バイトコードから WebAssembly へのコンパイラです。目標は、WebAssembly をブラウザーでネイティブに実行することです。理論上、JWebAssembly は、Clojure、Groovy、JRuby、Kotlin、Scala など、Java バイトコードにコンパイルできる任意の言語をコンパイルできます。ただし、実用的なテストはまだ保留中です。

JWebAssembly は間もなく実稼働の準備が整います。JWebAssembly 1.0 のリリースに必要なすべてのマイルストーンが実装され、リリース候補がすでに公開されています。バージョン 1.0 のロードマップには、Java バイトコード パーサー、テスト フレームワーク、Gradle プラグインなどの機能が含まれています。

JWebAssembly は GitHub 経由でダウンロードできます。

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

10.ピオディッド

最近 Mozilla から独立した Pyodide プロジェクトは、Python と Python 科学スタックを WebAssembly にコンパイルし、Python 3.8 ランタイム、NumPy、SciPy、Matplotlib、Scikit-learn、およびその他の多数のパッケージをブラウザーに提供します。 Pyodide は、JavaScript と Python の間でオブジェクトの透過的な変換を提供し、Python が Web API にアクセスできるようにします。

Pyodide のダウンロードとインストールの手順については、ここを参照してください

11.スピン

ソフトウェア プロバイダーである Fermyon Technologies が提供する、マイクロサービス、Web アプリケーション、その他のサーバーベースのアプリケーション用の WebAssembly フレームワークです。開発者は Spin を使用してクラウド用の WebAssembly を作成できます。この目的のために、HTTP リクエストに応答するなどの機能のためのインターフェイスが提供されます。

Spin を使用すると、開発者は Rust、Go、Python、Ruby、AssemblyScript、Grain、C/C++ などの言語を使用できます。このフレームワークは、WAGI モジュール (WebAssembly Gateway Interface) とバインドル パッケージング システムもサポートしています。 Spin は現在初期プレビュー段階にあり、現時点ではまだ実験段階であると考えられています。

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

Spin はGitHub でもホストされています

12.TeaVM

TeaVM は、ブラウザーで実行する WebAssembly と JavaScript を生成する、事前 Java バイトコード コンパイラーです。 WebAssembly のサポートは現在まだ実験段階にあることに注意してください。 TeaVM を使用すると、開発者は Java でアプリケーションを作成し、JavaScript として実行できます。 TeaVM はソース コードではなく、コンパイルされたクラス ファイルで動作します。さらに、TeaVM は javac、kotlinc、scalac などの既存のコンパイラーに依存しているため、Java だけでなく Kotlin や Scala コードもコンパイルできます。

コンパイラーは主に Web 開発用のツールとして意図されており、大規模な Java または Kotlin コードベースを JavaScript に変換するためのものではありません。 TeavM のサブプロジェクトは Flavor で、単一ページの Web アプリケーションを構築するためのフレームワークとして機能します。

TeaVM はGitHub にあります。

13. 国連プラットフォーム

プログラミング言語とコンパイラ: 14 の注目の WebAssembly プロジェクト

Uno UI プラットフォームは、Xamarin モバイル アプリ プラットフォームの代替であり、.NET チームが WebAssembly、Web、 Windows 、macOS、 Linux 、iOS、 Android用の単一コードベース アプリケーションを構築できるようにします。 Uno は、.NET 5 の Mono WASM ランタイムを使用して、すべての主要な Web ブラウザーで C# コードを実行し、WebAssembly でネイティブに実行される WinUI および UWP (ユニバーサル Windows プラットフォーム) アプリケーションのブリッジとして機能します。 Uno で Web アプリケーションを作成するには、開発者はVisual Studio または Visual Studio Code を使用できます。

プロジェクトの Web サイトには、Uno プラットフォームの使用を開始するための詳細な手順が記載されています

14. ワズムクラウド

Wasmcloud アプリケーション ランタイムは、WebAssembly を使用して、マルチクラウド、エッジ、ブラウザ環境で使用できる互換性のあるポータブル アプリケーションを開発します。

このテクノロジーは、特に WebAssembly サンドボックスを通じてセキュリティが保証され、ほぼネイティブのパフォーマンスを提供することを目的としています。開発者は Wasmcloud マイクロサービスを使用して、選択した言語で一度作成すれば、それをどこにでもデプロイできます。現在サポートされている言語には、Rust、TinyGo、AssemblyScript が含まれます。 Wasmcloud は、Cloud Native Computing Foundation (CNCF) サンドボックス プロジェクトとして承認されました。

wasmCloud のインストール手順については、こちらを参照してください。 (FM)

この投稿は、米国の姉妹誌 Infoworld の記事に基づいています。