Rafał Brzoska
WebAssembly
Przeglądarkowa rewolucja
WebAssembly – przeglądarkowa rewolucja
Rafał Brzoska
AGENDA
Krótka historia (ewolucji) JS
Czym jest WebAssembly
Jak działa WebAssembly
No i co teraz? ☺
WebAssembly – przeglądarkowa rewolucja
AD 1995AD 1990
Dawno dawno temu…
AD 1997AD 2013
(![]+[])[+!!
[]]NaN == NULL !! 264
GoogloixApploix
Mikrosoftix Mozillix
HA HA HA!
WebAssembly (wasm)
C/C++/Rust .wasm JS
WebAssembly (wasm)
to efektywny, szybki i uniwersalny
niskopoziomowy format
kompilacji dla platformy web
webassembly.org
Uniwersalny
caniuse.com/#feat=wasm (11.2017)
C, C++, Rust
.wasm
.wasm != asm.js
Szybki i efektywny
function add(a, b) {
return a + b;
}
console.log(add(1,2)) 3
console.log(add(”a”,”b”)) „ab”
console.log(add(1,”b”))
console.log(add(1,+!![]))
„1b”
2
PARSE
COMPILE
OPTIMIZE
EXECUTE
GARBAGE
COLLECTION
DECODE
COMPILE
OPTIMIZE
EXECUTE
JS Performance WASM Performance
64bit integer support
JS 64bit (52bit value)
Niskopoziomowy
C
int factorial(int n)
{
if (n == 0)
return 1;
else
return n *
factorial(n-1);
}
WASM binary
20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B
Bezpieczny
Używa środowiska JS VM
Zasady zarządzania pamięcią
WASM traps
Co nowego w WebAssembly?
Kompilacja z innych języków
(C#, TypeScript, …)
Bezpośredni dostęp do WEB Api
Garbage Collector
Obsługa wielu wątków
…
Czy to koniec JavaScriptu?
NIE
Po co ten WebAssembly
Gry
Image, Video processing
Skomplikowane obliczenia
CAD
…???
Jak uruchomić, jak zacząć?
Emscripten
http://webassembly.org/getting-started/developers-guide/
WebAssembly JS API
Binaryen, LLVM
DEMO
AVE! ☺