A programming language is not magic — it is a precisely defined formal system with rules for structure (syntax), rules for meaning (semantics), and a mechanism for execution (compilation or interpretation). Understanding these mechanisms lets you reason about any language, not just the ones you know.
Topics in this section
How source code becomes machine code. Lexing, parsing, semantic analysis, optimisation, and code generation — the full pipeline from text to executable.
Built · Session 03How interpreters execute code without compiling to machine code first. Tree-walking, bytecode VMs, and JIT compilation — and why Python isn't "slow."
Built · Session 03Static vs. dynamic typing. Strong vs. weak typing. Structural vs. nominal types. Type inference. What the type checker actually does and why it matters.
Built · Session 03How source text becomes an Abstract Syntax Tree. Grammars, tokenisation, recursive descent parsing, and how compilers understand structure.
Coming soonManual allocation, garbage collection, reference counting, and ownership. How C, Java, Python, and Rust each manage memory — and the tradeoffs each choice makes.
Coming soonThreads, event loops, async/await, coroutines, and the actor model. How different languages choose to handle work happening at the same time.
Coming soonWhy languages are designed the way they are. The tradeoffs between expressiveness, safety, performance, and readability. What makes a language successful.
Coming soonBefore this section
These pages build directly on the CS Foundations section. If you haven't read them yet, start there.