È stato pubblicato il rilascio della toolkit Emscripten 6.0, che consente di compilare codice in C/C++ e in altri linguaggi per i quali sono disponibili frontend basati su LLVM, in un codice intermedio universale a basso livello chiamato WebAssembly. Il risultato ottenuto può essere utilizzato per l'integrazione con progetti JavaScript, eseguito nel web browser, utilizzato in Node.js o per creare applicazioni multi-piattaforma autonome, eseguite tramite un runtime wasm. Il codice del progetto è distribuito sotto licenza MIT. Il compilatore utilizza sviluppi del progetto LLVM, mentre per la generazione di WebAssembly e l'ottimizzazione viene impiegata la libreria Binaryen.
L'obiettivo principale di Emscripten è dichiarato come la creazione di uno strumento che consenta di eseguire codice nel Web indipendentemente dal linguaggio di programmazione in cui è stato originariamente scritto. Nelle applicazioni compilate possono essere utilizzate chiamate alle librerie standard di C e C++ (libc, libcxx), estensioni C++, multithreading basato su pthreads, API POSIX e molte librerie multimediali. Vengono forniti anche API per l'integrazione con le API Web e il codice JavaScript.
Emscripten supporta la traduzione dell'output della libreria SDL2 attraverso Canvas e implementa anche il supporto per OpenGL e EGL tramite l'API WebGL, permettendo di convertire in WebAssembly applicazioni grafiche e giochi (ad esempio, è disponibile un porting del toolkit Qt, supportando i motori di gioco Unreal Engine e Unity, oltre al motore di simulazione fisica Bullet).
Oltre alla compilazione di codice C/C++, vengono sviluppati progetti separati per eseguire nel browser interpreti per di macchine virtuali linguaggi come Lua, C#, Python, Ruby e Perl. Inoltre, è possibile applicare front-end a LLVM che non siano Clang, ad esempio, front-end per linguaggi come Swift, Rust, D e Fortran.
L'assegnazione del numero di versione 6.0 è legata a modifiche che introducono incompatibilità. Le principali modifiche in Emscripten 6.0:
- Sono aumentate le versioni minime dei motori browser in cui può essere eseguito il codice generato: Chrome 74 -> 85, Firefox 68 -> 79 e Safari 12.2 -> 14.1. Questa modifica ha permesso di attivare per impostazione predefinita le estensioni WebAssembly per l'importazione e l'esportazione di variabili globali modificabili, nonché un aumento della bitness dei numeri mantenendo il segno e il valore.
- Durante il caricamento in streaming utilizzando l'operazione Fetch, la dimensione del blocco caricato è ora limitata a 8 MB per prevenire il caricamento in memoria dell'intero contenuto di file di grandi dimensioni.
- Aggiornate le versioni di musl libc 1.2.6, libpng 1.6.58 e google-closure-compiler 20260429.0.0.
- Implementato il flag del compilatore «-m64», che è analogo ai flag
«-sMEMORY64» e «—target=wasm64». - Rimosso il campo PThread.runningWorkers dall'oggetto PThread.
- La funzione pause() ora restituisce 0 anziché EINTR.
- Sulla piattaforma Windows, invece del file bat (emcc.bat), è stato proposto un file exe (emcc.exe) per avviare Emscripten.
Fonte: opennet.ru
