// C implementation architecture // "A diagram is worth 10,000 words." — russell@unturf.com digraph c_arch { rankdir=TB node [shape=box, style=filled, fontname="Helvetica"] edge [fontname="Helvetica", fontsize=10] subgraph cluster_input { label="Input" style=dashed source [label=".lsp source" fillcolor="#e8f4fd"] cli [label="CLI flags\n-e --fast --jit" fillcolor="#e8f4fd"] } subgraph cluster_frontend { label="Frontend (reader.c)" style=rounded color="#666666" tokenizer [label="Tokenizer\nregex-free\nchar-by-char" fillcolor="#fff3cd"] parser [label="Parser\nrecursive descent\n→ Pair/Value AST" fillcolor="#fff3cd"] } subgraph cluster_types { label="Types (types.c, lumbda.h)" style=rounded color="#666666" nanbox [label="NaN-Boxing\n64-bit doubles\ntype tags in NaN payload\nzero-alloc numbers" fillcolor="#e2d5f1"] intern [label="Symbol Interning\nhash table" fillcolor="#e2d5f1"] pairs [label="Cons Cells\n16 bytes (car+cdr)" fillcolor="#e2d5f1"] envs [label="Environment\nhash-map bindings\nparent chain + global shortcut" fillcolor="#e2d5f1"] } subgraph cluster_eval { label="Three Execution Tiers" style=rounded color="#666666" interp [label="Tree-Walker\nleval()\nTCO via while loop\nall special forms" fillcolor="#d4edda"] bytecode [label="Bytecode VM\ncompile → execute\nsuperinstructions\nSELF_TAIL_CALL" fillcolor="#cce5ff"] jit [label="x86_64 JIT\nmmap(PROT_EXEC)\nnative machine code\nif/cond/let/named-let\ncar/cdr/cons\n10-24x faster than CPython" fillcolor="#ff6b6b" fontcolor=white] } subgraph cluster_jit_detail { label="JIT Pipeline (jit.c)" style=rounded color="#cc0000" analyze [label="AST Analysis\ncan_jit_proc()" fillcolor="#ffcccc"] emit [label="x86_64 Emission\nmov/add/sub/cmp\ncall/ret/jmp" fillcolor="#ffcccc"] mmap [label="mmap()\nPROT_READ|WRITE|EXEC\nfunction pointer" fillcolor="#ffcccc"] } source -> tokenizer cli -> tokenizer tokenizer -> parser parser -> interp [label="default"] parser -> bytecode [label="--fast"] parser -> analyze [label="--jit"] analyze -> emit [label="jittable"] analyze -> interp [label="fallback" style=dashed] emit -> mmap mmap -> jit [label="JitFunc"] interp -> envs bytecode -> envs jit -> nanbox [label="unbox/rebox"] envs -> nanbox nanbox -> intern nanbox -> pairs {rank=same; interp; bytecode; jit} {rank=same; analyze; emit; mmap} }