Node.js x WebAssembly
by
Yosuke Furukawa
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
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Ϣʔεέʔε • CC++(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ͷ·· • ͻͱ·ͣϝΠϯλʔήοτCC++Ͱॻ͔Ε ͍ͯΔطଘίʔυΛ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.jsMozilla͕ఏএɺChrome/Edgeα ϙʔτ༧ఆͰwasmͷpolyfillͱͯ͠ಈ͘Մೳ ੑ͋Γ
Slide 22
Slide 22 text
Node.js x Native Module • emscriptenͰasm.jsʹ͢Δ • ؆୯ʢ͚ͩͲɺҙ֎ͱಈ͔ͳ͔ͬͨΓ͢Δʣ • શͯJavaScriptʹͳΓɺϑΝΠϧαΠζ͕ڊେʹ ͳΔ • ࣮ࡍNode.jsͷཪͷv8asm.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ରԠࡁΈͳͷͰී௨ʹಈ͘ • ·ͩ·ͩʢJSJIT͕ޮ͘ͷͰ୯७ͳܭ ࢉͩͱ 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ʹͨ͠΄͏͕ϒϥβͰ Ͱ͖Δ͜ͱ͕ଟ͘ͳΔͱࢥΘΕΔ • ࠓ·ͩΈΜͳ৭ʑτϥΠͯ͠νΣοΫͯ͠ Δ࠷த