APIの制限

ブラウザ環境とJavaScriptは、CおよびC++が通常実行されるネイティブ環境とは異なります。これらの違いにより、ネイティブAPIの呼び出しと使用方法にいくつかの制限が課せられます。このセクションでは、より明白な制限のいくつかを示します。

ネットワーキング

Emscriptenはlibcネットワーキング機能をサポートしていますが、非同期(ノンブロッキング)操作に制限する必要があります。これは、基盤となるJavaScriptネットワーキング機能が非同期であるため必要です。

ファイルシステム

Emscriptenはlibcファイルシステム機能をサポートしており、C/C++コードは通常の方法で記述できます。

ブラウザ環境で実行されるコードはサンドボックス化されており、ローカルファイルシステムに直接アクセスすることはできません。代わりに、Emscriptenは仮想ファイルシステムを作成し、そこにデータをプリロードするか、遅延ロードのためにURLにリンクすることができます。これは、同期ファイルシステム機能を呼び出すことができるタイミングと、プロジェクトがコンパイルされる方法に影響します。詳細については、ファイルシステムの概要を参照してください。

アプリケーションメインループ

ブラウザイベントモデルは協調型マルチタスクを使用します。各イベントには実行する「ターン」があり、他のイベントを処理できるようにブラウザイベントループに制御を返す必要があります。HTMLページがハングする一般的な原因は、完了せずにブラウザに制御を返さないJavaScriptです。

これは、無限メインループを使用するアプリケーションの記述方法に影響を与える可能性があります。詳細については、Emscriptenランタイム環境を参照してください。

その他のAPI

他の移植可能なC/C++コードのサポートはかなり包括的です。