V8 JavaScript engine์ ๋ํด์
V8 JavaScript engine์ด๋?
C++๋ก ์์ฑ๋ Google์ ์คํ ์์ค ๊ณ ์ฑ๋ฅ JavaScript ๋ฐ WebAssembly ์์ง์ด๋ค.
Chrome ๋ฐ Node.js ๋ฑ์์ ์ฌ์ฉ๋๋ค.
V8๊ณผ ๋ค๋ฅธ ์์ง์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ V8 ์์ง์ JIT(Just In Time)
์ปดํ์ผ๋ฌ๋ค.
JIT-C(Just In Time Compiler)
์ผ๋ฐ์ ์ธ Compiler ๋ฐฉ์์๋ ๋์ ์ปดํ์ผ(interpreter)
๊ณผ ์ ์ ์ปดํ์ผ(Compiler)
์ด ์๋ค.
JIT(Just In Time)์
์ด ๋๊ฐ์ ์ปดํ์ผ ๋ฐฉ์์ ํฉ์น ๊ฒ์ผ๋ก ์คํ์์ ์์ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๊ทธ ํ V8 Engine์
๋ฐ์ดํธ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๋ง๋ค๊ณ , ๊ทธ ์ฝ๋๋ฅผ ์บ์ฑํ์ฌ, ๊ฐ์ ํจ์๊ฐ ์ฌ๋ฌ ๋ฒ ๋ถ๋ฆด ๋ ๋งค๋ฒ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
V8์ ์ปดํ์ผ ๊ณผ์
- Blink์์
script ํ๊ทธ
๋ฅผ ๋ง๋๋ฉด, Javascript ์คํธ๋ฆฌ๋ฐ์ ์์ํ๋ค. - ์คํธ๋ฆฌ๋ฐ์ผ๋ก ์ ๋ฌ ๋ฐ์ UTF-16 ๋ฌธ์์ด์ Scanner๋ฅผ ์ด์ฉํด Token(let, for)์ ์์ฑํ๋ค.
- ์์ฑ๋ Token์ ๊ฐ์ง๊ณ , Parser๊ฐ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ (AST)๋ฅผ ๋ง๋ ๋ค.
- ๋ง๋ค์ด์ง AST๋ Ignition(Compiler)์์ Byte Code๋ก ์ปดํ์ผํ๋ค.
- ์ปดํ์ผ๋ Byte Code๋ฅผ ์คํํจ์ผ๋ก์จ ์ํ๋ Javascript ๋์์ด ์คํ๋๋ค.
์ฉ์ด์ฌ์
์ธํฐํ๋ฆฌํฐ(interpreter) : ํ์ค์ฝ๊ณ ์คํํ๋ ๋ฐฉ์์ผ๋ก, ๋์ผํ ๋์์ ํ๋ ํจ์๊ฐ ์ฌ๋ฌ๋ฒ ๋์ค๋๋ผ๋ ์ด๋ฅผ ์ปดํ์ผ ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ํ๋ค. ๋ฐ๋ผ์ ์ด๋ ๋งค์ฐ ๋นํจ์จ์
์ด๋ค. ํ์ง๋ง ๋๋ฒ๊น
์ ์ ๋ฆฌ
ํ ์ ์๋ค. V8
์ JIT Compiler
์ ์ง์ํ๋๋ฐ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฐฉ์งํ๊ฒ ๋ง๋ ๋ค.
์ปดํ์ผ๋ฌ(compiler) : ํน์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฐ์ฌ ์๋ ๋ฌธ์๋ฅผ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฎ๊ธฐ๋ ์ธ์ด ๋ฒ์ญ ํ๋ก๊ทธ๋จ์ผ๋ก ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ์์ค์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผ ํ๋ค. ์ด๋ ๊ฐ๋ฐ ํธ์์ฑ์ ๋จ์ด์ง์ง๋ง, ์คํ ์๋๋ ๋์ ์ ์๋ค.
JIT ์ปดํ์ผ(just in time compilation) ๋๋ ๋์ ๋ฒ์ญ(dynamic translation) : ํ๋ก๊ทธ๋จ์ ์ค์ ์คํํ๋ ์์ ์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ์ปดํ์ผ ๊ธฐ๋ฒ์ด๋ฉฐ, V8 ์์ง์์ ๊ธฐ์ฉํ๋ ๊ธฐ๋ฒ
AST(Abstract Syntax Tree) : ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์์ค ์ฝ๋์ ์ถ์ ๊ตฌ๋ฌธ ๊ตฌ์กฐ์ ํธ๋ฆฌ๋ก, ๊ฐ ๋ ธ๋๋ ์์ค ์ฝ๋์์ ๋ฐ์๋๋ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ธ๋ค.
TurboFan JIT Compiler : ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ฉด์ Profiler๋ ์ต์ ํ(Optimizes)๊ฐ ๊ฐ๋ฅํ ๋ถ๋ถ์ ์ฐพ์์ ๊ธฐ๋กํด๋๋ค. (์์ฃผ ์ฐ์ด๋ ๋ณ์๋ ํจ์, ์ต์ ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ํ๋ ํด๋์ค
, ์ธ๋ผ์ธ ์บ์ฑ
์ด ์๋ค.)
์ฐธ๊ณ ๋งํฌ
Firing up the Ignition interpreter
V8 Engine์ ๋ํด์โฆ(๋ฉ๋ชจ๋ฆฌ๊ตฌ์กฐ, ์ปดํ์ผ๋ฐฉ์)
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ์ ๋น๋ฐ (V8๊ณผ ํ๋ ํด๋์ค)
BlinkOn 6 Day 1 Talk 2: Ignition - an interpreter for V8
V8 ์์ Javascript ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ ์ ๋ฆฌํด๋ณด๊ธฐ
๐ Visualizing memory management in V8 Engine (JavaScript, NodeJS, Deno, WebAssembly)
๊ฐ๋น์ง ์ปฌ๋ ์ - ๋ชจ๋ JavaScript ํํ ๋ฆฌ์ผ