WebAssembly์์ ์ค๋ ๋๋ฅผ ์ฒ์ ๊ตฌํํ ๋ ETA๊ฐ ์์ต๋๊น?
-- R
๋ค์ ๋ช ๋ถ๊ธฐ์ ์๊ฐ์ ์๋ง๋ ๋๊ตฌ๋ ๋งํ ์ ์๋ ๋งํผ ์ ํํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์ ๋ฅผ ์ ์ถํ๋ ค๋ฉด ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅผ ์์ฝํ์ญ์์ค.
์ด ํ๋ก์ ํธ์๋ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ๋ ๋ค๋ฅธ ํฌ๋ผ์ด ์์ผ๋ฏ๋ก ๋ฌธ์ ์ถ์ ๊ธฐ๋ ์ฌ๋๋ค์ด ๋์์ธ ํ๋ก์ธ์ค์ ๋ํด ์ง๋ฌธํ ์ ์๋ ์ ์ผํ ์ฅ์์ ๋๋ค. ์ฌ๋๋ค์ด ์ง๋ฌธํ ์ ์๋ ์ฅ์๊ฐ ์๋ค๋ ๊ฒ์ ๊ฐ์น ์๋ ์ผ์ด๋ฏ๋ก ์ฌ๋๋ค์ด ๊ณ์ํด์ ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ง๋ฌธํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
@sunfishcode , ์ถฉ๋ถํ ๊ณต์ ํ์ง๋ง ๊ทธ๋ฐ ๋ชฉ๋ก์ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด์ ํธ๋์ปค๊ฐ ๊ทธ์ ๋ํ ์ ์ ํ ๋์์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
w3 ๊ณต๊ฐ ๋ชฉ๋ก ์ด ์์ต๋๋ค. ํ์ง๋ง ํธ๋ํฝ์ด ๋ง์ด ๋ฐ์ํ์ง๋ ์์ต๋๋ค. ๋ด๊ฐ ๋ฏฟ๋ IRC๋ ์์ต๋๊น? ์ด๋ ์์ ์์ ์น ์ฌ์ดํธ์ ์์๋ ๊ฒ ๊ฐ์๋ฐ ์น ์ฌ์ดํธ์ ์ปค๋ฎค๋ํฐ ์น์ ์์ ๋ ๋ค ์ง์ ๋งํฌ๋๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๋๋ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ๊ณ ์ถ์ง๋ง ์ฌ๋ฌ๋ถ ๋ชจ๋๊ฐ ๋์ค๊ณผ ์ฐ๊ฒฐ๋๋ ~๋ ธ์ถ~์ ์ ํธํ๋ ๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ง์นจ:
์ฐ๋ฆฌ๋ ์ฌ๋๋ค์๊ฒ github๋ฅผ ์ฌ์ฉํ๋๋ก ์๋ดํด ์์ต๋๋ค. ๋ชจ๋ ์ฌ๋์ด ์ข์ํ๋ ๊ฒ์ ์๋์ง๋ง ์ฌ๋ฌ ๊ณณ๋ณด๋ค ํ ๊ณณ์ด ๋ ์ข์ต๋๋ค.
@rossberg-chromium๋ ์๋ ํ์ธ์. ์ ์์ ๋ต๋ณํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ฌธ์ ๋ฅผ ์ ์ถํ๋ ค๋ฉด ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅผ ์์ฝํ์ญ์์ค.
@jfbastien ์ด ์ง์ ํ ๊ฒ์ฒ๋ผ ํ์ค ๋ฐฉ์์ผ๋ก ์ํํ๊ธฐ์ ๊ฐ์ฅ ์ข์ ์ฅ์์ธ ๊ฒ ๊ฐ์์ ์ฌ๊ธฐ์ ์ง๋ฌธํ์ต๋๋ค.
๊ฒ๋ค๊ฐ ์ค๋ ๋ ์ง์์ webAssembly์ ์ฑ๊ณต ์ฌ๋ถ ๋ฅผ ๊ฒฐ์ ํ๋ ๋์์ธ ๊ธฐ๋ฅ์
๋๋ค.
๋ก๊ณ ์ปจํ
์คํธ์ "Java์์ ๊ตฌํ๋์ง ์๋ ์ด์ "๋ณด๋ค ๋ ๋ง์ ๋ฌธ์ ๊ฐ ์ ๊ธฐ๋์์ต๋๋ค.
๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ / ์ค๋ ๋ ๊ตฌํ์ ๋ฐ๋ผ์ผ ํ ์์น๋ฅผ ์๋ ค์ฃผ์ญ์์ค.
์ด๋ฆฐ ๊ณผ์ ์ด์ด์ผ ํ๋ฏ๋ก ์ ์๊ฒฌ์ ๋งํ๊ณ ์ถ์ต๋๋ค.
--์๋ฅด ์ํ
@RobertoMalatesta ์ฐ๋ฆฌ๋ ์ค๋ ๋๊ฐ ๋งค์ฐ ์ค์ํ๋ค๋ ๋ฐ ๋์ํ์ง๋ง WebAssembly์ ์ต์ํ์ผ๋ก ์คํ ๊ฐ๋ฅํ ์ ํ์ ์ค๋ ๋๋ฅผ ๋ฐ์ด ๋ฃ๋ ๊ฒ๋ณด๋ค ์ค๋ ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ป๋ ๊ฒ์ด ๋ ์ค์ํ์ต๋๋ค. ์ถ๋ก ์ ๊ฐ๋จํฉ๋๋ค. asm.js๋ ์ด ๊ธฐ๋ฅ ์์ด๋ ์ฑ๊ณต์ ๊ฑฐ๋์ต๋๋ค.
์ค๋ ๋๋ ์ผ๋ถ ์ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์์ ํ์คํ ์ฑ๊ณต ๋๋ ์ค๋จ ๊ธฐ๋ฅ์ด์ง๋ง ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค. GC, ์ ๋ก ๋น์ฉ ์์ธ ์ฒ๋ฆฌ, ๋ณด์ฅ๋ ๊ผฌ๋ฆฌ ํธ์ถ ๋ฑ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
MVP๋ฅผ ์ ํํ๋ค๋ ๊ฒ์ ์ฒ์ ์ถ์ํ ๋ ๋ชจ๋ ์ฌ๋์ ๊ธฐ์๊ฒ ํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ํ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ๊ฒ์ ์ค๊ณ, ์ฌ์ํ ๋ฐ ๊ตฌํํ๊ธฐ ์ ์ WebAssembly ๋ฅผ ์ ํ ์ฌ์ฉํ์ง ๋ชปํ๋ ์ฌ๋๋ค๋ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฆ, WebAssembly์ JavaScript SharedArrayBuffer ์ ๊ทผ ๋ฐฉ์์ ์ด๋ ์ ๋ ์ฑํํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด ์ฒ์๋ถํฐ ํด๋น ์ฌ์์ ์ฐธ์ฌํ์ต๋๋ค. C++์ ์๋ ๊ฒ๊ณผ ์ ์ฌํ ์ ์์ค ๊ธฐ๋ฅ๊ณผ futex์ ๊ฐ์ API๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์์ฐจ ์ผ๊ด์ฑ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ๋ฌธ์ผ๋ก ์ฑ์ฅํ ์ฌ์ง๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ์ํ ํ์์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ ์ ๋ง๋ค๊ธฐ ์ํ ์์ ์ด ์งํ ์ค์ ๋๋ค.
SAB๋ TC39์์ "4๋จ๊ณ"์ ์์ผ๋ฉฐ, ์ด๋ ์๋ฃ, ๋ฐฐ์ก ์ค๋น ๋ฐ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์์ ์๋ฏธํฉ๋๋ค. WebAssembly์ ์ฑํํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
@jfbastien ํต์ฐฐ๋ ฅ ์๋ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค.
์ฆ, WebAssembly์ JavaScript SharedArrayBuffer ์ ๊ทผ ๋ฐฉ์์ ์ด๋ ์ ๋ ์ฑํํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.(...)
SAB๋ TC39์์ "4๋จ๊ณ"์ ์์ผ๋ฉฐ, ์ด๋ ์๋ฃ, ๋ฐฐ์ก ์ค๋น ๋ฐ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์์ ์๋ฏธํฉ๋๋ค. WebAssembly์ ์ฑํํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
์์ฒญ๋. ๋๋ ๋จ์ํ ์ค๋ ๋ฉ์ ์ํด ๊ตถ์ฃผ๋ฆฐ ๋ง์ C++ ์ฝ๋๋ก ๊ทธ๊ฒ์ ๊ฑท์ด์ฐจ๊ณ ์ถ์ดํฉ๋๋ค.
์ ๋ ์ ๊ธฐ์ ์ผ๋ก WebWorkers๋ฅผ TS/JS ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ฉฐ ์ ๋ WebWorkers์ ํฌ์ ์๋์ง๋ง ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค๋ ๋๋ ๋งค์ฐ ์ค์ํ์ง๋ง WebAssembly์ ์ต์ํ์ผ๋ก ์คํ ๊ฐ๋ฅํ ์ ํ์ ์ค๋ ๋๋ฅผ ์ง์ด ๋ฃ๋ ๊ฒ๋ณด๋ค ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ ์ค์ํ์ต๋๋ค. ์ถ๋ก ์ ๊ฐ๋จํฉ๋๋ค. asm.js๋ ์ด ๊ธฐ๋ฅ ์์ด๋ ์ฑ๊ณต์ ๊ฑฐ๋์ต๋๋ค.
MVP๊ฐ ๋นจ๋ฆฌ ๋น ์ ธ๋์์ผ ํ๋ ํ์์ฑ๊ณผ(์ด๊ฒ์ด ์คํ ๊ธฐ๋ฐ์ผ๋ก ์ ํํ๊ธฐ ์ํด AST๋ฅผ ์ค๋จํ ์ด์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค) ์ถ๊ฐ ๋จ๊ณ๋ฅผ ๊ณํํ๋ ๋ฐ ํ์ํ ์ฃผ์๋ฅผ ์์ ํ ์ดํดํฉ๋๋ค.
์ค๋ ๋๋ ์ผ๋ถ ์ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์์ ํ์คํ ์ฑ๊ณต ๋๋ ์ค๋จ ๊ธฐ๋ฅ์ด์ง๋ง ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค. GC, ์ ๋ก ๋น์ฉ ์์ธ ์ฒ๋ฆฌ, ๋ณด์ฅ๋ ๊ผฌ๋ฆฌ ํธ์ถ ๋ฑ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
emscripten์ ์ค๋ ์ฌ์ฉ์๋ก์ WebAssembly๊ฐ Javascript ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ ํ์์ ๋ ๋ถ๋ฆฌ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
Wasm์ 1) ์ต๊ณ ์ ์ฑ๋ฅ์ ๋ชฉํ๋ก ํ๊ณ 2) ์ผ๋ถ Posix/Unix/BSD ํ์ค๊ณผ ํจ๊ป ์์ผ, ๋ฉ๋ชจ๋ฆฌ/์ค๋ ๋, GDI, fs๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ํตํฉ ๋์ ํ๋ซํผ์ผ๋ก ๋ชจ๋ฐ์ผ ์ฅ์น์ ํด๋ผ์ฐ๋ ๋ฐฐํฌ ๊ฐ๋ฅํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋๊ณ ๊ฒฝ์ํ๋ ์๋ฒ์ ๋ชจ๋ ํฌํจํ ์ ์๋ ์์ OS์ ๊ฐ์ ๊ณ์ธต์ด ๋ฉ๋๋ค.
์ด๊ฒ์ด wasm์ด ์ฅ๊ธฐ์ ์ธ ๋ฏธ๋๋ก ํฅํ๋ ๋ฐฉํฅ์ ๋๊น, ์๋๋ฉด ๋ด๊ฐ ์์ ํ ๋ฐฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
๋ ธ๊ณ ์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ,
๋ก๋ฒ ๋ฅดํ
Wasm์ LLVM๊ณผ ๊ฐ์ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉ์ ์ก์ธ์ค ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ๋ฃ์ด์ผ ํ๋ ๊ฒ๊ณผ ๋ก์ปฌ์ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ ๋๋ฌธ์ ์ผ๋ถ ์คํ ์ ํ์์ ํ์คํ ๋ถ๋ฆฌ๋์์ต๋๋ค.
์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ํนํ ์์ ์ ๊ธฐ๋ฐ์ด ์๋ ๊ฒฝ์ฐ ๋ ๋ง์ ๊ถํ์ ์ป์ ์ ์์ต๋๋ค.
์ฆ, ์ ํํ ์์ด๋์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ป๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฌ์ฉ ์ฌ๋ก๋ ๋ฌด์์ด๋ฉฐ C++์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ด๋ฉฐ wasm ๊ตฌํ์ ์ด๋ฅผ ์ด๋ป๊ฒ ์ํํฉ๋๊น?
๋๋ ๋น์ ์ด ๋ชจ๋ ๋ต์ ์๊ฐํด ๋ผ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง ์์ต๋๋ค! ์ง๊ธ ์๊ฐ๋๋ ๊ฒ. Fwiw C++์๋ ์คํ ์ ํ์ ๋ํ ๋ช ๊ฐ์ง ์ ์์ด ์์ต๋๋ค. SG14 ํ์ ๊ทธ๋ฃน์ ํ์ธํ์ญ์์ค.
๐ถ๐ฏ ์๋์ ์์ต๋๋ค. ๋์ค์ ๋ ์ ๋๋ตํ๊ฒ ์ต๋๋ค!
๋ฎ์ ์ธ๋ถ ์ฌํญ์ ๋ํด ์ฃ์กํฉ๋๋ค. ์ ๋ :baby:: burrito: ์๋์ ์์ต๋๋ค. ๋์ค์ ๋ ์ ๋๋ตํ๊ฒ ์ต๋๋ค!
์๊ธฐ ๋ถ๋ฆฌ๋ ์๋์ ์์ต๋๊น? ใ ใ ใ
@qwertie
์๊ธฐ ๋ถ๋ฆฌ๋ ์๋์ ์์ต๋๊น? ใ ใ ใ
๋ง ๊ทธ๋๋ก ํฌ์ฅ๋ ์๊ธฐ.
์๋ ํ์ธ์ @jfbastien ,
์ ํํ ์์ด๋์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ป๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฌ์ฉ ์ฌ๋ก๋ ๋ฌด์์ด๋ฉฐ C++์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ด๋ฉฐ wasm ๊ตฌํ์ ์ด๋ฅผ ์ด๋ป๊ฒ ์ํํฉ๋๊น?
์ผ๋ฐ์ ์ผ๋ก ๋ด ์ฌ์ฉ ์ฌ๋ก๋ ์๋ฎฌ๋ ์ด์ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ธ๋ฐ, ๊ณ์ฐ ๋ถ๋ถ์์๋ C++, C/OpenCL ๋ฐ GPU ๊ธฐ์ ๋๋ถ์ ๊ธฐ๊ณ๋ก๋ง ์ ํ๋ฉ๋๋ค.
ํ๋ก ํธ์๋์์ HTML5+CSS+Javascript+Typescript ์คํ์ ์ค๊ฐ ๊ท๋ชจ์ ๋ณต์กํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ์ ํจํ๊ณ , ์ ์ฆ๋, ์ด์ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์์ด ์ ์ฆ๋์์ต๋๋ค.
_ JS ์น ์คํ(Typescript์ ๊ฐ์ ๊ตฌ์กฐํ๋ ์ธ์ด ์ถ๊ฐ)์ด ์์ฆ ๋๋ฌด ์ข์์ ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ emscripten ์ ์์งํ๊ฑฐ๋ wasm์ ์๋ํ ํ์๋ฅผ ๋๋ผ์ง ์์ต๋๋ค._
๋๋ ๋์ ์์ค์ ๋ชฉํ ์ ์น ์ด์ ๋ธ๋ฆฌ ์ฌ์ฉ ์ฌ๋ก ์ ๊ฑฐ์ ์ ์ ์ผ๋ก ๋์ํ๋ฉฐ ์น์ด ์๋ ์๋ฒ ๋ฉ ๋ฌธ์ ์ ๋ํด์๋ ํจ์ฌ ๋ ๋์ํฉ๋๋ค.
_ WebAssembly ๋ ๋ ๋น ๋ฅธ ์๋(๋ค์ดํฐ๋ธ C ์ฑ์ ๋ผ๋์ ๋ํ์ฌ 5% ์ค๋ฒํค๋)๋ฅผ ํ์ฉํ๊ณ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ์ ๋ ์์ ๋กญ๊ฒ ์ฌ์ฉํ๊ณ ํฌํธ/์์ผ์ ์์ ํ ๊ตฌํํ๋๋ก ํ์ฉํ๋ค๋ฉด ๊ด๋ จ ๊ธฐ์ ์ด ๋ ๊ฒ์ ๋๋ค(์ ์ด๋ ์ ์๊ฒ๋) ์ผ๋ฐ OS์ฒ๋ผ ์ค๋ ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค._
Wasm ๊ธฐ๊ณ๋ ํฌ๊ธฐ๊ฐ ๋งค์ฐ ๋งค๋๋ฝ๊ณ ๋น ๋ฅด๊ณ ์์ธก ๊ฐ๋ฅํด์ผ ํ๋ฏ๋ก GC์ ์ง์ฐฉํ์ง ๋ง์ญ์์ค. GC๋ IT์ Ponzi Scheme์ ๋๋ค. ๋ถ์ฑ๋ฅผ ์ง๊ณ ๋๋ฌด ๋ฆ๊ณ ์ฃผ๊ธฐ๊ฐ ๋์จํด์ง ๋๊น์ง ํ ๋น์ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. . ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๊ฐ ๊ณ ์ฑ๋ฅ wasm ์ฝ์ด ๋จธ์ ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๊ทธ ์์ GC๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๋งค๋๋ฝ๊ฒ ํ๊ธฐ ์ํด Javascript์์ ์ ์ง์ ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค. ์ด๋ค ์ธ์ด๋ก๋ ๊ธฐ๋ณธ ์ปดํ์ผ๋ฌ๊ฐ ์์ผ๋ฉด ์คํฌ๋ฆฝํ ์ด ํ์ํ์ง ์์ผ๋ฉฐ ์ด์จ๋ Duktape/Lua/๋ฌด์์ด๋ ๋จ์ํ C ์์ค์์ ์ปดํ์ผํ์ฌ ์๋ฒ ๋ํ ์ ์์ต๋๋ค.
Mozilla ์ฌ์ดํธ ์ด๋๊ฐ์์ wasm ๋ค์ดํฐ๋ธ DOM ์กฐ์ ๊ตฌํ์ ๋ํ ๋ฌธ์๋ฅผ ๋ณด์์ต๋๋ค. DOM ์กฐ์์ ๋ณธ์ง์ ์ผ๋ก ์์ฐจ์ ์ด๊ณ HTML5/CSS/JS ์คํ์์ ๊ฐ์ฅ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ์ธก๋ฉด ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ด๊ณ ์ ๋ค์ค ์ค๋ ๋ wasm์ ์์ฑํ์ฌ ๋ด DOM ๋ณ๊ฒฝ ์ฌํญ์ด ๋๊ธฐ์ด์์ ์ง๋ ฌํ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด ๋ชจ๋ ์ฑ๋ฅ์ด ์ฌ๋ผ์ง๊ณ C/C++๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ผ๋ถ Typescript๋ฅผ ๋ณํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ง์ OpenGL ์ก์ธ์ค๋ฅผ ์ ํธํฉ๋๋ค(์ฒ์์๋ ์ผ๋ถ WebGL ๊ตฌํ ํ OpenGL ๋ค์ดํฐ๋ธ ์ฌ์ฉ). ๊ทธ๋ํฝ ์นด๋์ ์ก์ธ์คํ๋ฉด ์ค๋ฒํค๋๊ฐ ์ ๊ฑฐ๋ ์๋ GPU/CUDA ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
(๋ฐฉ๊ธ ์ด๊ฒ์ ๋ํด ํ์ธํ๋ฌ ๊ฐ๊ณ ์ด์ ๋ํ ๋ฌธ์ #273์ด ๋ฐ์ํ์ต๋๋ค)
๋ชจ๋ ๊ณต๊ธ์
์ฒด์ ๋
๋ฆฝ ๊ธฐ์
์ด ๊ณต์ ํ๋ ์์ wasm ๋จธ์ ์ ๋ณด์ ํ๋ฉด ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ์ ์
๋ชฝ์ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ค๋ฅธ OS, ๋ฒ์ ๋ฐ ์ํคํ
์ฒ์ ๋ํด ์ต์ 4๊ฐ์ ๋๊ตฌ ์ฒด์ธ์ด ์์ด์ผ ํฉ๋๋ค.
๊ทธ๋ํฝ ๋ฐ ์
๋ ฅ ๊ธฐ๋ฅ์ ๋ค๋ฅผ ์ ์์ง๋ง ํ๋์ wasm์ผ๋ก ๊ฐ๋ฐํ ๋ค์ ๊ธฐ๋ฅ API๋ฅผ ์ฟผ๋ฆฌํ๊ฑฐ๋ ๋ค๋ฅธ ์ฑ ์คํ ์ด์ ๋์ผํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ ์๋ ์์ต๋๋ค.
์ฅ๊ธฐ์ ์ผ๋ก: ์๋ฒ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋์ผํ๊ฒ ์์ค(DB ์ฐ๊ฒฐ ํ๋กํ ์ฝ ๋ฐ ํ, ์ ํ๋ฒํธ๋ถ ์์คํ
, ๋ฉ์์ง ํ๋กํ ์ฝ ๋ฐ ์์คํ
๋ฑ)์ ๋ํ ์ผ์ข
์ ํฉ์์ ๋๋ฌํ๊ณ JEE ํ๋ซํผ๊ณผ ๊ฐ์ ์ผ๋ถ ํ์ค ์ฌ์์ผ๋ก ํฌ์ฅํฉ๋๋ค. (๋ง์ ๊ฐ๋
์์
์ด ์ด๋ฏธ ์ง๋ 20๋
๋์ ๋ฐฐ์น๋์์ต๋๋ค).
๋๋ ๋น์ ์ด ๋ชจ๋ ๋ต์ ์๊ฐํด ๋ผ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง ์์ต๋๋ค! ์ง๊ธ ์๊ฐ๋๋ ๊ฒ. Fwiw C++์๋ ์คํ ์ ํ์ ๋ํ ๋ช ๊ฐ์ง ์ ์์ด ์์ต๋๋ค. SG14 ํ์ ๊ทธ๋ฃน์ ํ์ธํ์ญ์์ค.
๋ฌผ๋ก ๋ด๊ฐ ํ ๊ฑฐ์ผ.
๊ธฐ๋ค๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋กญ
์์ ์ถ๊ฐ ์ฌํญ์ผ๋ก ์ค๋ ๋๋ฅผ ๊ตฌํํ ๋ ์คํ ํฌ๊ธฐ๋ฅผ ์์๋ก ํฌ๊ฒ ๋ง๋ค ์ ์๊ฑฐ๋ ๊ทธ ๋์ ์ต์ 64MB๋ก ์ค์ ํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ ์ฌ์ฉ ์ฌ๋ก๋ 2๊ฐ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ณ ๋น์ฃผ ์ค๋ ๋์๋ ๊ฝค ํฐ ์คํ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
@jjpe ๋ wasm ํ๋ซํผ ์์ฒด์ ๋ํ ๊ฒ์ด ์๋๋ผ ๋๊ตฌ ์ฒด์ธ์ ๊ตฌํ ๋๋ ABI ์ ํ์ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด ์ ์ฅ์๊ฐ ์๋๋ผ wasm์ ๋์์ผ๋ก ํ๋ ํน์ ๋๊ตฌ ์ฒด์ธ(์: emscripten)์ ๋ํ ์์ฒญ์ ๋๋ค. (์: https://github.com/kripken/emscripten/์์ ๋ฌธ์ ๋ฅผ ์ด โโ์ ์์)
๋ด๊ฐ ์ด์ ๋ฉ์์ง์์ ์ ์ํ ๊ฒ ์ค ์ผ๋ถ๋ ์ต์ WASI ์ ์์ ํฌํจ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ณด๋ค:
https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
๊ต์ฐจ ์๊ฐ๋ฝ.
--์๋ฅด ์ํ
FWIW ํ์ฌ ์ํ๋ Chrome์ด ๋ฒ์ 74์์ wasm ์ค๋ ๋ ์ง์์ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ Firefox์๋ ์์ง ์ ๊ณต๋์ง ์์ ๊ตฌํ์ด ์์ผ๋ฉฐ Emscripten์๋ pthreads ์ง์(https://emscripten.org/docs/porting/pthreads.html)์ด ์์ต๋๋ค. ์ง๊ธ ์ฌ์ฉ ๊ฐ๋ฅํ์ต๋๋ค.
(๋ํ WASI๋ ์์คํ ํธ์ถ API๋ก, ์ฃผ์ด์ง wasm ์๋ฒ ๋ฉ ๋๋ ํด์ฒด์ธ์ด ์ค๋ ๋/์์ํ์ ์ง์ํ๋์ง ์ฌ๋ถ์ ๋๋ถ๋ถ ์ง๊ตํฉ๋๋ค.)
Chrome ๋ฐ Firefox ์ค๋ ๋ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์๊ฐ ์์ต๋๊น?
์ผ์ข ์ ์กฐํฉ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ์ wasm ์์ง์ wasm ์ฌ์(https://github.com/WebAssembly/threads/tree/master/proposals/threads)์ ๋ํ ์ค๋ ๋/์์ํ ํ์ฅ์ ๊ตฌํํ์ฌ ๊ณต์ ๋ wasm ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ธ์คํด์คํํ ์ ์์ต๋๋ค. ์น์์ ์น ์์ ์๋ฅผ ๋ง๋ค๊ณ postMessage๋ฅผ ํตํด ์์ ์์๊ฒ ๋ฉ๋ชจ๋ฆฌ(๋ฐ ์ฐ๊ฒฐ๋ wasm ๋ชจ๋)๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ์(๋ฐ ๊ธฐ๋ณธ ์ค๋ ๋ ๋๋ ๋ค๋ฅธ ์์ ์)์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ชจ๋์ ์ธ์คํด์คํํ๊ณ ์ธ์คํด์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ฌ์ ์ ์ ๊ฐ์(https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md)์ ์์ ์๊ฐ ์์ง๋ง ๋ค๋ฅธ ์ฌ๋์ ๋ชจ๋ฆ ๋๋ค.
์๋
ํ์ธ์ @dschuff ์ด๋ฉฐ ์์ ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด์ ๋ฉ์์ง์์ ๋๋ pthreads๋ฟ๋ง ์๋๋ผ 2010๋
๋ถํฐ emscripten์ ๋ฐ๋ฅด๊ณ ์ฌ์ฉํ๋ ์ฐ๋ฆฌ ์ค ์ผ๋ถ๊ฐ ๋น์๋ฅผ ์ง์ ํ ํ๊ธฐ์ ์ธ ๊ธฐ์ ๋ก ์ฌ๊ฒผ๋ ๋ ์ปค๋๊ณผ ์ ์ฌํ ๊ฒ์ผ๋ก wasm์ ๋ฐ๋์งํ ์งํ๋ฅผ ํฌํจํ๋ ์ด์ ๋ฉ์์ง๋ฅผ ์ธ๊ธํ์ต๋๋ค.
์ฐธ์กฐ: https://github.com/WebAssembly/design/issues/992#issuecomment -285055578 .
emscripten์ด ๋์จ ์ง 9๋ , ๊ทธ๋ฆฌ๊ณ wasm์ด ๋ฐํ๋ ์ง ๊ฑฐ์ 5๋ ์ด ์ง๋ฌ์ง๋ง wasm์ ์คํ ๊ฐ๋ฅํ ์๋ฒ ๊ธฐ์ ๋ก ๋ณํํ๋ ๋ฐ ๊ฑฐ์ ์ง์ ์ด ์์์ต๋๋ค.
์ฌํ๊ฒ๋ ์ฐ๋ฆฌ๋ ํด๋์ฉ ์ฑ์ ๋ํ ํ์ค์ด ํ์ํ๊ณ ์ด๋ฅผ ์ํํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ POSIX ์ค๋ ๋ ๋ฐ ๋ฒํด๋ฆฌ โโ์์ผ + ์๊ธ์ ๋ณด์ ๊ฐ์ ํ์ผ ์์คํ (์ฌ์ฉ์ ๋ฐ ๊ทธ๋ฃน์ผ๋ก ์ถฉ๋ถํฉ๋๋ค). ๋๋ H.Spencer์ ์ ๋ง์ ํ๊ณ ํ ํฉ๋๋ค. "UNIX๋ฅผ ์ดํดํ์ง ๋ชปํ๋ ์ฌ๋์ UNIX๋ฅผ ์ฌ๋ฐ๋ช ํด์ผ ํฉ๋๋ค."
๊ทธ๋๋ ๋ฏฟ์์ ๊ฐ๊ณ ์ถ๊ธฐ์ WASI๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ํ ๊ฑธ์์ ๋๋ค.
--์๋ฅด ์ํ
์ถ์ : 2010 emscripten์ ๋๋ถ๋ถ์ ๊ธฐ์ ์์ ์ฌ์ฉ๋๋ ๋ถ๋ฉธ์ ๋ธ๋ผ์ฐ์ ์ธ ๋ถ๋ฉธ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ํ๋ก์ ํธ์๋ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ๋ ๋ค๋ฅธ ํฌ๋ผ์ด ์์ผ๋ฏ๋ก ๋ฌธ์ ์ถ์ ๊ธฐ๋ ์ฌ๋๋ค์ด ๋์์ธ ํ๋ก์ธ์ค์ ๋ํด ์ง๋ฌธํ ์ ์๋ ์ ์ผํ ์ฅ์์ ๋๋ค. ์ฌ๋๋ค์ด ์ง๋ฌธํ ์ ์๋ ์ฅ์๊ฐ ์๋ค๋ ๊ฒ์ ๊ฐ์น ์๋ ์ผ์ด๋ฏ๋ก ์ฌ๋๋ค์ด ๊ณ์ํด์ ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ง๋ฌธํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.