W3C zaprezentowane Ostatnio przez post projekt nowej specyfikacji który standaryzuje kod przygotowania WebAssembly 2.0 i powiązany interfejs API aby umożliwić tworzenie wysokowydajnych aplikacji, które można przenosić na różne przeglądarki i platformy sprzętowe.
Dla tych, którzy są nowicjuszami w WebAssembly, powinniście to wiedzieć zapewnia to ogólne oprogramowanie pośredniczące, niski poziom i niezależne od przeglądarki, do uruchamiania skompilowanych aplikacji 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.
O WebAssembly
WebAssembly może być używany do wykonywania zadań o wysokiej wydajności w przeglądarce, takich jak kodowanie wideo, przetwarzanie dźwięku, manipulacja 3D i grafiką, tworzenie gier, operacje kryptograficzne i obliczenia matematyczne, poprzez wykonywanie kodu napisanego w skompilowanych językach, takich jak C/C++.
Do głównych zadań WebAssembly należy zapewnienie przenośności, przewidywalności zachowania i tożsamości wykonywania kodu na różnych platformach. Ostatnio WebAssembly jest również promowany jako uniwersalna platforma do bezpiecznego wykonywania kodu na dowolnej infrastrukturze, systemie operacyjnym i urządzeniu, nie tylko w przeglądarkach.
O wersji roboczej WebAssembly 2.0
Z części zmian, które zostały wprowadzone od czasu WebAssembly, są gotowe propozycje dla WebAssembly 2.0 to SIMD o stałej szerokości, operacje na pamięci masowej, typy referencyjne, obsługa JavaScript BigInt dla WebAssembly i64, obsługa wielu zwracanych wartości oraz import/eksport zmiennych zmienne globalne.
W3C opublikowało trzy szkice specyfikacji WebAssembly 2.0:
- Rdzeń zespołu internetowego: opisuje maszynę wirtualną niskiego poziomu do uruchamiania kodu pośredniego WebAssembly. Zasoby związane z WebAssembly są w formacie ".wasm", podobnym do plików ".class" Javy, które zawierają statyczne dane i segmenty kodu do pracy z tymi danymi.
- Interfejs JavaScript WebAssembly: udostępnia API do integracji z JavaScript. Pozwala uzyskać wartości i przekazać parametry do funkcji WebAssembly. Wykonanie WebAssembly jest zgodne z modelem bezpieczeństwa JavaScript, a wszystkie interakcje z hostem są wykonywane w sposób podobny do uruchamiania kodu JavaScript.
- Web API WebAssembly: definiuje interfejs API oparty na mechanizmie Promise do żądania i wykonywania zasobów „.wasm”. Format zasobów WebAssembly jest zoptymalizowany do rozpoczęcia wykonywania bez oczekiwania na pełne pobranie pliku, co poprawia czas reakcji aplikacji internetowych.
Różnice między WebAssembly a WebAssembly 2.0
Należy również zauważyć, że w WebAssembly 2.0 wprowadzono kilka ważnych zmian w porównaniu z pierwszą wersją standardu:
- Obsługa typu wektorowego v128 i powiązane instrukcje wektorowe, które umożliwiają równoległe wykonywanie operacji na wielu wartościach liczbowych (SIMD, pojedyncza instrukcja, wiele danych).
- Możliwość importowania i eksportowania mutowalnych zmiennych globalnych, co umożliwia globalne wiązanie wartości jako wskaźników stosu w C++.
- Nowe instrukcje konwersji float na int, który zamiast zgłaszać wyjątek przy przepełnieniu wyniku, zwraca minimalną lub maksymalną możliwą wartość (wymagana dla SIMD).
- Instrukcje rozwijania znaku liczb całkowitych (zwiększenie głębi bitowej liczby zachowując znak i wartość).
- Obsługa zwracania wielu wartości przez bloki i funkcje (jak również przekazywanie wielu parametrów do funkcji).
- Implementuj funkcje JavaScript BigInt64Array i BigUint64Array do konwersji między typem JavaScript BigInt i reprezentacją WebAssembly 64-bitowych liczb całkowitych.
- Wsparcie dla typów referencyjnych (funcref i externref) oraz skojarzone z nimi instrukcje (select, ref.null, ref.func i ref.is_null).
- instrukcje memory.copy, memory.fill, memory.init i data.drop kopiowanie danych między obszarami pamięci i usuwanie obszarów pamięci.
- Instrukcje dotyczące bezpośredniego dostępu i modyfikacji tabel (zestaw.tabeli, 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).
Na koniec, jeśli chcesz dowiedzieć się więcej na ten temat, możesz zapoznać się ze szczegółami W poniższym linku.