WebAssembly: MVP
Twórcy webassembly powtarzają, że kompatybilność wstecz jest bardzo istotna i aplikacje, które teraz napiszemy, będą działać zawsze, także przy nowych wersja. Co więcej bez żadnych zmian z naszej programistycznej strony, może się zdarzyć, że aplikacja będzie działać szybciej i lepiej, ponieważ użytkownik ma nowszą przeglądarkę obsługującą więcej funkcji.
Skupmy się jednak na tym co obecnie dostępne, czyli MVP. Rysunek przewodni tego posta to wycinek drzewka umiejętności WebAssembly według Link Clark WebAssemblys post-MVP- future: A cartoon skill tree
• Portability
czyli możliwość uruchomienia kodu na wszystkich przeglądarkach, a dokładniej na wszystkich nowych przeglądarkach. O ile działa Edge, to w końcu możemy zapomnieć o Internet Explorerze… albo martwić się, że go musimy brać pod uwagę.• Compilation target
tutaj nie ma uwag, technologia jest tak zaprojektowana i to się nie zmieni.• Compact
ponieważ rozmawiamy ciągle o formacie binarnym mamy pewność zwartości treści, żadnych nadmiarowych rozumianych przez człowieka znaków, tylko maszynowe zero jedynkiGdy zaczynamy używać webassembly - już skompilowanego kodu, okazuje się, że mamy do czynienia z Modułami
Moduł webassembly jest oparty o stos wywołań typu LIFO (stack machine, dobry opis zawsze w Wikipedi).
Do dyspozycji mamy 67 instrukcji. 4 typy danych wejściowych - wszystkie numeryczne. Ostatnia dana która zostaje na stosie wywołań to wynik, jest on też typu numerycznego.
Niewiele możliwości, szczególnie uciążliwe może być posługiwanie się stringami.
Moduł webassembly jest bezstanowy i może być współdzielony pomiędzy okna i workery. Dokładnie tak jak moduł ES2015 deklaruje importy i eksporty.
• Linear memory
Moduł taki korzysta z liniowej pamięci, czyli tablicy bajtów, do której mamy dostęp przez odpowiednie instrukcje.Liniowa pamięć to też powód, dlaczego natywnie są wspierane języki same zarządzające pamięcią takie jak C++ czy Rust. To głównie z myślą o tych językach powstawało webassembly, a zarządzanie pamięcią jest w nich z goła inne niż w JavaScript, co jest zaletą nie wadą. W końcu chodzi o różnorodność narzędzi.
Więcej można poczytać w WebAssembly key concepts
• Fast execution
Jedną z korzyści, które na początku ma oferować webassembly jest wydajność - szybki czas wykonania prekompilowanego kodu.Jest to troszkę uproszczenie. Silniki JavaScript miały wiele lat na doskonalenie optymalizacji i radzą sobie obecnie naprawdę dobrze. Nie każdy kod będzie też napisany bardzo wydajnie. Jednak to co zapewnia nam webassembly to spójność czasu wykonania.
Nie jesteśmy zależni od optymalizacji wywołań, znamy czas uruchomienia danego kodu.
Widać to bardzo ładnie na przykładzie generowania mapy kodu napisanego w Rust Oxidizing source maps with Rust and WebAssembly
Jeden obrazek wart 1000 słów, spójrzmy więc poniżej. Pomarańczowe kropki to czas wykonania JavaScript, niebieskie - Rust, niebieskie kropki mają zdecydowanie mniejszy rozrzut.
Komentarze
Prześlij komentarz