Skip to content

Latest commit

ย 

History

History
71 lines (40 loc) ยท 3.12 KB

javascript-engines.md

File metadata and controls

71 lines (40 loc) ยท 3.12 KB

Javascript Engines

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด์„ ๊ฐ€๋Šฅํ•˜๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‚ด์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋น ๋ฅด๊ณ  ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋ณ„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Firefox : Spidermonkey
  • Edge : Chakra
  • Safari : JavaScriptCore
  • Chrome : V8

V8 Engine

V8์€ ๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด๋‹ค. C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ Chrome๊ณผ Node.js, Electron์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ECMA-262์— ์ •์˜๋œ๋Œ€๋กœ ECMAScript๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

  • ECAM-262 : ์ •๋ณดํ†ต์‹  ํ‘œ์ค€์„ ์ œ์ •ํ•˜๋Š” ๋น„์˜๋ฆฌ ํ‘œ์ค€ํ™”๊ธฐ๊ตฌ ecma๊ฐ€ ์ œ์ •ํ•œ ๊ธฐ์ˆ ๊ทœ๊ฒฉ์œผ๋กœ ๋ฒ”์šฉ ๋ชฉ์ ์˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์— ๋Œ€ํ•œ ๋ช…์„ธ์ด๋‹ค.

  • ECMAScript : ECMA-262์—์„œ ์ •์˜๋œ ํ•˜๋‚˜์˜ ์‚ฌ์–‘ ์ฆ‰, ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๊ฐ€ ์ง€์ผœ์•ผํ•  ๊ทœ์น™์ด๋‚˜ ์„ธ๋ถ€์‚ฌํ•ญ ๋“ฑ์„ ์ •์˜ํ•œ๋‹ค.

V8์€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ C++์˜ ์ž์ฒด์ ์ธ ํ•จ์ˆ˜ ๊ตฌํ˜„์„ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

V8

์˜ˆ๋ฅผ ๋“ค์–ด print('hello world')๋Š” Node.js์—์„œ ์œ ํšจํ•œ ๋ช…๋ น๋ฌธ์ด ์•„๋‹ˆ๋ฉฐ ์ด ๋ช…๋ น๋ฌธ์„ ์ปดํŒŒ์ผํ•  ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ V8 ์˜คํ”ˆ์†Œ์Šค์—์„œ C++๋กœ print() ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ์ถ”๊ฐ€ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.


How V8 engine works

Parsing

ํŒŒ์‹ฑ์ด๋ž€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ํ›„ AST๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. AST๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ตฌ์กฐํ™”ํ™”๋œ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.

Ignition

Ignition์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ด๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ํ•ด์„ํ•˜๊ธฐ ์‰ฌ์šด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด ์›๋ณธ ์ฝ”๋“œ๋ฅผ ๋‹ซ์‹œ ํŒŒ์‹ฑํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์ค„์ด๊ณ  ์ฝ”๋“œ์˜ ์–‘๋„ ์ค„์—ฌ์„œ ์ฝ”๋“œ ์‹คํ–‰ ์‹œ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.

TurborFan

TurborFan์€ ์ตœ์ ํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค. ๋Ÿฐํƒ€์ž„์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ์ค‘ ํ•˜๋‚˜์ธ Profiler์—๊ฒŒ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์˜ ํ˜ธ์ถœ ๋นˆ๋„์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ ๋ฐ›์•„ ๊ธฐ์ค€์— ์ถฉ์กฑํ•˜๋Š” ์ฝ”๋“œ๋“ค์„ ์ตœ์ ํ™”ํ•œ๋‹ค.


Compile Pipeline

์‹ค์ œ V8์—์„œ์˜ ์ปดํŒŒ์ผ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

I

  1. V8์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ํŒŒ์„œ๋กœ ๋ณด๋‚ธ๋‹ค.
  2. ํŒŒ์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•œ ํ›„ AST(์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  3. AST๋ฅผ Ignition๋กœ ์ „์†กํ•œ๋‹ค.
  4. ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋Š” TurboFan์œผ๋กœ ๋ณด๋‚ด์ ธ ์ตœ์ ํ™” ์ฝ”๋“œ(Optimized Machine Code)๋กœ ์ปดํŒŒ์ผ๋œ๋‹ค.
  5. ์ตœ์ ํ™” ์ฝ”๋“œ์˜ ์‚ฌ์šฉ๋นˆ๋„๊ฐ€ ์ ์–ด์ง€๋ฉด de-optimizing๊ฐ€ ๋˜๊ธฐ๋„ ํ•œ๋‹ค.



Reference