Die Veröffentlichung der Emscripten 3.0 Compiler-Version ermöglicht die Kompilierung von C/C++-Code und anderen Sprachen, für die LLVM-basierte Frontends existieren, in universellen, niedrigstufigen Zwischencode in WebAssembly. Dies erfolgt zur Integration in JavaScript-Projekte, zur Ausführung im Webbrowser, zur Nutzung in Node.js oder zur Erstellung von eigenständigen, plattformübergreifenden Anwendungen, die durch ein wasm-Runtime gestartet werden. Der Code des Projekts ist unter der MIT-Lizenz verfügbar. Der Compiler baut auf der LLVM-Entwicklung auf, während für die Generierung von WebAssembly und die Optimierung die Bibliothek Binaryen verwendet wird.
Das Hauptziel der Entwicklung des Emscripten-Projekts ist es, ein Werkzeug zu schaffen, das die Ausführung von Code im Web unabhängig von der Programmiersprache ermöglicht, in der dieser Code geschrieben ist. In den kompilierten Anwendungen können Aufrufe von Standardbibliotheken in C und C++ (libc, libcxx), C++-Erweiterungen, Multithreading auf Basis von pthreads, das POSIX-API und viele Multimedia-Bibliotheken verwendet werden. Separat stehen APIs zur Integration mit Web-APIs und JavaScript-Code zur Verfügung.
Emscripten unterstützt die Umwandlung von SDL2-Bibliotheksausgaben über Canvas und bietet Unterstützung für OpenGL und EGL durch WebGL. Dadurch können auch grafische Anwendungen und Spiele in WebAssembly konvertiert werden, wie zum Beispiel der Port des Qt-Toolkit und Unterstützung für die Spiele-Engines Unreal Engine 4 und Unity, sowie die Physik-Engine Bullet. Neben der Kompilierung von C/C++-Code werden Projekte entwickelt, um die Ausführung von Interpretatoren in Browsern für die Sprachen Lua, C#, Python, Ruby und Perl zu ermöglichen. virtuellen Maschinen Es ist auch möglich, Frontends zu LLVM zu verwenden, die von Clang abweichen, für Sprachen wie Swift, Rust, D und Fortran.
Wesentliche Änderungen in Emscripten 3.0:
- Die in Emscripten verwendete C-Bibliothek musl wurde auf Version 1.2.2 aktualisiert (in der Emscripten 2.x-Reihe wurde Version 1.1.15 verwendet).
- In der Bibliothek parseTools.js wurde eine Reihe von Funktionen entfernt, die hauptsächlich innerhalb des Projekts verwendet wurden: removePointing, pointingLevels, removeAllPointing, isVoidType, isStructPointerType, isArrayType, isStructType, isVectorType, isStructuralType, getStructuralTypeParts, getStructuralTypePartBits, isFunctionDef, isPossiblyFunctionType, isFunctionType, getReturnType, splitTokenList, _IntToHex, IEEEUnHex, Compiletime.isPointerType, Compiletime.isStructType, Compiletime.INT_TYPES, isType.
- In den Vorlagen shell.html und shell_minimal.html wird die Ausgabe von Fehlermeldungen, die während der Ausführung von Emscripten auftreten und vom Programm über stderr ausgegeben werden, standardmäßig auf die Verwendung von console.warn anstelle von console.error umgeschaltet.
- Es wurde die Möglichkeit hinzugefügt, eine bestimmte Textkodierung, die in Dateinamen verwendet wird, anzugeben. Die Kodierung kann in Form eines Suffixes beim Übertragen des Dateinamens angegeben werden, zum Beispiel „a.rsp.utf-8“ oder „a.rsp.cp1251“).
Quelle: opennet.ru
