Slide 1

Slide 1 text

nodejs/node-eps @yosuke_furukawa

Slide 2

Slide 2 text

JSer.info 5प೥ ͓ΊͰͱ͏͍͟͝·͢

Slide 3

Slide 3 text

NodeEPS • Node Enhancement Proposals (Node EPs)

Slide 4

Slide 4 text

ఏҊ͞Ε͍ͯΔ΋ͷ঺հ

Slide 5

Slide 5 text

C++ Streams

Slide 6

Slide 6 text

C++ Streams • Fedor Indutny ͕ఏҊ • Node.js ͷ C++ ͷϨΠϠͰ Stream Λ࣮૷͢Δͱ͍͏ ΋ͷ • C++Addon Λ࡞Δͱ͖ʹStreamͰॻ͚Δ • ࣮͸Nodeͷcore API ͸طʹ͜ͷC++ Stream͕࢖ΘΕ ͍ͯΔɻ

Slide 7

Slide 7 text

C++ Streams • ఏҊ͍ͯ͠Δ಺༰͸ྑ͔͕ͬͨͪΐͬͱείʔ ϓ͕ҧ͏ͱ͍͏͜ͱͰClose… • JSͷAPI͕มΘΔΘ͚Ͱ͸ͳ͍ͷͰɺείʔϓ ֎ • ͱ͸͍͑C++ͷpublic APIʹ͸͍͔ͭͳΔ͔΋

Slide 8

Slide 8 text

ES6 modules interop

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

ES6 modules interop • Bradly Meck͕ఏҊ • interoperability for ES6 modules and node’s existing modules • create Registry Object (Ϟδϡʔϧͷঢ়گ(fetch, translate, ready ౳)Λ·ͱΊ͓ͯ͘Map instance) for interop • (∩´∀ʆ)∩ƂŖŘ

Slide 11

Slide 11 text

ES6 modules interop • JSͷϨΠϠ͡Όͳͯ͘ɺC++ͷϨΠϠͰ fallbackͤͯ͞CJSͳͷ͔ES6ͳͷ͔try͢Δ // ٖࣅίʔυ try { v8::Script::Compile // ES6ͰίϯύΠϧͰ͖Δ͔Ͳ͏͔ } catch (e) { v8::Script::CompileModule // CJSͰίϯύΠϧͯ͠ΈΔ }

Slide 12

Slide 12 text

ES6 modules interop • require͕ߦΘΕͨΒ 1. ·ͣ͸CJS ͔ ES6 ͔ΛνΣοΫ͢Δ 2. ΋͠ CJS ͩͬͨΒ 1. ଈ࣌ධՁͯ͠ module.exportsʹೖ͍ͬͯΔΦϒδΣΫτ͕͋Ε͹࣋ͬͯ͘Δ 3. ΋͠ ES6 ͩͬͨΒ 1. import / export Λparse͢Δ 2. ࠶ؼతʹ require Λ࣮ߦͯ͠αϒϞδϡʔϧΛऩू͢Δ 3. ͢΂ͯͷαϒϞδϡʔϧΛ import ͔Βݺ͹ΕΔΑ͏ʹϚοϓ͢Δ 4. ධՁ͢Δ

Slide 13

Slide 13 text

ES6 modules interop • require͕ߦΘΕͨΒ 1. ·ͣ͸CJS ͔ ES6 ͔ΛνΣοΫ͢Δ 2. ΋͠ CJS ͩͬͨΒ 1. ଈ࣌ධՁͯ͠ module.exportsʹೖ͍ͬͯΔΦϒδΣΫτ͕͋Ε͹࣋ͬͯ͘Δ 3. ΋͠ ES6 ͩͬͨΒ 1. import / export Λparse͢Δ 2. ࠶ؼతʹ require Λ࣮ߦͯ͠αϒϞδϡʔϧΛऩू͢Δ 3. ͢΂ͯͷαϒϞδϡʔϧΛ import ͔Βݺ͹ΕΔΑ͏ʹϚοϓ͢Δ 4. ධՁ͢Δ

Slide 14

Slide 14 text

ES6 modules interop • ·ͩσΟεΧογϣϯத… • whatwg-loaderͷਓ΋ؚΊͯ࿩͍ͯ͠Δ͕ɺ ίΞϝϯόʔͷ൓Ԡ͕ͳ͍

Slide 15

Slide 15 text

Buffer.alloc / Buffer.zalloc / Buffer.from

Slide 16

Slide 16 text

Buffer.alloc / Buffer.zalloc / Buffer.from • James N Snell ͕ఏҊ • ৽͘͠Buffer APIʹίϯετϥΫτ͢Δํ๏͕ ૿͑Δ • ͋ͱ new Buffer ͕ soft deprecated ʹͳΔ…

Slide 17

Slide 17 text

soft deprecated new Buffer …

Slide 18

Slide 18 text

Buffer.alloc / Buffer.zalloc / Buffer.from • new Buffer(Number) ͸ةݥ • ༩͑ΒΕͨ਺ࣈͷαΠζ෼ϝϞϦΛୣ͏ • ΍Ζ͏ͱࢥ͑͹αʔόʔͰ೚ҙͷϝϞϦαΠ ζ֬อͰ͖Δ => DoS ߈ܸͰ͖Δ

Slide 19

Slide 19 text

Buffer.alloc / Buffer.zalloc / Buffer.from var server = http.createServer(function (req, res) { var data = '' req.setEncoding('utf8') req.on('data', function (chunk) { data += chunk }) req.on('end', function () { var body = JSON.parse(data) res.end(new Buffer(body.str).toString('hex')) }) }) server.listen(8080) ຊདྷ͜͜͸stringΛ ظ଴͍ͯ͠Δ

Slide 20

Slide 20 text

Buffer.alloc / Buffer.zalloc / Buffer.from var server = http.createServer(function (req, res) { var data = '' req.setEncoding('utf8') req.on('data', function (chunk) { data += chunk }) req.on('end', function () { var body = JSON.parse(data) res.end(new Buffer(body.str).toString('hex')) }) }) server.listen(8080) body.str = 1,000,000

Slide 21

Slide 21 text

Buffer.alloc / Buffer.zalloc / Buffer.from var server = http.createServer(function (req, res) { var data = '' req.setEncoding('utf8') req.on('data', function (chunk) { data += chunk }) req.on('end', function () { var body = JSON.parse(data) res.end(new Buffer(body.str).toString('hex')) }) }) server.listen(8080) body.str = 1,000,000 .CZUFͷϝϞϦ͕֬อͰ͖Δɺ΋ͬͱ૿΍͢ͱଟ෼00.Ωϥʔʹࡴ͞ΕΔ ҐͷϝϞϦ΋֬อͰ͖ͪΌ͏ɻ

Slide 22

Slide 22 text

΍͹͍…

Slide 23

Slide 23 text

Buffer.alloc / Buffer.zalloc / Buffer.from • ࣮ࡍʹ ws ͍ͬͯ͏Ϟδϡʔϧʹͦͷඃ֐͕͋ Γ͏Δͱ͍͏͜ͱͰطʹΞοϓσʔτࡁΈɻ • security ৘ใ΋ใࠂࡁΈ

Slide 24

Slide 24 text

Buffer.alloc / Buffer.zalloc / Buffer.from • new Buffer ͸ deprecated ʹͳΓͦ͏ • ͦͷ୅ΘΓ৽͍͠ઐ༻ίϯετϥΫλ͕૿͑ Δ • ࠓͷ new Buffer Ͱ੍ݶ஋Λ࣋ͭΑ͏ʹͳΔ͔ ౳ͷৄࡉ͸·ͩdiscussing

Slide 25

Slide 25 text

·ͱΊ

Slide 26

Slide 26 text

·ͱΊ • C++ Stream ͱ͔ఏҊ͞ΕͯΔ • ES6 modules interop ͷఏҊ΋͋Δʂ • new Buffer ࢖Θͳ͍Α͏ʹ…
 (wsΞοϓσʔτ͍ͯͩ͘͠͞Ͷ…)