aboutsummaryrefslogtreecommitdiff
path: root/CHANGES.md
diff options
context:
space:
mode:
Diffstat (limited to 'CHANGES.md')
-rw-r--r--CHANGES.md106
1 files changed, 62 insertions, 44 deletions
diff --git a/CHANGES.md b/CHANGES.md
index 0bbe387f..212fe54c 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,17 +1,12 @@
# Version History
-## v0.4
-- Tomo libraries are now installed to `$TOMO_PATH/lib/tomo_vX.Y/module_vZ.W`
- instead of `$TOMO_PATH/share/tomo_vX.Y/installed/module_vZ.W`
-- Core libraries are no longer shipped with the compiler, they have moved to
- separate repositories.
-- Library installation has been cleaned up a bit.
-- List indexing now gives an optional value.
-- Added support for inline anonymous enums
-- Accessing a field on an enum now gives an optional value instead of a boolean.
-- Syntax for text literals and inline C code has been simplified somewhat.
+## v2025-11-29
+
+### Syntax changes
+
- Syntax for tables has changed to use colons (`{k: v}`) instead of equals
(`{k=v}`).
+- Syntax for text literals and inline C code has been simplified.
- Added metadata format instead of `_HELP`/`_USAGE`:
```
HELP: "Help text"
@@ -19,6 +14,44 @@
MANPAGE_SYNOPSYS: "Synopsys..."
MANPAGE_DESCRIPTION: (./description.txt)
```
+- **Deprecated:** `extern` keyword for declaring external symbols from C.
+ - Use `C_code` instead.
+- **Deprecated:** postfix `?` to make values optional.
+ - Explicitly optional values can be declared as `my_var : T? = value`.
+- **Deprecated:** `>> ... = ...` form of doctests. They are now called "debug logs"
+ and you can specify multiple values: `>> a, b, c`
+- **Deprecated:** `extend` blocks
+- **Deprecated:** `deserialize` operation and `.serialized()` method call
+ - Instead, convert to and from `[Byte]`
+
+### Versioning and library changes
+
+- Tomo versioning now uses dates instead of semantic versioning.
+- Tomo libraries are now installed to
+ `$TOMO_PATH/lib/tomo@TOMO_VERSION/library@LIBRARY_VERSION` instead of
+ `$TOMO_PATH/share/tomo_TOMO_VERSION/installed/module_LIBRARY_VERSION`
+- Core libraries are no longer shipped with the compiler, they have moved to
+ separate repositories.
+- Library installation has been cleaned up a bit.
+
+### Type Changes
+
+- List indexing now gives an optional value.
+- Added support for inline anonymous enums
+- Accessing a field on an enum now gives an optional value instead of a boolean.
+- **Deprecated**: Sets are no longer a separate type with separate methods.
+ - Instead of sets, use tables with a value type of `{KeyType:Empty}`.
+ - As a shorthand, you can use `{a,b,c}` instead of `{a:Empty(),
+ b:Empty(), c:Empty()}` and the type annotation `{K}` as shorthand for
+ `{K:Empty}`.
+- Added `Empty` for a built-in empty struct type and `EMPTY` for an instance of
+ the empty struct.
+- Struct fields that start with underscores can be accessed again and function
+ arguments that start with underscore can be passed (but only as keyword
+ arguments).
+
+### API changes
+
- Added `Path.lines()`.
- Added `Text.find(text, target, start=1)`.
- Added `at_cleanup()` to register cleanup functions.
@@ -26,29 +59,9 @@
directories if needed.
- `setenv()` now takes an optional parameter for value, which allows for
unsetting environment values.
-- Deprecated:
- - Sets are no longer a separate type with separate methods.
- - Instead of sets, use tables with a value type of `{KeyType:Empty}`.
- - As a shorthand, you can use `{a,b,c}` instead of `{a:Empty(),
- b:Empty(), c:Empty()}` and the type annotation `{K}` as shorthand for
- `{K:Empty}`.
- - Tables now have `and`, `or`, `xor`, and `-` (minus) metamethods.
- - `extern` keyword for declaring external symbols from C.
- - Use `C_code` instead.
- - Postfix `?` to make values optional.
- - Explicitly optional values can be declared as `my_var : T? = value`.
- - `>> ... = ...` form of doctests. They are now called "debug logs" and you
- can specify multiple values: `>> a, b, c`
- - `extend` blocks
- - `deserialize` operation and `.serialized()` method call
- - Instead, convert to and from `[Byte]`
-- Struct fields that start with underscores can be accessed again and function
- arguments that start with underscore can be passed (but only as keyword
- arguments).
+- Tables now have `and`, `or`, `xor`, and `-` (minus) metamethods.
- Added `table.with(other)`, `table.without(other)`,
`table.intersection(other)`, and `table.difference(other)`.
-- Added `Empty` for a built-in empty struct type and `EMPTY` for an instance of
- the empty struct.
- Changed `list.unique()` to return a table with `Empty()` values for each
unique list item.
- Added a `--format` flag to the `tomo` binary that autoformats your code
@@ -57,21 +70,26 @@
- `Text.from_utf8()`/`Text.utf8()`
- `Text.from_utf16()`/`Text.utf16()`
- `Text.from_utf32()`/`Text.utf32()`
+
+### Bug fixes
+
+- `Int.parse()` had a memory bug.
+- Breaking out of a `for line in file.by_line()!` loop would leak file handle
+ resources, which could lead to exhausting the number of open file handles.
+ When that happens, the standard library now forces a GC collection to clean
+ up resources, which can result in file handles being freed up.
+- `&` references failed to propagate when accessing fields like
+ `foo.baz.method()` when `foo` is a `&Foo` and `baz.method()` takes a `&Baz`.
+- Optional paths no longer fail to compile when you check them for `none`.
+- Text replacement no longer infinitely loops when given an empty text to replace.
+- Short CLI flag aliases now no longer use the first letter of the argument.
+- Stack memory was not correctly detected in some cases, leading to potential
+ memory errors.
+
+### Other changes
+
- Added automatic manpage generation.
- Major improvements to robustness of CLI argument parsing.
-- Fixed bugs:
- - `Int.parse()` had a memory bug.
- - Breaking out of a `for line in file.by_line()!` loop would leak file handle
- resources, which could lead to exhausting the number of open file handles.
- When that happens, the standard library now forces a GC collection to clean
- up resources, which can result in file handles being freed up.
- - `&` references failed to propagate when accessing fields like
- `foo.baz.method()` when `foo` is a `&Foo` and `baz.method()` takes a `&Baz`.
- - Optional paths no longer fail to compile when you check them for `none`.
- - Text replacement no longer infinitely loops when given an empty text to replace.
- - Short CLI flag aliases now no longer use the first letter of the argument.
- - Stack memory was not correctly detected in some cases, leading to potential
- memory errors.
## v0.3