Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
@sendilkumarn Hej! Stockholm
Slide 2
Slide 2 text
@sendilkumarn Every progra!"ing language has trade-offs. Choose one that solves your problem, not creates one.
Slide 3
Slide 3 text
Rust and WebAssembly Sendil Kumar N
Slide 4
Slide 4 text
@sendilkumarn Sendil Kumar
Slide 5
Slide 5 text
@sendilkumarn
Slide 6
Slide 6 text
@sendilkumarn Netherlands
Slide 7
Slide 7 text
@sendilkumarn Senior Software Engineer @uber
Slide 8
Slide 8 text
@sendilkumarn Passionate about Open Source Senior Software Engineer @uber
Slide 9
Slide 9 text
@sendilkumarn Passionate about Open Source Senior Software Engineer @uber Team member @JHipster
Slide 10
Slide 10 text
@sendilkumarn Passionate about Open Source Senior Software Engineer @uber Team member @JHipster Hacking on WebAssembly
Slide 11
Slide 11 text
What is WASM? How WASM helps? DEMO Why Rust? Rust and WASM DEMO WASM Roadmap Agenda @sendilkumarn
Slide 12
Slide 12 text
WebAssembly @sendilkumarn
Slide 13
Slide 13 text
Yet Another Frontend framework?
Slide 14
Slide 14 text
@sendilkumarn 00 61 73 6D 01 00 00 00 Native Code WebAssembly Binary JavaScript Javascript Engine
Slide 15
Slide 15 text
@sendilkumarn func add is called Stack get_local $lhs LHS RHS get_local $rhs i32.add SUM Structured stack machine
Slide 16
Slide 16 text
@sendilkumarn 00 61 73 6D 01 00 00 00 Size & Load time efficient
Slide 17
Slide 17 text
@sendilkumarn Native Speed 00 61 73 6D 01 00 00 00
Slide 18
Slide 18 text
@sendilkumarn madewithwebassembly.com
Slide 19
Slide 19 text
Why not JavaScript? @sendilkumarn
Slide 20
Slide 20 text
JavaScript is awesome @sendilkumarn
Slide 21
Slide 21 text
JavaScript is easy @sendilkumarn
Slide 22
Slide 22 text
JavaScript is weird* * - sometimes @sendilkumarn
Slide 23
Slide 23 text
[] + {} @sendilkumarn
Slide 24
Slide 24 text
[] + {} “[object Object]” @sendilkumarn
Slide 25
Slide 25 text
{} + [] @sendilkumarn
Slide 26
Slide 26 text
0 {} + [] @sendilkumarn
Slide 27
Slide 27 text
[] + {} === {} + [] @sendilkumarn
Slide 28
Slide 28 text
[] + {} === {} + [] True @sendilkumarn
Slide 29
Slide 29 text
@sendilkumarn JavaScript Tuning
Slide 30
Slide 30 text
@sendilkumarn Types
Slide 31
Slide 31 text
@sendilkumarn Polymorphism
Slide 32
Slide 32 text
@sendilkumarn Unpredictable Performance
Slide 33
Slide 33 text
@sendilkumarn Runtime exceptions
Slide 34
Slide 34 text
@sendilkumarn A B
Slide 35
Slide 35 text
@sendilkumarn A B [empty x 5] []
Slide 36
Slide 36 text
@sendilkumarn A B [1, empty x 4] [1, 2, empty x 3] [1, 2, 3, empty x 2] [1, 2, 3, 4, empty x 1] [1, 2, 3, 4, 5] [1] [1, 2] [1, 2, 3] [1, 2, 3, 4] [1, 2, 3, 4, 5]
Slide 37
Slide 37 text
@sendilkumarn A B Holey Array Packed Array
Slide 38
Slide 38 text
@sendilkumarn How WebAssembly address the problems?
Slide 39
Slide 39 text
@sendilkumarn Speed
Slide 40
Slide 40 text
@sendilkumarn Near Native perf.
Slide 41
Slide 41 text
@sendilkumarn ˜30% faster than JS
Slide 42
Slide 42 text
@sendilkumarn Boundary Crossing
Slide 43
Slide 43 text
@sendilkumarn Not always faster
Slide 44
Slide 44 text
@sendilkumarn WebAssembly is secure
Slide 45
Slide 45 text
@sendilkumarn Linear Memory Model
Slide 46
Slide 46 text
@sendilkumarn Shared Array Buffer
Slide 47
Slide 47 text
@sendilkumarn How it works… Why it is faster?
Slide 48
Slide 48 text
@sendilkumarn JavaScript Execution
Slide 49
Slide 49 text
@sendilkumarn Load JavaScript
Slide 50
Slide 50 text
@sendilkumarn a.js AST 1001010010101101010 Execute Profiler Parse Interpret Compile 100101001010 Optimise 1010 GC
Slide 51
Slide 51 text
@sendilkumarn WebAssembly Execution
Slide 52
Slide 52 text
@sendilkumarn Load WebAssembly
Slide 53
Slide 53 text
@sendilkumarn Decode Compile Execute 00 61 73 6D 00 61 73 6D 00 61 73 6D
Slide 54
Slide 54 text
@sendilkumarn PARSE COMPILE OPTIMISE EXECUTE GC JavaScript execution DECODE COMPILE EXECUTE WebAssembly execution
Slide 55
Slide 55 text
@sendilkumarn PARSE COMPILE OPTIMISE EXECUTE GC JavaScript execution DECODE COMPILE EXECUTE WebAssembly execution I am faster
Slide 56
Slide 56 text
@sendilkumarn PARSE COMPILE OPTIMISE EXECUTE GC JavaScript execution DECODE COMPILE EXECUTE WebAssembly execution Optimised already
Slide 57
Slide 57 text
@sendilkumarn Streaming compilation
Slide 58
Slide 58 text
@sendilkumarn Typed
Slide 59
Slide 59 text
@sendilkumarn (module )
Slide 60
Slide 60 text
@sendilkumarn (module (func $add (param $lhs i32) (param $rhs i32) (result i32) (get_local $lhs) (get_local $rhs) (i32.add) ) )
Slide 61
Slide 61 text
@sendilkumarn (module (func $add (param $lhs i32) (param $rhs i32) (result i32) (get_local $lhs) (get_local $rhs) (i32.add) ) (export “add” (func $add)) )
Slide 62
Slide 62 text
@sendilkumarn i32 i64 f32 f64 00 61 73 6D 01 00 00 00 WebAssembly Binary JavaScript Javascript Engine
Slide 63
Slide 63 text
Demo bit.ly/wasm2020-001 @sendilkumarn
Slide 64
Slide 64 text
Why Rust? @sendilkumarn
Slide 65
Slide 65 text
@sendilkumarn Blazingly fast @sendilkumarn
Slide 66
Slide 66 text
@sendilkumarn Memory Safety
Slide 67
Slide 67 text
@sendilkumarn Productivity
Slide 68
Slide 68 text
@sendilkumarn Friendly compiler
Slide 69
Slide 69 text
@sendilkumarn Better tooling support
Slide 70
Slide 70 text
@sendilkumarn Awesome co!"unity
Slide 71
Slide 71 text
@sendilkumarn Modern language
Slide 72
Slide 72 text
@sendilkumarn Crates
Slide 73
Slide 73 text
@sendilkumarn wasm_bindgen https://github.com/rustwasm/wasm-bindgen
Slide 74
Slide 74 text
@sendilkumarn i32 i64 f32 f64 00 61 73 6D 01 00 00 00 WebAssembly Binary JavaScript Javascript Engine
Slide 75
Slide 75 text
@sendilkumarn 00 61 73 6D 01 00 00 00 WebAssembly Binary JavaScript Javascript Engine Binding JS file JS API WEB API JS SYS WEB SYS
Slide 76
Slide 76 text
@sendilkumarn wasm_pack https://github.com/rustwasm/wasm-pack
Slide 77
Slide 77 text
@sendilkumarn PACK PUBLISH TEST BUILD
Slide 78
Slide 78 text
@sendilkumarn wasm_snip https://github.com/rustwasm/wasm-snip
Slide 79
Slide 79 text
@sendilkumarn twiggy https://github.com/rustwasm/twiggy
Slide 80
Slide 80 text
@sendilkumarn Rust demo First demo wasm-game-of-life
Slide 81
Slide 81 text
@sendilkumarn Future
Slide 82
Slide 82 text
@sendilkumarn Threads
Slide 83
Slide 83 text
@sendilkumarn ⚠ Exception Handling
Slide 84
Slide 84 text
@sendilkumarn ♻ Garbage Collection
Slide 85
Slide 85 text
@sendilkumarn WebAssembly provides a platform to plug and play best parts from different languages and use them together.
Slide 86
Slide 86 text
@sendilkumarn Questions…
Slide 87
Slide 87 text
@sendilkumarn Thanks… @sendilkumarn dev.to/sendilkumarn sendilkumarn.com/blog