Cheerp 3.0 コンパイラーが導入され、あらゆる C/C++ コードを WebAssembly または JavaScript にコンパイルできるようになりました。 新しいブランチは、コンパイラと付随するライブラリを、以前に適用されていた限定的なライセンス ポリシーではなく、寛容な Apache 2.0 および LLVM ライセンスを使用するように移行し、非商用プロジェクトには GPLv2 ライセンス オプションを、商用プロジェクトには独自のライセンスを提供することで注目に値します。 コンパイラ コードは LLVM と Clang の開発に基づいており、パフォーマンスを向上させ、コンパイル結果のサイズを削減するための追加の最適化が含まれています。
Cheerp は、既存の C/C++ ライブラリとアプリケーションを移植してブラウザで実行する場合と、高パフォーマンスの Web アプリケーションや WebAssembly コンポーネントを最初から作成する場合の両方に使用できます。 このプロジェクトでは、C/C++ と JavaScript のコードを XNUMX つの Web アプリケーションで組み合わせることができ、JavaScript コードから元々 C/C++ で開発された関数にアクセスしたり、C/C++ コードから JavaScript オブジェクト、JavaScript ライブラリ、Web API、すべての機能は DOM です。 コードの一部を JavaScript にコンパイルし、一部を WebAssembly にコンパイルする組み合わせアセンブリを作成することができます。 標準の libc および libc++ ライブラリを使用したプロジェクトの構築がサポートされています。
Emscripten コンパイラと比較して、Cheerp は、より最適化されたコンパクトな WebAssembly 中間コード (生成されるファイルは平均 7% 小さくなります) を生成します。 概念的な違いは、Emscripten が WebAssembly オブジェクト形式として使用され、WebAssembly の後処理段階 (wasm-opt) でリンクと最適化を行う点です。 Cheerp はライブラリとオブジェクト ファイルの中間表現として LLVM バイトコードを使用し、後処理を必要とせずにプロジェクト全体にわたる広範な最適化を可能にし、LLVM レベルのメタデータを活用します。
さらに、Cheerp は PreExecuter オプティマイザーを使用します。これにより、グローバル オブジェクトの初期化に使用されるコンストラクターを定数に変換するなど、コンパイル段階でコードがプリエンプティブに実行されます。 また、コンパイル時に PartialExecuter が使用され、関数パラメータの分析に基づいて、実行中に使用されないことが保証されているコードが削除されます。
Cheer は、ガベージ コレクターによってカバーされるメモリを動的に操作するための JavaScript コードを生成することもできます。 特に、型付き配列を使用して従来のアドレス空間をエミュレートする代わりに、Cheerp は C++ オブジェクトから JavaScript オブジェクトへの直接マッピングを提供します。これにより、JavaScript ガベージ コレクターには未使用のオブジェクトを削除する機能があるため、メモリ消費が削減されます。 パフォーマンスを向上させるために、生成された WebAssembly 中間コードは、データ操作の並列化を可能にする SIMD 拡張機能を使用します。
Cheerp は、C++ で統合されたクライアント/サーバー Web アプリケーションを作成するためのプラットフォームとして使用できます。 現在の実践では、JavaScript で書かれたブラウザー内フロント エンドと、PHP、Python、Ruby、または JavaScript/Node.js で書かれた別のバック エンドを開発するのが一般的です。 Cheerp は、バックエンドとフロントエンドが単一のコード ベースでサポートされる完全な Web アプリケーションを C++ で作成するためのツールを提供します。 コンパイル プロセス中に、サーバー側はネイティブ コードにコンパイルされ、インターフェイスは JavaScript 表現に変換されます。 JavaScript に変換されたコンポーネントを含むすべてのプロジェクト コンポーネントのデバッグは、ソース マップ テクノロジを使用して C++ のソース コードを使用して実行されます (エラーが発生した場合は、C++ コードのセクションを表示できます。C++ コードでのブレークポイントの設定と行単位をサポートします)。 -line C++ コードのステップごとの実行)。
出所: オープンネット.ru
