diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-17 12:14:26 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-17 12:14:26 +0000 |
| commit | d15dbaf025df9265dce417faaa5ccf33ae04d4b5 (patch) | |
| tree | 57201674789a305c0bc7b82632fa906534dbf37d /examples/features | |
| parent | 91e763a600afc86e9630e4db592d8108f65def16 (diff) | |
Fix for #31
Diffstat (limited to 'examples/features')
| -rw-r--r-- | examples/features/comptime_fib.zc | 25 | ||||
| -rw-r--r-- | examples/features/showcase.zc | 98 |
2 files changed, 123 insertions, 0 deletions
diff --git a/examples/features/comptime_fib.zc b/examples/features/comptime_fib.zc new file mode 100644 index 0000000..1ad2898 --- /dev/null +++ b/examples/features/comptime_fib.zc @@ -0,0 +1,25 @@ + +fn main() { + comptime { + var N = 20; + var fib: long[20]; + fib[0] = (long)0; + fib[1] = (long)1; + for var i=2; i<N; i+=1 { + fib[i] = fib[i-1] + fib[i-2]; + } + + printf("// Generated Fibonacci Sequence\n"); + printf("var fibs: int[%d] = [", N); + for var i=0; i<N; i+=1 { + printf("%ld", fib[i]); + if (i < N-1) printf(", "); + } + printf("];\n"); + } + + print "Compile-time generated Fibonacci sequence:\n"; + for i in 0..20 { + print f"fib[{i}] = {fibs[i]}\n"; + } +} diff --git a/examples/features/showcase.zc b/examples/features/showcase.zc new file mode 100644 index 0000000..eca5480 --- /dev/null +++ b/examples/features/showcase.zc @@ -0,0 +1,98 @@ + +include <stdio.h> +include <stdlib.h> +include <time.h> + +struct Point { + x: int, + y: int +} + +enum Event { + Quit, + Click(Point), + KeyPress(char) +} + +trait Drawable { + fn draw(self); +} + +struct Button { + label: char*, + width: int, + height: int +} + +impl Button { + fn draw(self) { + println "[Button: '{self.label}' size={self.width}x{self.height}]"; + } +} + +struct Container<T> { + item: T +} + +impl Container<T> { + fn get(self) -> T { + return self.item; + } +} + +fn run_op(a: int, b: int, op: fn(int, int) -> int) -> int { + return op(a, b); +} + +fn process_event(e: Event) { + match e { + Event::Quit => { + println "Event: Quit received. Shutting down..."; + }, + Event::Click(p) => { + println "Event: Mouse Clicked at ({p.x}, {p.y})"; + }, + Event::KeyPress(k) => { + println "Event: Key Pressed '{k}'"; + }, + _ => { + println "Event: Unknown"; + } + } +} + +fn main() { + defer { println "End of demo!"; } + defer { println "Cleaning up resources..."; } + + println "=> Generics and traits."; + var btn = Button { + label: "Submit", + width: 120, + height: 40 + }; + + var container = Container<Button> { item: btn }; + + var b = container.get(); + b.draw(); + println ""; + + println "=> Enums and pattern matching."; + var events: Event[4] = [ + Event::Click(Point { x: 150, y: 300 }), + Event::KeyPress('Z'), + Event::Click(Point { x: 42, y: 0 }), + Event::Quit() + ]; + + for i in 0..4 { + process_event(events[i]); + } + println ""; + + println "=> Lambdas"; + var sum = run_op(10, 20, (a, b) -> a + b); + println "10 + 20 = {sum}"; + println ""; +} |
