# Changelog
## [main]
Current main branch.
- v0.6.6:
- Improved and revised `list` and `dict` syntax
- `,` is now some kind of operator, denoting a list
- Implementation and use of `Keyword
`
- `Empty` and `Void` clarification
- Improved logging and debug
- Compiler internals
- New `Scope` struct
- More refactoring on `ImlValue`
- v0.6.5: Implementation of generic parselets
- Syntax changes
- Handle parselet instances
- Handle generic values in intermediate structures
- System-defined parselets in prelude
- `Repeat
`
- Implement `Pos
`, `Opt
`, `Kle
`
- Compile `P+` into `Pos
`, `P?` into `Opt
`, `P*` into `Kle
`
- `List
`
- `Peek
`, replaced `peek P` by `Peek
`
- `Not
`, replaced `not P` by `Not
`
- `Expect
msg=void`, replaced `expect P` by `Expect
`
- v0.6.4:
- Main parselet operates on multiple inputs (Readers) now
- Restructuring parts of VM, `Runtime` renamed into `Thread`
- Several test cases restructured
- Bugfix for `str_get_item`
- `Ord` on Value and RefValue, builtin `list_sort()`
- Implementing `str_split(s, sep=void, n=void)`
- Fix `begin` and `end` feature of parselets (#109)
- v0.6.3: Test release by mistake, see #106 for details.
- v0.6.2:
- Internal revision and clarification on compiler's intermediate structures `ImlOp`, `ImlValue` and `ImlProgram` (part of #105)
- v0.6.1:
- Comparison chains within expressions (#103)
- Iterators and `for...in`-syntax (#101)
- `Chars<...>` in addition to `Char<...>` syntax
## [v0.6]
Released on Jan 13, 2023
- General
- Use of [num-parse](https://crates.io/crates/num-parse) for `Int` and internal string-to-int conversion ("parseInt()"-like behavior) (#65)
- Updated `clap` command-line parser to v3 (#61)
- Improving internal `testcase` function and moving all prior `#[test]`-functions into separate Tokay testcases (#86)
- Syntax
- Operator `//` for integer division implemented (#92)
- Operator `%` for modulo operation implemented
- Area syntax `@(...)` for in-place reader extend (#78)
- Character-class syntax changed from `[a-z]` into `Char`, `.` and `Any` substituted by `Char` (#98)
- Improved syntax for inline blocks and sequences (`|`-operator)
- Improved list syntax
- `()` the empty list
- `(1,)` list with one item (explicit comma required)
- Implemented `x[...]` item access syntax for rvalue and lvalue (#80)
- Preliminaries for generic parselets (#10)
- New built-in signatures (#84)
- Compiler
- Parser
- `parser.rs` is now generated from `tokay.tok`; syntax-changes are only done in `tokay.tok` now! (#93)
- Removed `macros.rs` and macro-based bootstrap parser entirely
- Internal revision
- Removed structs `Usage` and `ImlResult`
- Integrating all `impl Compileable`s into `ImlOp`
- Code construction now happens in `ImlOp` as well
- Added required changes to
- determine whether a part of code consumes input
- preliminaries to generic parselets (yet unfinished)
- `prelude.tok` provides some default-parselets defined in Tokay itself
- `Number` matches either `Float` or `Int`
- `Token` matches arbitrary tokens
- Virtual Machine
- Internal refactoring of the essential `Context::collect()`-function (#67)
- `Frame` is now managed by `Context`
- Values
- Turned Value::Int to crate [num-bigint](https://crates.io/crates/num-bigint), replaced Value::Addr by the same type (#55)
- Definition of mutable objects; Imutable objects push a clone of, mutable objects push a ref on the object
- `dict` now allow for any non-mutable value as key (#96)
- Builtins
- Added `dict.clone()`, `dict_push()`, `dict.pop()`, `dict.get_item()`, `dict.set_item()`, `list.get_item()`, `list.set_item()`, `str.get_item()`
- Renamed `dict_update()` into `dict_merge()`
- Examples
- The self-hosted Tokay parser in `examples/tokay.tok` was now moved into `src/compiler/tokay.tok` and is used to generate `src/compiler/parser.rs` (#93)
- The JSON parser example in `examples/json.tok` was improved to latest developments
## [v0.5]
Released on May 17, 2022
- v0.5.1: Improved `build.rs` to write builtin registry only when it changed.
- General
- Improved Tokay parser newline behavior to support Windows and classic Mac line ending as well
- Moved tests from `test.rs` into their particular locations, so tests are written next to their implementation
- Read from stdin when no input stream but a program that is consuming was specified
- Moved `ccl.rs` into separate [`charclass` crate](https://crates.io/crates/charclass)
- Equipped Reader struct with better tools for scanning (`Reader::take()`, `Reader::span()`)
- Values
- New `Object` trait
- Splitting `enum Value` into separate objects using `Box`
- `unary_op()` and `binary_op()` for RefValue, with fast-lanes for some operations
- Replacement of separate binary- and unary-VM instructions into `Op::BinaryOp` and `Op::UnaryOp`
- Implemented all primary operations by builtin methods
- Builtins
- Entire redesign of builtins using proc-macro
- Builtin function registry generated by a build-script, substituting `inventory`/`linkme`-crates
- Builtin functions
- `repr()` to get string with Tokay object representation
- `type()` to get string of Tokay value type
- bool methods: `bool()`
- int methods: `int()`
- float methods: `float()`, `float.ceil()`, `float.fract()`, `float.trunc()`
- addr methods: `addr()`
- dict methods: `dict()`, `dict.len()`, `dict.update()`
- list methods: `list()`, `list.add()`, `list.iadd()`, `list.len()`, `list.push()`, `list.pop()`
- str methods: `str()`, `str.add()`, `str.byteslen()` `str.endswith()`, `str.mul()`, `str.join()`, `str.len()`, `str.lower()`, `str.replace()`, `str.startswith()`, `str.substr()`, `str.upper()`
- Builtin tokens
- `Float` allowing for parsing floating point numbers into float values
- `Ident` renamed (from `Identifier`)
- `Int` renamed (from `Integer`) and accepting parameters like a radix base
- `Word` skipping words not in the wanted word size, but not rejecting
- Examples
- Self-hosted Tokay parser in `examples/tokay.tok`
- Simple JSON parser in `examples/json.tok`
## [v0.4]
Released on Nov 15, 2021
- Implementation of a separated virtual machine (VM) to reduce overall stack usage (#8)
- Removal of the recursive interpreter due to VM replacement
- Cleaned-up and modularization of an encapsulated compiler
- Turned compile-time building blocks into intermediate language (iml)
- Built-in character classes
- Started loop implementation
- Improved debug facilities
## [v0.3]
Released on Jul 7, 2021
- Cleaning and finalizing syntax
- Collections with list and dict expression
- Consumables and built-in tokens
- Implemented all remaining operators
- Inline increment/decrement
- R-value handling for subscripts and attributes, with calls to built-ins
- Compile-time expression evaluation
- Whitespace handling
- Escape sequences
- Command-line parameters
## [v0.2]
Released on Mar 21, 2021
- Parselets and built-ins with parameters
- Improved error reporting
- Interactive REPL
## [v0.1]
Released on Mar 4, 2021
- Character-classes
- Universal Reader trait
- Macros for grammar expression
- First draft of the Tokay grammar
- Implementing recursive interpreter
- Left-recursive parselets
- Sequence capturing and AST construction
- Distinction between constants and variables
- Symbol resolving and scopes
[main]: https://github.com/tokay-lang/tokay/compare/v0.6...main
[v0.6]: https://github.com/tokay-lang/tokay/compare/v0.5...v0.6
[v0.5]: https://github.com/tokay-lang/tokay/compare/v0.4...v0.5
[v0.4]: https://github.com/tokay-lang/tokay/compare/v0.3...v0.4
[v0.3]: https://github.com/tokay-lang/tokay/compare/v0.2...v0.3
[v0.2]: https://github.com/tokay-lang/tokay/compare/v0.1...v0.2
[v0.1]: https://github.com/tokay-lang/tokay/compare/2d74215f4842d295371112a630d15ab03442cd1e...v0.1