Skip to content

Language Internals

Language internals turn “the program behaves strangely” into a concrete question about representation, execution, memory, types, or the runtime.

flowchart LR Junior[Junior: source to execution] --> Middle[Middle: types, memory, dispatch] Middle --> Senior[Senior: optimization and failure] Senior --> Professional[Professional: runtime and language design]
flowchart LR Source[Source code] --> Frontend[lexer, parser, type checks] Frontend --> IR[AST / bytecode / IR] IR --> Engine[interpreter, JIT, or AOT compiler] Engine --> Runtime[objects, GC, scheduler, FFI] Runtime --> Machine[OS, CPU, memory]

What matters most

The old track separated every mechanism into its own deep folder. This version keeps the ideas that most often change engineering decisions:

  • how source becomes executable work;
  • how values are represented and dispatched;
  • how stacks, heaps, ownership, reference counting, and tracing GC differ;
  • how static and dynamic type systems prevent different classes of mistakes;
  • how interpreters, bytecode VMs, JITs, and native compilers trade startup for throughput;
  • where Unicode, numeric representation, ABIs, and FFI create boundary bugs;
  • how to choose a language using workload and operational evidence.

Topics

Each topic keeps one overview and four progressive guides. Start with the mechanism behind the problem you are investigating.

Topic Main question
Choosing a Language Which language best fits the workload, team, and operating model?
Compilers and Interpreters How does source become executable behavior?
Data Representation and Numerics How do bits, numbers, text, and objects encode meaning?
Evaluation and Execution Models When and in what order does computation happen?
FFI and Interoperability How can runtimes exchange calls and data safely?
Language Security Which mechanisms prevent memory, control-flow, isolation, and side-channel failures?
Memory Management Who owns memory and when can it be reclaimed?
Metaprogramming When should code inspect or generate code?
Runtime Systems How do dispatch, JITs, GC, loading, and unwinding work together?
Type Systems Which invalid states can the language reject before execution?

Practice rule

For every claim, find evidence at the closest useful layer: an AST dump, bytecode listing, compiler diagnostic, allocation profile, GC trace, machine-code view, or benchmark. Never use “compiled is fast” or “GC is slow” as an explanation.