Book
Values and operators
How Echo separates value copying, shared objects, deep equality, and identity.
A small value model
Every bind and parameter copies its binding. For numbers, booleans, strings, and other value kinds, that means an independent value. For a struct or list, it means another reference to the same object. There is no user-visible pointer type between the two classes.
~ number = 3
~ number_copy = number
~ number_copy = 4 ; number is still 3
$ items = [10]
$ items_alias = items
~ items_alias[0] = 11 ; items[0] is now 11
Content or identity
Most comparisons ask about meaning, so == is deep: two separately created lists can be equal. Use === when object identity matters. For value kinds, identity adds nothing and agrees with deep equality.
Numbers stay explicit
Integers and floats do not silently mix, and explicit numeric widths must agree. That keeps arithmetic predictable at native-code boundaries. Start with the inferred i64 and f64 defaults; add a width tag only when the representation matters.
$ count = 42
$ ratio = 3.5
$ packed_count = <i32> 42
$ packed_ratio = <f32> 3.5