Die Veröffentlichung der Emscripten-Toolchain 6.0 ermöglicht das Kompilieren von Code in C/C++ und anderen Sprachen, für die Frontends auf Basis von LLVM verfügbar sind, in universellen, niedrigstufigen Zwischencode WebAssembly. Das Ergebnis kann für die Integration in JavaScript-Projekte, die Ausführung im Webbrowser, die Nutzung in Node.js oder die Erstellung von eigenständigen plattformübergreifenden Anwendungen, die mit einem wasm-Runtime ausgeführt werden, verwendet werden. Der Code des Projekts steht unter der MIT-Lizenz. Der Compiler nutzt die Entwicklungen des LLVM-Projekts, während die Bibliothek Binaryen für die Erstellung von WebAssembly und deren Optimierung eingesetzt wird.
Das Hauptziel von Emscripten ist es, ein Werkzeug zu schaffen, das es ermöglicht, Code im Web unabhängig von der Programmiersprache auszuführen, in der dieser ursprünglich geschrieben wurde. In den kompilierten Anwendungen können Aufrufe der Standardbibliotheken C und C++ (libc, libcxx), C++-Erweiterungen, Multithreading basierend auf pthreads, POSIX-APIs und viele Multimedia-Bibliotheken verwendet werden. Separat werden APIs zur Integration mit Web-APIs und JavaScript-Code bereitgestellt.
Emscripten unterstützt die Übersetzung von SDL2-Bibliotheken in Canvas und bietet Unterstützung für OpenGL und EGL über die WebGL-API. Dies ermöglicht die Umwandlung von grafischen Anwendungen und Spielen in WebAssembly (zum Beispiel gibt es einen Port des Qt-Toolkits, und die Spiel-Engines Unreal Engine und Unity sowie die Physik-Simulations-Engine Bullet werden unterstützt).
Neben der Compilation von C/C++-Code werden separate Projekte für die Ausführung von Interpretern für Browsers und virtuellen Maschinen für die Sprachen Lua, C#, Python, Ruby und Perl entwickelt. Zudem ist die Verwendung von Frontends zu LLVM, die sich von Clang unterscheiden, möglich, wie beispielsweise Frontends für Sprachen wie Swift, Rust, D und Fortran.
Die Vergabe der Versionsnummer 6.0 ist mit Änderungen verbunden, die die Kompatibilität beeinträchtigen. Die wichtigsten Änderungen in Emscripten 6.0 sind:
- Die minimalen Versionen der Browser-Engines, in denen der generierte Code ausgeführt werden kann, wurden angehoben: Chrome 74 -> 85, Firefox 68 -> 79 und Safari 12.2 -> 14.1. Diese Änderung ermöglicht es, standardmäßig WebAssembly-Erweiterungen für den Import und Export von veränderbaren globalen Variablen sowie die Erhöhung der Bitbreite von vorzeichenbehafteten Zahlen und ihrer Werte zu verwenden.
- Bei der Durchführung eines Streaming-Downloads mit der Fetch-Operation ist die Größe des hochgeladenen Blocks jetzt auf 8 MB begrenzt, um das gleichzeitige Laden des gesamten Inhalts großer Dateien in den Speicher zu verhindern.
- Die Versionen von musl libc 1.2.6, libpng 1.6.58 und google-closure-compiler 20260429.0.0 wurden aktualisiert.
- Der Compiler-Flag „-m64“ wurde implementiert, der den Flags
„-sMEMORY64“ und „—target=wasm64“ ähnelt. - Das Feld PThread.runningWorkers wurde aus dem PThread-Objekt entfernt.
- Die Funktion pause() gibt jetzt 0 anstelle von EINTR zurück.
- Auf der Windows-Plattform wird anstelle der bat-Datei (emcc.bat) eine exe-Datei (emcc.exe) zum Starten von Emscripten angeboten.
Quelle: opennet.ru
