v3.9.0
Features
- Generic type parameters via
<?>syntax (#1797) - Channels:
try_send()andtry_receive()for non-blocking operations (#1721) elseas syntax alias forotherwise(#1974)[K:V]map syntax —mapkeyword now optional (#1961)- Compile-time integer constants as fixed-size array sizes (#1961)
--emit-cwrites generated C to file instead of stdout (#2049)- Custom request headers support in http module (#1994)
atomic.spinlock_destroy()to free spinlock memory (#1721)os.unset_env()to remove environment variables (#2002)arrays.any()andarrays.all()higher-order functions (#2000)strings.to_chars(),strings.from_chars(),strings.char_at(),strings.remove_prefix(),strings.remove_suffix(),strings.last_index_of()(#1997, #1998)time.diff()to return the difference between two timestamps (#1997)- Helpful hints added to 10 common compiler error messages (#1566)
Bug Fixes
- Validate Channel type for first arg of all channels functions (#2061)
- Reject
channels.try_receive()single capture with E3040 instead of C error leak (#2060) - Materialize rvalue for map field access through explicit ptr deref (#2065)
- Allow local consts as fixed-size array sizes (#2070)
- Strip
\$escape in codegen so escaped interpolation emits valid C (#2077) - Char/byte array literals use correct elem_size in codegen (#2066)
- Typecheck index argument in
arrays.remove_at()andarrays.insert_at()(#2000) - Catch
channels.send/try_sendtype mismatch and resolve module-qualified types (#2061)
Final Release
This is the final release of the EZ programming language.