์ค๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด์๊ณ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ์์ ์์ ์ฌ์ฉํ๋ ๋ฐ ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ต์ข ๊ฒฐ๊ณผ๊ฐ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ์์ wasm์ ์คํํ๋ ์ต์ข ์ฌ์ฉ์๊ฐ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์ฝ๋์ ์ก์ธ์คํ ์ ์์์ ์๋ฏธํ๋ค๋ฉด ์ด๊ฒ์ ๋์น ๊ธฐํ์ ๋๋ค.
์ต์ข ์ฌ์ฉ์์๊ฒ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ด์ ๊ฐ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ๋งต ํ์ผ์ด๋ ์๋ณธ ์์ค๊ฐ ํ์ํ ์ ์ฌํ ๋ฉ์ปค๋์ฆ์ ํตํด ์ก์ธ์คํ ์ ์์ต๋๋ค.
๋์ปดํ์ผ/๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ผ๋ก ๊ฒฐ์ ๋ ์ ํ์ ์ต์ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ง๋ง ์ต์ ํ๋ ๊ฒ์ด ์์ผ๋ฉด ์ ์ฉํฉ๋๋ค(์ ๊ณตํ๋ ค๋ ๊ฒฝ์ฐ ์์ค/๋งํฌ ํฌํจ). ๋์ฉ์ ๋ํ ๋ ธ๋ ฅ/์ํ์ด ๋ฒ์ ๋ผ์ด์ ์ค ๋น์ฉ๋ณด๋ค ๋ ํฐ ๊ฒฝ์ฐ. ๋ฑ ๋ฑ
๊ฐ๋ ์ฑ์ ์ ๊ณตํ์ง ์๋ ip ๋ณด์์ ์ถ๊ฐ ์์๋ ๋ ๊ด๋ฒ์ํ๊ณ ๋ ๋น ๋ฅธ ์ฑํ์ ์ฅ๋ คํ ๊ฒ์ ๋๋ค.
๋ฐ๋ฉด์ ๋ณด์์์ ์ด์ ์ด ์๋ค๋ฉด....์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ ๋น ๋ฅธ hw/js ์์ง์ ์ฌ์ฉํ์ฌ C/C++๋ก ๋ค์ ์ ํํ๊ณ ๋ ํ์ฅ๋ ๊ธฐ์ ์งํฉ์ ์ ์งํ๋ ๊ฒ์ ๊ทธ๋ค์ง ๋งค๋ ฅ์ ์ผ๋ก ๋ณด์ด์ง ์์ต๋๋ค.
was ๋ฐ์ด๋๋ฆฌ ์ธ์ฝ๋ฉ์ ์ฝ์ ์ ์๋๋ก ํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง ์๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด์จ๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๊ฒฐ๊ตญ ๊ทธ๊ฒ์ ํ ๊ฒ์ ๋๋ค. ๊ทธ ๋์ ๋ค๋ฅธ ๊ณณ์์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ดํดํ ์ ์๋ ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋์ ์งง์ ์๋๋ฅผ ์ฆ๊ธฐ๊ฒ ํ์ญ์์ค.
๋จ๋ฐ.
์ต์ ๋ฒ์ ์ Chrome์ ์ด๋ฏธ ๋ฐ์ด๋๋ฆฌ WASM์ ํ ์คํธ ํ์์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค.
๋ด๊ฐ ๊ฐ ์ ์๋ค๋ ๋ง์ ๋๊น? (์ํคํผ๋์ ํญ๋ชฉ์์ ๊ฐ์ ธ์ด)
20 00
42 00
51
04 7e
42 01
05
20 00
20 00
42 01
7์ผ
10 00
7e
0b
์๊ฒ
์ ์ ๊ณ์น(int n) {
๋ง์ฝ (n == 0)
๋ฐํ 1;
๋ ๋ค๋ฅธ
๋ฐํ n * factorial(n-1);
}
๋๋ ๊ทธ๋๋ก ํฌ๋กฌ์ ์ฌ์ฉํ์ฌ ์ธ์ํ ์ ์์ต๋๊น?
์๋์, http://webassembly.org/docs/text-format/ ์ ์ค๋ช ๋ ์์ง ๊ณต์์ ์ผ๋ก ์ง์ ๋์ง ์์ "WAST" ํ์์ ๋ฐํํฉ๋๋ค.
get_local 0
i64.const 0
i64.eq
if i64
i64.const 1
else
get_local 0
get_local 0
i64.const 1
i64.sub
call 0
i64.mul
end
์น ์ด์ ๋ธ๋ฆฌ๋ ์๊ณ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ ํ์์ ์ต์ ํ๋์ด ์์ต๋๋ค. ์๋ ๊ตฌ๋ฌธ์ ์์ ํ ๋ณต๊ตฌํ๊ธฐ์ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ๋ณด์ ํ์ง ์์ต๋๋ค. ํจ์๊ฐ ๋ ํฌ๊ณ ๋ณต์กํ ์๋ก ๋์ปดํ์ผ์ ๋ ์ธ์ํ ์ ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด, ํด๋์ค, ํ ํ๋ฆฟ ๋ฐ ๊ธฐํ ์์ ์์ค ๊ธฐ๋ฅ์ด ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ๋ณด๋ฉด ํนํ ๊ทธ๋ ์ต๋๋ค.
์ฐ์(์ํคํผ๋์ ๊ธฐ์ฌ์ ๋์ด๋ "์ค๊ฐ ํํ"์ ๋๋ค) - ๋๋ ๋น์ ์ด ๊ทธ๊ฒ์ด ์ด๋ฏธ ๋ "์์๊ฒ" ๋ ์ ์๋ค๊ณ ์ ์ํ๊ณ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. - ๋๋ ๊ทธ๊ฒ์ด (์ฆ์) ๋ ์ ์๋ค๋ฉด ๋ ์ ํธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ ๋ชจ๋ ๊ฒ์ด ์๋ฃ๋์๊ฑฐ๋ ์๋ฃ๋์ง ์์๊ฑฐ๋ ๊ทธ๋ฐ ์์ผ๋ก ์ ์งํ๋๋ก ์ค๊ณ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
(๋๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ฏธ ์๋ ์๋ณ์๊ฐ ์๋๋ผ๋ ๊ถ๊ทน์ ์ผ๋ก ํฉ๋ฆฌ์ ์ธ ์์ฌ ์ฝ๋๋ก ๋ค์ ๋ฒ์ญํ ์ ์๋ค๋ ๊ณํ์ด ์๋ค๋ ์ธ์์ ๋ฐ์์ต๋๋ค.)
์ฌ๋์ด ์ฝ์ ์ ์๋ ์ด๋ค ํํ์ ์์ค์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ธ์งํ๋ ๊ฒ์ WebAssembly๊ฐ ๊ธ์งํ ์ ์๋ ๊ฒ์ด ์๋๋๋ค. ๋๊ตฌ๋ ์์ ์ ๊ฒ์ ๊ตฌํํ ์ ์์ง๋ง ์์๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค. ๋์ ์ด ๊ทธ๋ฃน์ ์น์ผ๋ก ์ปดํ์ผํ๊ธฐ์ ์ ํฉํ ์ด์ ๊ฐ๋ฅํ ํฌ๊ธฐ ๋ฐ ๋ก๋ ์๊ฐ ํจ์จ์ ์ธ ํ์์ ์ง์ ํ๋ ๋ฐ ๊ด์ฌ์ ๋๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ํ ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๋ฎ์ ์์ค์ ํ ์คํธ ํ์์ ์ง์ ํ๋ ์ด์ ์ด๋ฉฐ ๋๋ฒ๊น ๊ธฐ๋ฅ์ ๋ํด ์์ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๋์ปดํ์ผ, ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋๋ ๊ธฐํ ๋น๊ธฐ์ ์ ๋ฌธ์ ์ ๋ํ ๋ฒ์ ๋ณดํธ๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ ๋ชฉํ๊ฐ ์๋๋๋ค. ์ด๊ฒ์ ๊ทํ์ ๋ณํธ์ฌ์๊ฒ ๋งก๊ธฐ๊ณ ๋ณํธ์ฌ๊ฐ ์๋ ์ฌ๋๋ค์ ์ถ์ธก์ ํผํ๋๋ก ์ด๊ตฌํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฒ๋ฅ ์๋ฌธ์ ์ ๊ณตํ๋ ์ฌ์ ์ ํ๊ณ ์ถ์ง ์์ต๋๋ค.
์ฌ์ ๋ ผ์๊ฐ ๊ทํ์ ์ง๋ฌธ์ ํด๊ฒฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๊น? ๋ซ๊ฒ ์ต๋๋ค. ์์ ๋กญ๊ฒ ๋ค์ ์ด๊ฑฐ๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๊ณ์ ๋ ผ์ํฉ๋๋ค.
์ด .wast ํ์ผ์ ์๋ณธ ์์ค ์ฝ๋๋ก ๋ถํดํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ๋์ด ์ฝ์ ์ ์๋ ์ด๋ค ํํ์ ์์ค์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ธ์งํ๋ ๊ฒ์ WebAssembly๊ฐ ๊ธ์งํ ์ ์๋ ๊ฒ์ด ์๋๋๋ค. ๋๊ตฌ๋ ์์ ์ ๊ฒ์ ๊ตฌํํ ์ ์์ง๋ง ์์๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค. ๋์ ์ด ๊ทธ๋ฃน์ ์น์ผ๋ก ์ปดํ์ผํ๊ธฐ์ ์ ํฉํ ์ด์ ๊ฐ๋ฅํ ํฌ๊ธฐ ๋ฐ ๋ก๋ ์๊ฐ ํจ์จ์ ์ธ ํ์์ ์ง์ ํ๋ ๋ฐ ๊ด์ฌ์ ๋๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ํ ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๋ฎ์ ์์ค์ ํ ์คํธ ํ์์ ์ง์ ํ๋ ์ด์ ์ด๋ฉฐ ๋๋ฒ๊น ๊ธฐ๋ฅ์ ๋ํด ์์ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๋์ปดํ์ผ, ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋๋ ๊ธฐํ ๋น๊ธฐ์ ์ ๋ฌธ์ ์ ๋ํ ๋ฒ์ ๋ณดํธ๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ ๋ชฉํ๊ฐ ์๋๋๋ค. ์ด๊ฒ์ ๊ทํ์ ๋ณํธ์ฌ์๊ฒ ๋งก๊ธฐ๊ณ ๋ณํธ์ฌ๊ฐ ์๋ ์ฌ๋๋ค์ ์ถ์ธก์ ํผํ๋๋ก ์ด๊ตฌํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฒ๋ฅ ์๋ฌธ์ ์ ๊ณตํ๋ ์ฌ์ ์ ํ๊ณ ์ถ์ง ์์ต๋๋ค.
์ฌ์ ๋ ผ์๊ฐ ๊ทํ์ ์ง๋ฌธ์ ํด๊ฒฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๊น? ๋ซ๊ฒ ์ต๋๋ค. ์์ ๋กญ๊ฒ ๋ค์ ์ด๊ฑฐ๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๊ณ์ ๋ ผ์ํฉ๋๋ค.