A quick intro to the different phases a programming language goes through (namely: Scanning, Parsing, Analysis, Optionally converting to an intermediate representation, optimization, machine code generation and finally running as machine code)
Allowed me to understand java as a compiled to bytecode -> interpreted in the JVM language
Tree-walking interpreters like early Ruby (Matz ruby interpreter), where interpreter traverses the AST one leaf and branch and directly evaluates the nodes as it goes. Has poor performance.
CPython source code in Github, we can see /lib stores default python libraries, parser.c and lexer.c, hence Python is implemented in C!
What is transpilation (high level source code to another high level such as Typescript to Javascript using Babel) and compilation from Python to machine code
Memory management methods (terms such as reference counting and Garbage collection, need to read more chapters to understand though)
Bootstrapping programming languages: need to write compiler in assembly once. but once we compile a C compiler program using the assembly compiler. Future C programs can be compiled with the C compiler.
Carryover/relevant to SWE/OSS:
Allows me to understand my tools such as transpiling tools such as Babel. Allows me to understand the differences between programming languages used to a deeper extent.
Allows me to understand Typescript, React to a deeper extent as they are transpiled to a Javascript specification such as ES6.
Book: Crafting Interpreters (Written by one of the developers of the Dart programming language)
Chapter: A map of the territory
Summary:
Carryover/relevant to SWE/OSS: