Slide 1

Slide 1 text

Node x WebAssembly 2017, Mar, 31th @ NodeֶԂ 24࣌ݶ໨ in FiNC

Slide 2

Slide 2 text

Twitter: @yosuke_furukawa Github: yosuke-furukawa

Slide 3

Slide 3 text

WebAssembly

Slide 4

Slide 4 text

WebAssembly Goals • ϙʔλϒϧ͔ͭϩʔυޮ཰͕ྑ͍όΠφϦϑΥʔϚο τΛ࡞Δ͜ͱ • ϋʔυ΢ΣΞ(mobile, IoT ؚΉ)ͷೳྗΛϑϧʹ׆͔ ͯ͠nativeͷ଎౓ͱಉ౳ͷ࣮ߦ࣌ؒͰܭࢉ͢Δ͜ͱ • طଘͷϓϥοτϑΥʔϜ(web)ͱͷ਌࿨ੑΛߴ͘͠ ͯɺ౷߹͠΍͘͢͢Δ͜ͱ http://webassembly.org/docs/high-level-goals/

Slide 5

Slide 5 text

WebAssembly UseCases

Slide 6

Slide 6 text

WebAssembly UseCase (1) • ωΠςΟϒϞδϡʔϧΛϒϥ΢βͰಡΈࠐΉ

Slide 7

Slide 7 text

WebAssembly UseCase (1) • ωΠςΟϒϞδϡʔϧΛϒϥ΢βͰಡΈࠐΉ

Slide 8

Slide 8 text

WebAssembly UseCase (2) • Game

Slide 9

Slide 9 text

WebAssembly Use Cases • BrowserϢʔεέʔε • C΍C++(΍Rust)Ͱॻ͔ΕͨωΠςΟϒϞ δϡʔϧΛϒϥ΢β͔ΒಡΈࠐΊΔΑ͏ʹ ͢Δ • Game / ը૾ೝࣝ / ҉߸Խ / ѹॖ֦ு etc etc http://webassembly.org/docs/use-cases/

Slide 10

Slide 10 text

WebAssembly Use Cases • BrowerҎ֎ͷϢʔεέʔε • Server Side application • Native Apps on mobile devices http://webassembly.org/docs/use-cases/

Slide 11

Slide 11 text

WebAssembly͕Ͳ͏࢖ΘΕΔ ͜ͱΛ૝ఆ͢Δ͔ʁ • શମͷίʔυϕʔεΛWebAssemblyԽ͞ΕΔ ͜ͱΛظ଴ • ͱ͸͍͑ɺWeb UIͷϨΠϠ͸HTML/JSͷ·· • ͻͱ·ͣϝΠϯλʔήοτ͸C΍C++Ͱॻ͔Ε ͍ͯΔطଘίʔυΛJSͰݺ΂ΔΑ͏ʹ͢Δ http://webassembly.org/docs/use-cases/

Slide 12

Slide 12 text

Node.js x Native Modules

Slide 13

Slide 13 text

Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ • node-ffi Ͱ FFI ݺͼग़͠ʹ͢Δ • emscriptenͰasm.jsʹ͢Δ • emscriptenͰwasmʹ͢Δ

Slide 14

Slide 14 text

Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ

Slide 15

Slide 15 text

Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ • V8ͷAPI͸όʔδϣϯมΘΔͱେମյΕΔ • ͦΕʹґଘ͍ͯ͠ΔNative Module΋େମյ ΕΔ • ͦͷAPIΛந৅Խͯ͠ٵऩ͢Δͷ͕NAN

Slide 16

Slide 16 text

Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ • ࣗ༝౓͕ߴ͍ • ͦͷ୅ΘΓbindingͷͨΊͷίʔυΛ৭ʑ֤ ඞཁ͕͋Δ

Slide 17

Slide 17 text

Node.js x Native Module • node-ffi Ͱ FFI ݺͼग़͠ʹ͢Δ

Slide 18

Slide 18 text

Node.js x Native Module • node-ffi Ͱ FFI ݺͼग़͠ʹ͢Δ • Foreign Function Interface (ݴޠ͕༻ҙͯ͠ ͘Ε͍ͯΔಛ༗ͷ֎෦ݺͼग़͠ػೳ) • libffi Λ library ͱͯ͠ϩʔυ͍ͯ͠ΔͷͰC ΍C++ͷίʔυͰ͋Ε͹ಈ͘

Slide 19

Slide 19 text

Node.js x Native Module • node-ffi Ͱ FFI ݺͼग़͠ʹ͢Δ • ؆୯ • ͨͩ͠ɺ֎෦ݺͼग़͠ʹͳΔͨΊFFI͸஗͍

Slide 20

Slide 20 text

Node.js x Native Module • emscriptenͰasm.jsʹ͢Δ

Slide 21

Slide 21 text

Node.js x Native Module • emscriptenͰasm.jsʹ͢Δ • emscriptenͷఏڙ͢ΔίϯύΠϥͰasm.jsԽ͢ Δ • asm.js͸Mozilla͕ఏএɺChrome/Edge΋α ϙʔτ༧ఆͰwasmͷpolyfillͱͯ͠΋ಈ͘Մೳ ੑ͋Γ

Slide 22

Slide 22 text

Node.js x Native Module • emscriptenͰasm.jsʹ͢Δ • ؆୯ʢ͚ͩͲɺҙ֎ͱಈ͔ͳ͔ͬͨΓ͢Δʣ • શͯJavaScriptʹͳΓɺϑΝΠϧαΠζ͕ڊେʹ ͳΔ • ࣮ࡍ໰୊Node.jsͷཪͷv8͸asm.jsΛϑϧαϙʔτ ͯ͠ͳ͔ͬͨΓͰ͋·Γ଎͘΋ͳ͍

Slide 23

Slide 23 text

Node.js x Native Module • emscriptenͰwasmʹ͢Δ (NEW!!)

Slide 24

Slide 24 text

Node.js x Native Module • emscriptenͰwasmʹ͢Δ • asm.jsͱಉ͡؆୯͞ • v8ͷ࠷৽ͩͱwasmରԠࡁΈͳͷͰී௨ʹಈ͘ • ଎౓͸·ͩ·ͩʢJS͸JIT͕ޮ͘ͷͰ୯७ͳܭ ࢉͩͱ JS > WebAssemblyʹͳΔ͜ͱ΋͋Δʣ

Slide 25

Slide 25 text

͞Βʹ࠷ۙͰ͸

Slide 26

Slide 26 text

Node.js ʹ stable module ABI ͷ PR͕௥Ճ͞ΕͯΔ • https://github.com/nodejs/node/pull/11975

Slide 27

Slide 27 text

Node.js ʹ stable module ABI ͷ PR͕௥Ճ͞ΕͯΔ • ͳͷͰɺ5ͭ໨: stable module ABIͰ࡞Δ • ࢖͍উखతʹ͸NANͱҰॹ • ৽͍͠APIͳͷͰ஫໨தʢ·ͩࢼͯ͠ͳ͍ʣ

Slide 28

Slide 28 text

ͳͷͰ

Slide 29

Slide 29 text

Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ • node-ffi Ͱ FFI ݺͼग़͠ʹ͢Δ • emscriptenͰasm.jsʹ͢Δ • emscriptenͰwasmʹ͢Δ (new!!! node v8 Ͱ͸༗ޮʹ) • stable module ABI ʹ͢Δ (new!!! node v8 Ͱ͸༗ޮʹ)

Slide 30

Slide 30 text

WebAssembly DEMO

Slide 31

Slide 31 text

butteraugly DEMO

Slide 32

Slide 32 text

Node.js x WebAssembly • ࢥ࿭͸৭ʑ͋ΕͲ໘ന͍ • WebAssemblyʹ͸஫໨ͨ͠΄͏͕ϒϥ΢βͰ ͸Ͱ͖Δ͜ͱ͕ଟ͘ͳΔͱࢥΘΕΔ • ࠓ·ͩΈΜͳ৭ʑτϥΠͯ͠͸νΣοΫͯ͠ Δ࠷த