Emscriptenkompilator kodu LLVM do Javascriptu[1] lub WebAssembly[2]. Skompilowane programy działają z szybkością dochodzącą do 2/3 szybkości programów natywnych[3]. Kompilacja odbywa się przez skompilowanie kodu źródłowego do kodu bajtowego LLVM (zwykle kodu C lub C++ z użyciem Clanga). Następnie w zależności od wersji narzędzi do kodu asm.js z wykorzystaniem HTML5 do obsługi multimediów (do wersji 2.0) lub bezpośrednio do binarnego formatu WebAssembly (od wersji 2.0). Emscripten stworzono do przenoszenia gier (implementuje SDL, OpenGL i inne popularne API) i przeniesiono nań silnik Unreal Engine 4[4]. Działają w nim jednak praktycznie dowolne aplikacje, czego przykładem jest środowisko Qt[5]. Licencja Emscripten umożliwia bezpłatne wykorzystanie komercyjne[6].

Emscripten
Logo Emscripten
Logo programu
Autor Alon Zakai
Aktualna wersja stabilna 3.1.69
(11 października 2024) [±]
Rodzaj kompilator
Strona internetowa

Zastosowanie i rozwiązania alternatywne

edytuj

Mniej więcej od 2010 r. znacznie poprawiono wydajność maszyn wirtualnych Javascript, dodano optymalizację języka (asm.js i jego rozszerzenia SIMD), a w przeglądarkach ustandaryzowano obsługę nowoczesnych multimediów (HTML5). Proces poprawiania wydajności ewoluował poprzez możliwość łączenia interpretowanych fragmentów kodu Javascript z szybszym binarnym formatem WebAssembly. W związku z tym pojawiła się możliwość tworzenia dużych aplikacji w całości lub w znacznym stopniu działających po stronie przeglądarki, a także próby przenoszenia istniejących programów (głównie gier) i wynikające z tego zapotrzebowanie na kompilatory różnych języków do formatu wspieranego przez przeglądarki internetowe.

Format docelowy kompilacji

edytuj

Aktualnie domyślnym formatem wyjściowym dla kompilacji jest WebAssembly. Jest to format binarny, zoptymalizowany pod kątem szybkości wykonywania programu. Jedynie wstawki JavaScriptu są pozostawiane jako kod tegoż języka. W celu zachowania kompatybilności ze starszymi przeglądarkami, zgodnymi z EcmaScript 5 można jednak włączyć kompilację do asm.js[7] poprzez ustawienie flagi -sWASM=0.

Przypisy

edytuj
  1. Main — Emscripten 1.37.22 documentation [online], kripken.github.io [dostęp 2017-11-17] (ang.).
  2. Building to WebAssembly. [dostęp 2021-09-23]. (ang.).
  3. Gap between asm.js and native performance gets even narrower with float32 optimizations – Mozilla Hacks – the Web developer blog [online], hacks.mozilla.org [dostęp 2017-11-17] (ang.).
  4. Mozilla and Epic Preview Unreal Engine 4 Running in Firefox.
  5. Wiki - emscripten-qt - Redmine [online], vps2.etotheipiplusone.com:30176 [dostęp 2017-11-17] (ang.).
  6. Open Source License — Emscripten 1.37.22 documentation [online], kripken.github.io [dostęp 2017-11-17] (ang.).
  7. Building to WebAssembly — Emscripten 3.1.26-git (dev) documentation [online], emscripten.org [dostęp 2023-01-04].