|
| 1 | +# Episode 17 : JS Engine and Google v8 architecture |
| 2 | + |
| 3 | +#### JS runs literally everywhere from smart watch to robots to browsers because of Javascript Runtime Environment (JRE) |
| 4 | + |
| 5 | +- JRE consists of a JS Engine (❤️ of JRE), set of APIs to connect with outside environment, event loop, Callback queue, Microtask queue etc. |
| 6 | +- JRE is a container that can run JS code. |
| 7 | + |
| 8 | +- ECMAScript is a governing body of JS. It has set of rules followed by all JS engines like Chakra(Edge), Spidermonkey(Firefox), v8(Chrome) |
| 9 | +- JS Engine is **not a machine**. Its software written in low level languages (eg. C++) that takes in hi-level code in JS and spits out low level machine |
| 10 | +code |
| 11 | + |
| 12 | +In all languages, code is compiled either with **interpreter** or with **compiler**. JS used to have only interpreter in old times, but now has **both** |
| 13 | +to compile JS code. |
| 14 | + |
| 15 | +Interpreter : Takes code and executes line by line. Has no idea what will happen in next line. Very fast. |
| 16 | +Compiler : Code is compiled and an optimized version of same code is formed, and then executed. More efficient |
| 17 | + |
| 18 | +- Code inside JSE passes through 3 steps : **Parsing, Compilation and Execution** |
| 19 | + |
| 20 | +1. **Parsing** - Code is broken down into tokens. In "let a = 7" -> let, a, =, 7 are all tokens. Also we have a **syntax parser** that takes code and converts it |
| 21 | +into an **AST (Abstract Syntax Tree)** which is a JSON with all key values like type, start, end, body etc (looks like package.json but for a line of code in JS. Kinda |
| 22 | +unimportant)(Check out astexplorer.net -> converts line of code into AST) |
| 23 | + |
| 24 | +2. **Compilation** - JS has something called **Just-in-time(JIT) Compilation - uses both interpreter & compiler**. Also compilation and execution both go hand in hand. |
| 25 | +The AST from previous step goes to interpreter which converts hi-level code to byte code and moves to execeution. While interpreting, compiler also works hand in hand |
| 26 | +to compile and form optimized code during runtime. |
| 27 | + |
| 28 | +3. **Execution** - Needs 2 components ie. Memory heap(place where all memory is stored) and Call Stack(same call stack from prev episodes). There is also a *garbage collector.* |
| 29 | +It uses an algo called **Mark and Sweep**. |
| 30 | + |
| 31 | +Companies use different JS engines and each try to make theirs the best. |
| 32 | + |
| 33 | +- v8 of Google has Interpreter called *Ignition*, a compiler called *Turbo Fan* and garbage collector called *Orinoco* |
0 commit comments