How google/rune works
Rune is an unfinished systems programming language whose compiler turns source modules into LLVM IR and can invoke Clang to produce an executable. The principal workflow parses modules, binds and checks language constructs, applies relationship-based memory management and iterator transformations, then generates LLVM. Its runtime provides arrays, I/O, and integer support for generated programs. A separate RPC generator parses and binds RPC definitions and emits C++ client/server support. The RPC flow and runtime feature links reflect the tree and sampled code; unsampled implementation details are not expanded.
Main entry points: main.c Compiler driver · rpcgen_cc.c RPC generator · genllvm.c LLVM generation · runtime.c Core runtime
Components 21
Compiler front end
- Compiler driver
src/main.c - Module parser
parse/parse.c - Compiler model
database - Name and type binding
bind
Language transforms
- Code transforms
transformer/transformer.c - Memory management
transformer/memmanage.c - Iterator inlining
transformer/iterator.c
Code generation
- LLVM generation
llvm/genllvm.c - Runtime declarations
llvm/llvmdecls.c
Runtime
- Core runtime
runtime/runtime.c - Big integer operations
runtime/bigint.c - I/O services
runtime/io.c
RPC generation
- RPC generator
rpc/rpcgen_cc.c - RPC wire codecs
rpc/rpc_encoding.c
Other components
- Rune programmer
- Rune source
- LLVM IR
- Clang
- Rune executable
- RPC definitions
- Generated C++ RPC
Connections 23
- Rune programmer → Rune source: writes
- Rune source → Compiler driver: compiles
- Compiler driver → Module parser: parses modules
- Module parser → Compiler model: builds model
- Compiler driver → Name and type binding: binds
- Name and type binding → Compiler model: resolves symbols
- Compiler driver → Memory management: adds management
- Compiler driver → Iterator inlining: inlines iterators
- Compiler driver → Code transforms: evaluates transforms
- Compiler driver → LLVM generation: generates code
- LLVM generation → Runtime declarations: declares runtime calls
- LLVM generation → LLVM IR: writes IR
- Compiler driver → Clang: invokes optionally
- LLVM IR → Clang: compiles
- Clang → Rune executable: produces
- Rune executable → Core runtime: uses
- Core runtime → Big integer operations: delegates integers
- Core runtime → I/O services: provides I/O
- RPC definitions → RPC generator: generates from
- RPC generator → Module parser: parses definitions
- RPC generator → Name and type binding: binds definitions
- RPC generator → RPC wire codecs: uses codecs
- RPC generator → Generated C++ RPC: emits C++