środa, 27 lutego 2013

asm.js - superwydajny JavaScript od Mozilli

asm.js to podzbiór języka JavaScript opracowany przez Mozillę. W chwili obecnej programy napisane w asm.js osiągają ok. połowę  wydajności programów natywnych. Jest to wynik kilkukrotnie lepszy od najlepszych wyników uzyskiwanych w pełnym JavaScript i porównywalny (a czasami nawet lepszy) do Javy, C# czy wczesnych implementacji NaCl.


Powyższy wykres pochodzi prezentacji Alona Zakaiego [1] z Mozilli.

Jedną z głównych zalet asm.js jest to, że to tylko podzbiór JavaScriptu i nie wymaga dodatkowych wtyczek czy interpreterów w przeglądarce. Nie zrywa też kompatybilności z istniejącymi silnikami JavaScript. Jeśli jakaś przeglądarka nie obsługuje asm.js to wykona go jako zwykły JS.

Wzrost wydajności możliwy był dzięki wprowadzeniu kilku ograniczeń m. in. statycznego typowania. Teraz dostępna jest kompilacja AOT (Ahead Of Time), podczas gdy przy pełnym JS była to tylko kompilacja JIT (Just In Time) niektórych fragmentów programu. Nie jest przy tym potrzebny nowy kompilator, bo odpowiednie mechanizmy zaimplementowano już w przeglądarkach na potrzeby JS JIT.

Jednym z głównych przykładów zastosowania asm.js jest kod wynikowy kompilatorów C/C++ do JS. Emscripten już teraz potrafi generować kod w asm.js. Wykorzystanie Emscripten (jeszcze bez asm.js, czyli znacznie wolniejszego) można zobaczyć w demach Unigine Crypt, BananaBread czy Bullet.

Niebawem do Polski mają zawitać telefony z Firefox OS. Tu trzeba dodać: tanie telefony z mało wydajnymi podzespołami. To czyni projekt asm.js krytycznym dla powodzenia całego projektu. 

1. Przyznam, że mam problem z odmianą tego nazwiska.

Notka poboczna

Jest jedna rzecz, którą lubię w Mozilli: przejrzystość. Nie robi niczego za zamkniętymi drzwiami jak Google czy Canonical. Nie próbuje przewracać świata przeglądarek do góry nogami jak Google z NaCl. Nie mami "applopodobymi" premierami i licznikami jak Canonical.
Gdy pokazali Boot2Gecko, czyli Firefox OS i stwierdzili, że główną zaletą będzie wydajność, to popukałem się w czoło. Przecież HTML5+JS nie może być wydajny! Teraz zaczynam wątpić.

Dzięki przejrzystości nie musimy czekać na finalne wydanie asm.js. Już teraz można je przetestować z wykorzystaniem Firefoksa Odinmonkey i kodu skompilowanego przez Emscripten z flagą ASM_JS=1.

Porównajcie to z polityką Google opowiadającego od lat o PNaCl i po dziś dzień nie potrafiącego upublicznić działającej implementacji.

Brak komentarzy:

Prześlij komentarz