Emscripten 4.0 è disponibile, un compilatore da C/C++ a WebAssembly

È stato rilasciato il toolkit Emscripten 4.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 livello basso chiamato WebAssembly. Il risultato ottenuto può essere utilizzato per integrazioni con progetti JavaScript, per l'esecuzione nei browser web, in Node.js o per la creazione di applicazioni multidispositivo autonome gestite da un runtime wasm. Il codice del progetto è distribuito con licenza MIT. Il compilatore si basa sui contributi del progetto LLVM, e per la generazione di WebAssembly e l'ottimizzazione viene utilizzata 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 della versione 4.0 è collegata a modifiche che interrompono la compatibilità a livello ABI (recompile dei file oggetto e delle librerie create con le versioni precedenti di Emscripten sarà necessaria quando si ricompila il progetto in Emscripten 4.0). Le principali modifiche in Emscripten 4.0 includono:

  • È stata aggiunta l'opzione «-sWASM_LEAGCY_EXCEPTIONS» per scegliere tra i vecchi e i nuovi meccanismi di gestione delle eccezioni. Il meccanismo precedente continua a essere utilizzato per impostazione predefinita, poiché non tutti i browser hanno implementato le capacità di WebAssembly per gestire i nuovi gestori di eccezioni.
  • I componenti compiler-rt, libcxx, libcxxabi e libunwind sono stati aggiornati alla branch LLVM 19.
  • La versione minima supportata del browser Safari (impostazione MIN_SAFARI_VERSION) è stata aumentata da 14.1 a 15.0, consentendo di attivare per impostazione predefinita diverse funzionalità avanzate di WebAssembly:
    • È stato incluso l'uso di nuove istruzioni per la conversione di tipo float in int (nontrapping-fptoint), che invece di generare un'eccezione in caso di overflow del risultato restituiscono il valore minimo o massimo possibile (necessario per SIMD).
    • È stata introdotta l'opzione WASM_BIGINT, in cui per lo scambio di valori interi a 64 bit tra WebAssembly e codice JavaScript viene applicato il tipo BigInt.
    • È stata aggiunta l'opzione BULK_MEMORY, in cui per implementare le funzioni C memcpy e memset vengono utilizzate le istruzioni WebAssembly memory.copy e memory.fill.
  • Nella funzione PATH.basename() è stata disabilitata la normalizzazione dei percorsi (PATH.normalize()), cioè la chiamata ‘PATH.basename(«a/.»)’ ora restituirà «.» invece di «a», mentre ‘PATH.basename(«a/b/..»)’ restituirà «..» invece di «a».
  • Utilizzando l'opzione «-sMODULARIZE», le funzioni factory che creano e restituiscono istanze di moduli WebAssembly e oggetti per JavaScript ora sono contrassegnate come «async» quando compilate in modalità WASM_ASYNC_COMPILATION, attivata per impostazione predefinita.
  • È stata aggiunta la possibilità di specificare librerie JavaScript utilizzando l'opzione «-lfoo.js». A differenza dell'opzione «—js-library», la ricerca della libreria viene effettuata in tutti i percorsi specificati tramite l'opzione «-L».
  • Quando si compila in modalità di debug (-O0 o -sASSERTIONS), per impostazione predefinita viene attivata una variante di debug della funzione malloc con controlli assert abilitati, che individuano errori come chiamate doppie alla funzione free().

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster