Dostępna jest standardowa wersja zapoznawcza WebAssembly 2.0

Organizacja W3C opublikowała wersję roboczą nowej specyfikacji, która standaryzuje oprogramowanie pośrednie WebAssembly 2.0 i powiązane z nim API, umożliwiając tworzenie aplikacji o wysokiej wydajności, które można przenosić między przeglądarkami i platformami sprzętowymi. WebAssembly zapewnia niezależny od przeglądarki, uniwersalny, niskopoziomowy kod pośredni do uruchamiania aplikacji skompilowanych z różnych języków programowania. Używając JIT dla WebAssembly, możesz osiągnąć poziom wydajności zbliżony do kodu natywnego.

Technologię WebAssembly można wykorzystać do wykonywania zadań o wysokiej wydajności w przeglądarce, takich jak kodowanie wideo, przetwarzanie dźwięku, grafika i manipulacja 3D, tworzenie gier, operacje kryptograficzne i obliczenia matematyczne, umożliwiając pisanie kodu w językach kompilowanych, takich jak C/C++ .

Do głównych celów WebAssembly należy zapewnienie przenośności, przewidywalnego zachowania i identycznego wykonania kodu na różnych platformach. Ostatnio promowano także WebAssembly jako uniwersalną platformę do bezpiecznego wykonywania kodu w dowolnej infrastrukturze, systemie operacyjnym i urządzeniu, nie ograniczając się do przeglądarek.

W3C opublikowało trzy projekty specyfikacji dla WebAssembly 2.0:

  • WebAssembly Core — opisuje maszynę wirtualną niskiego poziomu do uruchamiania kodu pośredniego WebAssembly. Zasoby powiązane z WebAssembly są dostarczane w formacie „.wasm”, podobnym do plików „.class” w Javie, zawierającym dane statyczne i segmenty kodu umożliwiające pracę z tymi danymi.
  • Interfejs JavaScript WebAssembly — zapewnia interfejs API do integracji z JavaScript. Umożliwia pobieranie wartości i przekazywanie parametrów do funkcji WebAssembly. Wykonanie WebAssembly jest zgodne z modelem bezpieczeństwa JavaScript, a cała interakcja z systemem głównym odbywa się w taki sam sposób, jak wykonanie kodu JavaScript.
  • WebAssembly Web API — definiuje interfejs programistyczny oparty na mechanizmie Promise do żądania i wykonywania zasobów „.wasm”. Format zasobów WebAssembly jest zoptymalizowany pod kątem rozpoczęcia wykonywania bez oczekiwania na pełne załadowanie pliku, co poprawia czas reakcji aplikacji internetowych.

Główne zmiany w WebAssembly 2.0 w porównaniu do pierwszej wersji standardu:

  • Obsługa typu wektora v128 i powiązanych instrukcji wektorowych, które umożliwiają równoległe wykonywanie akcji na wielu wartościach numerycznych (SIMD, pojedyncza instrukcja, wiele danych).
  • Możliwość importowania i eksportowania zmiennych globalnych, umożliwiających globalne powiązanie dla wartości takich jak wskaźniki stosu w C++.
  • Nowe instrukcje konwersji float na int, które zamiast zgłaszać wyjątek w przypadku przepełnienia wyniku, zwracają minimalną lub maksymalną możliwą wartość (niezbędną dla SIMD).
  • Instrukcje dotyczące rozwijania liczb całkowitych przez znak (zwiększanie głębi bitowej liczby przy zachowaniu znaku i wartości).
  • Wsparcie dla bloków i funkcji zwracających wiele wartości (oprócz przekazywania wielu parametrów do funkcji).
  • Implementacja funkcji JavaScript BigInt64Array i BigUint64Array do konwersji między typem JavaScript BigInt a reprezentacją WebAssembly 64-bitowych liczb całkowitych.
  • Obsługa typów referencyjnych (funcref i externref) oraz powiązanych z nimi instrukcji (select, ref.null, ref.func i ref.is_null).
  • Instrukcje Memory.copy, memory.fill, memory.init i data.drop służące do kopiowania danych między obszarami pamięci i czyszczenia obszarów pamięci.
  • Instrukcje dotyczące bezpośredniego dostępu i modyfikacji tabel (table.set, table.get, table.size, table.grow). Możliwość tworzenia, importowania i eksportowania wielu tabel w jednym module. Funkcje kopiowania/wypełniania tabel w trybie wsadowym (table.copy, table.init i elem.drop).

Źródło: opennet.ru

Dodaj komentarz