Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Node.js x WebAssembly
Search
Yosuke Furukawa
PRO
March 31, 2017
Programming
4
1.2k
Node.js x WebAssembly
Node学園24時限目で発表した Node.js と WebAssembly のデモですー。
Yosuke Furukawa
PRO
March 31, 2017
Tweet
Share
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
150
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
4.4k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.3k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
270
Removing Corepack
yosuke_furukawa
PRO
9
1.7k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
2.9k
Strip Types と Storage
yosuke_furukawa
PRO
4
430
Module Harmony について
yosuke_furukawa
PRO
3
1.8k
LTのやり方
yosuke_furukawa
PRO
16
2.7k
Other Decks in Programming
See All in Programming
overlayPreferenceValue で実現する ピュア SwiftUI な AdMob ネイティブ広告
uhucream
0
170
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
940
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
2k
株式会社 Sun terras カンパニーデック
sunterras
0
260
ててべんす独演会〜Flowの全てを語ります〜
tbsten
1
230
止められない医療アプリ、そっと Swift 6 へ
medley
1
140
Six and a half ridiculous things to do with Quarkus
hollycummins
0
140
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
510
CSC509 Lecture 03
javiergs
PRO
0
330
NetworkXとGNNで学ぶグラフデータ分析入門〜複雑な関係性を解き明かすPythonの力〜
mhrtech
3
1.2k
チームの境界をブチ抜いていけ
tokai235
0
130
Cursorハンズオン実践!
eltociear
2
520
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Building an army of robots
kneath
306
46k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Designing for humans not robots
tammielis
254
26k
We Have a Design System, Now What?
morganepeng
53
7.8k
It's Worth the Effort
3n
187
28k
GraphQLとの向き合い方2022年版
quramy
49
14k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Bash Introduction
62gerente
615
210k
Visualization
eitanlees
148
16k
For a Future-Friendly Web
brad_frost
180
9.9k
Transcript
Node x WebAssembly 2017, Mar, 31th @ NodeֶԂ 24࣌ݶ in
FiNC
Twitter: @yosuke_furukawa Github: yosuke-furukawa
WebAssembly
WebAssembly Goals • ϙʔλϒϧ͔ͭϩʔυޮ͕ྑ͍όΠφϦϑΥʔϚο τΛ࡞Δ͜ͱ • ϋʔυΣΞ(mobile, IoT ؚΉ)ͷೳྗΛϑϧʹ׆͔ ͯ͠nativeͷͱಉͷ࣮ߦ࣌ؒͰܭࢉ͢Δ͜ͱ
• طଘͷϓϥοτϑΥʔϜ(web)ͱͷੑΛߴ͘͠ ͯɺ౷߹͘͢͢͠Δ͜ͱ http://webassembly.org/docs/high-level-goals/
WebAssembly UseCases
WebAssembly UseCase (1) • ωΠςΟϒϞδϡʔϧΛϒϥβͰಡΈࠐΉ
WebAssembly UseCase (1) • ωΠςΟϒϞδϡʔϧΛϒϥβͰಡΈࠐΉ
WebAssembly UseCase (2) • Game
WebAssembly Use Cases • BrowserϢʔεέʔε • CC++(Rust)Ͱॻ͔ΕͨωΠςΟϒϞ δϡʔϧΛϒϥβ͔ΒಡΈࠐΊΔΑ͏ʹ ͢Δ •
Game / ը૾ೝࣝ / ҉߸Խ / ѹॖ֦ு etc etc http://webassembly.org/docs/use-cases/
WebAssembly Use Cases • BrowerҎ֎ͷϢʔεέʔε • Server Side application •
Native Apps on mobile devices http://webassembly.org/docs/use-cases/
WebAssembly͕Ͳ͏ΘΕΔ ͜ͱΛఆ͢Δ͔ʁ • શମͷίʔυϕʔεΛWebAssemblyԽ͞ΕΔ ͜ͱΛظ • ͱ͍͑ɺWeb UIͷϨΠϠHTML/JSͷ·· • ͻͱ·ͣϝΠϯλʔήοτCC++Ͱॻ͔Ε
͍ͯΔطଘίʔυΛJSͰݺΔΑ͏ʹ͢Δ http://webassembly.org/docs/use-cases/
Node.js x Native Modules
Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ • node-ffi Ͱ
FFI ݺͼग़͠ʹ͢Δ • emscriptenͰasm.jsʹ͢Δ • emscriptenͰwasmʹ͢Δ
Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ
Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ • V8ͷAPIόʔδϣϯมΘΔͱେମյΕΔ •
ͦΕʹґଘ͍ͯ͠ΔNative Moduleେମյ ΕΔ • ͦͷAPIΛநԽͯ͠ٵऩ͢Δͷ͕NAN
Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ • ࣗ༝͕ߴ͍ •
ͦͷΘΓbindingͷͨΊͷίʔυΛ৭ʑ֤ ඞཁ͕͋Δ
Node.js x Native Module • node-ffi Ͱ FFI ݺͼग़͠ʹ͢Δ
Node.js x Native Module • node-ffi Ͱ FFI ݺͼग़͠ʹ͢Δ •
Foreign Function Interface (ݴޠ͕༻ҙͯ͠ ͘Ε͍ͯΔಛ༗ͷ֎෦ݺͼग़͠ػೳ) • libffi Λ library ͱͯ͠ϩʔυ͍ͯ͠ΔͷͰC C++ͷίʔυͰ͋Εಈ͘
Node.js x Native Module • node-ffi Ͱ FFI ݺͼग़͠ʹ͢Δ •
؆୯ • ͨͩ͠ɺ֎෦ݺͼग़͠ʹͳΔͨΊFFI͍
Node.js x Native Module • emscriptenͰasm.jsʹ͢Δ
Node.js x Native Module • emscriptenͰasm.jsʹ͢Δ • emscriptenͷఏڙ͢ΔίϯύΠϥͰasm.jsԽ͢ Δ •
asm.jsMozilla͕ఏএɺChrome/Edgeα ϙʔτ༧ఆͰwasmͷpolyfillͱͯ͠ಈ͘Մೳ ੑ͋Γ
Node.js x Native Module • emscriptenͰasm.jsʹ͢Δ • ؆୯ʢ͚ͩͲɺҙ֎ͱಈ͔ͳ͔ͬͨΓ͢Δʣ • શͯJavaScriptʹͳΓɺϑΝΠϧαΠζ͕ڊେʹ
ͳΔ • ࣮ࡍNode.jsͷཪͷv8asm.jsΛϑϧαϙʔτ ͯ͠ͳ͔ͬͨΓͰ͋·Γ͘ͳ͍
Node.js x Native Module • emscriptenͰwasmʹ͢Δ (NEW!!)
Node.js x Native Module • emscriptenͰwasmʹ͢Δ • asm.jsͱಉ͡؆୯͞ • v8ͷ࠷৽ͩͱwasmରԠࡁΈͳͷͰී௨ʹಈ͘
• ·ͩ·ͩʢJSJIT͕ޮ͘ͷͰ୯७ͳܭ ࢉͩͱ JS > WebAssemblyʹͳΔ͜ͱ͋Δʣ
͞Βʹ࠷ۙͰ
Node.js ʹ stable module ABI ͷ PR͕Ճ͞ΕͯΔ • https://github.com/nodejs/node/pull/11975
Node.js ʹ stable module ABI ͷ PR͕Ճ͞ΕͯΔ • ͳͷͰɺ5ͭ: stable
module ABIͰ࡞Δ • ͍উखతʹNANͱҰॹ • ৽͍͠APIͳͷͰதʢ·ͩࢼͯ͠ͳ͍ʣ
ͳͷͰ
Node.js x Native Module • NAN Ͱ࡞ͬͯϞδϡʔϧΛϥοϓ͢Δ • node-ffi Ͱ
FFI ݺͼग़͠ʹ͢Δ • emscriptenͰasm.jsʹ͢Δ • emscriptenͰwasmʹ͢Δ (new!!! node v8 Ͱ༗ޮʹ) • stable module ABI ʹ͢Δ (new!!! node v8 Ͱ༗ޮʹ)
WebAssembly DEMO
butteraugly DEMO
Node.js x WebAssembly • ࢥ৭ʑ͋ΕͲ໘ന͍ • WebAssemblyʹͨ͠΄͏͕ϒϥβͰ Ͱ͖Δ͜ͱ͕ଟ͘ͳΔͱࢥΘΕΔ • ࠓ·ͩΈΜͳ৭ʑτϥΠͯ͠νΣοΫͯ͠
Δ࠷த