Czytałem ostatnio o asm.js i WebAssembly:
http://ejohn.org/blog/asmjs-javascript-compile-target/
https://brendaneich.com/2015/06/from-asm-js-to-webassembly/
Wciąż jestem zdezorientowany w kilku sprawach:
- Czy kod asm.js jest kompilowany na czas i działa? Skompilowane w co?
- Poza tym, że asm.js jest tekstem, a wasm (zestaw sieciowy) jest binarny, jakie są różnice między tymi dwoma?
- Co to oznacza dla innych języków skryptowych działających w przeglądarce? Weźmy na przykład Pythona, czy to będzie
- kod Pythona skompilowany do wasm? lub
- interpreter Pythona (Cpython) skompilowany w wasm i interpretuje pythona?
źródło
asm.js jest podzbiorem JS z instrukcjami „wysoce optymalizowalnymi”. Zasadniczo możesz zadeklarować typ (int, float), a silnik js (w przeglądarkach, ale także node.js) będzie wykonywał instrukcje szybciej. Przynosi korzyści, jeśli Twoja aplikacja wykonuje wiele obliczeń lub grafiki, jeśli jest używana razem z WebGL.
web Assembly to format binarny dla JS, wszystkich JS, a nie tylko asm.js. To nie jest kod bajtowy, to binarne kodowanie AST, które oblicza parser. Ma 2 duże zalety:
Już możemy pisać kod dla przeglądarek innych niż JS: EMSCripten potrafi skompilować kod C ++ w kodzie JS. Inne transkompilatory są już dostępne do kompilacji kodu do JS. Używając asm.js, kod może działać szybciej, gdy wykonuje obliczenia. Używając web assemblera ten kod będzie bardziej zwarty, a przeglądarka będzie mogła go szybciej przetworzyć (ponieważ będzie mogła pominąć parsowanie). Nie będziesz mieć nowej wtyczki do załadowania, takiej jak DirectX, JavaApplets, Flash lub Silverlight, ponieważ wszystko będzie działać w piaskownicy JS.
źródło
Różne przeglądarki kompilują kod asm.js na różne sposoby. Od sierpnia 2015 r .:
asm.js to po prostu JavaScript i dlatego musi działać dokładnie zgodnie ze specyfikacją JavaScript. Jako nowy standard, WebAssembly jest w stanie naprawić niektóre narożne przypadki, w których zachowanie JavaScript nie jest idealne (z punktu widzenia wydajności lub kompilacji) [ 3 ]. W przyszłości [ 4 ], WebAssembly będzie w stanie dodawać funkcje, które w innym przypadku byłyby trudne do wyrażenia w JavaScript.
Jak powiedziałeś, najprostszym sposobem uruchomienia Pythona w przeglądarce w wersji v.1 będzie skompilowanie interpretera Pythona do programu wasm. Oznacza to, że np. Python GC działa w kodzie wasm i ręcznie zarządza pamięcią liniową wasm. Były już eksperymentalne projekty dodawania zaplecza asm.js do PyPy [ 5 ] (co może działać równie dobrze dla wasm). Obecnie napotyka na ograniczenia asm.js, które mogą być rozwiązane przez przyszłą funkcję dynamicznego łączenia w wasm. Idąc dalej, wasm stara się zapewnić obsługę zarówno integracji GC, jak i kompilacji JIT, co umożliwiłoby bardziej wydajną i naturalną integrację z platformą internetową.
źródło