-
Notifications
You must be signed in to change notification settings - Fork 0
Architecture IR
Version: 3.0.1 / 3.1.0
Status: ✅ Vollständig implementiert
Datum: 2026-01-30
Die Intermediate Representation (IR) ist eine echte Intermediate Representation zwischen AST und Code-Generierung. Sie verwendet SSA (Single Static Assignment) Format für optimierte Code-Generierung.
Source Code → AST → IR → Optimized IR → Target Code
- Mehrfache Optimierungen - Optimierungen können mehrfach auf IR-Ebene durchgeführt werden
- Unabhängigkeit von Ziel-Sprache - IR ist sprachunabhängig
- Bessere Code-Qualität - Optimierungen führen zu besserem generiertem Code
- Einfacheres Debugging - IR kann visualisiert und analysiert werden
Haupt-IR-Struktur die ein vollständiges VelinScript-Modul repräsentiert:
pub struct IRModule {
pub name: String,
pub functions: Vec<IRFunction>,
pub structs: Vec<IRStruct>,
pub enums: Vec<IREnum>,
pub constants: Vec<IRConstant>,
}Repräsentiert eine Funktion in IR-Format:
pub struct IRFunction {
pub name: String,
pub params: Vec<IRParameter>,
pub return_type: IRType,
pub body: IRBlock,
pub attributes: Vec<IRAttribute>,
pub is_async: bool,
pub visibility: Visibility,
}Ein Block enthält Instructions und Control Flow Information:
pub struct IRBlock {
pub id: BlockId,
pub instructions: Vec<IRInstruction>,
pub predecessors: Vec<BlockId>,
pub successors: Vec<BlockId>,
}SSA-Instructions (jede Instruction produziert höchstens einen Wert):
-
Arithmetik:
Add,Subtract,Multiply,Divide,Modulo -
Vergleich:
Eq,NotEq,Lt,Gt,LtEq,GtEq -
Logik:
And,Or,Not -
Speicher:
Load,Store,Alloca -
Kontrollfluss:
Branch,Jump,Return -
Funktions-Aufrufe:
Call,CallAsync -
Struct/Enum:
StructAccess,StructConstruct,EnumConstruct -
Pattern Matching:
Match -
Collections:
ListGet,ListSet,MapGet,MapSet -
SSA:
Phi(für Control Flow)
Implementierung: compiler/src/ir/builder.rs
Konvertiert vollständig AST zu IR:
- Alle Statements werden konvertiert
- Alle Expressions werden konvertiert
- SSA-Format wird eingehalten
- Control Flow Graph (CFG) wird erstellt
use velin_compiler::ir::builder::IRBuilder;
let mut builder = IRBuilder::new();
let ir_module = builder.build_module(&ast_program);Implementierung: compiler/src/ir/optimizer.rs
Führt verschiedene Optimierungen durch:
Entfernt ungenutzte Variablen und Instructions.
Faltet konstante Ausdrücke zur Compile-Zeit:
// Vorher:
let x = 2 + 3;
// Nachher (IR):
let x = 5;
Inlined kleine Funktionen direkt in den Aufrufer.
- Loop Unrolling
- Loop Invariant Code Motion
- Induction Variable Elimination
use velin_compiler::ir::optimizer::IROptimizer;
let optimizer = IROptimizer::new();
optimizer.optimize(&mut ir_module);Implementierung: compiler/src/ir/validator.rs
Prüft IR auf Korrektheit:
- SSA-Format wird eingehalten
- Alle Block-Referenzen sind gültig
- Typen sind konsistent
use velin_compiler::ir::validator::IRValidator;
let mut validator = IRValidator::new();
match validator.validate(&ir_module) {
Ok(_) => println!("IR ist gültig"),
Err(errors) => println!("Fehler: {:?}", errors),
}Implementierung: compiler/src/codegen/ir_codegen.rs
Generiert Code aus IR:
- Rust - ✅ Vollständig implementiert
- PHP - ✅ Vollständig implementiert
- Python - ✅ Vollständig implementiert
- Andere Targets - Nutzen Rust als Fallback (direkte Codegen-Pipeline)
use velin_compiler::codegen::ir_codegen::IRCodeGenerator;
use velin_compiler::codegen::traits::TargetLanguage;
let generator = IRCodeGenerator::new(TargetLanguage::Rust);
let code = generator.generate(&ir_module)?;Die IR ist vollständig in die Compiler-Pipeline integriert:
- AST → IR - IRBuilder konvertiert AST zu IR
- IR-Optimierungen - IROptimizer optimiert IR
- IR-Validierung - IRValidator prüft IR auf Korrektheit
- IR → Target Code - IRCodeGenerator generiert Target-Code
Aktivierung:
- Standardmäßig aktiviert in
CodegenPass - Kann mit
CodegenPass::with_ir(false)deaktiviert werden (Legacy-Modus)
-
compiler/src/ir/mod.rs- Modul-Definition -
compiler/src/ir/ir.rs- IR-Strukturen -
compiler/src/ir/builder.rs- AST → IR Konvertierung -
compiler/src/ir/optimizer.rs- IR-Optimierungen -
compiler/src/ir/validator.rs- IR-Validierung -
compiler/src/codegen/ir_codegen.rs- IR → Target Code
Letzte Aktualisierung: 2026-01-30
Version: 3.0.1
- Compiler Architecture
- Pass-Verlauf
- Type Inference
- Code Ordering
- IR Representation
- Borrow Checker
- Code Generation
- Multi-Target Compilation
- Module Resolution
- Framework Integration
- Parallelization
- AI Compiler Passes
- Prompt Optimizer
- System Generation
- Basics
- APIs
- Security
- Database
- Validation
- Authentication
- ML/LLM
- Intelligence Features
- Type Inference
- ML Training
- Pattern Matching
- Closures
- Collections
- HTTP Client
- String Interpolation
- Debugger
- Vektor-Datenbanken
- CLI Reference
- API Keys Setup
- Advanced
- Backend
- Security Best Practices
- AI/ML
- Auto Imports
- Plugin Development