Emscripten 4.0, ein Compiler von C/C++ nach WebAssembly, ist verfĂŒgbar

Die Veröffentlichung des Emscripten 4.0 Tools ermöglicht es, Code in C/C++ und anderen Sprachen, die Frontends basierend auf LLVM haben, in universellen, niedrigstufigen Zwischencode fĂŒr WebAssembly zu kompilieren. Das Ergebnis kann fĂŒr die Integration in JavaScript-Projekte, den Einsatz im Webbrowser, die Verwendung in Node.js oder fĂŒr die Erstellung separater plattformĂŒbergreifender Anwendungen, die mit einem wasm-Laufzeitumgebung betrieben werden, verwendet werden. Der Code des Projekts wird unter der MIT-Lizenz veröffentlicht. Im Compiler werden Erkenntnisse des LLVM-Projekts genutzt, und fĂŒr die Generierung von WebAssembly und die Optimierung wird die Bibliothek Binaryen eingesetzt.

Das Hauptziel von Emscripten besteht darin, ein Werkzeug zu schaffen, das es ermöglicht, Webcode unabhĂ€ngig von der Programmiersprache auszufĂŒhren, in der dieser Code ursprĂŒnglich geschrieben wurde. In den kompilierten Anwendungen können Aufrufe der Standardbibliotheken C und C++ (libc, libcxx), C++-Erweiterungen, Multithreading auf Basis von pthreads, POSIX-API und viele Multimedia-Bibliotheken verwendet werden. Separat werden APIs fĂŒr die Integration mit Web-APIs und JavaScript-Code bereitgestellt.

Emscripten unterstĂŒtzt die Übersetzung der SDL2-Bibliotheksausgabe ĂŒber Canvas und implementiert die UnterstĂŒtzung von OpenGL und EGL ĂŒber die WebGL-API, was es ermöglicht, grafische Anwendungen und Spiele in WebAssembly zu konvertieren (zum Beispiel gibt es einen Port des Qt-Toolkits, unterstĂŒtzt werden die Spiele-Engines Unreal Engine und Unity sowie der Physik-Simulations-Engine Bullet).

Neben der Kompilierung von C/C++-Code werden separate Projekte zur AusfĂŒhrung von Interpreter in Browsern entwickelt fĂŒr virtuelle Maschinen die Sprachen Lua, C#, Python, Ruby und Perl. DarĂŒber hinaus ist die Anwendung von Frontends zu LLVM, die sich von Clang unterscheiden, beispielsweise Frontends fĂŒr Sprachen wie Swift, Rust, D und Fortran, möglich.

Die Version 4.0 erhielt ihre Nummer aufgrund von Änderungen, die die ABI-KompatibilitĂ€t beeintrĂ€chtigen (beim Neukompilieren des Projekts in Emscripten 4.0 ist eine Neukompilierung der Objektdateien und Bibliotheken erforderlich, die mit frĂŒheren Versionen von Emscripten erstellt wurden). Die wesentlichen Änderungen in Emscripten 4.0:

  • Die Option „-sWASM_LEAGCY_EXCEPTIONS“ wurde hinzugefĂŒgt, um zwischen alten und neuen Ausnahmebehandlungsmechanismen zu wĂ€hlen. StandardmĂ€ĂŸig wird weiterhin der alte Mechanismus verwendet, da nicht alle Browser die Möglichkeiten von WebAssembly zur Arbeit mit neuen Ausnahmebehandlern implementiert haben.
  • Die Komponenten compiler-rt, libcxx, libcxxabi und libunwind wurden auf den LLVM 19 Branch aktualisiert.
  • Die minimal unterstĂŒtzte Version des Safari-Browsers in den Builds (Einstellung MIN_SAFARI_VERSION) wurde von 14.1 auf 15.0 erhöht, was es ermöglicht, standardmĂ€ĂŸig mehrere erweiterte Funktionen von WebAssembly zu aktivieren:
    • Die Verwendung neuer Anweisungen zum Konvertieren von float in int (nontrapping-fptoint) ist aktiviert, die anstelle der Generierung einer Ausnahme bei Überlauf des Ergebnisses den minimalen oder maximalen möglichen Wert zurĂŒckgeben (notwendig fĂŒr SIMD).
    • Die Option WASM_BIGINT wurde aktiviert, bei der der Typ BigInt fĂŒr den Austausch von 64-Bit-Ganzzahlen zwischen WebAssembly und JavaScript-Code verwendet wird.
    • Die Option BULK_MEMORY ist aktiviert, bei der die WebAssembly-Anweisungen memory.copy und memory.fill fĂŒr die Implementierung der C-Funktionen memcpy und memset verwendet werden.
  • In der Funktion PATH.basename() wurde die Normalisierung von Pfaden (PATH.normalize()) deaktiviert, d.h. der Aufruf ‚PATH.basename(«a/.»)‘ gibt jetzt ‚.» statt ‚a‘ zurĂŒck, wĂ€hrend ‚PATH.basename(«a/b/..»)‘ ‚..‘ zurĂŒckgibt statt ‚a‘.
  • Bei Verwendung der Option „-sMODULARIZE“ sind Factory-Funktionen, die WebAssembly-Module und -Objekte fĂŒr JavaScript erstellen und zurĂŒckgeben, nun beim Kompilieren im Modus WASM_ASYNC_COMPILATION, der standardmĂ€ĂŸig angewendet wird, mit dem Kennzeichen „async“ versehen.
  • Die Möglichkeit, JavaScript-Bibliotheken unter Verwendung der Option „-lfoo.js“ anzugeben, wurde hinzugefĂŒgt. Im Gegensatz zur Option „—js-library“ erfolgt die Bibliothekssuche in allen ĂŒber die Option „-L“ angegebenen Pfaden.
  • Beim Linken im Debug-Modus (-O0 oder -sASSERTIONS) wird standardmĂ€ĂŸig die Debug-Version der Funktion malloc mit aktivierten assert-PrĂŒfungen verwendet, die Fehler wie doppelte Aufrufe der Funktion free() aufdecken.

Quelle: opennet.ru

60GB SSD 8Gb DDR4