๋์์ธ ๋ฌธ์๋ฅผ ์์ธํ ์กฐ์ฌํ ํ WASM -> JS๋ฅผ ๋ณํํ๋ ํด๋ฆฌํ์ ๋ํ ์ธ๊ธ์ ์ฐพ์ ์ ์์์ต๋๋ค. C++ -> WASM ์ปดํ์ผ๋ฌ์ ๋ํ ์ธ๊ธ๋ ์ฐพ์ ์ ์์์ต๋๋ค.
๊ทธ๋ฌ๋ JS -> WASM ์ปดํ์ผ๋ฌ์ ๋ํ ์ธ๊ธ์ ์ฐพ์ ์ ์์์ต๋๋ค.
๋๋ถ๋ถ์ ์น ๊ฐ๋ฐ์๋ Javascript์ ๋ฅ์ํ๋ฏ๋ก JS -> WASM ์ปดํ์ผ๋ฌ๊ฐ ์ด์์ ์ ๋๋ค. ์น ๊ฐ๋ฐ์๋ C++๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ ๋์ Javascript๋ฅผ ์ฌ์ฉํ์ฌ ์น ์ฌ์ดํธ๋ฅผ ๊ณ์ ์์ฑํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ MVP๋ JS -> WASM ์ปดํ์ผ๋ฌ์ ๋ํ ์ธ๊ธ์ด ์๋ MVP ์ดํ ์น์ ๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์์ต๋๊น?
๋ธ๋ผ์ฐ์ ์๋ 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: ์น ๋ ์ด์ ๋ธ๋ฆฌ๋ ์๋๋๋ค"๋ผ๋ ์ ๋ชฉ์ ๊ฐ์ฐ์ด ์์ต๋๋ค. ์ด๋ฆ์ ๋ํด ์ด๋ป๊ฒ ๋๋ผ๋์ง ํํํ ์ ์๋๋ก ๊ณต๊ฐ์ ์ผ๋ก ์๋ ค์ผ ํฉ๋๋ค.
๊ทธ๋์ ๋๋ ๋น์ ์ด ๊ทธ๊ฒ์ ๋งค๋ฌ๋ฆฌ๋๋ก ํ ๊ฒ์ ๋๋ค.
๋๋ ์ฌ๊ธฐ์์ ๋ ๊ฐ์ง ์๋ง์ ์ฝ๊ณ ์์ต๋๋ค.
ํญ๋ชฉ 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๋ฅผ ๋ ๊ฐ์ง ํ์์ผ๋ก ๋ฆด๋ฆฌ์คํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ 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 ์:
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 ์ค๋ช ์์ ์ด ์น์ ๋ ์ฐธ์กฐํ์ญ์์ค.
WALT
๋ฅผ ๊ณ ๋ คํ์ญ์์ค.UPD. ๋คํฌ๋กํฌ์คํ ํด์ ์ฃ์กํฉ๋๋ค
๋ง์ ์ฌ๋๋ค์ด ์ด "JS -> WASM" ์ปดํ์ผ๋ฌ๋ฅผ ์ข์ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ ์ฉํ์ง ์์ ์ฌ๋๋ค์ ์ํด:
๊ทธ๋ฌ๋ ๊ฐ๋ฐ์์ ๊ด์ ์์ ๊ทธ๊ฒ์ด ๊ทธ๋ ๊ฒ ์ ์ฉํ ์ง ํ์ ํ ์ ์์ต๋๋ค. ํฌ๊ธฐ๋ฅผ ์ค์ผ ์๋ ์์ง๋ง ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ์ ๊ด์ ์์ ๋ณด๋ฉด ์์ํ ๋ณด์ ๊ด์ ์์ wasm์ JS ์์ง์ ๊ตฌํํ๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค.
์ฌ๊ธฐ ์ ์ค์ํ์ง, ์ ์ ์ฉํ์ง์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์๊ฐ ์์ต๋๋ค. "ํฌ๊ธฐ ์ถ์๋ ๊ฐ๋ฅํ์ง๋ง ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค". WebAssembly์ ํจ๊ป ์ ๊ณต๋๋ ๊ธฐ๋ฅ ์ค ํ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
WebAssembly๋ ๋จ์ํ ์ฑ๋ฅ์ ๊ดํ ๊ฒ์ด ์๋๋๋ค. ๋น์ ์ Figma ํ์์ ํ๋ฌ๊ทธ์ธ์ ๋ํ ์ข์ ๊ธฐ์ฌ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
ํ๋ฌ๊ทธ์ธ ์์คํ ์ ๋ง๋๋ ๊ฒ์ ์๋นํ ์ด๋ ต์ต๋๋ค. ์ฌ์ฉ์ ์ง์ ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋ช ๊ฐ์ง ์ข์ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ๋ณ๋์ ํ๊ฒฝ, ์์ ํ ํ๊ฒฝ์ด ํ์ํฉ๋๋ค.
WebAssembly๋ ๋ค์์ ์ ๊ณตํฉ๋๋ค. ์ผ๋ถ ์ ์ญ ๋ณ์์ ๊ฐ์ด ์๋ง์ด ์๋ ์์ํ ํ๊ฒฝ์ ๋๋ค. AssemblyScript๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ๋ฉด์์๋ ํธ๋ฆฌํฉ๋๋ค. ๊ธฐ๋ณธ ์ฑ์ ํ๊ฒฝ๊ณผ ๊ฑฐ์ ๋์ผํ TypeScript ํ๊ฒฝ์ ๊ฐ๊ฒ ๋๋ฏ๋ก ๋งค์ฐ ์ข์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ "๊ฑฐ์ ๋์ผ"์ด๋ผ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์๋์.
์ด WALT ํ๋ก์ ํธ๋ ์ผ์ข ์ AssemblyScript ๋์์ ๋๋ค. ๊ฐ์ ํ JS์ ๋น์ทํฉ๋๋ค. js ํ์์ ๋๋ค. TS์ ๊ฐ๊น์ต๋๋ค. ๊ทธ๊ฒ์ผ๋ก ๊ธฐ์กด js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ปดํ์ผ/ํธ๋์คํ์ผํ ์ ์์ต๋๋ค.
์๋์.
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/ ์์๋ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๊ด๋ จ์ด ์์ ์ ์๋ ์ฅ๋๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์คํ์ ์์ํ์ต๋๋ค: https://github.com/evanw/thinscript. TypeScript ์คํ์ผ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ WebAssembly๋ก ์ปดํ์ผํฉ๋๋ค. ํฅ๋ฏธ๋ก์ด ์ฌ๋ก ์ฐ๊ตฌ์ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๊ธํด์ผ ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ํ WebAssembly๊ฐ ์์ฑํ๊ธฐ๊ฐ ์ผ๋ง๋ ์ฌ์ด์ง ์ฆ๊ฒ๊ฒ ๋๋์ต๋๋ค. ๋ชจ๋๋ค ์ํ์ด!