From 07a50e5f7a269322ed53eeff78d097a3366d2d1b Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 1 Apr 2026 17:04:06 +0300 Subject: [PATCH] Update spec --- spec.txt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/spec.txt b/spec.txt index 2307473..ae1c1e1 100644 --- a/spec.txt +++ b/spec.txt @@ -46,7 +46,7 @@ Literals: 123ul -> u64 3.14h -> f16 3.14 -> f32 - 3.14l -> f64 + 3.14d -> f64 'a' -> u8 (ascii only?) '猫'u -> u32 @@ -85,11 +85,11 @@ Logical (only bool type): x || y // short-circuit x ^ y -Equality (all built-in types, all pointer types, all array/struct types, only same type): +Equality (all built-in types, all pointer types, all array/struct types, only same type unless integers): x == y x != y -Comparison (all built-in types, all pointer types, all array/struct types, only same type): +Comparison (all built-in types, all pointer types, all array/struct types, only same type unless integers): x < y x > y x <= y @@ -103,7 +103,7 @@ Bitwise (integer types, only same type): x || y // short-circuit x ^ y -Bitwise shift (any pair of integer types): +Bitwise shift (any integer + any unsigned integer type): x >> y x << y @@ -124,6 +124,7 @@ Pointer arithmetic works element-wise (like C or C++), i.e. p + n advances by n Casting: x as u32 // always explicit, no implicit casts allowed +The only implicit casting allowed is T mut* -> T* (maybe?) Any integer/floating-point types can be cast to each other. Any pointer types can be cast to each other (TODO: alignment? UB or safe fallback? Probably UB.) @@ -148,6 +149,7 @@ Flow control: while condition: statements + TODO: break/continue? TODO: for loops? iterator/range interface? ======== STRUCTS ======== @@ -167,6 +169,8 @@ Struct field access: let p = &r let y = p.height // field access through pointer is the same +TODO: inner struct functions maybe? to act as namespace/module containers + ======== FUNCTIONS ======== Function definition: @@ -176,6 +180,10 @@ Function definition: func bar(x: f32): // deduced return type unit print(x) + // External function: name taken literally as `powf` + // and C calling convention assumed + foreign func powf(x: f32, y: f32) -> f32 // no implementation + TODO: function overloading? Probably requires selecting a specific overload using `as` operator to save to a value (but not on call site) ======== TYPE OF TYPES ========