From 7d1944ab9d2307f2736afe8520436872db1c7617 Mon Sep 17 00:00:00 2001 From: Zuhaitz Mรฉndez Fernรกndez de Arรกnguiz Date: Sun, 25 Jan 2026 15:12:12 +0000 Subject: 'let' it be --- README.md | 116 +++++++++---------- examples/algorithms/binsearch.zc | 14 +-- examples/algorithms/dfs.zc | 32 +++--- examples/algorithms/quicksort.zc | 12 +- examples/algorithms/sieve.zc | 4 +- examples/collections/word_freq.zc | 16 +-- examples/cpp_interop.zc | 4 +- examples/data/json_config.zc | 34 +++--- examples/data_structures/binary_tree.zc | 4 +- examples/data_structures/linked_list.zc | 16 +-- examples/data_structures/stack.zc | 12 +- examples/features/composition.zc | 4 +- examples/features/comptime_fib.zc | 10 +- examples/features/showcase.zc | 10 +- examples/games/zen_craft/main.zc | 170 ++++++++++++++-------------- examples/gpu/cuda-benchmark.zc | 156 ++++++++++++------------- examples/gpu/cuda_info.zc | 10 +- examples/gpu/cuda_vector_add.zc | 20 ++-- examples/graphics/mandelbrot.zc | 34 +++--- examples/graphics/raylib_demo.zc | 10 +- examples/networking/echo_server.zc | 14 +-- examples/process/env.zc | 18 +-- examples/scripting/lua/lua.zc | 2 +- examples/tools/mini_grep.zc | 64 +++++------ src/parser/parser_core.c | 6 +- src/parser/parser_stmt.c | 16 +-- std/core.zc | 2 +- std/cuda.zc | 30 ++--- std/env.zc | 12 +- std/fs.zc | 48 ++++---- std/io.zc | 34 +++--- std/json.zc | 22 ++-- std/map.zc | 38 +++---- std/mem.zc | 2 +- std/net.zc | 14 +-- std/option.zc | 2 +- std/path.zc | 34 +++--- std/queue.zc | 16 +-- std/result.zc | 2 +- std/set.zc | 30 ++--- std/stack.zc | 4 +- std/string.zc | 120 ++++++++++---------- std/thread.zc | 10 +- std/vec.zc | 22 ++-- tests/basic/test_basics.zc | 10 +- tests/codegen/dedup_typedefs.zc | 4 +- tests/collections/test_string_suite.zc | 42 +++---- tests/control_flow/test_computed_goto.zc | 4 +- tests/control_flow/test_goto.zc | 4 +- tests/control_flow/test_guard_unless.zc | 12 +- tests/control_flow/test_if.zc | 6 +- tests/control_flow/test_labeled_break.zc | 4 +- tests/control_flow/test_loop_edge_cases.zc | 16 +-- tests/control_flow/test_loops.zc | 46 ++++---- tests/control_flow/test_match.zc | 34 +++--- tests/control_flow/test_ternary.zc | 8 +- tests/features/test_alias.zc | 24 ++-- tests/features/test_asm.zc | 4 +- tests/features/test_auto_deref.zc | 10 +- tests/features/test_bool_mutability.zc | 6 +- tests/features/test_build_directives.zc | 4 +- tests/features/test_comptime_suite.zc | 2 +- tests/features/test_concurrency_suite.zc | 30 ++--- tests/features/test_const_def.zc | 10 +- tests/features/test_default_args.zc | 10 +- tests/features/test_defer_control_flow.zc | 14 +-- tests/features/test_destructuring.zc | 10 +- tests/features/test_embed.zc | 24 ++-- tests/features/test_enum_tuples.zc | 6 +- tests/features/test_fstring.zc | 4 +- tests/features/test_intel.zc | 4 +- tests/features/test_iterator.zc | 6 +- tests/features/test_iterator_drop.zc | 6 +- tests/features/test_match_composition.zc | 28 ++--- tests/features/test_match_ref.zc | 10 +- tests/features/test_mixin_methods.zc | 4 +- tests/features/test_operators_suite.zc | 30 ++--- tests/features/test_smart_derive.zc | 4 +- tests/features/test_traits_suite.zc | 30 ++--- tests/features/test_tuples.zc | 12 +- tests/features/test_unions.zc | 6 +- tests/features/test_varargs.zc | 6 +- tests/features/test_vec_iter.zc | 4 +- tests/functions/test_attributes.zc | 10 +- tests/functions/test_implicit_return.zc | 2 +- tests/functions/test_lambda_arrow.zc | 14 +-- tests/functions/test_lambdas.zc | 32 +++--- tests/functions/test_must_use.zc | 6 +- tests/functions/test_raw_func_ptr.zc | 6 +- tests/functions/test_varargs.zc | 2 +- tests/generics/test_generic_empty_struct.zc | 6 +- tests/generics/test_generic_operators.zc | 6 +- tests/generics/test_generic_ptr.zc | 16 +-- tests/generics/test_generic_traits.zc | 8 +- tests/generics/test_generics_fn.zc | 6 +- tests/generics/test_generics_struct.zc | 2 +- tests/generics/test_multi_generics.zc | 6 +- tests/generics/test_sizeof_template.zc | 14 +-- tests/interop/test_c_import.zc | 6 +- tests/interop/test_c_macros.zc | 2 +- tests/memory/test_copy_trait.zc | 10 +- tests/memory/test_drop.zc | 4 +- tests/memory/test_drop_flags.zc | 6 +- tests/memory/test_memory_safety.zc | 70 ++++++------ tests/memory/test_move_double_free.zc | 16 +-- tests/memory/test_move_semantics.zc | 22 ++-- tests/memory/test_resources.zc | 16 +-- tests/memory/test_unsafe.zc | 22 ++-- tests/misc/test_advanced.zc | 50 ++++---- tests/misc/test_chained.zc | 4 +- tests/misc/test_edge_cases.zc | 32 +++--- tests/misc/test_mix.zc | 16 +-- tests/modules/test_aliasing.zc | 4 +- tests/modules/test_namespaced.zc | 8 +- tests/std/test_env.zc | 28 ++--- tests/std/test_fs.zc | 40 +++---- tests/std/test_map_iter.zc | 6 +- tests/std/test_net.zc | 24 ++-- tests/std/test_queue.zc | 18 +-- tests/std/test_readln_scan.zc | 10 +- tests/std/test_stack.zc | 12 +- tests/std/test_std_expansion.zc | 10 +- tests/std/test_string_split.zc | 28 ++--- tests/std/test_string_utf8.zc | 20 ++-- tests/std/test_string_utils.zc | 40 +++---- tests/std/test_vec.zc | 30 ++--- 126 files changed, 1219 insertions(+), 1219 deletions(-) diff --git a/README.md b/README.md index e87b8ea..ce72729 100644 --- a/README.md +++ b/README.md @@ -148,17 +148,17 @@ Values that exist only at compile-time (folded into code). Use these for array s ```zc def MAX_SIZE = 1024; -var buffer: char[MAX_SIZE]; // Valid array size +let buffer: char[MAX_SIZE]; // Valid array size ``` -#### Variables (`var`) +#### Variables (`let`) Storage locations in memory. Can be mutable or read-only (`const`). ```zc -var x = 10; // Mutable +let x = 10; // Mutable x = 20; // OK -var y: const int = 10; // Read-only (Type qualified) +let y: const int = 10; // Read-only (Type qualified) // y = 20; // Error: cannot assign to const ``` @@ -183,16 +183,16 @@ var y: const int = 10; // Read-only (Type qualified) Fixed-size arrays with value semantics. ```zc def SIZE = 5; -var ints: int[SIZE] = {1, 2, 3, 4, 5}; -var zeros: [int; SIZE]; // Zero-initialized +let ints: int[SIZE] = {1, 2, 3, 4, 5}; +let zeros: [int; SIZE]; // Zero-initialized ``` #### Tuples Group multiple values together, access elements by index. ```zc -var pair = (1, "Hello"); -var x = pair.0; // 1 -var s = pair.1; // "Hello" +let pair = (1, "Hello"); +let x = pair.0; // 1 +let s = pair.1; // "Hello" ``` **Multiple Return Values** @@ -203,16 +203,16 @@ fn add_and_subtract(a: int, b: int) -> (int, int) { return (a + b, a - b); } -var result = add_and_subtract(3, 2); -var sum = result.0; // 5 -var diff = result.1; // 1 +let result = add_and_subtract(3, 2); +let sum = result.0; // 5 +let diff = result.1; // 1 ``` **Destructuring** Tuples can be destructured directly into variables: ```zc -var (sum, diff) = add_and_subtract(3, 2); +let (sum, diff) = add_and_subtract(3, 2); // sum = 5, diff = 1 ``` @@ -225,7 +225,7 @@ struct Point { } // Struct initialization -var p = Point { x: 10, y: 20 }; +let p = Point { x: 10, y: 20 }; // Bitfields struct Flags { @@ -315,9 +315,9 @@ fn main() { #### Lambdas (Closures) Anonymous functions that can capture their environment. ```zc -var factor = 2; -var double = x -> x * factor; // Arrow syntax -var full = fn(x: int) -> int { return x * factor; }; // Block syntax +let factor = 2; +let double = x -> x * factor; // Arrow syntax +let full = fn(x: int) -> int { return x * factor; }; // Block syntax ``` #### Raw Function Pointers @@ -335,14 +335,14 @@ fn get_callback() -> fn*(int) { } // Pointers to function pointers are supported (fn**) -var pptr: fn**(int) = &ptr; +let pptr: fn**(int) = &ptr; ``` #### Variadic Functions Functions can accept a variable number of arguments using `...` and the `va_list` type. ```zc fn log(lvl: int, fmt: char*, ...) { - var ap: va_list; + let ap: va_list; va_start(ap, fmt); vprintf(fmt, ap); // Use C stdio va_end(ap); @@ -362,7 +362,7 @@ if x > 10 { } // Ternary -var y = x > 10 ? 1 : 0; +let y = x > 10 ? 1 : 0; ``` #### Pattern Matching @@ -391,7 +391,7 @@ match shape { To inspect a value without taking ownership (moving it), use the `ref` keyword in the pattern. This is essential for types that implement Move Semantics (like `Option`, `Result`, non-Copy structs). ```zc -var opt = Some(NonCopyVal{...}); +let opt = Some(NonCopyVal{...}); match opt { Some(ref x) => { // 'x' is a pointer to the value inside 'opt' @@ -461,7 +461,7 @@ impl Point { } } -var p3 = p1 + p2; // Calls p1.add(p2) +let p3 = p1 + p2; // Calls p1.add(p2) ``` #### Syntactic Sugar @@ -504,8 +504,8 @@ Zen C allows you to use string literals directly as statements for quick printin You can embed expressions directly into string literals using `{}` syntax. This works with all printing methods and string shorthands. ```zc -var x = 42; -var name = "Zen"; +let x = 42; +let name = "Zen"; println "Value: {x}, Name: {name}"; "Value: {x}, Name: {name}"; // shorthand println ``` @@ -519,7 +519,7 @@ Zen C supports a shorthand for prompting user input using the `?` prefix. - Format specifiers are automatically inferred based on variable type. ```c -var age: int; +let age: int; ? "How old are you? " (age); println "You are {age} years old."; ``` @@ -531,7 +531,7 @@ Zen C allows manual memory management with ergonomic aids. #### Defer Execute code when the current scope exits. Defer statements are executed in LIFO (last-in, first-out) order. ```zc -var f = fopen("file.txt", "r"); +let f = fopen("file.txt", "r"); defer fclose(f); ``` @@ -540,7 +540,7 @@ defer fclose(f); #### Autofree Automatically free the variable when scope exits. ```zc -autofree var types = malloc(1024); +autofree let types = malloc(1024); ``` #### Resource Semantics (Move by Default) @@ -566,7 +566,7 @@ fn peek(r: Resource*) { ... } // 'r' is borrowed (reference) If you *do* want two copies of a resource, make it explicit: ```zc -var b = a.clone(); // Calls the 'clone' method from the Clone trait +let b = a.clone(); // Calls the 'clone' method from the Clone trait ``` **Opt-in Copy (Value Types)**: @@ -577,8 +577,8 @@ struct Point { x: int; y: int; } impl Copy for Point {} // Opt-in to implicit duplication fn main() { - var p1 = Point { x: 1, y: 2 }; - var p2 = p1; // Copied. p1 stays valid. + let p1 = Point { x: 1, y: 2 }; + let p2 = p1; // Copied. p1 stays valid. } ``` @@ -623,8 +623,8 @@ impl Drawable for Circle { fn draw(self) { ... } } -var circle = Circle{}; -var drawable: Drawable = &circle; +let circle = Circle{}; +let drawable: Drawable = &circle; ``` #### Standard Traits @@ -699,8 +699,8 @@ Marker trait to opt-in to `Copy` behavior (implicit duplication) instead of Move struct Point { x: int; y: int; } fn main() { - var p1 = Point{x: 1, y: 2}; - var p2 = p1; // Copied! p1 remains valid. + let p1 = Point{x: 1, y: 2}; + let p2 = p1; // Copied! p1 remains valid. } ``` @@ -720,8 +720,8 @@ impl Clone for MyBox { } fn main() { - var b1 = MyBox{val: 42}; - var b2 = b1.clone(); // Explicit copy + let b1 = MyBox{val: 42}; + let b2 = b1.clone(); // Explicit copy } ``` @@ -777,8 +777,8 @@ async fn fetch_data() -> string { } fn main() { - var future = fetch_data(); - var result = await future; + let future = fetch_data(); + let result = await future; } ``` @@ -789,7 +789,7 @@ Run code at compile-time to generate source or print messages. ```zc comptime { // Generate code at compile-time (written to stdout) - println "var build_date = \"2024-01-01\";"; + println "let build_date = \"2024-01-01\";"; } println "Build Date: {build_date}"; @@ -799,19 +799,19 @@ println "Build Date: {build_date}"; Embed files as specified types. ```zc // Default (Slice_char) -var data = embed "assets/logo.png"; +let data = embed "assets/logo.png"; // Typed Embed -var text = embed "shader.glsl" as string; // Embbed as C-string -var rom = embed "bios.bin" as u8[1024]; // Embed as fixed array -var wav = embed "sound.wav" as u8[]; // Embed as Slice_u8 +let text = embed "shader.glsl" as string; // Embbed as C-string +let rom = embed "bios.bin" as u8[1024]; // Embed as fixed array +let wav = embed "sound.wav" as u8[]; // Embed as Slice_u8 ``` #### Plugins Import compiler plugins to extend syntax. ```zc import plugin "regex" -var re = regex! { ^[a-z]+$ }; +let re = regex! { ^[a-z]+$ }; ``` #### Generic C Macros @@ -876,11 +876,11 @@ asm volatile { Zen C simplifies the complex GCC constraint syntax with named bindings. ```zc -// Syntax: : out(var) : in(var) : clobber(reg) -// Uses {var} placeholder syntax for readability +// Syntax: : out(variable) : in(variable) : clobber(reg) +// Uses {variable} placeholder syntax for readability fn add(a: int, b: int) -> int { - var result: int; + let result: int; asm { "add {result}, {a}, {b}" : out(result) @@ -893,8 +893,8 @@ fn add(a: int, b: int) -> int { | Type | Syntax | GCC Equivalent | |:---|:---|:---| -| **Output** | `: out(var)` | `"=r"(var)` | -| **Input** | `: in(var)` | `"r"(var)` | +| **Output** | `: out(variable)` | `"=r"(variable)` | +| **Input** | `: in(variable)` | `"r"(variable)` | | **Clobber** | `: clobber("rax")` | `"rax"` | | **Memory** | `: clobber("memory")` | `"memory"` | @@ -1080,7 +1080,7 @@ raw { } fn main() { - var v = make_vec(1, 2); + let v = make_vec(1, 2); raw { std::cout << "Size: " << v.size() << std::endl; } } ``` @@ -1132,7 +1132,7 @@ import "std/cuda.zc" @global fn add_kernel(a: float*, b: float*, c: float*, n: int) { - var i = thread_id(); + let i = thread_id(); if i < n { c[i] = a[i] + b[i]; } @@ -1140,9 +1140,9 @@ fn add_kernel(a: float*, b: float*, c: float*, n: int) { fn main() { const N = 1024; - var d_a = cuda_alloc(N); - var d_b = cuda_alloc(N); - var d_c = cuda_alloc(N); + let d_a = cuda_alloc(N); + let d_b = cuda_alloc(N); + let d_c = cuda_alloc(N); defer cuda_free(d_a); defer cuda_free(d_b); defer cuda_free(d_c); @@ -1165,7 +1165,7 @@ Zen C provides a standard library for common CUDA operations to reduce `raw` blo import "std/cuda.zc" // Memory management -var d_ptr = cuda_alloc(1024); +let d_ptr = cuda_alloc(1024); cuda_copy_to_device(d_ptr, h_ptr, 1024 * sizeof(float)); defer cuda_free(d_ptr); @@ -1173,9 +1173,9 @@ defer cuda_free(d_ptr); cuda_sync(); // Thread Indexing (use inside kernels) -var i = thread_id(); // Global index -var bid = block_id(); -var tid = local_id(); +let i = thread_id(); // Global index +let bid = block_id(); +let tid = local_id(); ``` diff --git a/examples/algorithms/binsearch.zc b/examples/algorithms/binsearch.zc index db1a354..bcddef2 100644 --- a/examples/algorithms/binsearch.zc +++ b/examples/algorithms/binsearch.zc @@ -1,11 +1,11 @@ import "std.zc" fn binary_search(arr: int*, size: isize, target: int) -> isize { - var low: isize = 0; - var high: isize = size - 1; + let low: isize = 0; + let high: isize = size - 1; while low <= high { - var mid = low + (high - low) / 2; + let mid = low + (high - low) / 2; if arr[mid] == target { return mid; @@ -29,10 +29,10 @@ fn print_array(arr: int*, size: isize) { } fn main() { - var v = Vec::new(); + let v = Vec::new(); defer v.free(); - var values = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12]; + let values = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12]; for i in 0..10 { v.push(values[i]); } @@ -40,8 +40,8 @@ fn main() { "Array: "..; print_array(v.data, (int)v.len); - var target = 7; - var result = binary_search(v.data, (isize)v.len, target); + let target = 7; + let result = binary_search(v.data, (isize)v.len, target); "Found {target} at index {result}"; } diff --git a/examples/algorithms/dfs.zc b/examples/algorithms/dfs.zc index 054a9d4..2d4670c 100644 --- a/examples/algorithms/dfs.zc +++ b/examples/algorithms/dfs.zc @@ -7,7 +7,7 @@ struct Graph { impl Graph { fn new(vertices: int) -> Graph { - var g = Graph { + let g = Graph { num_vertices: vertices, adj_list: Vec>::new() }; @@ -32,10 +32,10 @@ impl Graph { visited[vertex] = true; order.push(vertex); - var neighbors = self.adj_list.data[vertex]; - var neighbor_count = (int)neighbors.len; + let neighbors = self.adj_list.data[vertex]; + let neighbor_count = (int)neighbors.len; for i in 0..neighbor_count { - var neighbor = neighbors.data[i]; + let neighbor = neighbors.data[i]; if !visited[neighbor] { self._dfs_recursive(neighbor, visited, order); } @@ -43,12 +43,12 @@ impl Graph { } fn dfs_recursive(self, start: int) -> Vec { - var order = Vec::new(); + let order = Vec::new(); if start < 0 || start >= self.num_vertices { return order; } - var visited = Vec::new(); + let visited = Vec::new(); defer visited.free(); for i in 0..self.num_vertices { visited.push(false); @@ -59,23 +59,23 @@ impl Graph { } fn dfs(self, start: int) -> Vec { - var order = Vec::new(); + let order = Vec::new(); if start < 0 || start >= self.num_vertices { return order; } - var visited = Vec::new(); + let visited = Vec::new(); defer visited.free(); for i in 0..self.num_vertices { visited.push(false); } - var stack = Vec::new(); + let stack = Vec::new(); defer stack.free(); stack.push(start); while !stack.is_empty() { - var vertex = stack.pop(); + let vertex = stack.pop(); if visited.data[vertex] { continue; } @@ -83,10 +83,10 @@ impl Graph { visited.data[vertex] = true; order.push(vertex); - var neighbors = self.adj_list.data[vertex]; - var i = (int)neighbors.len - 1; + let neighbors = self.adj_list.data[vertex]; + let i = (int)neighbors.len - 1; while i >= 0 { - var neighbor = neighbors.data[i]; + let neighbor = neighbors.data[i]; if !visited.data[neighbor] { stack.push(neighbor); } @@ -106,7 +106,7 @@ impl Graph { } fn main() { - var g = Graph::new(6); + let g = Graph::new(6); defer g.free(); g.add_edge(0, 1); @@ -115,9 +115,9 @@ fn main() { g.add_edge(1, 4); g.add_edge(3, 5); - var order_rec = g.dfs_recursive(0); + let order_rec = g.dfs_recursive(0); defer order_rec.free(); - var order_it = g.dfs(0); + let order_it = g.dfs(0); defer order_it.free(); "DFS recursive order: "..; diff --git a/examples/algorithms/quicksort.zc b/examples/algorithms/quicksort.zc index adef038..53395be 100644 --- a/examples/algorithms/quicksort.zc +++ b/examples/algorithms/quicksort.zc @@ -2,14 +2,14 @@ import "std.zc" fn swap(arr: int*, i: isize, j: isize) { - var temp = arr[i]; + let temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } fn partition(arr: int*, low: isize, high: isize) -> isize { - var pivot = arr[high]; - var i = low - 1; + let pivot = arr[high]; + let i = low - 1; for j in low..high { if arr[j] < pivot { @@ -23,7 +23,7 @@ fn partition(arr: int*, low: isize, high: isize) -> isize { fn quicksort(arr: int*, low: isize, high: isize) { if low < high { - var pi = partition(arr, low, high); + let pi = partition(arr, low, high); quicksort(arr, low, pi - 1); quicksort(arr, pi + 1, high); } @@ -39,10 +39,10 @@ fn print_array(arr: int*, size: isize) { } fn main() { - var v = Vec::new(); + let v = Vec::new(); defer v.free(); - var values = [10, 7, 8, 9, 1, 5, 3, 12, 2, 6]; + let values = [10, 7, 8, 9, 1, 5, 3, 12, 2, 6]; for i in 0..10 { v.push(values[i]); } diff --git a/examples/algorithms/sieve.zc b/examples/algorithms/sieve.zc index 25e2c5a..2f5680e 100644 --- a/examples/algorithms/sieve.zc +++ b/examples/algorithms/sieve.zc @@ -4,7 +4,7 @@ import "std.zc" fn main() { const LIMIT = 50; - var is_prime: bool[LIMIT]; + let is_prime: bool[LIMIT]; for i in 0..LIMIT { is_prime[i] = true; } is_prime[0] = false; @@ -12,7 +12,7 @@ fn main() { for p in 2..LIMIT { if is_prime[p] { - for (var i = p * p; i < LIMIT; i += p) { + for (let i = p * p; i < LIMIT; i += p) { is_prime[i] = false; } } diff --git a/examples/collections/word_freq.zc b/examples/collections/word_freq.zc index 781842c..d025542 100644 --- a/examples/collections/word_freq.zc +++ b/examples/collections/word_freq.zc @@ -2,19 +2,19 @@ import "std/map.zc" fn main() { - var text = "apple banana apple cherry banana apple"; - var delim = " "; + let text = "apple banana apple cherry banana apple"; + let delim = " "; - var counts = Map::new(); + let counts = Map::new(); defer counts.free(); - var temp = strdup(text); + let temp = strdup(text); defer free(temp); - var token = strtok(temp, delim); + let token = strtok(temp, delim); while token != NULL { if counts.contains(token) { - var val = counts.get(token).unwrap(); + let val = counts.get(token).unwrap(); counts.put(token, val + 1); } else { counts.put(token, 1); @@ -27,8 +27,8 @@ fn main() { for i in 0..counts.capacity() { if counts.is_slot_occupied(i) { - var k = counts.key_at(i); - var v = counts.val_at(i); + let k = counts.key_at(i); + let v = counts.val_at(i); println "{k}: {v}"; } } diff --git a/examples/cpp_interop.zc b/examples/cpp_interop.zc index 2f2e033..3db0ea7 100644 --- a/examples/cpp_interop.zc +++ b/examples/cpp_interop.zc @@ -25,8 +25,8 @@ fn main() { cpp_print("Hello from C++!"); - var vec = cpp_make_vector(10, 20, 30); - var result = cpp_sum_vector(vec); + let vec = cpp_make_vector(10, 20, 30); + let result = cpp_sum_vector(vec); "Sum of C++ vector: {result}"; raw { diff --git a/examples/data/json_config.zc b/examples/data/json_config.zc index ccfb1a2..d8604d7 100644 --- a/examples/data/json_config.zc +++ b/examples/data/json_config.zc @@ -17,24 +17,24 @@ struct Config { } fn main() { - var path = "examples/data/config.json"; + let path = "examples/data/config.json"; - var content_res = File::read_all(path); + let content_res = File::read_all(path); if content_res.is_err() { !"Failed to read config file: {content_res.err}"; return 1; } - var json_str = content_res.unwrap(); + let json_str = content_res.unwrap(); - var json_res = JsonValue::parse(json_str.c_str()); + let json_res = JsonValue::parse(json_str.c_str()); if json_res.is_err() { !"JSON Parse Error: {json_res.err}"; json_str.free(); return 1; } - var root = json_res.unwrap(); + let root = json_res.unwrap(); defer { json_str.free(); @@ -47,17 +47,17 @@ fn main() { return 1; } - var config = Config { + let config = Config { server_name: String::new("Unknown"), port: 0, logging: false }; - var obj_map = (*root).object_val; + let obj_map = (*root).object_val; if Map::contains(obj_map, "server_name") { - var opt = Map::get(obj_map, "server_name"); - var val = opt.unwrap(); + let opt = Map::get(obj_map, "server_name"); + let val = opt.unwrap(); if (*val).kind.tag == JsonType::JSON_STRING().tag { config.server_name.free(); config.server_name = String::new((*val).string_val); @@ -65,21 +65,21 @@ fn main() { } if Map::contains(obj_map, "port") { - var opt = Map::get(obj_map, "port"); - var val = opt.unwrap(); + let opt = Map::get(obj_map, "port"); + let val = opt.unwrap(); if (*val).kind.tag == JsonType::JSON_NUMBER().tag { config.port = (int)(*val).number_val; } } if Map::contains(obj_map, "features") { - var opt = Map::get(obj_map, "features"); - var features = opt.unwrap(); + let opt = Map::get(obj_map, "features"); + let features = opt.unwrap(); if (*features).kind.tag == JsonType::JSON_OBJECT().tag { - var f_obj = (*features).object_val; + let f_obj = (*features).object_val; if Map::contains(f_obj, "logging") { - var l_opt = Map::get(f_obj, "logging"); - var l = l_opt.unwrap(); + let l_opt = Map::get(f_obj, "logging"); + let l = l_opt.unwrap(); if (*l).kind.tag == JsonType::JSON_BOOL().tag { config.logging = (*l).bool_val; } @@ -88,7 +88,7 @@ fn main() { } "Configuration Loaded:"; - var s_name = config.server_name.c_str(); + let s_name = config.server_name.c_str(); "Server: {s_name}"; "Port: {config.port}"; "Logging: {config.logging}"; diff --git a/examples/data_structures/binary_tree.zc b/examples/data_structures/binary_tree.zc index 14e7b3d..86acb21 100644 --- a/examples/data_structures/binary_tree.zc +++ b/examples/data_structures/binary_tree.zc @@ -8,7 +8,7 @@ struct Node { impl Node { fn new(v: int) -> Self* { - var n = alloc(); + let n = alloc(); n.value = v; n.left = NULL; n.right = NULL; @@ -71,7 +71,7 @@ impl BST { } fn main() { - var tree = BST::new(); + let tree = BST::new(); defer tree.free(); "Inserting: 50, 30, 20, 40, 70, 60, 80"; diff --git a/examples/data_structures/linked_list.zc b/examples/data_structures/linked_list.zc index cb85554..cd16bf5 100644 --- a/examples/data_structures/linked_list.zc +++ b/examples/data_structures/linked_list.zc @@ -8,7 +8,7 @@ struct Node { impl Node { fn new(v: int) -> Self* { - var n = alloc(); + let n = alloc(); guard n != NULL else { "Out of memory!"; return NULL; @@ -29,7 +29,7 @@ impl LinkedList { } fn push(self, v: int) { - var new_node = Node::new(v); + let new_node = Node::new(v); guard new_node != NULL else { return; } new_node.next = self.head; @@ -37,7 +37,7 @@ impl LinkedList { } fn print_list(self) { - var current: Node* = self.head; + let current: Node* = self.head; "["..; while current != NULL { "{current.value}"..; @@ -50,17 +50,17 @@ impl LinkedList { } fn free(self) { - var current: Node* = self.head; + let current: Node* = self.head; while current != NULL { - autofree var temp = current; + autofree let temp = current; current = current.next; } self.head = NULL; } fn len(self) -> int { - var count = 0; - var current: Node* = self.head; + let count = 0; + let current: Node* = self.head; while current != NULL { count++; current = current.next; @@ -70,7 +70,7 @@ impl LinkedList { } fn main() { - var list = LinkedList::new(); + let list = LinkedList::new(); defer list.free(); "Pushing: 10, 20, 30..."; diff --git a/examples/data_structures/stack.zc b/examples/data_structures/stack.zc index 8f1fea5..4a8593a 100644 --- a/examples/data_structures/stack.zc +++ b/examples/data_structures/stack.zc @@ -43,7 +43,7 @@ impl Stack { fn main() { "[Integer Stack]"; - var int_stack = Stack::new(); + let int_stack = Stack::new(); defer int_stack.free(); "Pushing: 10, 20, 30"; @@ -52,19 +52,19 @@ fn main() { int_stack.push(30); "Size: {int_stack.size()}"; - var p = int_stack.peek(); + let p = int_stack.peek(); "Peek: {p.unwrap()}"; "Popping: "..; while !int_stack.is_empty() { - var opt = int_stack.pop(); + let opt = int_stack.pop(); "{opt.unwrap()} "..; } ""; ""; "[String Stack]"; - var str_stack = Stack::new(); + let str_stack = Stack::new(); defer str_stack.free(); str_stack.push(String::new("First")); @@ -73,8 +73,8 @@ fn main() { "Popping: "..; while !str_stack.is_empty() { - var opt_s = str_stack.pop(); - var s: String = opt_s.unwrap(); + let opt_s = str_stack.pop(); + let s: String = opt_s.unwrap(); "{s.c_str()} "..; } ""; diff --git a/examples/features/composition.zc b/examples/features/composition.zc index 883c348..64fb8e0 100644 --- a/examples/features/composition.zc +++ b/examples/features/composition.zc @@ -21,11 +21,11 @@ struct Rigidbody { fn main() { // Mixin usage - flattened fields - var t = Transform{ x: 10.0, y: 5.0, rotation: 90.0 }; + let t = Transform{ x: 10.0, y: 5.0, rotation: 90.0 }; println "Transform pos: ({t.x}, {t.y})"; // Named usage - nested fields - var rb = Rigidbody{ + let rb = Rigidbody{ position: Vector2{x: 0.0, y: 10.0}, velocity: Vector2{x: 1.0, y: 0.0}, mass: 50.0 diff --git a/examples/features/comptime_fib.zc b/examples/features/comptime_fib.zc index 1ad2898..278ae9f 100644 --- a/examples/features/comptime_fib.zc +++ b/examples/features/comptime_fib.zc @@ -1,17 +1,17 @@ fn main() { comptime { - var N = 20; - var fib: long[20]; + let N = 20; + let fib: long[20]; fib[0] = (long)0; fib[1] = (long)1; - for var i=2; i Generics and traits."; - var btn = Button { + let btn = Button { label: "Submit", width: 120, height: 40 }; - var container = Container