SLIDE 1 FUTURE OF THE WEB PLATFORM
WEBASSEMBLY AND THE
1
SLIDE 2 I’M AG_DUBS
WELCOME TO MY TED TALK
2
SLIDE 3 THE RIGHT LANGUAGE FOR THE JOB
3
SLIDE 4 THE RIGHT LANGUAGE FOR THE JOB?
4
SLIDE 5 THE RIGHT LANGUAGE FOR THE JOB?
5
SLIDE 6 THE RIGHT LANGUAGE FOR THE JOB?
6
SLIDE 7 WEBASSEMBLY IS A LANGUAGE THAT WILL REDEFINE THE JOBS WE DO AND THE LANGUAGES WE DO THEM IN
AG_DUBS
HYPOTHESIS 7
SLIDE 8 PLAN
LET’S GET READY TO RUMBLE
▸ Why is WebAssembly different? ▸ What is WebAssembly? ▸ What is the Web Platform? ▸ How is WebAssembly going to change the Web Platform? ▸ Where we are now, where we going in the future
8
SLIDE 9 HISTORY OF PROGRAMMING LANGUAGE DEVELOPMENT
AN EXTREMELY BRIEF AND INCOMPLETE
9
SLIDE 10 1970 1980 1990 2000 2010 2020 X86 (1972) Rust (2010) Python (1991) C (1972) C++ (1985) Ruby (1995) Go (2009) Swift (2014) Kotlin (2011) Java (1995) JavaScript (1995) Erlang (1995) Haskell (1990) Scala (2004)
10
Wasm (2017) ARM (1985) C# (2000)
🤙
SLIDE 11 1970 1980 1990 2000 2010 2020 X86 (1972) Rust (2010) Python (1991) C (1972) C++ (1985) Ruby (1995) Wasm (2017) Go (2009) Swift (2014) C# (2000) Kotlin (2011) Java (1995) JavaScript (1995) Erlang (1995) Haskell (1990) Scala (2004)
11
ARM (1985)
🤙
SLIDE 12 C# (2000) 1970 1980 1990 2000 2010 2020 X86 (1972) Rust (2010) Python (1991) C (1972) C++ (1985) Ruby (1995) Go (2009) Swift (2014) Kotlin (2011) Java (1995) JavaScript (1995) Erlang (1995) Haskell (1990) Scala (2004)
32 YEARS!
12
ARM (1985) Wasm (2017)
🤙
SLIDE 13 ASSEMBLY LANGUAGE?
WHAT IS AN
13
SLIDE 16 😁 💼
Rust💭
💦x86 🦁🐊
fn main() { let sum = 1 + 1; }
100101010010
SLIDE 17 😁 💼
Rust💭
💦x86 🦁🐊
fn main() { let sum = 1 + 1; }
100101010010
ADD MEM1 MEM2
SLIDE 18 😁 💼
Rust💭
💦x86 🦁 🐊
fn main() { let sum = 1 + 1; }
100101010010
ADD MEM1 MEM2
💼 💦ARM
101100010011
AÑADIR MEM1 MEM2
SLIDE 19 WEBASSEMBLY?
WHAT IS
19
SLIDE 20 😁 💼
Rust💭
💦x86 🦁 🐊
fn main() { let sum = 1 + 1; }
100101010010
ADD MEM1 MEM2
💼 💦ARM
101100010011
AÑADIR MEM1 MEM2
SLIDE 21 WEBASSEMBLY
- COMPACT BINARY FORMAT
- MULTIPLE “HUMAN-READABLE” TEXT FORMATS
- BUILT IN THE OPEN VIA WEB STANDARDS COMMITTEE
- INTEGRATES WITH EXISTING JAVASCRIPT VIS
HTTPS://WEBASSEMBLY.ORG/
SLIDE 22 20 00 42 00 51 04 7E 42 01 05 20 00 20 00 42 01
FACTORIAL
SLIDE 23 RESOURCES
- HTTP://AST.RUN/
- HTTPS://WEBASSEMBLY.STUDIO/
- HTTPS://DEVELOPER.MOZILLA.ORG/EN-US/DOCS/
WEBASSEMBLY
SLIDE 24
NO GC (YET)
SLIDE 25
SMALL AND FAST
SLIDE 26 IT’S COOL THAT WEBASSEMBLY IS FAST, BUT IT’S KILLER FEATURE IS ITS PREDICTABILITY.
AG_DUBS
WHO ELSE IS ON CALL RIGHT NOW? 26
SLIDE 27
SLIDE 28
BUT WHY???
SLIDE 29 WEB PLATFORM?
WHAT IS THE
29
SLIDE 30 WHAT IS A PLATFORM?
ISA (INSTRUCTION SET ARCHITECTURE) RUNTIME TOOLING
SLIDE 31 JAVA
ISA (INSTRUCTION SET ARCHITECTURE) JAVA BYTE CODE RUNTIME JVM TOOLING JAVAC
SLIDE 32 X86 ON UNIX
ISA (INSTRUCTION SET ARCHITECTURE) X86 RUNTIME UNIX TOOLING SHELL, C, GCC
SLIDE 33 WEB PLATFORM
ISA (INSTRUCTION SET ARCHITECTURE) ???? RUNTIME JAVASCRIPT, PLATFORM APIS TOOLING SO MUCH.
SLIDE 34 HISTORY OF THE WEB PLATFORM
AN EXTREMELY BRIEF AND INCOMPLETE
34
SLIDE 35 THE WEB PLATFORM IS UNUSUAL IN THAT IT WAS DEVELOPED OUT OF ORDER AND IT HAS, HISTORICALLY, HAD MISSING PIECES.
@steveklabnik
SLIDE 36 1970 1980 1990 2000 2010 2020 JavaScript (1995) IE (1995) Browser War I (1995-2001) Netscape (1994) HTML (1993) Wasm (2017) Chrome (2008) Firefox (2002) Safari (2003) Browser War II (2008-2017) CSS (1996) First Website (1991)
SLIDE 37 JavaScript (1995) HTML (1993) Wasm (2017) NodeJS (2009) V8 (2008) JQuery (2006) React (2012) 1970 1980 1990 2000 2010 2020 Angular (2010) Ember (2011) Google Maps (2004) CSS (1996) AJAX (2009) SPA (2003) TraceMonkey (2009) First Website (1991)
SLIDE 38 IE (1995) Netscape (1994) Chrome (2008) Firefox (2002) Safari (2003) JavaScript (1995) HTML (1993) CSS (1996) Wasm (2017) NodeJS (2009) V8 (2008) React (2012) 1970 1980 1990 2000 2010 2020 Angular (2010) Ember (2011) Google Maps (2004) Adobe Flash (1996) NaCL (2011) Java Applets (1995) JQuery (2006)
SPEED OF COMPUTATION IN THE BROWSER
AJAX (2009) TraceMonkey (2009) SPA (2003) First Website (1991)
SLIDE 39 IE (1995) Netscape (1994) Chrome (2008) Firefox (2002) Safari (2003) JavaScript (1995) HTML (1993) CSS (1996) Wasm (2017) NodeJS (2009) V8 (2008) React (2012) 1970 1980 1990 2000 2010 2020 Angular (2010) Ember (2011) Google Maps (2004) Adobe Flash (1996) NaCL (2011) Java Applets (1995) JQuery (2006)
SPEED OF COMPUTATION IN THE BROWSER
AJAX (2009) TraceMonkey (2009) SPA (2003)
*JIT compilers
First Website (1991)
SLIDE 40
JAVASCRIPT AS AN ISA?
SLIDE 41 I WAS NOT DESIGNED FOR THIS TASK.
JavaScript
SLIDE 42 WEB PLATFORM
ISA (INSTRUCTION SET ARCHITECTURE) WEB ASSEMBLY RUNTIME JAVASCRIPT, PLATFORM APIS TOOLING SO MUCH.
SLIDE 43 INTERPRETERS AND COMPILERS
43
SLIDE 44 BROWSER ENGINES ARE FRIGGIN MAGICAL OK?
AG_DUBS
THIS SLIDE IS FOR BENEDIKT MEUER 44
SLIDE 45 EVEN?
HOW DO BROWSERS
45
SLIDE 46 JIT?
WHAT IS A
46
SLIDE 47 FAST?
WHY IS WEBASSEMBLY
47
Lin Clark. https://hacks.mozilla.org/2017/02/what-makes-webassembly-fast/
SLIDE 48 HOW DOES COMPUTATION ON THE WEB WORK NOW
48
SLIDE 49 SERVER ORIENTED
😁 😁 😁 😁
SLIDE 50 SERVER ORIENTED
😁 😁 😁 😁
SLIDE 51 SERVER ORIENTED
🍖 🍖 🍖 🍖 😁 😁 😁 😁
SLIDE 52 SERVER ORIENTED
🍖 🍖 🍖 🍖 😁 😁 😁 😁
SLIDE 53 SERVER ORIENTED
🍖 🍖 🍖 🍖 😁 😁 😁 😁
SLIDE 54 SERVER ORIENTED
😁 😁 😁 😁 🧻 🧻 WITH CACHE
SLIDE 55 😁 😁 😁 😁 🧻 🧻
SERVER ORIENTED
WITH CACHE
SLIDE 56 🍖🍖 😁 😁 😁 😁 🧻 🧻
SERVER ORIENTED
WITH CACHE
SLIDE 57 🍖🍖 😁 😁 😁 😁 🧻 🧻
SERVER ORIENTED
WITH CACHE
SLIDE 58 🍖 🍖 😁 😁 😁 😁 🧻 🧻
SERVER ORIENTED
WITH CACHE
SLIDE 59 🍖 🍖 😁 😁 😁 😁 🧻 🧻 🍖 🍖
SERVER ORIENTED
WITH CACHE
SLIDE 60 😁 😁 😁 😁 🍖 🍖 🧻 🧻
SERVER ORIENTED
WITH CACHE 🍖 🍖
SLIDE 61 😁 😁 😁 😁 🍖 🍖 🧻 🧻 🍖 🍖
SERVER ORIENTED
WITH CACHE 🍖 🍖
SLIDE 62 😁 😁 😁 😁 🍖 🍖 🧻 🧻 🍖 🍖
SERVER ORIENTED
WITH CACHE 🍖 🍖
SLIDE 63 CLIENT ORIENTED
😁 😁 😁 😁
SLIDE 64 😁 😁 😁 😁
CLIENT ORIENTED
SLIDE 65 😁 😁 😁 😁
CLIENT ORIENTED
SLIDE 66 😁 😁 😁 😁
CLIENT ORIENTED
SLIDE 67 😁 😁 😁 😁
CLIENT ORIENTED
SLIDE 68 😁 😁 😁 😁
CLIENT ORIENTED
🍖 🍖 🍖 🍖
SLIDE 69 😁 😁 😁 😁 🧻 🧻
CLIENT ORIENTED
WITH CACHE
SLIDE 70 😁 😁 😁 😁 🧻 🧻
CLIENT ORIENTED
WITH CACHE
SLIDE 71 😁 😁 😁 😁 🧻 🧻
CLIENT ORIENTED
WITH CACHE
SLIDE 72 😁 😁 😁 😁 🧻 🧻
CLIENT ORIENTED
WITH CACHE
SLIDE 73 😁 😁 😁 😁 🧻 🧻 🍖 🍖
CLIENT ORIENTED
WITH CACHE
SLIDE 74 😁 😁 😁 😁 🧻 🧻 🍖 🍖
CLIENT ORIENTED
WITH CACHE
SLIDE 75 😁 😁 😁 😁 🧻 🧻 🍖 🍖
CLIENT ORIENTED
WITH CACHE
SLIDE 76 CLIENT ORIENTED
😁 😁 😁 😁 🧻 🧻 🍖 🍖 🍖 🍖 WITH CACHE
SLIDE 77 HOW COULD COMPUTATION ON THE WEB WORK
77
SLIDE 78 😁 😁 😁 😁 🧻 🧻
EDGE COMPUTE
https://gimme.pizza.now
SLIDE 79 😁 😁 😁 😁 🧻 🧻
EDGE COMPUTE
🍖 🍖
https://gimme.pizza.now
SLIDE 80 😁 😁 😁 😁 🧻 🧻
EDGE COMPUTE
🍖 🍖
https://gimme.pizza.now
SLIDE 81 😁 😁 😁 😁 🧻 🧻
EDGE COMPUTE
🍖 🍖
https://gimme.pizza.now
SLIDE 82 😁 😁 😁 😁 🧻 🧻
EDGE COMPUTE
🍖 🍖
https://gimme.pizza.now
🍖 🍖
SLIDE 83 😁 😁 😁 😁 🧻 🧻
EDGE COMPUTE
🍖 🍖 🍖 🍖
https://gimme.pizza.now
SLIDE 84
BUT WHY???
SLIDE 85 WEBASSEMBLY AND JS AS A UNIFIED WEB PLATFORM MAKES OFFERING EDGE COMPUTE MORE ECONOMICALLY FEASIBLE
SLIDE 86
BUT WHY???
SLIDE 87
LESS LATENCY MEANS MORE ACCESS FOR MORE PEOPLE
SLIDE 88 HOW CAN I USE WEB ASSEMBLY TODAY?
88
SLIDE 89 EMSCRIPTEN?
WHAT IS
89
SLIDE 90 EMSCRIPTEN
- LLVM BACKEND THAT MAKES ASM.JS OR WEBASSEMBLY
- USED BY PNACL
- USED BY UNITY, UNREAL, DOSBOX
- C, C++, RUST
HTTPS://EMSCRIPTEN.ORG/
SLIDE 91 REWRITE IT IN RUST?
SHOULD I
91
SLIDE 92
YES!
SLIDE 93 RUSTWASM
- RUST COMPILER (W/LLVM) TARGETING WEBASSEMBLY
- GENERATES JAVASCRIPT BINDINGS TO WASM
- INTEROPERATES WITH JS TOOLS: NPM, WEBPACK,
GREENKEEPER
- HEAVY FOCUS ON DEVELOPER TOOLS AND EXPERIENCE
HTTPS://RUSTWASM.GITHUB.IO/
SLIDE 94
SLIDE 95
SLIDE 96 HTTPS://RUSTWASM.GITHUB.IO/WASM-PACK
SLIDE 97
DEMO TIME
SLIDE 98 JAVASCRIPT?
WHAT ABOUT
98
SLIDE 99 CAN JS COMPILE TO WEBASSEMBLY?
- ANYTHING CAN COMPILE TO WEBASSEMBLY
- ONE MUST COMPILE THE RUNTIME IN ADDITION TO THEIR
PROGRAM WHEN USING AN INTERPRETED LANGUAGE
SLIDE 100 ASSEMBLYSCRIPT?
WHAT IS
100
SLIDE 101 ASSEMBLYSCRIPT
- SUBSET OF TYPESCRIPT COMPILES WEBASSEMBLY VIA
BINARYEN
- LOWEST BARRIER TO ENTRY FOR JS DEVELOPERS
HTTPS://ASSEMBLYSCRIPT.ORG/
SLIDE 102 EVERY PLATFORM WILL BECOME THE WEB PLATFORM.
AG_DUBS
THE SUN IS NEVER GONNA SET ON THE V8 EMPIRE 102
SLIDE 103 UNIVERSAL BINARIES
THE DREAM OF
103
SLIDE 104 I WANT A WEBASSEMBLY OPERATING SYSTEM AND I WANT IT YESTERDAY.
AG_DUBS
TEXT 104
SLIDE 105 SOON, "WEB APPLICATION" DOES NOT NEED TO BE SYNONYMOUS WITH "NETWORKED APPLICATION" OR "WEB PAGE" OR ANYTHING ELSE WE ASSOCIATE WITH THE WEB PLATFORM TODAY.
@steveklabnik
SLIDE 106
“NO INSTALL NEEDED”
SLIDE 107 WE SHOULD BE DESIGNING LANGUAGES TODAY FOR THE WEBASSEMBLY TOMORROW
107
SLIDE 108
DEVELOPER EXPERIENCE MATTERS
SLIDE 109
RUNTIMES ARE EXPENSIVE
SLIDE 110
RUNTIMES ARE CONFUSING
SLIDE 111
CODE FOR HUMANS IS DIFFERENT THAN CODE FOR COMPUTERS
SLIDE 112
WE CAN MAKE PROGRAMMING AND PROGRAMS MORE ACCESSIBLE WITH THE POWER OF COMPILERS
SLIDE 113
I WELCOME OUR COMPILED FUTURE
SLIDE 114 WEBASSEMBLY IS A LANGUAGE THAT WILL REDEFINE THE JOBS WE DO AND THE LANGUAGES WE DO THEM IN
AG_DUBS
HYPOTHESIS 114
SLIDE 115
SLIDE 116
SUPPORT MORE HARDWARE WITH LESS
SLIDE 117
LESS LATENCY MEANS MORE ACCESS FOR MORE PEOPLE
SLIDE 118 WEBASSEMBLY MEANS A MORE DEMOCRATIC INTERNET
118
SLIDE 119 @AG_DUBS
THANKS!