Design: JS -> WASM ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2015๋…„ 06์›” 24์ผ  ยท  93์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: WebAssembly/design

๋””์ž์ธ ๋ฌธ์„œ๋ฅผ ์ž์„ธํžˆ ์กฐ์‚ฌํ•œ ํ›„ WASM -> JS๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ํด๋ฆฌํ•„์— ๋Œ€ํ•œ ์–ธ๊ธ‰์„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. C++ -> WASM ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ์–ธ๊ธ‰๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ JS -> WASM ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์›น ๊ฐœ๋ฐœ์ž๋Š” Javascript์— ๋Šฅ์ˆ™ํ•˜๋ฏ€๋กœ JS -> WASM ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ์›น ๊ฐœ๋ฐœ์ž๋Š” C++๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  Javascript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ณ„์† ์ž‘์„ฑํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ MVP๋‚˜ JS -> WASM ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ์—†๋Š” MVP ์ดํ›„ ์„น์…˜๋„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์žฅ๋‚œ๊ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์‹คํ—˜์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค: https://github.com/evanw/thinscript. TypeScript ์Šคํƒ€์ผ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  WebAssembly๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กœ์šด ์‚ฌ๋ก€ ์—ฐ๊ตฌ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ WebAssembly๊ฐ€ ์ƒ์„ฑํ•˜๊ธฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€ ์ฆ๊ฒ๊ฒŒ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘๋“ค ์ž˜ํ–ˆ์–ด!

๋ชจ๋“  93 ๋Œ“๊ธ€

๋ธŒ๋ผ์šฐ์ €์—๋Š” wasm๊ณผ ํ•จ๊ป˜ ๊ธฐ๋ณธ JavaScript VM์ด ๊ณ„์† ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด javascript vm๋„ ํฌํ•จํ•ด์•ผ ํ•˜๋ฏ€๋กœ JS๋ฅผ wasm์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” JS VM๋ณด๋‹ค ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋Š๋ฆฝ๋‹ˆ๋‹ค.

wasm์— ๋Œ€ํ•œ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๊ฐ€ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋„๋ก wasm ์ฝ”๋“œ์—์„œ GC์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—… ํฌ์ŠคํŠธ MVP๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

JS โ†’ wasm์€ wasm์ด GC๋ฅผ ์ง€์›ํ•˜๊ณ  JIT ์ปดํŒŒ์ผ๋„ ์ง€์›ํ•ด์•ผ ์‹ค์ œ๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ wasm์—์„œ JS ์—”์ง„์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ตœ๊ทผ์— ์ด๊ฒƒ์„ @BrendanEich ๋Š” ๋‚˜๋ฅผ

๋ถ„๋ช…ํžˆ ๋งํ•ด์„œ, wasm์˜ ๋ชฉํ‘œ๋Š” JavaScript๋ฅผ _๊ต์ฒด_ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณด์™„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ JS โ†’ wasm์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ํ˜„์žฌ ๋ชฉํ‘œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ์ด ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ ๊ทธ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์œ ์šฉํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ์ˆœ์ˆ˜ํ•œ ๋ณด์•ˆ ๊ด€์ ์—์„œ wasm์— JS ์—”์ง„์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@jfbastien 2์ดˆ

๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์˜ ๋Œ€๋‹ต์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” wasm์˜ GC์™€ JIT์— ๋Œ€ํ•ด ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด ์ž์‹ ์˜ ์–ธ์–ด๋ฅผ ๋งŒ๋“ค๊ณ  ์›น์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

asm.js ๋˜๋Š” TypeScript/ES7๊ณผ ๊ฐ™์€ ๋ณ€ํ˜•์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ๋“ค
Javascript์˜ ํŠน์ง•์€ ์–ด๋Š ์ •๋„์˜ ์œ ํ˜• ๋ณด์žฅ์„ ์•ฝ์†ํ•ฉ๋‹ˆ๋‹ค.

JIT์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์€ ๋œํ•˜์ง€๋งŒ GC๋Š” ์—ฌ์ „ํžˆ ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์–ธ์–ด์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. {typed flavor JS} -> WASM ๋งŒ๋“ค๊ธฐ
์ด๊ฒƒ์ด ๋” ์ด์ƒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

์—ฌ: http://bguiz.com

2015๋…„ 6์›” 24์ผ 09:44์— Tim Caswell [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@jfbastien https://github.com/jfbastien 2์ดˆ ์ฐจ๋กœ ์ €๋ฅผ ์ด๊ฒผ์Šต๋‹ˆ๋‹ค :P

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/WebAssembly/design/issues/219#issuecomment -114675456.

์˜ˆ, asm.js -> wasm ๋ฒˆ์—ญ๊ธฐ๊ฐ€ ์ตœ์šฐ์„  ์ˆœ์œ„์ด๋ฉฐ Luke๋Š” ์ด๋ฏธ
์ข‹์€ ์ถœ๋ฐœ์ ์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์••์ถ•๊ธฐ์—์„œ ์ž‘์—…ํ•˜์‹ญ์‹œ์˜ค.

2015๋…„ 6์›” 24์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 1์‹œ 59๋ถ„, Brendan Graetz [email protected]
์ผ๋‹ค:

asm.js ๋˜๋Š” TypeScript/ES7๊ณผ ๊ฐ™์€ ๋ณ€ํ˜•์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ๋“ค
Javascript์˜ ํŠน์ง•์€ ์–ด๋Š ์ •๋„์˜ ์œ ํ˜• ๋ณด์žฅ์„ ์•ฝ์†ํ•ฉ๋‹ˆ๋‹ค.

JIT์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์€ ๋œํ•˜์ง€๋งŒ GC๋Š” ์—ฌ์ „ํžˆ ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์–ธ์–ด์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. {typed flavor JS} -> WASM ๋งŒ๋“ค๊ธฐ
์ด๊ฒƒ์ด ๋” ์ด์ƒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

์—ฌ: http://bguiz.com

2015๋…„ 6์›” 24์ผ 09:44์— Tim Caswell [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@jfbastien https://github.com/jfbastien 2์ดˆ ์ฐจ๋กœ ์ €๋ฅผ ์ด๊ฒผ์Šต๋‹ˆ๋‹ค :P

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
< https://github.com/WebAssembly/design/issues/219#issuecomment -114675456
.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/WebAssembly/design/issues/219#issuecomment -114677789.

์šฐ๋ฆฌ๋Š” TypeScript ํŒ€๊ณผ ์ด ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์œผ๋ฉฐ ๊ทธ๋“ค์€ ๊ด€์‹ฌ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ JS์— ์œ ํ˜•์ด ์ง€์ •๋œ ๊ฐœ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์ง„์ „์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@bguiz : JS ์—”์ง„์€ wasm ์—”์ง„์ด๋ฉฐ ์ง„ํ™”ํ•˜๋Š” JS ํ‘œ์ค€ ์–ธ์–ด๋ฅผ ๊ณ„์† ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด OTOH๋Š” wasm์ด GC, JIT ์ง€์› ๋ฐ ๊ธฐํƒ€ ๋™์  ์–ธ์–ด ๊ธฐ๋Šฅ์„ ๋ฐœ์ „์‹œ์ผœ JS์˜ ์ผ๊ธ‰ ๋Œ€์ƒ์ด ๋˜๊ธฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์ด ์ง„ํ™”ํ•˜๋”๋ผ๋„ JS/wasm ์—”์ง„์ด ๋‹ค์šด๋กœ๋“œํ•œ JS-in-wasm VM์„ ์œ„ํ•ด JS ๊ตฌ๋ฌธ๊ณผ ๋‚ด์žฅ ๊ธฐ๋Šฅ์„ ๋ฒ„๋ฆด์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค!

/์ด๋‹ค

asm.js-to-WebAssembly ๋ณ€ํ™˜๊ธฐ๋„ Emscripten ์— ์ถ”๊ฐ€

์ผ๋ฐ˜ JS์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์œ„์˜ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

JS์˜ ์š”์ ์€ dhteumeuleu ๋˜๋Š” codepen.io/ge1doot์™€ ๊ฐ™์ด ์ฝ”๋”ฉํ•˜๊ธฐ ์‰ฝ๊ณ  ๋†€๋ผ์šด ์ผ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์†Œ์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ํ•ดํ‚นํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

"wasm"์€ google, apple co.์—์„œ ๋” ๋งŽ์€ ๊ฒŒ์ž„ ๋ฐ ๊ธฐํƒ€ ์•ฑ์„ ํŒ๋งคํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์œ ์ผํ•œ "์ง„ํ™”"๋Š” ๋น… ๋ธŒ๋ผ๋” ์„œ๋ฒ„์—์„œ ์ง์ ‘ "์„ค์น˜ ์—†์Œ"์œผ๋กœ ๋” ์ž˜ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค... ๋‚˜๋Š” ๊ทธ๋“ค์ด ์•„์ง ์„œ๋กœ๋ฅผ ๋จน๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค...

์ฝ”๋“œ ๋ถ„์„ ๋˜๋Š” ์ฝ”๋“œ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ECMAScript๋ฅผ WebAssembly๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ WebAssembly ํŒ€์˜ ์šฐ์„  ์ˆœ์œ„์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€ ์•Š์ง€๋งŒ ๋…๋ฆฝ์ ์ธ ๋…ธ๋ ฅ์„ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ์•„์ด๋””์–ด์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์žฅ๋‚œ๊ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์‹คํ—˜์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค: https://github.com/evanw/thinscript. TypeScript ์Šคํƒ€์ผ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  WebAssembly๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กœ์šด ์‚ฌ๋ก€ ์—ฐ๊ตฌ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ WebAssembly๊ฐ€ ์ƒ์„ฑํ•˜๊ธฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€ ์ฆ๊ฒ๊ฒŒ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘๋“ค ์ž˜ํ–ˆ์–ด!

๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ wasm ์œ„์— ๋งค์šฐ ์–‡์€ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ์˜ˆ๋กœ, ์”ฌ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ while ๋ฌธ์ด loop { if (!condition) break; } ๋‚ฎ์•„์ ธ ์—ฌ๋Ÿฌ wasm ์—”์ง„์—์„œ if (condition) loop { ...; br_if condition } ๋ณด๋‹ค ๋œ ํšจ์œจ์ ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ wasm์„ ์žฌ๊ฐ€์—ด๋œ JS ์ด์ƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์ฒ ํ•™์˜ ๊ฐ€๋Šฅ์„ฑ์ž…๋‹ˆ๋‹ค. wasm์€ ์ปดํŒŒ์ผ๋Ÿฌ ๋Œ€์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณตํ•˜๊ธฐ ์ „์— ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก VM์„ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋” ๋น ๋ฅด๊ฒŒ. ๊ทธ๋Ÿฌ๋‚˜ was ์ฃผ์œ„์˜ ์–‡์€ ๋ž˜ํผ๊ฐ€ ๋Œ€์ค‘ํ™”๋˜๋ฉด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์€ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ ์ธก ๊ตฌํ˜„์ด ๊ฒฐ๊ตญ ๋” ์ปค์ง€๊ณ  ๋ณต์žกํ•ด์ ธ์•ผ ํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜, ๋‚œ ๋™์˜. WebAssembly์—์„œ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ๋‹จ์ˆœ์„ฑ์ž…๋‹ˆ๋‹ค. ์–ธ์–ด๊ฐ€ ๋” ์™„์„ฑ๋˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฒค์น˜๋งˆํฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋ผ์ธ์ด ๋” ํฐ ์Šน๋ฆฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋ฉฐ WebAssembly๊ฐ€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ ๋Œ€์ƒ์œผ๋กœ ์‹คํ—˜ํ•  ๊ณ„ํš์ด๋ฉฐ ๋‘ ๋Œ€์ƒ ๋ชจ๋‘์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ตœ์ ํ™”๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„์ฃผ ๋ฉ‹์ง„ ์†Œ๋ฆฌ! ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋””๋กœ ์ด์–ด์ง€๋Š”์ง€ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” JS->WASM์ด ํด๋ผ์ด์–ธํŠธ๋ณด๋‹ค ์„œ๋ฒ„์— ๋” ๋งค๋ ฅ์ ์ด๋ผ๊ณ  โ€‹โ€‹์ƒ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์—ผ๋‘์— ๋‘๊ณ  ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ๋งค์šฐ ๋†’์€ ์ˆ˜์ค€์˜ ๊ฐœ์š”๋กœ์„œ...

JavaScript -> WebAssembly -> Tracing Interpreter -> LLVM IR -> Machine Code

์ด ๊ฐœ๋…์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์œ„ํ•ด WASM์—์„œ

์•ฝ๊ฐ„์˜ ์ƒ๊ฐ, ์ด๊ฒƒ์ด ๊ฑฐ์ง“์ด๋ผ๋ฉด ์ž์œ ๋กญ๊ฒŒ ์‚ญ์ œํ•˜์‹ญ์‹œ์˜ค!

ํฌ๋กœ์Šค ํ™˜๊ฒฝ ํ˜ธํ™˜์„ฑ์€ JS ์ƒํƒœ๊ณ„์—์„œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Babel์€ ์ข€ ๋” ์ฑ„ํƒ๋œ ๋ฒ„์ „์˜ ES๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋ฉฐ ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๊ทธ๊ฒƒ์ด ๊ฝค ์„ฑ๊ณต์ ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ์—ฌ๊ธฐ์—๋Š” ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ES 2016 ์ฝ”๋“œ๋ฅผ ES5๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ES 2016์„ (๋ถ€๋ถ„์ ์œผ๋กœ ๋˜๋Š” ์™„์ „ํžˆ) ์ง€์›ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํ™˜๊ฒฝ์—์„œ ES 2016์„ ์ง€์›ํ•˜๋Š” ์ด์ ์„ ๋†“์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. .

๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ES5๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ์šฐ์„  ํ™˜๊ฒฝ์—์„œ ES 2016์„ ์ง€์›ํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

"babel-preset-env"๋ผ๋Š” ์ƒˆ ํ”„๋กœ์ ํŠธ๋Š” ๋ฒ„์ „๋ณ„๋กœ ํ™˜๊ฒฝ์„ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด๋ฉด์˜ ์•„์ด๋””์–ด๋Š” (1) ๋ธŒ๋ผ์šฐ์ €์˜ ํŠน์ • ๋ฒ„์ „ ๋˜๋Š” "์ตœ์‹  X ๋ฒ„์ „"์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋„๋ก ์š”์ฒญํ•˜๊ณ , (2) ๊ธฐ๋Šฅ์˜ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณตํ†ต ๋ถ„๋ชจ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , (3) ํ•„์š”ํ•œ ๋ณ€ํ™˜๋งŒ ํ™œ์„ฑํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋„์›€์ด ๋˜์ง€๋งŒ ์Šฌํ”„๊ฒŒ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์ฃผ์š” ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  Microsoft๊ฐ€ ์ˆ˜๋…„ ๋™์•ˆ Internet Explorer์—์„œ ์ผ์œผํ‚จ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ƒํƒœ๊ณ„๋Š” ๊ตฌํ˜„ ๋Œ€์ƒ๊ณผ ๊ตฌํ˜„ ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ช‡๋ช‡ ๊ณต๊ธ‰์—…์ฒด์˜ ์†์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž์œ ๋กญ์ง€๋„ ๊ฐœ๋ฐฉ์ ์ด์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.

์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๊ณ  JS ์—”์ง„๋ณด๋‹ค ํ›จ์”ฌ ์ ์€ ์œ ์ง€ ๊ด€๋ฆฌ(์›ํ•˜๋Š” ๊ฒƒ์€ ์—†์Œ)๊ฐ€ ํ•„์š”ํ•œ JavaScript์šฉ ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ(๋ธŒ๋ผ์šฐ์ €, Node.js ๋“ฑ)์ด ์ด๋Ÿฌํ•œ ๋Œ€์ƒ์„ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ƒˆ๋กœ์šด ES ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์—”์ง„ ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ฑ…์ž„์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

JS -> WASM์€ ๊ณ ๊ฐ ์„œ๋ฒ„์— Electron ์•ฑ์„ ์‚ฌ๋‚ด ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ ๋‚œ๋…ํ™”๋กœ ์ง€์  ์žฌ์‚ฐ์„ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฏฟ๊ธฐ โ€‹โ€‹์–ด๋ ต์ง€๋งŒ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๋…์ผ์—๋Š” ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ๊ฑฐ์˜ ๋˜๋Š” ์ „ํ˜€ ๋˜์ง€ ์•Š๋Š” ์†Œ๊ทœ๋ชจ ๊ธฐ๊ด€์ด ๋งŽ์ด ์žˆ์–ด ์‚ฌ๋‚ด ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์†Œํ”„ํŠธ์›จ์–ด ํšŒ์‚ฌ์— ๋”์ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Simran-B Wasm์€ ์นœ์ˆ™ํ•œ ํ…์ŠคํŠธ ํ˜•์‹์„ ์ง€์›ํ•˜๋Š” ๋””์ž์ธ ์›์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋น ๋ฅธ ๋ถ„์„์„ ์œ„ํ•œ ๊ตฌ์กฐํ™”๋œ ์ œ์–ด ํ๋ฆ„ ์„ค๊ณ„๊ฐ€ ์žˆ์œผ๋ฉฐ ์Šคํƒ ์ˆœ์„œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ผํšŒ์šฉ ์ •์˜์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€๋…์„ฑ ์žˆ๋Š” ํ‘œํ˜„์‹์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ '์ฝ”๋“œ ๋‚œ๋…ํ™”' ๋Œ€์ƒ์ด ์•„๋‹ˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋Š” ์ด ์œ„์— ์ž์ฒด '์ฝ”๋“œ ๋‚œ๋…ํ™”'๋ฅผ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ธ์ฝ”๋”ฉ ํšจ์œจ์„ฑ ๊ฐ์†Œ ๋ฐ ์„ฑ๋Šฅ ์ €ํ•˜ ์ธก๋ฉด์—์„œ ๋น„์šฉ์ด ์˜ˆ์ƒ๋œ๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฐฉ๊ธˆ WebAssembly๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์ง€๋งŒ JS -> wasm ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋ฉด์„œ Angular2์˜ Ahead-of-Time ์ปดํŒŒ์ผ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ƒ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘ํ•˜๋‹ค
๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ wasm์„ ์ง€์›ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋Œ€์‹  ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ์•ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฆฌ์ฐจ๋“œ

@Richard87 ์›น์–ด์…ˆ๋ธ”๋ฆฌ ๋Š” ์ž์ฒด์ ์œผ๋กœ ํŠน์ˆ˜ํ™”๋œ ์ธ์ฝ”๋”ฉ ๋ฐ ํ˜ธ์ถœ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ๋ช…๋ น์–ด ์„ธํŠธ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ์–ด์…ˆ๋ธ”๋ฆฌ์˜ ์„ธ๊ณ„์—์„œ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ง์€ ์—†์ง€๋งŒ ์ด๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ์„ธํŠธ์™€ ๊ตฌํ˜„ ํ‘œ๋ฉด์ ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜์›ํžˆ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ํ˜„์žฌ ์›น์–ด์…ˆ๋ธ”๋ฆฌ์— ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์—†๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ํ•ด๋‹น ํ•˜์œ„ ์ง‘ํ•ฉ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ด์ ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธ.

์›น ์–ด์…ˆ๋ธ”๋ฆฌ์— ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํฐ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ํŠธ๋žœ์ŠคํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ด ํ™•์žฅ๋˜์ง€๋งŒ ๋‚ด ์ƒ๊ฐ์—๋Š” ์—ฌ์ „ํžˆ ๋” ์ ํ•ฉํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์•ฝ๊ฐ„๋งŒ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(๋„คํŠธ์›Œํฌ!)์˜ ์ค‘์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ™•๋Œ€๋˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ป๊ณ ์ž ํ•˜๋Š” ์ด์ ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋„๋‹ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ"์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„(์ด๊ฒƒ์€ ์‹ค์ œ๋กœ Unity๊ฐ€ UnityScript์™€ ํ•จ๊ป˜ ์žˆ๋Š” ์œ ์‚ฌํ•œ ๋ณดํŠธ์ž…๋‹ˆ๋‹ค. ๋‹จ, ๋‹ค๋ฅธ ๋ณ€๋• ์™ธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜์œ„ ์‹œ์Šคํ…œ ๋ฐ ํ˜ธ์ถœ ๊ทœ์น™๊ณผ ๋” ์ž˜ ํ†ตํ•ฉ๋˜๋„๋ก ์กฐ์ •ํ–ˆ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด).

๋ธŒ๋ผ์šฐ์ €์™€ Webgl์„ ๋ณด๊ณ  ์žˆ๋Š” ์šฐ๋ฆฌ ์ค‘ ์ผ๋ถ€๋Š” ๊ฒŒ์ž„์„ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” webgl์—์„œ ์ƒ์—…์  ํ’ˆ์งˆ์˜ ๊ฒŒ์ž„์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜์ง€๋งŒ ํ˜„์žฌ ๊ธฐ์ˆ ์€ ํ”„๋ ˆ์ž„์ด ๊ฑด๋„ˆ๋›ฐ๋Š” ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
JS ๊ฒŒ์ž„ ์—”์ง„์„ ์‚ฌ์šฉํ•œ ๋ธŒ๋ผ์šฐ์ € ๊ฒŒ์ž„์€ ๊ฑฐ์˜ ์‹คํŒจํ–ˆ๊ณ  Unity๊ฐ€ ์ด๋ฅ™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์— C++ => Wasm์€ ์ฝ”๋“œ๋ฅผ WASM์œผ๋กœ ํฌ๋กœ์Šค ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ œ์ž‘์ž์™€ ๊ฐ™์€ ์ด๋Ÿฌํ•œ ํฐ Unity์—๊ฒŒ ๊ณผ๋„ํ•œ ์ด์ ์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Three JS ๋˜๋Š” Babylon์„ ์‚ฌ์šฉํ•˜์—ฌ ์†์œผ๋กœ JS๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? JS/Asm.js => Wasm ๋„๊ตฌ ์ฒด์ธ์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ Js์˜ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฃฝ๊ณ  ์‚ฌ๋žŒ๋“ค์ด Wasm์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด C++ ๋ฐ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๊ฒŒ์ž„ ๋“ฑ์—์„œ.
JS => JS ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ถˆ๊ณตํ‰ํ•œ Wasm ๋ฐฑ์—”๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ EMCC๋Š” ์‹คํ–‰ ์‹œ ํฐ ํž™์„ ํ• ๋‹นํ•˜๊ณ  ์ด๋กœ ์ธํ•ด ์†๋„๊ฐ€ ๋ถ„๋ช…ํ•˜์ง€๋งŒ ์ข‹์€ js ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” Js ๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์˜ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ์—ฌ์ „ํžˆ ๋งŽ์€ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ gc๋ฅผ ๋” ์ผ์ฐ ๋˜๋Š” ๋งˆ์Œ๋Œ€๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GC๊ฐ€ ์‹คํ–‰๋  ๋•Œ ํ”„๋ ˆ์ž„ ๊ฑด๋„ˆ๋›ฐ๊ธฐ๋Š” Webgl์ด ํ”„๋ ˆ์ž„์„ ๊ฑด๋„ˆ๋›ฐ๊ฒŒ ํ•˜๋Š” ํฐ ๋ฌธ์ œ์ด๋ฉฐ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ณด๋‹ค JS ์ฝ”๋“œ๋ฅผ ๋” ์ž˜ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์†์œผ๋กœ ์ž‘์„ฑํ•œ Assembly์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ์ „ํžˆ ํ›จ์”ฌ ์ž‘๊ณ  ๊ณ ๋„๋กœ ์ •๋ ฌ๋œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์›น ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@metacritical C++๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํ”„๋กœ์„ธ์Šค์— ๋งŽ์€ ์ž‘์—…์„ ํˆฌ์ž…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— WASM์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JavaScript์—์„œ๋„ ๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ํ˜„์žฌ ์•„๋ฌด๋„ ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•  ์ด์œ ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—”์ง„์˜ ๋ฌธ์ œ๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ž…๋‹ˆ๋‹ค. ์„ ํ˜• ๋ฉ”๋ชจ๋ฆฌ์™€ WASM ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘์ง€ํ•˜์—ฌ ์–ด๋–ค ๊ฐœ์ฒด๊ฐ€ ์•„์ง ์‚ด์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฐœ์ฒด๋Š” ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ GC๊ฐ€ ์‹คํ–‰๋  ํ•„์š”๊ฐ€ ์—†๋„๋ก ๊ฐ€๋น„์ง€ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด WASM์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์—”์ง„์„ ์žฌ์ž‘์—…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ ๊ฒŒ ๋งŒ๋“œ๋Š” ๋งค์šฐ ๊นจ๋—ํ•œ Javascript๋Š” ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Plain Js๋Š” WASM์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Asm.js ๋˜๋Š” Typescript๋Š” ๊ฐ๊ฐ ์œ ํ˜• ์ฃผ์„ ๋˜๋Š” ์œ ํ˜•์˜ ๊ฐ€์šฉ์„ฑ์œผ๋กœ ์ธํ•ด WASM์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@metacritical ์–ด๋ ต์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. C++ ์—”์ง„์—์„œ๋„ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋Š” ๊ฐ์ฒด ์ˆ˜๋ช… ๊ด€๋ฆฌ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ‹€์— ์–ฝ๋งค์ด์ง€ ์•Š์ง€๋งŒ JavaScript์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜ JS๋Š” WASM์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ _์žˆ์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘, ๋ฐ˜์‚ฌ, ์†์„ฑ ๋“ฑ๊ณผ ๊ฐ™์€ JavaScript์˜ ์ƒ์œ„ ์ˆ˜์ค€ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๋„์šฐ๋ฏธ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋œ JS ์—”์ง„์œผ๋กœ ๋ฌด๋ฃŒ๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ. TypeScript๋Š” ๋ณ„๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ์— ๋น„ํ•ด ASM.JS๋Š” WASM์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ASM.JS์—์„œ ํ—ˆ์šฉํ•˜๋Š” JS ๊ธฐ๋Šฅ์˜ ์—„๊ฒฉํ•œ ํ•˜์œ„ ์ง‘ํ•ฉ๋„ WASM์—์„œ 100% ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ASM.JS๋กœ ์ž‘์„ฑ๋œ ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ๊ฐ€์น˜ ์žˆ๋Š” ๋…ธ๋ ฅ์ด ๋  ๊ฒƒ์ด์ง€๋งŒ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ๋ชจ๋“  ์ฃผ์š” ASM.JS ํŒŒ์ผ์€ ์ด๋ฏธ WASM์„ ์ง์ ‘ ๋Œ€์ƒ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” C++ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ทธ์— ๋น„ํ•ด ASM.JS๋Š” WASM์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์˜ค๋Š˜๋‚  ์šฐ๋ฆฌ๊ฐ€ C++๋ฅผ wasm์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์ฃผ์š” ๋ฐฉ๋ฒ•์€ ๋จผ์ € asm.js๋กœ ์ปดํŒŒ์ผํ•œ ๋‹ค์Œ Binaryen์˜ asm2wasm์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

@kripken asm.js ์‚ฌ์–‘์„ ๋ณด๋ฉด ์†์œผ๋กœ ์“ด asm.js๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด๋Š” js ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๋ชจ๋“  ๊ฒƒ์ด ์†์‹ค๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์œ„์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ WASM ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JS์˜ ์ง„ํ™”, ์ฆ‰ ์—„๊ฒฉํ•˜๊ฒŒ ์ž…๋ ฅ๋œ ์–ธ์–ด๊ฐ€ JS -> WASM์˜ ์ข‹์€ ํ›„๋ณด๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ์š”?
TC39์— typed object์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@aruns07 ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” JavaScript ๊ธฐ๋Šฅ์ด

@Kardax @aruns07 ์‚ฌ๋žŒ๋“ค์€ Dynamic Language์˜ ํŽธ๋ฆฌํ•จ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๊ฐ€๋” ๊ฐ•๋ ฅํ•œ ์œ ํ˜•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

jfbastien์ด 2015๋…„ 6์›” 24์ผ์— ๋Œ“๊ธ€์„ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.
JS โ†’ wasm์€ wasm์ด GC๋ฅผ ์ง€์›ํ•˜๊ณ  JIT ์ปดํŒŒ์ผ๋„ ์ง€์›ํ•ด์•ผ ์‹ค์ œ๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ wasm์—์„œ JS ์—”์ง„์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค!

๋‹ค์Œ ๋งํฌ์— ๋”ฐ๋ฅด๋ฉด:
https://lists.w3.org/Archives/Public/public-webassembly/2017Feb/0002.html
WebAssembly ํ•ฉ์˜ ๋ฐ ๋ธŒ๋ผ์šฐ์ € ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ข…๋ฃŒ

์ฒซ ํšŒ์‹  ํ›„ 2๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ WebAssembly๋Š” ์˜ค๋Š˜๋‚  ์ฃผ์š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ wasm์—์„œ JS ์—”์ง„์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
js -> wasm์˜ ์žฅ์ ์€ GC ์ง€์›๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ์ž‘์€ ์ฝ”๋“œ ํฌ๊ธฐ์™€ ๋” ๋น ๋ฅธ ์‹คํ–‰, ํŠนํžˆ ์ผ๋ฐ˜์ ์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋กœ๋“œ ์‹œ๊ฐ„์ด 5๋ฅผ ์ดˆ๊ณผํ•˜๋Š” 10MB ์ •๋„์˜ JS ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” Ionic2์™€ ๊ฐ™์€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ๋ถ„์•ผ์—์„œ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ดˆ(JS์˜ ๊ฐ 2MB ๊ตฌ๋ฌธ ๋ถ„์„ = 1์ดˆ)

@jfbastien JS -> wasm transpiler์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋œ ๋‹ต๋ณ€์„ ๊ฒŒ์‹œํ•ด ์ฃผ์„ธ์š”.

์„์‚ฌ ๋…ผ๋ฌธ์˜ ์ผ๋ถ€๋กœ JavaScript์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์—์„œ WebAssembly๋กœ Transpiler๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” TypeScript๋กœ ์ œํ•œ๋˜์ง€๋งŒ Flow์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ณ€ํ˜•๋„ ํ–ฅํ›„ ์ง€์›๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชฉํ‘œ๋Š” ์ „์ฒด JavaScript ์–ธ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ JIT ๊ตฌํ˜„์ด ์˜ค๋Š˜๋‚  ์ง๋ฉดํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์†๋„ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ). SoundScript์—์„œ ์ •์˜ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ํ•˜์œ„ ์ง‘ํ•ฉ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ๋ชฉํ‘œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๋ถ€๋ถ„์„ WebAssembly๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด JavaScript ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฒ”์šฉ ๋ณ€ํ™˜๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์˜ ์„ฑ๋Šฅ์„ ๊ฐ€์†ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์žฅ๋‹จ์ ์„ ๋ณผ ๋•Œ ๋‚ด ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ ์ง€ ๋งค์šฐ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์˜๊ฒฌ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

@Mohsen7s ๋‚ด ๋Œ€๋‹ต์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. WebAssembly์˜ MVP ๋ฒ„์ „์€ ๋น ๋ฅธ JavaScript ๊ฐ€์ƒ ๋จธ์‹ ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” GC ๋ฐ JIT ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์™„์ „ํžˆ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์˜๋ฆฌํ•œ ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฝค ์ข‹์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ ๊ตฌํ˜„๋งŒํผ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ "์ตœ์†Œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ œํ’ˆ" ์ ‘๊ทผ ๋ฐฉ์‹์— ๋‚ด์žฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ•œ ์ œํ’ˆ์„ ์ถœ์‹œํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. MVP ๋ฐ ๋ˆ„๋ฝ๋œ "๋ฏธ๋ž˜ ๊ธฐ๋Šฅ"์— ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ํ† ๋ก ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://github.com/WebAssembly/design/issues/992#issuecomment -281735235

ํ˜„์žฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์ ์ธ ๋…ผ์˜๋Š” ์ œ์ณ๋‘๊ณ , JS -> WASM์ด ์ฒ ํ•™์ ์œผ๋กœ๋‚˜ ๋งˆ์ผ€ํŒ… ๊ด€์ ์—์„œ 1์ˆœ์œ„ ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๊นŒ์ง€ ๊ฐœ๋ฐœ์ž ๋ฐ”์ด์ธ. ๋ชจ๋“  ์‹œ์žฅ์—์„œ ์ผํ•  ์ˆ˜ ์žˆ๋Š” JS ๊ธฐ์ˆ ์„ ๊ฐ€์ง„ ๋ชจ๋“  ํ”„๋ก ํŠธ/๋ฐฑ ์—”๋“œ/ํ’€ ์Šคํƒ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋Œ€์‹  ํ›จ์”ฌ ๋” ์ž‘์€ ์‚ฐ์—… ํ•˜์œ„ ์ง‘ํ•ฉ์—์„œ ์‚ฌ์šฉ๋˜๋Š” C++๋ฅผ ๋ฐฐ์šฐ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ฏธ ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ - ๋‚˜๋„ ์•Œ์•„, ๋‚˜๋Š” ํ•˜๋‚˜๋กœ ๋งํ•œ๋‹ค. ๋‚˜๋Š” ์ด ์ „์ฒด ํ† ๋ก ์ด ์ผ์ข…์˜ ๋ฐ˜ํ–ฅ์‹ค์ด๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ถ€์กฑ์„ ์˜นํ˜ธํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋“ค์˜ ์‹œ๊ฐ„์„ ๊ทธ๋“ค์ด ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋ฌป๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ์ด์•ผ๊ธฐํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋” ํˆฌ์žํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@BossLevel

ํ˜„์žฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์ ์ธ ๋…ผ์˜๋Š” ์ œ์ณ๋‘๊ณ , JS -> WASM์ด ์ฒ ํ•™์ ์œผ๋กœ๋‚˜ ๋งˆ์ผ€ํŒ… ๊ด€์ ์—์„œ 1์ˆœ์œ„ ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๊นŒ์ง€ ๊ฐœ๋ฐœ์ž ๋ฐ”์ด์ธ. ๋ชจ๋“  ์‹œ์žฅ์—์„œ ์ผํ•  ์ˆ˜ ์žˆ๋Š” JS ๊ธฐ์ˆ ์„ ๊ฐ€์ง„ ๋ชจ๋“  ํ”„๋ก ํŠธ/๋ฐฑ ์—”๋“œ/ํ’€ ์Šคํƒ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋Œ€์‹  ํ›จ์”ฌ ๋” ์ž‘์€ ์‚ฐ์—… ํ•˜์œ„ ์ง‘ํ•ฉ์—์„œ ์‚ฌ์šฉ๋˜๋Š” C++๋ฅผ ๋ฐฐ์šฐ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ฏธ ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ - ๋‚˜๋„ ์•Œ์•„, ๋‚˜๋Š” ํ•˜๋‚˜๋กœ ๋งํ•œ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฏธ JavaScript๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์˜๋„ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ WebAssembly์—๋Š” ์›น์ด ์•„๋‹Œ ์—ด๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ† ๋ก ๊ณผ https://github.com/WebAssembly/design/issues/992#issuecomment -281735235๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์ง„ ๋‹ค์–‘ํ•œ ๋ชฉํ‘œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ํ‹€๋ฆฌ์ง€ ์•Š์•„! MVP๋Š” ๋‹จ์ˆœํžˆ ๋ˆ„๊ฐ€ ๋จผ์ € ์„œ๋น„์Šค๋ฅผ ๋ฐ›๋Š”์ง€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ์ „์ฒด ํ† ๋ก ์ด ์ผ์ข…์˜ ๋ฐ˜ํ–ฅ์‹ค์ด๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ถ€์กฑ์„ ์˜นํ˜ธํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋“ค์˜ ์‹œ๊ฐ„์„ ๊ทธ๋“ค์ด ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋ฌป๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ์ด์•ผ๊ธฐํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋” ํˆฌ์žํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด W3C ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ทธ๋ฃน์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ด€์‹ฌ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋“ค๋กœ๋ถ€ํ„ฐ ๋“ค์€ ๋Œ€๋กœ ์„ฑ๊ณตํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” MVP์— ๊ด€์‹ฌ์ด ์—†์ง€๋งŒ ํ–ฅํ›„ ๊ธฐ๋Šฅ ์—๋Š” ๊ด€์‹ฌ์ด

@jfbastien

๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฏธ JavaScript๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜, ๋‚˜๋Š” 2008๋…„๋ถ€ํ„ฐ ํ‰๊ท ์ ์ธ ํœด๋Œ€์ „ํ™”์—์„œ ๊ดœ์ฐฎ์€ FPS๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด HTML5 ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฑฐ๊ธฐ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์ฒญ๊ตฌ์„œ๋ฅผ ์ง€๋ถˆํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์•ฝํ•  ๋•Œ ๋งค์šฐ ์ข‹์€ ๋ณด์ƒ์„ ๋ฐ›๋Š”๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ง„ํ–‰ ์ƒํ™ฉ์ด ๋ถ€์กฑํ•œ ๊ฒƒ์€ ์ฝ”๋“œ ํ’ˆ์งˆ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด W3C ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ทธ๋ฃน์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•˜-์ปค๋ฎค๋‹ˆํ‹ฐ ๊ทธ๋ฃน์— ๊ฐ€์ž…ํ•œ ์‹ค์ œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช‡ ๋ช…์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ๋ฅผ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์‹ค์ œ ๊ฐœ๋ฐœ์ž์˜ ๊ณ ํ†ต์„ ๋œ ๋Š๋ผ๋Š” ์ „๋„์‚ฌ ๋“ฑ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€/๊ด€๋ จ๋œ/W3C์—์„œ ๋ˆ„๊ตฌ๋ฅผ ํ„ํ•˜ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ง์”€ํ•˜์‹ ๋Œ€๋กœ ์ด๊ฒƒ์€ ํ† ๋ก ์ด๊ณ  ์ตœ์ „์„ ์—์„œ ๋ณธ ์ €์˜ ์ž…์žฅ์ž…๋‹ˆ๋‹ค.

๋ผˆ๋ฅผ ๊ฑฑ์ •ํ•˜๋Š” ๊ฐœ์ฒ˜๋Ÿผ ๋Œ์•„์™€์„œ ์ฃ„์†กํ•˜์ง€๋งŒ ๋ฉ€๋ฆฌ์žˆ๋Š” ๋™์•ˆ ๋‚ด ์š”์ ์„ ์„ค๋ช…ํ•˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‰ด์Šค๋ ˆํ„ฐ/์ปค๋ฎค๋‹ˆํ‹ฐ ์ด๋ฒคํŠธ ๋˜๋Š” ํ”ผ๋“œ๋ฐฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ด ๋ฌด์—‡์ด๋“  ์›น ๊ฐœ๋ฐœ์ž(๊ณ ๊ฐ)์—๊ฒŒ ์ด ์งˆ๋ฌธ์„ ํ•˜์‹ญ์‹œ์˜ค.

๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ์„ ํ•œ ๋‹จ๊ณ„ ๋Œ์–ด์˜ฌ๋ฆฌ๋ ค๋ฉด ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒŒ ๋ฐ›์•„๋“ค์—ฌ์งˆ๊นŒ์š”?

๊ทธ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๊ฐ€ ์ด๋ฏธ (๋‚ด ์ƒ๊ฐ์—๋Š” ํ•ด๋กญ๊ฒŒ) ๋‹ต๋ณ€ํ•œ ์งˆ๋ฌธ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ (์•ฝ์†ํ•ฉ๋‹ˆ๋‹ค ;-) ) @jfbastien , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ:

๊ฒŒ๋‹ค๊ฐ€ WebAssembly์—๋Š” ์›น์ด ์•„๋‹Œ ์—ด๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„์ด "WebAssembly"์ธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@BossLevel ๋‚˜๋Š” ๋‹น์‹ ์ด ์–ด๋””์—์„œ ์™”๋Š”์ง€ ์•Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ณต์Œํ™”๋ฅผ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋Œ€๋ณ€ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ WebAssembly์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ์ „ํ†ต์ ์ธ "๋„ค์ดํ‹ฐ๋ธŒ" ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ์—ฌ๋Ÿฌ ์ „๋„์ž๋“ค์ด ์ ‘์ด‰ํ•ด ์™”๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ์†Œํ•œ "์ง„์ง€ํ•œ" ๊ฐœ๋ฐœ์ž์˜ ํ‘œ์‹œ๋กœ Unity์˜ ๊ด€์‹ฌ์„ ์ง€์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ๋žŒ๋“ค์€ ๋˜ํ•œ ์ž์‹ ์˜ ์ด๋ฆ„์œผ๋กœ github์— ๊ฒŒ์‹œํ•˜์ง€๋งŒ ์†Œ์†์ด ํ•ญ์ƒ ๋ช…ํ™•ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๊ทธ๋“ค์„ ๋Œ€๋ณ€ํ•  ์ž๋ฆฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

ํ•˜, ๋‚˜๋Š” 2008๋…„๋ถ€ํ„ฐ ํ‰๊ท ์ ์ธ ํœด๋Œ€์ „ํ™”์—์„œ ๊ดœ์ฐฎ์€ FPS๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด HTML5 ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฑฐ๊ธฐ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์ฒญ๊ตฌ์„œ๋ฅผ ์ง€๋ถˆํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์•ฝํ•  ๋•Œ ๋งค์šฐ ์ข‹์€ ๋ณด์ƒ์„ ๋ฐ›๋Š”๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ง„ํ–‰ ์ƒํ™ฉ์ด ๋ถ€์กฑํ•œ ๊ฒƒ์€ ์ฝ”๋“œ ํ’ˆ์งˆ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ JavaScript ์ž‘์„ฑ์ด ์‰ฝ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€: WebAssembly๋Š” JavaScript ์ตœ์ ํ™”๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•ˆ์ •์ ์ธ ์„ฑ๋Šฅ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•œ ํ˜•์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ TC39๋Š” JavaScript๋ฅผ ์ปดํŒŒ์ผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ JavaScript ์ž์ฒด๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•˜-์ปค๋ฎค๋‹ˆํ‹ฐ ๊ทธ๋ฃน์— ๊ฐ€์ž…ํ•œ ์‹ค์ œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช‡ ๋ช…์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ๋ฅผ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์‹ค์ œ ๊ฐœ๋ฐœ์ž์˜ ๊ณ ํ†ต์„ ๋œ ๋Š๋ผ๋Š” ์ „๋„์‚ฌ ๋“ฑ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€/๊ด€๋ จ๋œ/W3C์—์„œ ๋ˆ„๊ตฌ๋ฅผ ํ„ํ•˜ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ง์”€ํ•˜์‹ ๋Œ€๋กœ ์ด๊ฒƒ์€ ํ† ๋ก ์ด๊ณ  ์ตœ์ „์„ ์—์„œ ๋ณธ ์ €์˜ ์ž…์žฅ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ๊ด€์ ์€ ์ฐธ์œผ๋กœ ํƒ€๋‹นํ•˜๋ฉฐ, ๋‹น์‹ ์˜ ์ž…์žฅ์—์„œ ๋‚ด๊ฐ€ ๋ฏฟ๊ธฐ ํž˜๋“  ๋ง์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๋” ์ž˜ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค :wink:).

๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ์„ ํ•œ ๋‹จ๊ณ„ ๋Œ์–ด์˜ฌ๋ฆฌ๋ ค๋ฉด ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒŒ ๋ฐ›์•„๋“ค์—ฌ์งˆ๊นŒ์š”?

๊ทธ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๊ฐ€ ์ด๋ฏธ (๋‚ด ์ƒ๊ฐ์—๋Š” ํ•ด๋กญ๊ฒŒ) ๋‹ต๋ณ€ํ•œ ์งˆ๋ฌธ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์˜ ์šฐ๋ ค๋ฅผ ์ดํ•ดํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์‚ฌ์‹ค๋กœ ๋ฐํ˜€์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋‚ด๊ฐ€ ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณด๊ธฐ์— WebAssembly๋Š” ๊ณผ๊ฑฐ์— ์›น์— ๋Œ€ํ•œ ๋‚˜์œ ๊ฒฝํ—˜์ด ์žˆ๊ฑฐ๋‚˜ ๋ฌด์„œ์šด ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์€ ๊ฐœ๋ฐœ์ž์ธ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๋ฅผ ์ด ํ”Œ๋žซํผ์— ๋ฐ๋ ค์˜ต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ "์ „ํ†ต์ ์ธ" ์ฝ”๋“œ(์ผ๋ถ€์—์„œ๋Š” "๋ ˆ๊ฑฐ์‹œ"๋ผ๊ณ  ํ•จ)๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” JavaScript ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” WebAssembly๋ฅผ JavaScript์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด npm ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ•ญ์ƒ ์‰ฝ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค!).

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ Twitter, Hacker News, Reddit ๋ฐ ๋‹ค์–‘ํ•œ ์ปจํผ๋Ÿฐ์Šค์—์„œ ๋ณธ ํ”ผ๋“œ๋ฐฑ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋ฐํ˜€์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์–ด๋Š ์ •๋„ ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—์ฝ” ์ฑ”๋ฒ„๋ฅผ ๋“ฃ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ C++์™€ JavaScript ๋ฐฐ๊ฒฝ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค๊ณผ ํšŒ์˜์—์„œ ๋งค์šฐ ์œ ๋งํ•œ ํ† ๋ก ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— TC39๋Š” ์ง„์ •์œผ๋กœ JavaScript๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ ๋ช‡ ๋…„ ๋™์•ˆ ํŠนํžˆ ES6์—์„œ ๊ทธ๋žฌ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์š”์ ์€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” JavaScript ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ C++ ๋˜๋Š” Rust์™€ ๊ฐ™์€ "WebAssembly ์นœํ™”์ ์ธ" ์–ธ์–ด์— ์ •ํ†ตํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ์ผ์ด ์ง„ํ–‰๋ ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„์ด "WebAssembly"์ธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ•˜์•„! ๋ฉ‹์ง„ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. "WebAssembly: ์›น ๋„ ์–ด์…ˆ๋ธ”๋ฆฌ๋„ ์•„๋‹™๋‹ˆ๋‹ค"๋ผ๋Š” ์ œ๋ชฉ์˜ ๊ฐ•์—ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋Š๋ผ๋Š”์ง€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๊ฐœ์ ์œผ๋กœ ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ๋งค๋‹ฌ๋ฆฌ๋„๋ก ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์—์„œ ๋‘ ๊ฐ€์ง€ ์š•๋ง์„ ์ฝ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋น ๋ฅธ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์œ„ํ•œ ํ‘œ์ค€ JavaScript์˜ ์ด์ง„ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค.
  2. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํŒŒ์ผ๋œ C++์™€ ํ‘œ์ค€ JavaScript ์‚ฌ์ด์˜ ์„ฑ๋Šฅ ๊ฒฉ์ฐจ๋ฅผ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ 2๋Š” ๋งŽ์€ ํšŒ์‚ฌ์—์„œ ์ง€์†์ ์ธ ์—ฐ๊ตฌ์™€ ๋Œ€๊ทœ๋ชจ ํˆฌ์ž์˜ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค. ์ง€๋‚œ 15๋…„ ๋™์•ˆ JavaScript ์—”์ง„์˜ ์„ฑ๋Šฅ ์ธก์ •์„ ๋ณด๋ฉด ์—ญ์‹œ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฉ์ฐจ๊ฐ€ ์ ์  ์ค„์–ด๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ 1์€ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ์•„๋ฌด๋„ ์ž‘์—…ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์—„์ฒญ๋‚˜๊ฒŒ ๋ณต์žกํ•˜๊ณ  JavaScript๊ฐ€ ๋น ๋ฅธ ์†๋„๋กœ ๊ณ„์† ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ์ ์  ๋” ์–ด๋ ค์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. WebAssembly๋Š” ๋งค์šฐ ์—„๊ฒฉํ•˜๊ณ  ์ƒ๋Œ€์ ์œผ๋กœ ๋ณต์žกํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋ช‡ ๋…„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

@jfbastien -

๋”ฐ๋ผ์„œ ํŠน๋ณ„ํ•œ ์ˆœ์„œ ์—†์ด ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์‹œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1) ์ด ์ „์ฒด ํ† ๋ก ๊ณผ ๋‚˜์•„๊ฐ€์•ผ ํ•  ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ๋‚ด ๊ฒฌํ•ด์— ๋Œ€ํ•œ ์ข‹์€ ์˜ˆ๋Š” NodeJS์— ์žˆ์Šต๋‹ˆ๋‹ค. JS API/C++ ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ ํ”„๋ก ํŠธ์—”๋“œ์ž…๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ๋Š” ์†๋„, ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ์†๋„.
2) 2008๋…„์— ๊ฐœ์ธ ์˜ค๋””์„ธ์ด๋ฅผ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ Node๋ฅผ ๊ณ ์ˆ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ;-) ์ €๋Š” ์›๋ž˜ ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•ด PHP์™€ Java๋ฅผ ๋ชจ๋‘ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒ๋งค ;-) !) ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‹จ์ง€ ํ•˜๋‚˜์˜ ์–ธ์–ด๋ฅผ ๋ฐฐ์šฐ๊ณ  ๊ทธ ์–ธ์–ด๋ฅผ ์ž˜ ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค๋Š” ๋‹จ์ˆœํ•œ ์ด์œ  ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ๋“ค์„ ๋นจ๋ฆฌ ํ• ์ธํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚ด๊ฐ€ ์•„๋Š” ๊ฐœ์ธ์ ์ธ ์ด์•ผ๊ธฐ์ง€๋งŒ, ๋‚ด๊ฐ€ ์ด๋Ÿฐ ๋Š๋‚Œ์„ ๋ฐ›๋Š” ์œ ์ผํ•œ ๊ฐœ๋ฐœ์ž์ธ์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์–ธ์–ด๋ฅผ ๋ฐฐ์šฐ๋Š” ๋™์•ˆ ํšŒ์‚ฌ์—์„œ ํ•œํ‘ผ๋„ ๋ฐ›์ง€ ์•Š๊ณ  ์Šค์Šค๋กœ๋ฅผ ์œ„ํ•ด ์ผํ•˜๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.
3) ๋‹ค์Œ ์š”์ ์„ ์ œ์‹œํ•˜๊ธฐ ์ „์— ์˜๋„์ ์œผ๋กœ ์ˆซ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ(์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ์„์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Œ) ASM์˜ ๋น„์ค‘์ด ๋‚ฎ์•˜๋‹ค๋Š” ์ ์— ๊ธฐ๊บผ์ด ๋‚ด๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋ฐ๋ชจ๋ฅผ ๋ณด๊ณ  ๋งค์šฐ ํฅ๋ถ„ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์ž ์ฆ‰์‹œ ๊ทธ๊ฒƒ์„ ๋ฌด์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋Œ€ํ•œ API, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ฆฌ์†Œ์Šค, ์ž์Šต์„œ, ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์„ ์ œ๊ณตํ•˜๋Š” ์ง€๊ตฌ์ƒ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ(JS)์˜ ์ผ๋ถ€์ธ ์›น ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ทธ๋Ÿฐ ๊ฒƒ์—์„œ ํ•œ ๋ฐœ์ง ๋ฌผ๋Ÿฌ๋‚˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž ์žฌ์ ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„(์ฆ‰, ์ปดํŒŒ์ผ๋Ÿฌ)๊ฐ€ ๊ท€ํ•˜์˜ ๋ช…๋ฐฑํ•œ ํŠธ๋ฆญ์„ ๋†“์น˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ. ๋‚˜๋Š” GLSL(Shading langage) ๊ฐœ๋ฐœ์ด ASM๋ณด๋‹ค ๋” ๋งŽ์€ ์„ฑ์žฅ์„ ๋ณด์˜€๋‹ค๊ณ  ๋‚ด๊ธฐ๊นŒ์ง€ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ a) Pixi.js ๋ฐ Three.js์™€ ๊ฐ™์€ ์šฐ์ˆ˜ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  b) ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ShaderToy ์™€ ๊ฐ™์€ ์‚ฌ์ดํŠธ์—์„œ ์ง์ ‘
4) ๊ฒŒ์ž„ ์‚ฐ์—…/๊ฒŒ์ž„ ์ „๋ฐ˜. ์ €๋Š” ๊ฒฝํ—˜์„ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ์ €๋Š” ์ง€๋‚œ 9๋…„ ๋™์•ˆ (์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์€) ๊ฒŒ์ž„์„ ์ž‘์„ฑํ•ด ์™”์Šต๋‹ˆ๋‹ค. b) TIGA (์˜๊ตญ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋ฌด์—ญ ํ˜‘ํšŒ) ์ด์‚ฌํšŒ์—์„œ 2๋…„ ๋™์•ˆ ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”. ์›น์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž์˜ ์ˆ˜๋Š” ํ•œ ์†์œผ๋กœ ์…€ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฏธ ์ž์‹ ์ด ์ข‹์•„ํ•˜๋Š” ์—…๊ณ„์— ์žˆ๊ณ  ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๊ฑฐ๋‚˜ ์ผํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ WA์˜ ๋Œ€์ƒ์ด ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ, ๊ณ ์šฉ์ฃผ๋Š” ํ•ญ์ƒ ๊ฒŒ์ž„์„ ์ด์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋งค์ฒด๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋ฐ”์ผ์„ ์ œ์™ธํ•˜๊ณ  ์Šค์Šค๋กœ๋ฅผ ๋†€๋ฆฌ์ง€ ๋ง์ž(์—ฌ๊ธฐ์„œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ์Šฌํ”„๊ฒŒ๋„ WASM์—์„œ ์ˆ˜์ •ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ). ์›น์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ๋ฐ ์ˆ˜์ต ์ฐฝ์ถœ ์ธก๋ฉด์—์„œ PC/์ฝ˜์†”๊ณผ์˜ ๊ด€๊ณ„๊ฐ€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
5) ๋ฐ˜๋Œ€๋กœ ์นจ์‹ค ์ฝ”๋”/์ธ๋”” ์”ฌ์€ ๋ช‡ ๋…„ ์ „์ฒ˜๋Ÿผ ์ ˆ์ •์€ ์•„๋‹ˆ์ง€๋งŒ ์—ฌ๊ฐ€ ์‹œ๊ฐ„์— ์›น ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•˜๋Š” ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ •์น˜์ ์œผ๋กœ ๋…ธ๊ณจ์ ์œผ๋กœ ๋ฐฉํ–ฅ์„ ํ‹€๊ณ  ์‹ถ์ง€ ์•Š๊ณ  Unity ์‚ฌ๋žŒ๋“ค์„ ๋…ธํฌํ•˜์ง€๋„ ์•Š์ง€๋งŒ(์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๊ณผ ๊ฑฐ๋ž˜๋ฅผ ํ–ˆ์œผ๋ฉฐ ํ›Œ๋ฅญํ•œ ์ œํ’ˆ์ž„), ๊ฐœ์ธ์ ์œผ๋กœ ๋‹น์‹ ์ด ์ด์ต์„ ๋Œ๋ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํฐ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋ช…์˜ ์ž‘์€ ์‚ฌ๋žŒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค(์ฒ ํ•™์  ๋ฐ ์ƒ์—…์  ์˜๋ฏธ๊ฐ€ ๋ชจ๋‘ ์žˆ์Œ).

@jfbastien ์˜ ๊ฐ•์—ฐ์„ ๋งŽ์ด ๊ธฐ๋Œ€

@RyanLamansky - ๋‹น์‹ ์ด ํ•ฉ๋ฆฌ์ ์ธ ๊ตฌ๋ณ„์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ด€๋ จํ•˜์—ฌ:

ํ•ญ๋ชฉ 1์€ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ์•„๋ฌด๋„ ์ž‘์—…ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์—„์ฒญ๋‚˜๊ฒŒ ๋ณต์žกํ•˜๊ณ  JavaScript๊ฐ€ ๋น ๋ฅธ ์†๋„๋กœ ๊ณ„์† ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ์ ์  ๋” ์–ด๋ ค์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ทนํžˆ ๊ฐœ์ธ์ ์ธ ์ฐจ์›์—์„œ 2008๋…„๋ถ€ํ„ฐ ํ•˜๋ฃจ์— 8์‹œ๊ฐ„์”ฉ JS๋ฅผ ์ž‘์„ฑํ•ด ์˜จ ์‚ฌ๋žŒ์œผ๋กœ์„œ JS์˜ ๋ฐœ์ „์ด ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๋”ฐ๋ผ์žก์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค! ๋‚˜๋Š” ํ•ญ์ƒ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณตํ†ต ๋ถ„๋ชจ์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ ์›์น™์— ๋”ฐ๋ผ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, 100% ์ง€์›์ด ์—†์œผ๋ฉด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(IE6/7/8/9๋Š” ์ œ์ณ๋‘๊ณ  ;-). ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋ฐ์Šคํฌํƒ‘๊ณผ ๋ชจ๋ฐ”์ผ์—์„œ ES5์— ๋Œ€ํ•œ 100% ๋ธŒ๋ผ์šฐ์ € ์ง€์›๋„ ์–ป์ง€ ๋ชปํ–ˆ์„ ๋•Œ ์œ ํ–‰ํ•˜๋Š” ES6 ํŒจํ„ด๊ณผ ๊ฐ€์ •๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ์–ด๋ฆฌ์„์€ ์ž…์žฅ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ์‹œ์žฅ ์ ์œ ์œจ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ถ„๋ช…ํžˆ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(ํ—ˆ์šฉ๋จ์ด ์ธ์ •๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ). ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ์„œ ์•ž์œผ๋กœ ๋ช‡ ๋…„ ๋™์•ˆ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ์œผ๋กœ ํšจ์œจ์ ์ด๊ณ  ์ตœ์ ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์•„์ง ์ƒˆ๋กœ์šด ํž™์Šคํ„ฐ ์ฝ”๋“œ๋กœ ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…(์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค ;-) )?

์•„๋งˆ ์ฝ”ํŠธ๋ฅผ ๋ฐ›์„ ๋•Œ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์•„์š” ;-)

@RyanLamansky ์ €๋Š” WebAssembly๊ฐ€ ๋ฒˆ๋“ค ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์˜ ์ƒˆ๋กœ์šด ๋Œ€์ƒ์ด ๋  ๊ฒƒ์ด๋ฉฐ ๊ฐ‘์ž๊ธฐ ๋ชจ๋“  ๊ฒƒ์ด ๋” ๋นจ๋ผ์งˆ ๊ฒƒ์ด๋ผ๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WebAssembly๋Š” ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ ๋Œ€์ƒ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ ๊ฐ€๋“ ์ฐฌ ๋Œ€๊ทœ๋ชจ JS ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๊ฐ€์ง„ ์ผ๋ฐ˜์ ์ธ ์›น ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณตํ•  ๊ฒƒ์ด ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ์ง€ํ–ฅ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ JS ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์ˆ˜๋ช… ์ฃผ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๊ฒฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
1) ํฐ JS ๋ฒˆ๋“ค์€ ์ƒ๋‹นํ•œ ํŒŒ์‹ฑ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚œ๋…ํ™”๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
2) ํ‘œ์ค€ JS ์ฝ”๋“œ์—๋Š” JIT/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์ตœ์ ํ™”์— ํ•„์š”ํ•œ ์œ ํ˜• ์ฃผ์„(๋ฐ ๊ธฐํƒ€ ํžŒํŠธ)์ด ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด๋‹ค ๊ฒฐ์ •์ ์ด๊ณ  ํˆฌ๋ช…ํ•œ ์ตœ์ ํ™” ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ ์ ˆํ•˜๊ฒŒ ์œ ํ˜•์ด ์ง€์ •๋˜๊ณ  ์ฃผ์„์ด ๋‹ฌ๋ฆฐ JS ๋ฒ„์ „๊ณผ ํ•ด๋‹น ์–ธ์–ด ๋ฒ„์ „์˜ ์‚ฌ์ „ ๊ตฌ๋ฌธ ๋ถ„์„๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฒ„์ „์ž„์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์˜๊ฒฌ๊ณผ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด WASM์€ JS ์™ธ์— ์‹คํ–‰๋˜๊ณ  ๋™์ผํ•œ JS ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €(์ตœ์ ํ™”)์ž…๋‹ˆ๋‹ค. https://developer.mozilla.org/en-US/docs/WebAssembly

๋‚˜๋Š” ์ด ์งˆ๋ฌธ์„ ์ •๋ง๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์–ด๋ฆฌ์„์€ ์งˆ๋ฌธ์„ ํ•˜๊ณ  ์–ด๋ฆฌ์„์€ ๋ง์„ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ๊ณผ Webassembly ํŒ€์˜ ์˜๊ฒฌ์€ Webassembly is FASTER than Javascript? I do not see performance comparison for WebAssembly Code and similar Javascript Code? ์ฃผ๊ด€์ ์ธ ์ƒ๊ฐ๋งŒ ๋ณธ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? Webasemly๊ฐ€ Javascript๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋ฉด ์™œ ๋ณ€ํ™˜๊ธฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? Javascript๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๋ฉด ์™œ ES7/TS ์ฝ”๋“œ๊ฐ€ ์•ˆ๋ ๊นŒ์š”? ์™œ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ ๋งŽ์€ ๋น„๋ฐ€์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@ganeshkbhat WASM์˜ ์ดˆ๊ธฐ ๋ฆด๋ฆฌ์Šค๋Š” JavaScript์˜ ๋งค์šฐ ์—„๊ฒฉํ•œ ํ•˜์œ„ ์ง‘ํ•ฉ์ธ asm.js์˜ ์••์ถ• ๋ฐ”์ด๋„ˆ๋ฆฌ ์ธ์ฝ”๋”ฉ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. asm.js์—์„œ ์—๋ฎฌ๋ ˆ์ดํŠธํ•ด์•ผ ํ•˜๋ฏ€๋กœ 64๋น„ํŠธ ์ •์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ asm.js๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

WASM์— ๊ธฐ๋Šฅ(๊ฐ€๋น„์ง€ ์ˆ˜์ง‘, DOM ํ†ตํ•ฉ, ์Šค๋ ˆ๋“œ)์ด JavaScript์— ๋” ๊ฐ€๊นŒ์›Œ์ง€๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์ œ์•ˆ์ด ์žˆ์ง€๋งŒ ์ „์ฒด JavaScript ๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ JS->WASM ๋ณ€ํ™˜๊ธฐ๋Š” ์ ˆ๋Œ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  WASM์˜ ํ•œ๊ณ„ ๋‚ด์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  ์–ธ์–ด ์ œํ•œ์ด WASM ๋ฐ asm.js์™€ ์ž˜ ๋งž๋Š” C ๋ฐ C++์ž…๋‹ˆ๋‹ค.

๋น„๋ฐ€๋„ ๋งˆ๋ฒ•๋„ ์—†์Šต๋‹ˆ๋‹ค. Wasm์€ ํ•˜๋“œ์›จ์–ด์— ํ›จ์”ฌ ๋” ๊ฐ€๊นŒ์šด ํ›จ์”ฌ ๊ฐ„๋‹จํ•œ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— "JavaScript๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค". JavaScript๋Š” ์‹คํ–‰ ์ค‘์— ๋งŽ์€ ๋น„์šฉ์ด ๋“œ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ณต์žกํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ง์ ‘ ๋Œ€์‹  Wasm์„ ํ†ตํ•ด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋ฉด ๋งˆ์ˆ ์ฒ˜๋Ÿผ ๋นจ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ganeshkbhat ํ˜„์žฌ asm.js/webassembly ๋‚ด๋ถ€์— ๊ฐœ์ฒด๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. asm.js ๋ฐ webassembly์—์„œ ๋ชจ๋“  JavaScript ์ž‘์—…์€ ํ•˜๋‚˜์˜ ํฐ typedarray๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. JavaScript ๊ฐœ์ฒด(์˜ˆ: var obj = {a: 1, b: 'test'} ) ๋ฐ ๋ฐฐ์—ด(์˜ˆ: var a = []; )์€ ์•„์ง ๊ฐœ์ฒด ์ง€์›์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์›น ์–ด์…ˆ๋ธ”๋ฆฌ ๋‚ด์—์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋ชจ๋“  ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ์–ด์…ˆ๋ธ”๋ฆฌ ์ง€์›์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ Minimal Viable Product์˜ ๋””์ž์ธ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค.

ํ–ฅํ›„ ๋ฒ„์ „์—์„œ๋Š” ์›น ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋Œ€ํ•œ GC ์ง€์› ์ด ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ( LeaningTech.com ๊ฐœ๋ฐœ์ž)๋Š” ๋” ํฐ JavaScript ํ•˜์œ„ ์ง‘ํ•ฉ ์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ ์„

ํ™•์‹ ํ•˜๋Š”. ์—ฌ๊ธฐ์—์„œ JS์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ์ง€์›์„ ๊ธฐ๋Œ€ํ•˜์‹ญ์‹œ์˜ค. ํ™•์‹คํžˆ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์œ ํ˜•์— ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋Œ€ํ•ด ์ฝ์€ ๋‚ด์šฉ์—์„œ ์ฃผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ์˜์—ญ์—์„œ๋Š” js -> ์›น ์–ด์…ˆ๋ธ”๋ฆฌ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋‹ค์ง€ ๋งค๋ ฅ์ ์œผ๋กœ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ํ™˜๊ฒฝ์—์„œ ์›น ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ nodejs์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์™„์ „ํžˆ ์‚ฌ์‹ค์ด ์•„๋‹ˆ์ง€๋งŒ vertx์™€ ๊ฐ™์€ nodejs ํ™˜๊ฒฝ์˜ ์ง„์ •ํ•œ ์ž ์žฌ๋ ฅ์„ ๋ด…๋‹ˆ๋‹ค. ์›น ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์ค‘ ์–ธ์–ด. ๋‚˜๋Š” ์ด๋Ÿฐ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋ ค๋ฉด GC์™€ ๊ฐ™์€ ๋งŽ์€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ณ  ์‹ฌ์ง€์–ด ์–ด๋–ค ์ข…๋ฅ˜์˜ VM๋„ ํ•„์š”ํ•˜์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด asm.js์— ๋Œ€ํ•ด์„œ๋„ ํšŒ์˜์ ์ด์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ณ  ์˜ค๋Š˜ ๊ทธ๊ฒƒ์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

js -> ์›น ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด (๋‚˜์ฒ˜๋Ÿผ) ํฅ๋ถ„๋˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฏธ๋ž˜์— ํ”„๋กœ์ ํŠธ ts2c ๋ณ€ํ™˜๊ธฐ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ js -> c -> ์›น ์–ด์…ˆ๋ธ”๋ฆฌ ๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์ด๊ณ  ๋งค์šฐ ์šธํ‰๋ถˆํ‰ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mauron85 ๋น„ ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋น„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์€ ํ™•์‹คํžˆ ๋””์ž์ธ์˜ ๊ณ ๋ ค ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚ ์—๋Š” JS API๋งŒ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” .NET JIT ์‹œ์Šคํ…œ์„ ์‹คํ—˜ํ•ด ๋ณด์•˜๊ณ  ์‹œ๊ฐ„ ์™ธ์—๋Š” ์‹ค์งˆ์ ์ธ ์žฅ๋ฒฝ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ WASM์„ ์„ ํ˜ธํ•˜๋Š” ํ”Œ๋žซํผ์— ํ†ตํ•ฉํ•˜๋ ค๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ช‡ ๋…„ ํ›„์— WebAssembly๋ฅผ ์œ„ํ•œ ๊ณ ํ’ˆ์งˆ ๋น„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋Š” WebAssembly ํŒ€์—์„œ ๊ณต์‹์ ์œผ๋กœ ์Šน์ธํ•  ์ •๋„์ž…๋‹ˆ๋‹ค.

IMO JavaScript -> WebAssembly ์ปดํŒŒ์ผ ๊ธฐ๋Šฅ์˜ ํ•œ ๊ฐ€์ง€ ์ด์ ์€ Javascript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋„๊ตฌ์˜ ๊ฐœ๋ฐœ์ž/์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ API๋ฅผ ๋‘ ๊ฐ€์ง€ ํ˜•์‹์œผ๋กœ ๋ฆด๋ฆฌ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋…ธ๋“œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” JS(ํ˜„์žฌ ๊ทธ๋Œ€๋กœ)
  2. WASM์€ ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋Š” ์ปดํŒŒ์ผ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ WASM์˜ ์„ฑ๋Šฅ ์ด์ ์„ ํ™œ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด JS ์ฝ”๋“œ๋ฅผ C/C++๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ์ „ํžˆ Javascript๋กœ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ JS ๋ฐ WASM ๋ชจ๋‘์—์„œ ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋Œ€์ƒ์— ๋Œ€ํ•ด ๋‘ ๊ฐœ์˜ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผ๋œ WASM ๋ฒ„์ „ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™•์‹คํžˆ ๋” ํšจ์œจ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋…ธ์ถœ๋œ API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋ฉฐ WASM์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ถ„๋ช…ํžˆ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ฑ๋Šฅ์€ ํ™•์‹คํžˆ ํ–ฅ์ƒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋Š” ์ปดํŒŒ์ผ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ์˜ WASM

์™œ์š”? ์™œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฉ์–ด๋ฆฌ๊ฐ€ ์›น ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ํŠธ๋žœ์ŠคํŒŒ์ผํ–ˆ์„๊นŒ์š”(์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ํ•ด๋‹น ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ๋Œ€ํ•œ ๋Ÿฐํƒ€์ž„์˜ ๋Œ€๋ถ€๋ถ„์„ ํฌํ•จํ•˜๊ณ , ์ตœ์ƒ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ฏธ๋ž˜์˜ ๋นŒํŠธ์ธ wasm GC ์œ„์— ๊ตฌ์ถ•๋œ ๋ ˆ์ด์–ด๋ฅผ ํฌํ•จํ•˜์—ฌ ์–ด์จŒ๋“  ์ž์ฒด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•จ) ) ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ „์šฉ jit์— ๋˜์ ธ์ง„ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์‹คํ–‰?

์ข‹์•„์š”, ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋” ๋งŽ์œผ๋ฉด ์†๋„๊ฐ€ ๋” ๋Š๋ ค์งˆ ๊ฒƒ์ด๋ผ๋Š” ๋ง์”€์ด์‹ ๊ฐ€์š”?

์ œ๊ฐ€ ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. C/C++/Rust -> WebAssembly ์ปดํŒŒ์ผ๋œ ํ•ญ๋ชฉ์ด ์–ด๋–ป๊ฒŒ ์ •๋ง ํšจ์œจ์ ์ด๊ณ  ๋ฏธ๋ž˜์— ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์•ผ๊ธฐํ•  JS -> WASM ์ง€์›์ด ์žˆ๋”๋ผ๋„? JS๋Š” ๋™์  ์–ธ์–ด์ด๊ณ  C, C++ ๋ฐ Rust๋Š” ๊ทธ๋ ‡์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด JS๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ์™„์ „ํžˆ ์ปดํŒŒ์ผ๋œ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ์ด๋Ÿฌํ•œ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๊นŒ?

JS์—์„œ WASM์œผ๋กœ์˜ ์ปดํŒŒ์ผ์ด ์ง€์†์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์€ ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์œ ์šฉํ•œ ์ด์ง„ ์ธ์ฝ”๋”ฉ์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ ํฌ๊ธฐ์™€ ๊ตฌ๋ฌธ ๋ถ„์„ ์‹œ๊ฐ„์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ JS์— ๋Œ€ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ธ์ฝ”๋”ฉ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ง€๊ธˆ์€ ์„ ํ˜• ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ„๋‹จํ•˜๊ณ  ํด๋ฆฌํ•„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@kabirbaidhya ํ˜„์žฌ JS -> WASM์˜ ์ฃผ์š” ๋ฌธ์ œ๋Š” ์Šคํƒ์„ ๋ถ„์„ํ•˜์—ฌ ํ™œ์„ฑ ์ƒํƒœ์ธ ๊ฐœ์ฒด๋ฅผ ํ™•์ธํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€์— ํšจ์œจ์ ์ธ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์„ ํ˜• ๋ฉ”๋ชจ๋ฆฌ(ํž™)์— ๋ชจ๋“  ๊ฐœ์ฒด ์ฐธ์กฐ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋ฐฐ์น˜ํ•˜๊ณ  ๋™๊ธฐํ™” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ์‹ฌ๊ฐํ•˜๊ฒŒ ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์ด ๋ถ€์กฑํ•˜์—ฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. WASM์˜ ํ–ฅํ›„ ๋ฒ„์ „์€ ํ˜ธ์ŠคํŠธ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์—”์ง„์„ ํ™œ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JS -> WASM์˜ ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ์žฅ๋ฒฝ์€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์™„์ „ํžˆ ๋™์ ์ด๋ผ๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. WASM์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์ˆœ์ „ํžˆ ์ •์ ์ผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋ฏ€๋กœ ํ‘œ์ค€ JS ์„ฑ๋Šฅ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ณต์žกํ•œ ๋งคํ•‘ ๋ ˆ์ด์–ด, ์—๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ ๋™์  ์ฝ”๋“œ ์ƒ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ TypeScript๊ฐ€ ์ด๋ฅผ ๋„์™€์ฃผ๋ฏ€๋กœ TypeScript์˜ ์—„๊ฒฉํ•œ ํ•˜์œ„ ์ง‘ํ•ฉ์ด ์–ด๋Š ์ •๋„ WASM์„ ๋Œ€์ƒ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์ด ์ ์–ด๋„ ํ•œ ๋ช… ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

C/C++๋Š” WASM์˜ ์ œํ•œ ์‚ฌํ•ญ์ด C/C++๊ฐ€ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ๋ณธ ํ•˜๋“œ์›จ์–ด ์ œํ•œ ์‚ฌํ•ญ๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— WASM์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค์™€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

FWIW์—๋Š” V8์ด JavaScript ์‚ฐ์ˆ ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ์Šฌ๋ผ์ด๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://docs.google.com/presentation/d/1wZVIqJMODGFYggueQySdiA3tUYuHNMcyp_PndgXsO1Y/edit

tl;dr ์ด๊ฒƒ์€ ์‹ค์ œ๊ฐ€ ๋ณด์ด๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์–ด๋ ต๊ณ  ์‹ค์ œ๋กœ๋Š” ๊ทธ๋‹ค์ง€ ์˜๋ฏธ๊ฐ€ ์—†๋Š” _ํ•˜๋‚˜์˜_ ์˜ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ VM์ด ์ง„์ •ํ•œ ๊ธฐ๋ณธ์ด๊ณ  ๋ฆฌ์†Œ์Šค์™€ API๋Š” ๊ฒฐ์ฝ” ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฉฐ (์•„๋งˆ๋„) ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ˆ˜๋…„๊ฐ„์˜ ๋ฐ˜๋ณต์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ThinScript , TurboScript ๋“ฑ๊ณผ ๊ฐ™์ด JS/TypeScript ์˜ _subset_ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ฆ์‹ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์–ธ๋œป ๋ณด๊ธฐ์—๋Š” JS ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๋งค์šฐ ์นœ์ˆ™ํ•ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ด๊ฒƒ์ด ์ข‹์€ ์งˆ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ณ„์† ์งˆ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ WebAssembly์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ๋ฏธ๋ž˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น„๋ชฉํ‘œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

2017๋…„ 4์›” 6์ผ 00์‹œ 36๋ถ„์— Ryan Lamansky [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

JS -> WASM์˜ ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ์žฅ๋ฒฝ์€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€
์™„์ „ํžˆ ๋™์ ์ž…๋‹ˆ๋‹ค. WASM์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.
์ •์ ์ด๊ณ  ๋ณต์žกํ•œ ๋งคํ•‘ ๋ ˆ์ด์–ด, ์—๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ ๋™์  ์ฝ”๋“œ ์ƒ์„ฑ
ํ‘œ์ค€ JS ์„ฑ๋Šฅ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„,
TypeScript๊ฐ€ ์ด๋ฅผ ๋„์™€์ฃผ๋ฏ€๋กœ TypeScript์˜ ์—„๊ฒฉํ•œ ํ•˜์œ„ ์ง‘ํ•ฉ์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์–ด๋Š ์ •๋„ WASM์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ํ•œ ์‚ฌ๋žŒ์ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜์‹ญ์‹œ์˜ค.

๋ถˆํ–‰ํžˆ๋„ TypeScript๊ฐ€ ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋„์›€์ด ๋˜๋Š”์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ํฌ๊ด„ํ•˜๋‹ค
JS ๋ ˆ๊ฑฐ์‹œ, ๊ทธ ์œ ํ˜• ์‹œ์Šคํ…œ์€ ๋„ˆ๋ฌด ๊นŠ๊ณ  ๊ทผ๋ณธ์ ์œผ๋กœ ๋ถˆ๊ฑด์ „ํ•˜์—ฌ
ํฅ๋ฏธ๋กœ์šด "์—„๊ฒฉํ•œ" ํ•˜์œ„ ์ง‘ํ•ฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋Ÿฌํ•œ ํ•˜์œ„ ์ง‘ํ•ฉ์€
TS์˜ ํ•˜์œ„ ์œ ํ˜• ๊ฐœ๋…์„ ์ œ์™ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ์˜์—ญ์—์„œ๋Š” ๋ณ„๋กœ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

SafeTypeScript์™€ ๊ฐ™์€ ํ›Œ๋ฅญํ•œ ์—ฐ๊ตฌ ๋…ผ๋ฌธ์ด ์žˆ์ง€๋งŒ
๋” ์ œํ•œ์ ์ผ ๋ฟ ์•„๋‹ˆ๋ผ ์ƒ๋‹นํ•œ ์–‘์˜
๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ถ”๊ฐ€ ๋Ÿฐํƒ€์ž„ ๋ถ€๊ธฐ ๋ฐ ํ™•์ธ,
ํ† ๋ก (๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค์ƒ JS/TS์™€ ๋‹ค๋ฅธ ์–ธ์–ด์ž„).

์–ด์ฉŒ๋ฉด ๋‚˜๋Š” ๋ญ”๊ฐ€๋ฅผ ์–ป์ง€ ๋ชปํ•˜๊ณ  ์žˆ์ง€๋งŒ WebAssembly์˜ ์•„์ด๋””์–ด ์ค‘ ํ•˜๋‚˜๋Š” js์˜ ๊ตฌ๋ฌธ ๋ถ„์„ ์‹œ๊ฐ„์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด AST๋ฅผ ์ง์ ‘ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?

๋”ฐ๋ผ์„œ js๋ฅผ ์ด ast ํ˜•์‹์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ตฌ๋ฌธ ๋ถ„์„ ์‹œ๊ฐ„์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š์„๊นŒ์š”?

@agnivade , ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ›จ์”ฌ ๋” ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์–ธ์–ด๋ฅผ ์œ„ํ•œ AST์ž…๋‹ˆ๋‹ค.

JS๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ Wasm์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์˜ˆ, ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(๋””์ฝ”๋”ฉ๋งŒ ํ•˜๋ฉด ๋จ). ๋™์‹œ์— JS๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ 5๋ฐฐ ์ด์ƒ์œผ๋กœ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์ด๋Š” ํ›จ์”ฌ ๋” ๋†’์€ ๋น„์šฉ์ž…๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ์˜ ์ฝ”๋“œ์— ๋ถˆ๊ณผํ•œ Wasm์— JS VM ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์˜ ์ „์ฒด ๊ตฌํ˜„์„ ํฌํ•จํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.)

๊ฒŒ๋‹ค๊ฐ€, ์†Œ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๊ณ ์„œ๋Š” JS๋ฅผ ๊ฑฐ์˜ ๋น ๋ฅธ ์†๋„๋กœ ์–ป๋Š” ๋ฐ ์ค‘์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋™์  ์ตœ์ ํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋Š” ์›๋ณธ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ณ  ํ”„๋กœํŒŒ์ผ๋ง ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „๋ฌธํ™”ํ•˜๋Š” ๋ฐ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ปดํŒŒ์ผ๋œ Wasm AST๋Š” ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์›๋ž˜ ์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ์˜ AST๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@rossberg-chromium - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งŽ์€ ๊ฒƒ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค! ํ•˜์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ์˜๋ฌธ์ ์€ -

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ์•„๋งˆ๋„ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ์˜ ์ฝ”๋“œ์ธ Wasm์— JS VM ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์˜ ์ „์ฒด ๊ตฌํ˜„์„ ํฌํ•จํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.

VM ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด๊ฐ€ VM ๋Ÿฐํƒ€์ž„์ด ์•„๋‹™๋‹ˆ๊นŒ? ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ AST ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ์ž์ฒด๊ฐ€ ๋ณต์žกํ•˜๊ณ  ๋™์  ์ตœ์ ํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์žˆ๋Š”๋ฐ VM ๋Ÿฐํƒ€์ž„ ์ž์ฒด๋ฅผ ๋ฒˆ๋“ค๋กœ ๋ฌถ์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@agnivade , ๋™์  ์ตœ์ ํ™” ์—†์ด JavaScript๋Š” ๋Š๋ฆด ๊ฒƒ์ด๊ณ , ์ œ ๋ง์€

"๋Ÿฐํƒ€์ž„"์ด๋ž€ DOM๊ณผ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ € ํ•ญ๋ชฉ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ, ๊ฐ์ฒด ํ‘œํ˜„, ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€ ๋ฒ ์–ด JS ์–ธ์–ด ์ง€์›์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” JavaScript์— ๋Œ€ํ•ด ์ƒ๋‹นํžˆ ๊ฑฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. Wasm ๋‚ด๋ถ€์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  DOM์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๋ ˆ์ด์–ด๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„, ์ด์ œ ์ข€ ๋” ์ดํ•ด๊ฐ€ ์ž˜ ๋œ ๊ฒƒ ๊ฐ™์•„. ๋‚˜๋Š” ์ƒ๊ฐํ–ˆ๋‹ค

๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ, ๊ฐœ์ฒด ํ‘œํ˜„, ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ

๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ AST๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด WASM ์ž์ฒด ๋‚ด๋ถ€์— ํŒจํ‚ค์ง•๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

๋ณดํŽธ์ ์ธ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋™์ ์œผ๋กœ ์œ ํ˜•์ด ์ง€์ •๋˜๊ณ  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๋œ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ํšจ์œจ์ ์œผ๋กœ ์ „์†กํ•˜๊ณ  ์‹คํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ปดํŒŒ์ผ ๋Œ€์ƒ์œผ๋กœ, ์ธ๊ธฐ ์žˆ๋Š” ์–ธ์–ด(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ๋ฃจ๋น„, ํŒŒ์ด์ฌ, ๋ฃจ์•„)์˜ ๋ชจ๋“  ๊ธฐ์ดํ•œ ๊ฒฝ์šฐ๊ฐ€ (์ผ๋ถ€ ๊ฒฝ์šฐ) ํŠน์ˆ˜ opcode ๋ฐ ๊ตฌ์กฐ ๋“ฑ์œผ๋กœ ๋‹ค๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

@distransient , ๋ชจ๋“  ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์˜ ์กฐํ•ฉ์  ๊ด‘๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? ์ €๋Š” ์ธ๋ฅ˜๊ฐ€ 2050๋…„๊นŒ์ง€ ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์—”์ง€๋‹ˆ์–ด๋ง ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋‚™๊ด€ํ•ฉ๋‹ˆ๋‹ค. :)

LLVM์„ ์‚ฌ์šฉํ•˜์—ฌ TypeScript๋ฅผ WebAssembly๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ. ์ด ๋„๋‹ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. https://github.com/MichaReiser/speedy.js
์ด ํ† ๋ก ์€ ๋๋‚˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ...

@rossberg-chromium ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด "์žฌ๋ฏธ์žˆ๋‹ค"๊ณ  ๋งํ–ˆ์ง€๋งŒ ์‰ฝ์ง€๋„ ์˜ˆ์˜์ง€๋„ ์•Š์•˜์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰

๋ณดํŽธ์ ์ธ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค...

WASM์€ Python๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ง€์›ํ•˜๋„๋ก ์ ์ง„์ ์œผ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋™์‹œ์— ๋ฐ˜๋Œ€ํŽธ์—์„œ ๋ฌธ์ œ์— ์ ‘๊ทผํ•œ๋‹ค๋ฉด WASM์ด ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋นจ๋ฆฌ ์›น์šฉ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ตœ๊ณ  ์ˆ˜์ค€์˜ ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript ์—”์ง„์ด JavaScript AST๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•ด์•ผ ํ•˜๋ฉฐ ์Šน์ธ๋œ AST๋Š” ํ‘œ์ค€ํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋น„ํ‘œ์ค€ ์ค‘๊ฐ„ ํ˜•์‹์œผ๋กœ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜๋˜๋”๋ผ๋„).

AST ํ˜•์‹(์˜ˆ estree )๊ณผ ์ง๋ ฌํ™” ํ˜•์‹(์˜ˆ: JSON)์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒˆ ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ์ƒˆ ํŒŒ์ผ ํ˜•์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ๋“ฑ์˜ ํ˜•์‹์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ TypeScript ๋ฐ CoffeeScript์™€ ๊ฐ™์€ ์–ธ์–ด๋Š” ํŠธ๋ฆฌ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฑฐ๊ธฐ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํŠธ๋žœ์ŠคํŒŒ์ผ๋œ ์–ธ์–ด๋Š” ์ฝ”๋“œ ์ƒ์„ฑ์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์–ดํœ˜ ์ •๋ณด๊ฐ€ ์‹ค์ œ ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค ๋งต๋„ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ง€์›์ด ์„ค์ •๋˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ค‘๊ฐ„์—์„œ WASM์„ ์ถฉ์กฑํ•˜๋„๋ก ํ‘œ์ค€์„ ์ ์ง„์ ์œผ๋กœ ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…์‹œ์ ์ธ add ๋ฐ concat ๋…ธ๋“œ ๋˜๋Š” DEC64์™€ ๊ฐ™์€ ์ƒˆ ๋ฐ์ดํ„ฐ ์œ ํ˜• ์ถ”๊ฐ€์™€ ๊ฐ™์ด ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

WASM์ด ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋„๋ก ๊ตฌ์ถ•๋จ์— ๋”ฐ๋ผ GC์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ AST ์‹คํ–‰์ด ํ•˜ํ–ฅ ์ด๋™ํ•˜์—ฌ ๋‹ค๋ฅธ ๊ณ ๊ธ‰ ์–ธ์–ด์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋„๋ก JavaScript ์˜๋ฏธ๋ก ์„ ํ™•์žฅํ•˜๋ฏ€๋กœ ๊ด‘๋ฒ”์œ„ํ•œ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด ์„ธํŠธ๊ฐ€ ์ผ์ข…์˜ ์ถ”์ƒ JavaScript๋กœ ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2017๋…„ 5์›” 25์ผ 02:57์— Carl Smith [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.
>

ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ,
JavaScript ์—”์ง„์ด ๋‚ด๋ถ€ ์ง€์›์„ ๋…ธ์ถœํ•˜๋Š” ๋ฐ ๋น„๊ต์  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
JavaScript AST๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ—ˆ์šฉ๋˜๋Š” AST๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ‘œ์ค€ํ™”(AST๊ฐ€ ์ฆ‰์‹œ ๋น„ํ‘œ์ค€์œผ๋กœ ์ „ํ™˜๋˜๋”๋ผ๋„
๋‚ด๋ถ€์ ์œผ๋กœ ์ค‘๊ฐ„ ํ˜•์‹).

๋‹น์‹ ์ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊ด‘๋ฒ”์œ„ํ•œ "์ƒ๋Œ€์ ์œผ๋กœ ๋‹จ์ˆœํ•œ" ์ •์˜์— ๋Œ€ํ•ด์„œ๋งŒ
์—ผ๋‘์—๋‘๊ณ ... ;)

WASM์— ๋น„ํ•ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

@bguiz ์˜ˆ:

  • JS๋Š” ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ASM์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • CPU ์ง€๋ฉด ์ˆ˜์ค€์—์„œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ASM์—์„œ DOM์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Google V8 ์—”์ง„์€ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ „์ฒด ๋Ÿฐํƒ€์ž„ ์ž‘์—…์„ ์ปดํŒŒ์ผํ•˜์—ฌ JavaScript๋ฅผ ๊ธฐ๋ณธ ๊ธฐ๊ณ„์–ด๋กœ ์ง์ ‘ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋Œ€์ฒด WASM ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ WASM์€ Mandelbrot ๋ฐ๋ชจ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์—ˆ์œผ๋ฉฐ ์ฒ˜์Œ์—๋Š” Unity "Tanks" ๋ฐ๋ชจ๋ฅผ ์ œ๊ณตํ–ˆ์ง€๋งŒ ASM->CPU(SSE ๋ฐฐ์ •๋ฐ€๋„ ํฌํ•จ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”ฝ์…€์„ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์„์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. WebGL->GPU๋ณด๋‹ค ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ GPU๊ฐ€ ๋ฒ”์œ„์— ํฌํ•จ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌด์—‡?

@ivanherczeg ์™€์šฐ! ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ GPU๊ฐ€ ์‚ฌ์–‘์— ์—†๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ?

@SephReed

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ arm๊ณผ x86 ์‚ฌ์ด์˜ ์ž์ „๊ฑฐ ๋ณด๊ด€์†Œ ์ฐจ์ด๋กœ ์ธํ•ด ๊ธด์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋“œ์›จ์–ด ๋Œ€์ƒ ์„ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋” ๋งŽ์€ ๊ธด์žฅ์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋Œ€์ƒ์—์„œ ๊ท ์ผํ•œ ์˜๋ฏธ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์—๋ฎฌ๋ ˆ์ด์…˜ ๋น„์šฉ์œผ๋กœ ์ธํ•ด ๋” ๋งŽ์€ ์ž‘์—…์ด ๋Š๋ ค์ง€๊ฑฐ๋‚˜ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋” ๋งŽ์€ ์ž‘์—…์— ์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ(๋˜๋Š” ์•ž์œผ๋กœ๋„) GPU๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์€ ์ˆ˜์ต์„ฑ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

-ํ•„

https://github.com/WebAssembly/design/issues/273#issuecomment -123094583

C# ๋Ÿฐํƒ€์ž„์€ wasm์œผ๋กœ ์ด์‹๋˜์—ˆ์œผ๋ฉฐ JS๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜๋Š” ์™„์ „ํ•œ ๊ธฐ๋Šฅ์˜ ํ”„๋กœํ† ํƒ€์ž…์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Š” ๋ฏธ๋ž˜์— ๋Ÿฐํƒ€์ž„์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ JS๋ฅผ ๋Œ€์ฒดํ•˜๊ณ  Java, C# ๋˜๋Š” C++๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก ์›น ์•ฑ์„ ์ž‘์„ฑํ•˜๊ณ  "์ฝ”๋“œ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ์— ๊ฐ€๊น๊ฒŒ ์‹คํ–‰๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค" , "์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” VM๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค" ๋ผ๋Š” ๋ช…๋ น๋ฌธ๊ณผ ํ•จ๊ป˜ ๋“ฑ์žฅํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” JavaScript์˜ ๋„์›€ ์—†์ด๋Š” ๋ฌด์—‡์ด๋“  ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋งํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ”๋ฅผ ์ด ์˜์ƒ ์„ ๋ด์ฃผ์„ธ์š”.

WebASM์€ JS๊ฐ€ ์™„์ „ํžˆ ์ธ์ˆ˜๋˜์ง€ ์•Š๋„๋ก ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ First ํด๋ž˜์Šค ์–ธ์–ด๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ์„œ๋ฒ„์—์„œ ์›น ํŽ˜์ด์ง€๊ฐ€ ์ œ๊ณต๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Steakey ์•„์ฃผ ์ข‹์•„์š” :) ์—ฐ๊ทน์„ ํ•ด์•ผ๊ฒ ์–ด์š” - ๊ฐ•์กฐํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

NectarJS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JS๋ฅผ WebAssembly๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋ชจ: http://nectar-lang.com/ ๋“œ๋กญ๋‹ค์šด WebAssembly์—์„œ ์„ ํƒ

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ NectarJS ๋ฐ๋ชจ๋Š” emscripten์„ ์‚ฌ์šฉํ•˜๋ฉฐ asm.js ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JS๋ฅผ C ๋˜๋Š” LLVM IR๊ณผ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ •์ ์œผ๋กœ ์ปดํŒŒ์ผํ•œ ๋‹ค์Œ emscripten์„ ํ†ตํ•ด ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

wasm ์ถœ๋ ฅ๋„ emscripten์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ(๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒ€์‚ฌ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Œ) ์ตœ์‹  VM์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” 0xd wasm ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ฐฉ์ถœํ•˜๋ฏ€๋กœ ์ด์ „ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ JS๊ฐ€ ์•„๋‹Œ wasm์„ ๋ณด๋‚ด๋ฏ€๋กœ ์–ด์จŒ๋“  ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  asm.js์™€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. wasm ์ถœ๋ ฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ผœ๊ณ  emscripten์„ ์‹คํ–‰ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฐ๋ชจ๋Š” ์ž…๋ ฅ์— 300๋ฐ”์ดํŠธ ์ œํ•œ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ถ„์„์ด ์–ผ๋งˆ๋‚˜ ๊ฐ•๋ ฅํ•œ์ง€ ๋Š๋ผ๊ธฐ ์œ„ํ•ด ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ณตํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด์™€ ๊ฐ™์€ ์ •์  ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์‹ค์ œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ํ•™์ˆ  ์—ฐ๊ตฌ๋Š” ํšŒ์˜๋ก ์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Windows์šฉ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ๋ฐ๋ชจ๊ฐ€ ๋‚˜์—๊ฒŒ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค ๐Ÿค•

@kripken ํšŒ์˜๋ก ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ž„์˜์˜ JS๋ฅผ WebAssembly๋กœ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹ฌ์„ฑํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ๋Š” JS ์–ธ์–ด์˜ ๋‹ค๋ฃจ๊ธฐ ์‰ฌ์šด ํ•˜์œ„ ์ง‘ํ•ฉ์—์„œ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ ์„ฑ๋Šฅ์„ ํฌ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JS๋Š” ๋งค์šฐ ์—ญ๋™์ ์ธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋Ÿฐํƒ€์ž„ ์ž‘์—…์€ ์ฝ”๋“œ์˜ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ํฌ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Ahead-Of-Time(๋˜๋Š” ์˜คํ”„๋ผ์ธ) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋” ๋‚˜์œ ๊ฒฝ์šฐ๋งŒ ๊ฐ€์ •ํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ๋น„ํšจ์œจ์ ์ธ ์ผ๋ฐ˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ JS ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

var a = {prop1: 1};
func(a);

(pseudo-wasm์—์„œ) ์ด๊ฒƒ์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

i32.const 42
call $CreateJSValFromStrTable ;; Returns prop1
i32.const 1
call $CreateJSValFromInt
call $CreateJSObj1 ;; Consume a JS string and a JS value to make an object
call $_func

์ด์ œ ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ "์ปดํŒŒ์ผ"์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํŽผ์น˜๋Š” ๊ฒƒ๊ณผ ๋” ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  Wasm์œผ๋กœ ์ปดํŒŒ์ผ๋œ JS ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ƒ ์Šน๋ฆฌํ•˜์ง€๋Š” ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

V8 ๋ฐ Spidermonkey์™€ ๊ฐ™์€ JS ์—”์ง„์€ Just-In-Time์œผ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ JS ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JIT ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ๊ทธ๋“ค์€ ์ฃผ์–ด์ง„ JS ์กฐ๊ฐ์— ๋Œ€ํ•ด ์‹ค์ œ๋กœ ์˜๋„๋œ ์˜๋ฏธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ด€์ฐฐํ•˜๊ณ  ํ•ด๋‹น ํŠน์ • ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋น ๋ฅธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฌผ๋ก  ํ˜„์žฌ ๊ฐ€์ •์„ ๋ฌดํšจํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์˜. ๊ทธ๋Ÿฌ๋‚˜ JavaScript ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์•„๋งˆ๋„ ์—ญ๋™์„ฑ์„ ์ค„์ด๊ณ  ๋ณด๋‹ค ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์œ ํ˜•์ด ์ง€์ •๋œ ๋ณ€ํ˜•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"๊ฐ•ํ•œ ๋ชจ๋“œ"์ „๋ฉด BTW์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@Simran-B, ์—ฌ๊ธฐ์— ์š”์•ฝ๋œ ์ด์œ  ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์˜ค๋žซ๋™์•ˆ ๊ฐ•๋ ฅํ•œ ๋ชจ๋“œ๋ฅผ ํฌ๊ธฐ

๊ฐ™์€ ์ด์œ ๋กœ JavaScript๋‚˜ TypeScript์˜ "์ •์ ์œผ๋กœ ์ปดํŒŒ์ผ ๊ฐ€๋Šฅํ•œ" ๋ฐฉ์–ธ์„ ๋””์ž์ธํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์— ๋Œ€ํ•œ ํฌ๋ง๋„ ๋ณ„๋กœ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์ผ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@Simran-B : "ํ•˜์ง€๋งŒ JavaScript ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์œ ํ˜•์ด ์ง€์ •๋œ ๋ณ€ํ˜•์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค."

WebAssembly๋กœ ์ปดํŒŒ์ผ๋˜๋Š” TypeScript์˜ ์—„๊ฒฉํ•œ ํ•˜์œ„ ์ง‘ํ•ฉ์ธ AssemblyScript์™€ ๊ฐ™์€ ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/AssemblyScript/assemblyscript

@rossberg : "๋˜ํ•œ JavaScript ๋˜๋Š” TypeScript์˜ "์ •์ ์œผ๋กœ ์ปดํŒŒ์ผ ๊ฐ€๋Šฅํ•œ" ๋ฐฉ์–ธ์„ ๋””์ž์ธํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์— ๋Œ€ํ•œ ํฌ๋ง์ด ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ ๋ณ„ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."

AssemblyScript์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์˜ ํฐ ์ž ์žฌ๋ ฅ์€ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ(์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.) ์นœ์ˆ™ํ•˜๊ณ  ์นœ์ˆ™ํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ TypeScript ๊ฐœ๋ฐœ์ž์ด๊ณ  WebAssembly๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด C++ ๋˜๋Š” Rust๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ข‹์€ ์–ธ์–ด์ด์ง€๋งŒ ๋‹จ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋ฐฐ๊ฒฝ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์—๊ฒŒ๋Š” AssemblyScript์™€ ๊ฐ™์€ ๊ฒƒ์ด ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AssemblyScript๊ฐ€ JavaScript์™€ Assembly ๋ชจ๋‘๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งค์šฐ ์ด์ƒ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฏธ๋ž˜์—๋Š” ๋ˆ„๊ตฐ๊ฐ€ ๋จผ์ € ํ•˜์ง€ ์•Š๋Š” ํ•œ ํŒŒ์ผ์„ ์‚ดํŽด๋ณด๊ณ  ํ•„์š”ํ•œ ์งˆ๋ฌธ์„ ํ•˜๊ณ  ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” TypeScript -> Assembly Script ๋ณ€ํ™˜๊ธฐ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž˜ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

@SephReed ์˜ˆ, ๋ชจ๋“  WebAssembly ์ฝ”๋“œ์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š” WebAssembly -> asm.js ์ปดํŒŒ์ผ๋Ÿฌ ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— JavaScript๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"WebAssembly๋ฅผ ํด๋ฆฌํ•„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?" ๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋Œ€์‹  "AssemblyScript๊ฐ€ ๊ด€์šฉ์  JavaScript ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?"๋ฅผ ์˜๋ฏธํ–ˆ๋‹ค๋ฉด WebAssembly/asm.js๊ฐ€ ๊ด€์šฉ์  JavaScript ์ฝ”๋“œ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅผ ๋•Œ ์™œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด AssemblyScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŠน์ • ์‚ฌํ•ญ์„ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AssemblyScript ์„ค๋ช…์„œ์˜ ์ด ์„น์…˜ ๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๋Ÿฌ๋ถ„, JavaScript์™€ ์œ ์‚ฌํ•œ WebAssembly ์–ธ์–ด์ธ WALT ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

UPD. ๋„คํฌ๋กœํฌ์ŠคํŒ…ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด "JS -> WASM" ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์œ ์šฉํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด:

๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ ๊ทธ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์œ ์šฉํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ์ˆœ์ˆ˜ํ•œ ๋ณด์•ˆ ๊ด€์ ์—์„œ wasm์— JS ์—”์ง„์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์™œ ์ค‘์š”ํ•œ์ง€, ์™œ ์œ ์šฉํ•œ์ง€์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. "ํฌ๊ธฐ ์ถ•์†Œ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค". WebAssembly์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<=XXX ยซ ์ƒŒ๋””๋ฐ•์Šค ํ™˜๊ฒฝ ยป XXX=>

WebAssembly๋Š” ๋‹จ์ˆœํžˆ ์„ฑ๋Šฅ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹น์‹ ์€ Figma ํŒ€์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์ข‹์€ ๊ธฐ์‚ฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํ™˜๊ฒฝ, ์•ˆ์ „ํ•œ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

WebAssembly๋Š” ๋‹ค์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ „์—ญ ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ์—‰๋ง์ด ์—†๋Š” ์ˆœ์ˆ˜ํ•œ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. AssemblyScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ๋ฉด์—์„œ๋Š” ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์•ฑ์˜ ํ™˜๊ฒฝ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ TypeScript ํ™˜๊ฒฝ์„ ๊ฐ–๊ฒŒ ๋˜๋ฏ€๋กœ ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์— "๊ฑฐ์˜ ๋™์ผ"์ด๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ์ „ํ•œ ํ™˜๊ฒฝ ๋‚ด์—์„œ NPM์˜ JS ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”.

์ด WALT ํ”„๋กœ์ ํŠธ๋Š” ์ผ์ข…์˜ AssemblyScript ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. ๊ฐ„์‹ ํžˆ JS์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. js ํ˜•์‹์ž…๋‹ˆ๋‹ค. TS์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์œผ๋กœ ๊ธฐ์กด js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผ/ํŠธ๋žœ์ŠคํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์•ˆ์ „ํ•œ ํ™˜๊ฒฝ ๋‚ด์—์„œ NPM์˜ TS ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”.

AssemblyScript๋„ TS์™€ ์œ ์‚ฌํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์œ ํ˜•์œผ๋กœ ์™„์ „ํžˆ ๋ฎ์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ TS๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์™ธ ์—†์Œ. any ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ข…์ข… ์‚ฌ๋žŒ๋“ค์€ ๊ตฌ์„ฑ์ด ์ถฉ๋ถ„ํžˆ ์—„๊ฒฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ช‡ ๊ฐ€์ง€ @ts-ignore ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋” ์ž์ฃผ - js๋กœ ํŒจํ‚ค์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ณ  .d.ts ํŒŒ์ผ์— ๋ณ„๋„์˜ ์œ ํ˜•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค - ์ด ๋ชจ๋“  ๊ฒฝ์šฐ์— ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€๋ฅผ WASM์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@JerryGreen์€ ์ข‹์€ ์ ์„ ์ง€์ ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์‹ค์ œ๋กœ ๋ช‡ ๋ฐ”์ดํŠธ๋ฅผ ์ ˆ์•ฝํ•˜๋Š” ๊ฒƒ ์™ธ์— ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ์ด์ ์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ํฐ ์˜คํ•ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฒค์น˜๋งˆํฌ๋ฅผ ํฌํ•จํ•œ ์‚ฌ๋žŒ๋“ค์€ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์— ๋„ˆ๋ฌด ์ง‘์ฐฉํ•ฉ๋‹ˆ๋‹ค. 3D ๊ฒŒ์ž„์ด ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ๊ธฐํšŒ๋Š” ์‚ฌ์‹ค์ƒ ๋ชจ๋“  ์›น์‚ฌ์ดํŠธ์— ํ˜œํƒ์„ ์ฃผ๋Š” ์‹œ์ž‘ ์‹ค์  ์— ์žˆ์Šต๋‹ˆ๋‹ค. WebAssembly๊ฐ€ ๋Ÿฐํƒ€์ž„ ์ด์ ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ„(๋ฐ”์ดํŠธ๋‹น)์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด JavaScript์™€ ๊ฐ™์€ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ์˜ gzip์ด PLT์— ๊ฑฐ์˜ ์‹ค์ œ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ ์˜ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.

์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ฒŒ๋„ ์—…๊ณ„๋Š” PLT(ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„) ๋ฐ ๋‹ค์–‘ํ•œ ์‹œ๊ฐ์  ์™„์„ฑ ๋งˆ์ปค์— ์ง‘์ฐฉํ•˜์ง€๋งŒ WebAssembly์™€ ์ด๋Ÿฌํ•œ ๋ฒกํ„ฐ ๊ฐ„์˜ ์ƒ๊ด€ ๊ด€๊ณ„๋ฅผ ์•„๋Š” ์‚ฌ๋žŒ์ด ์•„๋ฌด๋„ ์—†์Šต๋‹ˆ๊นŒ? JavaScript๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์›น์‚ฌ์ดํŠธ์—์„œ ์ด๋Ÿฌํ•œ ์ค‘์š”ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— 30% ์ด์ƒ์˜ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํŽ˜์ด์ง€ ํฌ๊ธฐ์™€ ๋Œ€์—ญํญ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ๋Œ€๊ธฐ ์‹œ๊ฐ„๊ณผ ๊ฐ™์€ ์„ ํ˜• ์„ฑ๋Šฅ ์š”์ธ์— ๋น„ํ•ด

์ฆ‰, JS -> WebAssembly์˜ ์‹คํ˜„ ๊ฐ€๋Šฅ์„ฑ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@JerryGreen Figma ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ ๊ฒฝ์šฐ์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ iframe ๋˜๋Š” ์˜์—ญ์ด ํƒ€์‚ฌ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ๊ฒฉ๋ฆฌ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ๊ฐ€ ๋” ์ œ์–ด๋˜์–ด์•ผ ํ•˜๊ณ  ์„ฑ๋Šฅ, ํฌ๊ธฐ ๋ฐ ๋กœ๋“œ ์‹œ๊ฐ„์ด ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์—๋Š” ํ•ญ์ƒ QuickJS ๋˜๋Š” JavaScriptCore ๋ฅผ WebAssembly๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์›น ์ž‘์—…์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋ ค๋Š” API๋ฅผ ์‚ญ์ œํ•˜๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋ณด๋‹ค ๋จผ์ € ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ @JerryGreen์€ WASM์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!

์‹ค์ œ์—์„œ ์„ธ ๊ฐœ์˜ js์—์„œ ํ”„๋ ˆ์ž„ ์†๋„๊ฐ€ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. wasm์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ ์–ด๋„ ํ‘œ๋ฉด์ ์œผ๋กœ๋Š” ๊ทธ๋ ‡๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.

์ „์ฒด javascript vm๋„ ํฌํ•จํ•ด์•ผ ํ•˜๋ฏ€๋กœ JS๋ฅผ wasm์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” JS VM๋ณด๋‹ค ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋Š๋ฆฝ๋‹ˆ๋‹ค.

Profile-Guided Optimization์„ ํ†ตํ•ด JS VM์ด ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ๋‹จ์ผํ™” ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” JS VM์ด ๋Ÿฐํƒ€์ž„์— ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๊ฐ™์€ ์ผ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PGO ๋นŒ๋“œ๋Š” ๋‘ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๊ณ„์ธก๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๊ณ„์ธก๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜์ง‘ํ•œ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ ํ™”๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์‹คํ–‰์€ ๋ชจ๋“  ์œ ํ˜• ์ •๋ณด(์–ด๋–ค ์œ ํ˜•์˜ ์ธ์ˆ˜๋กœ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š”์ง€ ๋“ฑ)๋ฅผ ์ œ๊ณตํ•œ ๋‹ค์Œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋ชจ๋“  ๋ณ€ํ˜•์œผ๋กœ ์ตœ์ ํ™”๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค(+ ํ”„๋กœํŒŒ์ผ๋ง๋˜์ง€ ์•Š์€ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋™์  ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ์ผ๋ฐ˜ ๋ฒ„์ „). . ์ „์ฒด JS VM์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PGO๋Š” ๊ท€ํ•˜์˜ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ์š”๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ v8์—์„œ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ์ผ๋ถ€ ์œ ํ˜• ์ •๋ณด๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://docs.google.com/document/d/1JY7pUCAk8gegyi6UkIdln6j_AeJqQucZg92advaMJY4/edit#heading =h.xgjl2srtytjt

์šฐ๋ฆฌ๋Š” TypeScript ํŒ€๊ณผ ์ด ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์œผ๋ฉฐ ๊ทธ๋“ค์€ ๊ด€์‹ฌ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ JS์— ์œ ํ˜•์ด ์ง€์ •๋œ ๊ฐœ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์ง„์ „์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ ํ˜•์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

QuickJS๋ฅผ ์‹ค์ œ๋กœ WASM์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, Figma๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์— QuickJS๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  http://numcalc.com/ ์—์„œ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰