WebAssembly, co to jest i o co tak naprawdę chodzi


Wiemy już co boli JavaScript jak on się rozwijał to możemy porozmawiać o tym co dalej, czyli o webassembly.

Co to jest WebAssembly ?

·       to nowy niskopoziomowy, binarny format instrukcji przeznaczony dla Web'a
·       w skrócie WASM
·       WebAssembly pliki mają rozszerzenie .wasm
·       nowy target kompilacji
·       bytecode dla web


Ale o co chodzi?

Blieżej metalu. Czasem mam wrażenie, że zapominamy, iż nasze komputery, jednostki obliczeniowe działają na bitach, rozumieją zera i jedynki 01
Pisanie w kodzie binarnym jest bardzo trudne i niezrozumiałe dla człowieka, dlatego powstał np. assembler, czyli zbiór instrukcji już trochę bardziej zrozumiałych, tłumaczonych potem do kodu binarnego.



Ale Assembler nadal nie jest zbyt przyjemny do pisania. Poszliśmy więc dalej i stworzyli tak zwane języki wysokiego poziomu. Czyli języki łatwe do nauczenia się i pisania skomplikowanego kodu. Bardziej ogólne i bliższe idei/problemom biznesowym niż metalowi.





Oczywiście to jest najprostszy model.  Różne języki mogą mieć po drodze jeszcze jeden 'przejściowy język' (np. Intermidiete Language IL w .NET). A nasza maszyna, na której uruchamia się kod może mieć różną architekturę - np. smartfon vs desktop.

Gdzie w tym wszystkim jest WebAssembly?

Popatrzmy na to trochę inaczej. Wiemy, że w trakcie wojen wydajnościowych przeglądarek powstały silniki takie jak V8 które interpretują i uruchamiają kod. Lepiej więc będzie popatrzeć na całość problemu tak:



Teraz to przeglądarka wie na jakim kawałku metalu uruchamia kod i wie, jak go zamienić w zera i jedynki zrozumiałe dla maszyny, na której przeglądarka działa.
WebAssembly dodaje możliwość uruchomienia każdego innego kodu w przeglądarce, po odpowiednim jego przygotowaniu - czyli skompilowaniu do formatu binarnego wasm.




Skoro już wiemy co to znaczy, że mamy kod binarny, to nie zdziwi, że taki kod powinien wykonywać się szybciej niż interpretowany JavaScript. Nie zawsze jest to oczywiście prawdą w końcu V8 robi dobrą robotę przy optymalizacji, ale ogólna zasada mówi, że nie potrzebujemy już czasu na kompilację, bo to dzieje się w trakcie developmentu a nie uruchomienia.
wykres czasu wykonania webAssembly, porównywalny z wykresami z poprzedniego artykułu

Co dalej i dlaczego wato obserwować technologię?

Ponieważ wasm to kod binarny, więc jego uruchomienie będzie szybkie.
WebAssembly nie powstało po to aby zastąpić JavaScript, a raczej współistnieć i uzupełniać się z nim nawzajem.
Jedną z najważniejszych informacji o WebAssembly jest to, że jest to otwarty standard rozwijany przez wszystkich producentów przeglądarek pod nadzorem W3C.
A od roku 2018 jest wspierany natywnie przez wszystkie duże przeglądarki, również mobilne.

WebAssembly działa w tej samej piaskownicy co JavaScript więc ma taki sam poziom zabezpieczeń. Jednak, skoro webassembly nie jest językiem a tylko targetem kompilatora, to możemy skorzystać z innych języków. Użyć języka odpowiedniego do zadania przed jakim stajemy. Dostajemy pełną skrzynkę narzędziową z której możemy wybierać co nam pasuje.


W wersji z 2019 roku webassembly natywnie wspiera tylko języki które same potrafią zarządzać swoją pamięcią, czyli C++, C, Rust. Jednak jest możliwość uruchamiania innych języków, jeśli tylko zaadresujemy problem z pamięcią np. poprzez dostarczenie Garbage Collector. W .NET sprawę załatwiono jeszcze inaczej - dostarczając cały runtime.

Popularność języków programowania, StackOverflow 2019




Komentarze

Popularne posty