-
Notifications
You must be signed in to change notification settings - Fork 0
Guide Type Inference
Version: 3.1.0
FΓΌr: Entwickler, die die neuen Type-Inference und Code-Ordering Features nutzen mΓΆchten
Dieses Tutorial fΓΌhrt dich durch die neuen Type-Inference und Code-Ordering Features in VelinScript 3.1.0:
- Type::Any Member-Access - Automatische Type-Inference basierend auf Member-Namen
- Result-Type Inference - Verbesserte Inference fΓΌr Result-Types
- Desugared Code Type Inference - Automatische Type-Verfeinerung fΓΌr transformierten Code
- Automatic Code Ordering - Automatische Sortierung von Code basierend auf AbhΓ€ngigkeiten
Das System unterstΓΌtzt automatische Type-Inference fΓΌr any Typen basierend auf Member-Namen. Du kannst auf any Objekte zugreifen, und das System erkennt automatisch den Typ basierend auf dem Member-Namen.
fn processData(data: any) {
// Automatische Type-Inference
if (data.startsWith("http://")) {
// data.startsWith() β Boolean (automatisch inferiert)
return data.toUpperCase(); // β String
}
if (data.length > 0) {
// data.length β Number
return data.trim(); // β String
}
// Unbekannte Member geben Any zurΓΌck (kein Fehler)
return data.unknownMethod(); // β Any
}
String-Methoden:
-
lengthβNumber -
toUpperCase(),toLowerCase(),trim()βString -
startsWith(),endsWith(),contains()βBoolean
List-Methoden:
-
length,size,lenβNumber -
push(),pop(),clear()βVoid -
map(),filter()βList<Any> -
find(),get()βOptional<Any>
Map-Methoden:
-
get()βOptional<Any> -
set(),insert(),put()βVoid -
has(),containsKey()βBoolean -
keys(),values()βList<Any>
- Nutze bekannte Member-Namen: Das System erkennt gΓ€ngige Patterns automatisch
- Fallback zu expliziten Typen: Wenn mΓΆglich, verwende explizite Typen fΓΌr bessere Type-Safety
Das System verbessert die Type-Inference fΓΌr Result-Types durch automatische AuflΓΆsung verschachtelter Result-Types und korrekte Type-Propagation.
fn fetchUser(): Result<Result<User, string>, string> {
// Verschachtelte Result-Types werden automatisch aufgelΓΆst
return Result.ok(Result.ok(User { name: "John" }));
}
fn main() {
let result = fetchUser();
// Type wird automatisch zu Result<User, string> aufgelΓΆst
// (nicht Result<Result<User, string>, string>)
if (result.isOk()) {
let user = result.unwrap(); // β User (korrekt inferiert)
}
}
-
Verschachtelte Result-Types: Automatische AuflΓΆsung von
Result<Result<T, E>, E>βResult<T, E> - Type-Propagation: Korrekte Propagation in Variablenzuweisungen
- Call-Expression Support: Verbesserte Inference in Funktionsaufrufen
- Vermeide unnΓΆtige Verschachtelung: Explizite Typen sind klarer
- Nutze Type-Propagation: Das System propagiert Result-Types automatisch
Das System verfeinert automatisch die Typen von desugared Variablen (z.B. __try_result, __await_result_*) nach dem initialen Type-Check-Pass.
fn fetchData(): Result<string, string> {
try {
return "success";
} catch (e: string) {
return Result.err("error");
}
}
fn main() {
// __try_result wird initial als Any registriert
// Nach refine_desugared_types wird es zu Result<string, string> verfeinert
let result = __try_result; // β Result<string, string> (verfeinert)
if (result.isOk()) {
let data = result.unwrap(); // β string (korrekt inferiert)
}
}
-
__try_result: Typ wird aus dem try-Block's Return-Type abgeleitet -
__await_result_*: Typ wird aus dem await-Ausdruck abgeleitet -
Andere
__*Variablen: Typ wird aus dem Wert-Ausdruck abgeleitet
- Vertraue auf automatische Verfeinerung: Das System verfeinert Typen automatisch
- Verwende try-catch fΓΌr bessere Inference: try-catch BlΓΆcke werden automatisch zu Result-Types transformiert
Das System sortiert automatisch Funktionen, Typen und BlΓΆcke basierend auf ihren AbhΓ€ngigkeiten, sodass sie korrekt aufeinander aufbauen.
Vorher (manuelle Reihenfolge):
fn processUser(user: User) {
return user.name.toUpperCase();
}
struct User {
name: string;
email: string;
}
Nachher (automatisch sortiert):
struct User {
name: string;
email: string;
}
fn processUser(user: User) {
return user.name.toUpperCase();
}
Die User Struct wird automatisch vor processUser platziert, da die Funktion von User abhΓ€ngt.
- Use Statements (immer zuerst)
- TypeAliases (Typ-Definitionen)
- Enums (Enum-Definitionen)
- Structs (Struct-Definitionen)
- Traits (Trait-Definitionen)
- Impls (Trait-Implementierungen)
- Functions (Funktions-Definitionen)
- TopLevelCode (Top-Level AusdrΓΌcke, immer zuletzt)
Innerhalb jeder Kategorie: AbhΓ€ngigkeitsbasierte Sortierung
// Input (unsortiert)
fn createUser(name: string): User {
return User { name, email: generateEmail(name) };
}
fn generateEmail(name: string): string {
return format("{}@example.com", name);
}
struct User {
name: string;
email: string;
}
// Output (automatisch sortiert)
struct User {
name: string;
email: string;
}
fn generateEmail(name: string): string {
return format("{}@example.com", name);
}
fn createUser(name: string): User {
return User { name, email: generateEmail(name) };
}
Das System erkennt zirkulΓ€re AbhΓ€ngigkeiten und meldet sie als Fehler:
Error: Circular dependency detected involving: User, UserService
- Schreibe Code in natΓΌrlicher Reihenfolge: Das System sortiert automatisch
- Nutze explizite Typen: Explizite Typen helfen dem System, AbhΓ€ngigkeiten besser zu erkennen
- Vermeide zirkulΓ€re AbhΓ€ngigkeiten: ZirkulΓ€re AbhΓ€ngigkeiten werden erkannt, aber sollten vermieden werden
Der BuildOrchestrator orchestriert den gesamten Build-Ablauf automatisch basierend auf AbhΓ€ngigkeiten zwischen Dateien.
Projekt-Struktur:
project/
βββ main.velin
βββ models.velin
βββ services.velin
Dependencies:
-
main.velinβmodels.velin,services.velin -
services.velinβmodels.velin
Kompilierungsreihenfolge (automatisch):
models.velinservices.velinmain.velin
Das System analysiert use Statements, um Datei-AbhΓ€ngigkeiten zu bestimmen:
// main.velin
use models;
use services;
// models.velin wird vor main.velin kompiliert
// services.velin wird vor main.velin kompiliert
-
Nutze
useStatements: Das System verwendetuseStatements, um Datei-AbhΓ€ngigkeiten zu bestimmen - Organisiere Module logisch: Auch wenn die Sortierung automatisch ist, hilft logische Organisation
β
Type::Any Member-Access - Automatische Inference basierend auf Member-Namen
β
Result-Type Inference - Verbesserte Inference fΓΌr Result-Types
β
Desugared Code Type Inference - Automatische Type-Verfeinerung
β
Automatic Code Ordering - Automatische Sortierung basierend auf AbhΓ€ngigkeiten
β
Build Orchestration - Multi-File Dependency-Management
- Weniger manuelle Arbeit: Keine manuelle Code-Sortierung nΓΆtig
-
Bessere Type-Safety: Automatische Type-Inference fΓΌr
anyTypen - Klarerer Code: Automatische Sortierung macht AbhΓ€ngigkeiten sichtbar
- Multi-File Support: Automatische Kompilierungsreihenfolge fΓΌr groΓe Projekte
- Type Inference Dokumentation - Detaillierte technische Dokumentation
- Code Ordering Dokumentation - Detaillierte technische Dokumentation
- Compiler Architecture - Compiler-Pass-System
Letzte Aktualisierung: 2026-01-30
Version: 3.1.0
- 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