Cheerp 3.0 ์ปดํ์ผ๋ฌ๊ฐ ๋์ ๋์ด C/C++ ์ฝ๋๋ฅผ WebAssembly ๋๋ JavaScript๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค. ์๋ก์ด ๋ธ๋์น๋ ์ด์ ์ ์ ์ฉ๋์๋ ์ ํ๋ ๋ผ์ด์ ์ค ์ ์ฑ ๋์ ํ์ฉ๋๋ Apache 2.0 ๋ฐ LLVM ๋ผ์ด์ ์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ปดํ์ผ๋ฌ์ ํจ๊ป ์ ๊ณต๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๋ํ์ฌ ๋น์์ ์ ํ๋ก์ ํธ์๋ GPLv2 ๋ผ์ด์ ์ค ์ต์ ์, ์์ ์ฉ ํ๋ก์ ํธ์๋ ๋ ์ ๋ผ์ด์ ์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ์ ๋ช ํฉ๋๋ค. ์ปดํ์ผ๋ฌ ์ฝ๋๋ LLVM ๋ฐ Clang์ ๊ฐ๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ์ปดํ์ผ๋ ๊ฒฐ๊ณผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํ ์ถ๊ฐ ์ต์ ํ๋ฅผ ํฌํจํฉ๋๋ค.
Cheerp๋ ๊ธฐ์กด C/C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํ ํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์คํํ๊ณ ๊ณ ์ฑ๋ฅ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ WebAssembly ๊ตฌ์ฑ ์์๋ฅผ ์ฒ์๋ถํฐ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด JavaScript ์ฝ๋์์ ์๋ C/C++์์ ๊ฐ๋ฐ๋ ๊ธฐ๋ฅ์ ์ก์ธ์คํ๊ณ C/C++ ์ฝ๋์์ JavaScript ๊ฐ์ฒด, JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์น API ๋ฐ ๋ชจ๋ ๊ธฐ๋ฅ์ DOM์ ๋๋ค. JavaScript๋ก ์ปดํ์ผ๋๋ ์ฝ๋์ ์ผ๋ถ์ WebAssembly์ ์ผ๋ถ์ธ ๊ฒฐํฉ๋ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. libc ๋ฐ libc++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ ๋น๋๋ฅผ ์ง์ํฉ๋๋ค.
Emscripten ์ปดํ์ผ๋ฌ์ ๋น๊ตํ์ฌ Cheerp๋ ๋ ์ต์ ํ๋๊ณ ์ปดํฉํธํ WebAssembly ์ค๊ฐ ์ฝ๋(ํ๊ท 7% ๋ ์์ ๊ฒฐ๊ณผ ํ์ผ)๋ฅผ ์์ฑํฉ๋๋ค. ๊ฐ๋ ์ ์ผ๋ก ์ฐจ์ด์ ์ Emscripten์ด WebAssembly ๊ฐ์ฒด ํ์์ผ๋ก ์ฌ์ฉ๋๊ณ WebAssembly ํ์ฒ๋ฆฌ ๋จ๊ณ(wasm-opt)์์ ์ฐ๊ฒฐ ๋ฐ ์ต์ ํ๋ฅผ ์ํํ๋ค๋ ๊ฒ์ ๋๋ค. Cheerp๋ LLVM ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๊ฐ์ฒด ํ์ผ์ ์ค๊ฐ ํํ์ผ๋ก ์ฌ์ฉํ๋ฏ๋ก ์ ์ฒด ํ๋ก์ ํธ์ ๊ฑธ์ณ ๋ ๊ด๋ฒ์ํ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๊ณ ์ฌํ ์ฒ๋ฆฌ ์์ด LLVM ์์ค ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
๋ํ Cheerp๋ ์ปดํ์ผ ๋จ๊ณ์์ ์ฝ๋์ ์ ์ ํ ์คํ์ ๋ณด์ฅํ๋ PreExecuter ์ต์ ํ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ฑ์๋ฅผ ์์๋ก ๋ณํํฉ๋๋ค. ๋ํ ์ปดํ์ผ ์ค์๋ ํจ์ ๋งค๊ฐ๋ณ์ ๋ถ์์ ๊ธฐ๋ฐ์ผ๋ก ์คํ ์ค์ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ผ๋ก ๋ณด์ฅ๋๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ PartialExecuter๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Cheer๋ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ค๋ฃจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ์กฐ์ํ๋ JavaScript ์ฝ๋๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค. ํนํ Cheerp๋ ํ์ํ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ์ฃผ์ ๊ณต๊ฐ์ ์๋ฎฌ๋ ์ดํธํ๋ ๋์ C++ ๊ฐ์ฒด๋ฅผ JavaScript ๊ฐ์ฒด์ ์ง์ ๋งคํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ JavaScript ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ฌ์ค๋๋ค. ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์์ฑ๋ WebAssembly ์ค๊ฐ ์ฝ๋๋ ๋ฐ์ดํฐ ์์ ์ ๋ณ๋ ฌํ๋ฅผ ํ์ฉํ๋ SIMD ํ์ฅ์ ์ฌ์ฉํฉ๋๋ค.
Cheerp๋ C++๋ก ํตํฉ๋ ํด๋ผ์ด์ธํธ/์๋ฒ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๊ธฐ ์ํ ํ๋ซํผ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ํ์ฌ ์ค์ ๋ก๋ JavaScript๋ก ์์ฑ๋ ๋ณ๋์ ๋ธ๋ผ์ฐ์ ๋ด ํ๋ฐํธ์๋์ PHP, Python, Ruby ๋๋ JavaScript/Node.js๋ก ์์ฑ๋ ๋ณ๋์ ๋ฐฑ์๋๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค. Cheerp๋ ๋ฐฑ์๋์ ํ๋ฐํธ์๋๊ฐ ๋จ์ผ ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ์ง์๋๋ ์์ ํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ C++๋ก ์์ฑํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ปดํ์ผ ํ๋ก์ธ์ค ์ค์ ์๋ฒ ์ธก์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผ๋๊ณ ์ธํฐํ์ด์ค๋ JavaScript ํํ์ผ๋ก ๋ณํ๋ฉ๋๋ค. JavaScript๋ก ๋ณํ๋ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ํ๋ก์ ํธ ๊ตฌ์ฑ ์์์ ๋๋ฒ๊น
์ ์์ค ๋งต ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ C++์ ์์ค ํ
์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค(์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด C++ ์ฝ๋ ์น์
์ ๋ณผ ์ ์์ต๋๋ค. C++ ์ฝ๋ ๋ฐ ์ค๋ณ ์ค๋จ์ ์ค์ ์ ์ง์ํฉ๋๋ค) - C++ ์ฝ๋์ ๋จ๊ณ๋ณ ์คํ).
์ถ์ฒ : opennet.ru