Konsorcjum W3C o nadaniu technologii WebAssembly statusu rekomendowanego standardu. WebAssembly dostarcza uniwersalny, niezależny od przeglądarki, niskopoziomowy kod pośredni do wykonywania aplikacji skompilowanych z różnych języków programowania. WebAssembly jest promowane jako bardziej obiecująca i przenośna technologia tworzenia wysoko wydajnych aplikacji webowych. Może być stosowane do zadań wymagających dużej wydajności, takich jak kodowanie wideo, przetwarzanie dźwięku, manipulacja grafiką i 3D, rozwój gier, operacje kryptograficzne, obliczenia matematyczne i tworzenie przenośnych realizacji języków programowania.
WebAssembly w wielu aspektach przypomina Asm.js, ale różni się tym, że jest formatem binarnym, niezwiązanym z JavaScriptem. W WebAssembly nie jest wymagane użycie zbieracza śmieci, gdyż stosuje się jawne zarządzanie pamięcią. Dzięki zastosowaniu JIT dla WebAssembly można osiągnąć poziom wydajności zbliżony do kodu natywnego. Wśród głównych osiągnięć WebAssembly wyróżnia się zapewnienie przenośności, przewidywalności zachowania oraz identyczności wykonania kodu na różnych platformach. Ostatnio WebAssembly również jako uniwersalna platforma do bezpiecznego wykonywania kodu w różnych infrastrukturach, systemach operacyjnych i urządzeniach, nie ograniczając się do przeglądarek.
W3C ustandaryzowało trzy specyfikacje związane z WebAssembly:
- – opisuje niskopoziomową maszynę wirtualną do wykonywania kodu pośredniego WebAssembly. Powiązane zasoby WebAssembly dostarczane są w formacie „.wasm”, przypominającym plik „.class” w Java i zawierającym dane statyczne oraz segmenty kodu do pracy z tymi danymi.
- – definiuje interfejs programistyczny oparty na mechanizmie Promise do żądania i wykonywania zasobów „.wasm”. Format zasobów WebAssembly jest zoptymalizowany do rozpoczęcia wykonania bez oczekiwania na pełne załadowanie pliku, co pozwala na zwiększenie responsywności aplikacji webowych.
- — udostępnia API do integracji z JavaScript. Umożliwia uzyskiwanie wartości i przekazywanie parametrów do funkcji WebAssembly. Wykonanie WebAssembly odpowiada modelowi bezpieczeństwa JavaScript, a wszelkie interakcje z systemem bazowym odbywają się analogicznie do wykonywania kodu JavaScript.
W przyszłości planowane jest opracowanie specyfikacji dla takich możliwości WebAssembly, jak:
- Wielowątkowość z dzieloną pamięcią i atomowym dostępem do pamięci;
- Operacje wektorowe oparte na SIMD, umożliwiające równoległe wykonywanie pętli;
- Typy referencyjne dla bezpośrednich odniesień do obiektów z kodu WebAssembly;
- Możliwość wywoływania funkcji bez wydawania dodatkowej przestrzeni w stosie;
- Integracja z modułami ECMAScript — możliwość ładowania kodu WebAssembly z JavaScript jako modułów, które odpowiadają specyfikacji ECMAScript 6;
- Tryb pracy ze zbieraczem śmieci;
- Interfejsy debugowania;
- (WebAssembly System Interface) — API do bezpośredniej interakcji z systemem operacyjnym (POSIX API do obsługi plików, gniazd itp.).
Źródło: opennet.ru
