API-Einschränkungen

Die Browserumgebung und JavaScript unterscheiden sich von den nativen Umgebungen, in denen C und C++ typischerweise ausgeführt werden. Diese Unterschiede legen einige Einschränkungen für die Art und Weise auf, wie native APIs aufgerufen und verwendet werden können. Dieser Abschnitt listet einige der offensichtlicheren Einschränkungen auf.

Netzwerk

Emscripten unterstützt libc-Netzwerkfunktionen, aber Sie müssen sich auf asynchrone (nicht-blockierende) Operationen beschränken. Dies ist erforderlich, da die zugrunde liegenden JavaScript-Netzwerkfunktionen asynchron sind.

Dateisysteme

Emscripten unterstützt libc-Dateisystemfunktionen und C/C++-Code kann auf die normale Weise geschrieben werden.

Code, der in einer Browserumgebung ausgeführt wird, ist in einer Sandbox isoliert und hat keinen direkten Zugriff auf das lokale Dateisystem. Stattdessen erstellt Emscripten ein virtuelles Dateisystem, das mit Daten vorab geladen oder mit URLs für das verzögerte Laden verknüpft werden kann. Dies beeinflusst, wann synchrone Dateisystemfunktionen aufgerufen werden können und wie ein Projekt kompiliert wird. Weitere Informationen finden Sie in der Dateisystemübersicht.

Anwendungs-Hauptschleife

Das Browser-Ereignismodell verwendet kooperatives Multitasking — jedes Ereignis hat einen „Durchlauf“ zum Ausführen und muss dann die Kontrolle an die Browser-Ereignisschleife zurückgeben, damit andere Ereignisse verarbeitet werden können. Eine häufige Ursache für das Hängenbleiben von HTML-Seiten ist JavaScript, das nicht vollständig ausgeführt wird und die Kontrolle nicht an den Browser zurückgibt.

Dies kann beeinflussen, wie eine Anwendung, die eine unendliche Hauptschleife verwendet, geschrieben wird. Weitere Informationen finden Sie unter Emscripten-Laufzeitumgebung.

Andere APIs

Die Unterstützung für anderen portablen C/C++-Code ist ziemlich umfassend.