1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# Version History
## v1.0
- 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
- Syntax for text literals and inline C code has been simplified somewhat.
- Syntax for tables has changed to use colons (`{k: v}`) instead of equals
(`{k=v}`).
- Deprecated:
- Sets
- Instead of sets, use tables.
- 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).
- Added `table.with(other)`, `table.without(other)`,
`table.intersection(other)`, and `table.difference(other)`.
- Added a `--format` flag to the `tomo` binary that autoformats your code
(currently unstable, do not rely on it just yet).
- Standardized text methods for Unicode encodings:
- `Text.from_utf8()`/`Text.utf8()`
- `Text.from_utf16()`/`Text.utf16()`
- `Text.from_utf32()`/`Text.utf32()`
- 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.
## v0.3
- Added a versioning system based on `CHANGES.md` files and `modules.ini`
configuration for module aliases.
- When attempting to run a program with a module that is not installed, Tomo
can prompt the user to automatically install it.
- Programs can use `--version` as a CLI flag to print a Tomo program's version
number and exit.
- Significant improvements to type inference to allow more expressions to be
compiled into known types in a less verbose manner. For example:
```tomo
enum NumberOrText(Number(n:Num), SomeText(text:Text))
func needs_number_or_text(n:NumberOrText)
>> n
func main()
needs_number_or_text(123)
needs_number_or_text(123.5)
needs_number_or_text("Hello")
```
- Added `tomo --prefix` to print the Tomo install prefix.
- Sets now support infix operations for `and`, `or`, `xor`, and `-`.
- Added new `json` module for JSON parsing and encoding.
- Added `Path.sibling()`.
- Added `Path.has_extension()`.
- Added `Table.with_fallback()`.
- Added `Int*.get_bit()` and `Byte.get_bit()`.
- Added `Byte.parse()` to parse bytes from text.
- Added optional `remainder` parameter to `parse()` methods, which (if
non-none) receives the remaining text after the match. If `none`, the match
will fail unless it consumes the whole text.
- Added optional `remainder` parameter to `Text.starts_with()` and
`Text.ends_with()` to allow you to get the rest of the text without two
function calls.
- Improved space efficiency of Text that contains non-ASCII codepoints.
- Doctests now use equality checking instead of converting to text.
- Fixed the following bugs:
- Negative integers weren't converting to text properly.
- Mutation of a collection during iteration was violating value semantics.
- `extend` statements weren't properly checking that the type name was valid.
- Lazy recompilation wasn't happening when `use ./foo.c` was used for local
C/assembly files or their `#include`s.
- Memory offsets for enums with different member alignments were miscalculated.
- Optional types with trailing padding were not correctly being detected as `none`
- Tomo identifiers that happened to coincide with C keywords were not allowed.
- Compatibility issues caused compilation failure on some platforms.
## v0.2
- Improved compatibility on different platforms.
- Switched to use a per-file unique ID suffix instead of renaming symbols after
compilation with `objcopy`.
- Installation process now sets user permissions as needed, which fixes an
issue where a user not in the sudoers file couldn't install even to a local
directory.
- Fixed some bugs with Table and Text hashing.
- Various other bugfixes and internal optimizations.
## v0.1
First version to get a version number.
|