Dostępny Emscripten 4.0, kompilator z C/C++ do WebAssembly

Opublikowano wydanie narzędzia Emscripten 4.0, umożliwiającego kompilację kodu w C/C++ oraz innych językach, dla których dostępne są frontend'y oparte na LLVM, do uniwersalnego niskopoziomowego pośredniego kodu WebAssembly. Uzyskany wynik można wykorzystać do integracji z projektami JavaScript, uruchamiania w przeglądarkach internetowych, używania w Node.js lub tworzenia odrębnych aplikacji wieloplatformowych uruchamianych za pomocą runtime wasm. Kod projektu udostępniany jest na licencji MIT. W kompilatorze używane są osiągnięcia projektu LLVM, a do generacji WebAssembly oraz optymalizacji wykorzystywana jest biblioteka Binaryen.

Głównym celem Emscripten jest stworzenie narzędzia, które pozwala na wykonywanie kodu w sieci niezależnie od języka programowania, w którym kod został pierwotnie napisany. W kompilowanych aplikacjach mogą być używane wywołania standardowych bibliotek C i C++ (libc, libcxx), rozszerzeń C++, wielowątkowości opartej na pthreads, API POSIX i wielu bibliotek multimedialnych. Osobno udostępniane są API do integracji z Web API i kodem JavaScript.

Emscripten wspiera translację wyjścia biblioteki SDL2 przez Canvas, a także implementuje wsparcie dla OpenGL i EGL przez API WebGL, co pozwala na konwersję graficznych aplikacji i gier do WebAssembly (na przykład, dostępny jest port zestawu narzędzi Qt, obsługiwane są silniki gier Unreal Engine i Unity, a także silnik symulacji procesów fizycznych Bullet).

Oprócz kompilacji kodu w C/C++, rozwijane są oddzielne projekty do uruchamiania w przeglądarkach interpreterów oraz maszyn wirtualnych dla języków Lua, C#, Python, Ruby i Perl. Ponadto, możliwe jest zastosowanie frontend'ów do LLVM, innych niż Clang, na przykład frontend'ów dla języków takich jak Swift, Rust, D i Fortran.

Nadanie numeru wersji 4.0 wiąże się z wprowadzeniem zmian, które naruszają zgodność na poziomie ABI (przy ponownej budowie projektu w Emscripten 4.0 wymagana będzie ponowna budowa plików obiektowych i bibliotek stworzonych poprzednimi wersjami Emscripten). Główne zmiany w Emscripten 4.0:

  • Dodano opcję „-sWASM_LEAGCY_EXCEPTIONS” do wyboru między starą a nową metodą obsługi wyjątków. Domyślnie nadal używana jest stara metoda, ponieważ nie wszystkie przeglądarki zaimplementowały możliwości WebAssembly do obsługi nowych handlerów wyjątków.
  • Komponenty compiler-rt, libcxx, libcxxabi i libunwind zostały zaktualizowane do gałęzi LLVM 19.
  • Minimalna wspierana w wersjach kompilacyjnych przeglądarki Safari (ustawienie MIN_SAFARI_VERSION) została podniesiona z 14.1 do 15.0, co umożliwiło domyślne włączenie kilku zaawansowanych funkcji WebAssembly:
    • Włączono użycie nowych instrukcji do konwersji typu float na int (nontrapping-fptoint), które zamiast generować wyjątek przy przepełnieniu wyniku zwracają minimalną lub maksymalną wartość (co jest wymagane dla SIMD).
    • Włączono opcję WASM_BIGINT, dzięki której do wymiany 64-bitowych wartości całkowitych między WebAssembly a kodem JavaScript stosowany jest typ BigInt.
    • Włączono opcję BULK_MEMORY, dzięki której do implementacji funkcji C memcpy i memset wykorzystywane są instrukcje WebAssembly memory.copy i memory.fill.
  • W funkcji PATH.basename() wyłączono normalizację ścieżek (PATH.normalize()), tzn. wywołanie ‘PATH.basename(„a/.”)’ teraz zwróci „.” zamiast „a”, a ‘PATH.basename(„a/b/..”)’ zwróci „..” zamiast „a”.
  • Przy użyciu opcji „-sMODULARIZE” funkcje fabryczne, które tworzą i zwracają instancje modułów WebAssembly oraz obiektów dla JavaScript, są teraz oznaczane jako „async” podczas kompilacji w trybie WASM_ASYNC_COMPILATION, używanym domyślnie.
  • Dodano możliwość wskazania bibliotek JavaScript za pomocą opcji „-lfoo.js”. W przeciwieństwie do opcji „—js-library” wyszukiwanie biblioteki odbywa się we wszystkich ścieżkach podanych przez opcję „-L”.
  • Podczas kompilacji w trybie debugowania (-O0 lub -sASSERTIONS) domyślnie używana jest wersja debugowania funkcji malloc z włączonymi kontrolkami assert, wykrywającymi takie błędy, jak podwójne wywołanie funkcji free().

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster