κ²°λ‘ λΆν° λ§νλ©΄, νλ JavaScriptλ λ λ€μ΄λ€.
κ·Όλ° μ΄ λ§μ΄ μ λμ€λ κ±ΈκΉ?
π₯ μ ν΅μ μΈ κ΅¬λΆλΆν° μ΄ν΄νμ
π» μ»΄νμΌ μΈμ΄ (C, C++ λ±)
μ½λλ₯Ό μ€ν μ μ ν λ²μ λ²μνλ νλ‘κ·Έλ¨ (λΉμ : μμ΄ μ± μ νκ΅μ΄λ‘ μ λΆ λ²μν λ€ μ½λ κ²)
μ½λ β μ»΄νμΌ β κΈ°κ³μ΄ β μ€ν
- μ 체 μ½λλ₯Ό κΈ°κ³μ΄λ‘ λ²μνλ€.
- μ€ν νμΌ(.exe κ°μ κ²) μμ±νλ€.
- κ·Έ λ€μμ μ€ννλ€.
νΉμ§
- μ€ν μ μ μ 체 μ½λλ₯Ό λ²μνλ€.
- μ€ν μλκ° λΉ λ₯΄λ€.
- μ€ν μ μ μλ¬λ₯Ό λ°κ²¬ν κ°λ₯μ±μ΄ μλ€.
π μΈν°νλ¦¬ν° μΈμ΄ (μμ Python, μ JS μΈμ)
μ½λλ₯Ό ν μ€μ© μ½μΌλ©΄μ λ°λ‘ μ€ννλ νλ‘κ·Έλ¨ (λΉμ : μμ΄ μ± μ ν λ¬Έμ₯μ© λ³΄λ©΄μ κ·Έλκ·Έλ ν΄μνλ©° μ½λ κ²)
μ½λ β ν μ€μ© μ½μΌλ©° μ€ν
- μ€νν λλ§λ€ μ½κ³ ν΄μνλ€.
- 미리 κΈ°κ³μ΄ νμΌμ λ§λ€μ§ μκ³ λ²μνμ§ μλλ€.
- λΉκ΅μ λ릴 μ μλ€.
κ·Έλ°λ° JSλ μ΄ λ μ€ νλκ° μλλ€
μλ μλ JSλ₯Ό μΈν°ν리ν°λΌκ³ λΆλ λ€. μλνλ©΄ βν μ€μ© μ½μΌλ©° μ€ννλ€β λΌκ³ μλ €μ Έ μμκΈ° λλ¬Έμ΄λ€. νμ§λ§ νλ μμ§(V8, SpiderMonkey λ±)μ λ€λ₯΄κ² λμνλ€.
π μ€μ JS μμ§ λμ νλ¦ (V8 κΈ°μ€ λ¨μν)
1. μ 체 μ½λ Parsing (νμ±) & AST μμ±
2. νμν λΆλΆλ§ Bytecode μμ±
4. μ€ν
5. μμ£Ό νΈμΆλλ λΆλΆμ JIT μ΅μ ν
1. Parsing
const a = 10;
μμ§μ μ΄κ±Έ λ°λ‘ μ€ννμ§ μκ³ λ¨Όμ μ 체 μ½λλ₯Ό μ½κ³ λ¬Έλ² λΆμν΄μ λ¬Έλ² κ΅¬μ‘°λ‘ λ°κΎΌλ€. (μ 체 μ€ν¬λ¦½νΈ λ¨μλ‘ μ§νλλ€.) β AST (Abstract Syntax Tree)
μ¦, μ½λ ꡬ쑰λ₯Ό νΈλ¦¬λ‘ λ§λλ κ±°λΌκ³ 보면λλ€.
2. Bytecodeλ‘ λ³ν (μ»΄νμΌ)
ASTλ λ°λ‘ μ€νλμ§ μκ³ μμ§μ ASTλ₯Ό Bytecode(μ€κ° μ½λ)λ‘ λ³ννλλ° μ΄ κ³Όμ μ΄ μ΄λ―Έ βμ»΄νμΌβμ΄λ€.
π μ¬κΈ°μ JSλ μ΄λ―Έ μΈν°ν리ν°κ° μλλΌλκ±Έ νμΈν μ μλ€.
μ¬κΈ°μ μ€μν λΆλΆμ μμ§μ μ±λ₯κ³Ό μ΄κΈ° λ‘λ© μλ λλ¬Έμ μ§κΈ λΉμ₯ μ€ν μ ν ν¨μλ κΉκ² μ»΄νμΌνμ§ μλλ€. κ·Έλμ μ΄ κ³Όμ μμλ νμν λΆλΆλ§ Bytecodeλ‘ μμ±νλ€.
3. μ€ν
μ΄ Bytecodeλ₯Ό μΈν°ν리ν°κ° μ€ννλ€.
4. JIT (Just-In-Time) μ΅μ ν
JSλ μ΄λ€ ν¨μκ° μμ£Ό μ€νλλ©΄, μμ§μ κ·Έ λΆλΆμ κΈ°κ³μ΄λ‘ λ€μ μ»΄νμΌν΄μ μ΅μ ν μν€λλ° μ΄κ±Έ JITλΌκ³ νλ€. μ¦, μ²μμ κ°λ³κ² μ€ννλ€κ° μμ£Ό μ°μ΄λ©΄ κ³ μ±λ₯ μ½λλ‘ μ κ·Έλ μ΄λλ₯Ό μν¨λ€.
π§Ά ν΅μ¬ μ 리
JSλ:
- 미리 μ 체λ₯Ό κΈ°κ³μ΄λ‘ μ»΄νμΌνμ§λ μλλ€.
- ν μ€μ© λ¨μ ν΄μνμ§λ μλλ€.
- μ€ν μ€ μ΅μ νκΉμ§ νλ€.
JS μμ§μ:
- μΌλ¨ λμκ°κ² λ§λ λ€.
- μμ£Ό μ°μ΄λ©΄ μ΅μ ννλ€.
- κ·Έλμ JSλ μκ°λ³΄λ€ λΉ λ₯΄λ€
- μ λ΅: Adaptive Optimization (μ²μμ κ°λ³κ², λ§μ΄ μ°μ΄λ©΄ λΉ λ₯΄κ² μ λ΅μ κ°μ§κ³ μλ€.)
π μΈν°νλ¦¬ν° + μ»΄νμΌλ¬ + JIT μ΅μ ν μμ§ = JavaScript
λ κΉκ² νκ³ λ€κΈ°
1. JSλ μ μ€ν μ μ μλ¬λ₯Ό μ λΆ μ‘μ§ λͺ»ν κΉ?
- JSλ μ μ νμ
μΈμ΄κ° μλλ€.
- JSλ μ€ν μ μ νμ
μ νμ ν μ μκΈ°λλ¬Έμ
let a =10μμaκ° μ«μμΈμ§, λ¬Έμμ΄μΈμ§, κ°μ²΄μΈμ§ νμ ν μ μλ€.
- JSλ μ€ν μ μ νμ
μ νμ ν μ μκΈ°λλ¬Έμ
- λ³μ μ‘΄μ¬ μ¬λΆλ μ€ν μμ μ κ²°μ λλ€
- ν¨μ μμμ λ³μκ° μ‘΄μ¬νλμ§λ νΈμΆλ λ λλ ν΄λΉ μ€μ½ν 체μΈμ νμν λ κ²°μ λκΈ°μ νμ± λ¨κ³μμλ μ‘μ§ λͺ»νλ€.
- Lazy Compilation
- λΉμ₯ μ€ν μ λλ ν¨μ λ΄λΆκΉμ§ κΉκ² μ΅μ ννμ§ μκ³ λ¬Έλ²λ§ λ€ κ²μ¬νλ€..
2. νμ μ΄ λμ μΈλ° μ΄λ»κ² μ΅μ νκ° κ°λ₯ν κΉ?
function multiply(x, y) {
return x * y;
}
μμ ν¨μλ₯Ό μμ§μ΄ "κ΄μ°°"νλ€κ° κ°μ ν¨μλ₯Ό 1000λ² μ€ννλλ° x μy κ° μ λΆ μ«μ μλ€λ©΄ μμ§μ λ΄λΆμ μΌλ‘ ν¨μλ₯Ό μ«μ μ μ©μ΄λΌκ³ μκ°νλ€. κ·Έλμ μ«μ μ μ© λ¨Έμ μ½λλ‘ μ΅μ ννλ€.
νμ§λ§ λ§μ½, κ°μκΈ° multiply("a",3) μ½λκ° λ€μ΄μ€λ©΄, μμ§μ νμ
μ΄ λ°λμ μΈμ§νκ³ μ΅μ ν μ½λλ₯Ό λ²λ¦¬κ³ λ€μ μΌλ° μ½λλ‘ λμκ°λ€. μ΄κ±Έ de-optimizationμ΄λΌκ³ νλ€.
