8e255b2125
Phase 8.2 — Gradual Ownership: - Add tkRef/tkMutRef types and `mut` keyword - Add @[Checked] attribute for opt-in borrow checking - Reject assignment through &T in checked functions - examples/ownership.bux Phase 8.4 — CTFE: - Evaluate const func at compile-time via evalExpr/evalBlock - Fold const declarations to literals; emit #define in C - examples/ctfe.bux (Factorial(10) → 3628800) Phase 8.5 — Trait Bounds: - Change declFuncTypeParams from seq[string] to seq[TypeParam] (name + bound) - Parser handles <T: Comparable> - Sema checks typeImplements at call sites - Fix C backend: generic receivers + pointer self field access - examples/trait_bounds.bux Phase 9.1 — Package Manager: - Inline tables/arrays in TOML parser - bux add, bux install, bux.lock generation - Dependency resolution with git/path sources - Build pipeline merges dependency .bux sources C Backend Fixes: - resolveExprType(ekIdent) now applies typeSubst for generic params - Method desugaring works for monomorphized generic receivers - Pointer checks use isPointer (covers tkRef/tkMutRef) - Field access on &T emits -> instead of . Remove accidentally committed test binaries from tracking
29 lines
547 B
Plaintext
29 lines
547 B
Plaintext
import Std::Io::{PrintLine, PrintInt};
|
|
|
|
// Trait (interface) definition
|
|
interface Drawable {
|
|
func Draw(self: &Self);
|
|
}
|
|
|
|
// Type that implements the trait
|
|
struct Circle {
|
|
radius: int;
|
|
}
|
|
|
|
extend Circle for Drawable {
|
|
func Draw(self: &Circle) {
|
|
PrintLine("Drawing circle");
|
|
}
|
|
}
|
|
|
|
// Generic function with trait bound: T must implement Drawable
|
|
func Render<T: Drawable>(obj: T) {
|
|
obj.Draw();
|
|
}
|
|
|
|
func Main() -> int {
|
|
let c: Circle = Circle { radius: 5 };
|
|
Render(c); // OK: Circle implements Drawable
|
|
return 0;
|
|
}
|