Cheerp 3.0, C/C++์—์„œ JavaScript ์ปดํŒŒ์ผ๋Ÿฌ๋กœ, Apache 2.0 ๋ฐ LLVM ๋ผ์ด์„ ์Šค๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋จ

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€