|
3 | 3 | #### JS runs literally everywhere from smart watch to robots to browsers because of Javascript Runtime Environment (JRE)
|
4 | 4 |
|
5 | 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. |
| 6 | +- JRE is a container that can run JS code. |
7 | 7 |
|
8 | 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 |
| 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 | 11 |
|
12 | 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. |
| 13 | +to compile JS code. |
14 | 14 |
|
15 | 15 | Interpreter : Takes code and executes line by line. Has no idea what will happen in next line. Very fast.
|
16 | 16 | Compiler : Code is compiled and an optimized version of same code is formed, and then executed. More efficient
|
17 | 17 |
|
18 | 18 | - Code inside JRE passes through 3 steps : **Parsing, Compilation and Execution**
|
19 | 19 |
|
20 | 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) |
| 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 | 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. |
| 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 | 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**. |
| 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 | 30 |
|
31 |
| -Companies use different JS engines and each try to make theirs the best. |
| 31 | +Companies use different JS engines and each try to make theirs the best. |
32 | 32 |
|
33 |
| -- v8 of Google has Interpreter called *Ignition*, a compiler called *Turbo Fan* and garbage collector called *Orinoco* |
| 33 | +- v8 of Google has Interpreter called _Ignition_, a compiler called _Turbo Fan_ and garbage collector called _Orinoco_ |
0 commit comments