Tamsin Release History ====================== 0.5-2017.0502 ------------- This is an interim release, created because the tests pass here, even though not everything aimed for for the next release has been achieved. ### language ### * The RHS of → can be a pattern term. * "Proper quoted" strings. ### implementations ### * `mini-tamsin.tamsin` is an interpreter for "Mini-Tamsin", written in Tamsin. * Better error reporting. * Improvements or bugfixes in the C-language implementation of `$:unquote`. * Tamsin programs can handle streams on input and produce streams on output. * Begun work on a better C-emitting backend. * Better scanning; buffers are more sophisticated and track some state themselves. 0.5 --- ### language ### * EOF is no longer a special kind of term; it is no longer exposed, as a value, to Tamsin programs. (`$:eof` returns `''` on success.) * Prolog/Erlang-style list sugar for terms, in patterns as well. * When a new scanner is switched to using `using`, that scanner defaults to the `$:utf8` scanner for *its* scanning. This prevents the common shooting-self-in-foot error of selecting a production that is not itself `using` another scanner (which would result in an infinite loop of the production scanner trying to use itself as its subsidiary scanner.) ### implementation ### * `struct term *`s are (almost) always `const` in compiled Tamsin programs (for better sharing; we don't need to make copies of them) * related: variable-matching is more efficient (directly updates an array of terms, instead of searching for the variable by name) * related: creating new atoms uses hash-consing, so that no new `struct term` for the atom is allocated if one already exists (the existing one is shared.) This reduces memory usage significantly. 0.4 --- ### language ### * Added `@` (work on different implicit buffer.) ### modules ### * Added `$:gensym`. * Added `$:hexchar`. * Added `$:format_octal`. * Added `$:length`. * Added `list:append`. ### implementations ### * Tamsin-to-C compiler written in Tamsin (`mains/compiler.tamsin`) passes all tests, and can compile itself. * Refactored `$` functions into `tamsin.sysmod` module in Python version. 0.3 --- ### language ### * Defined what it means to `reprify` a term. * Clarified some matters as implementation-defined. ### modules ### * `$:equal` now does deep equality of arbitrary ground terms. * `$:repr` added. * `$:reverse` added. * Some standard modules ship in the distribution: `list`, `tamsin_scanner`, and `tamsin_parser`. ### implementations ### * Support for user-defined modules. * `tamsin` can take more than one source file on command line; this is how external modules are supported (by this implementation.) * Cleaned-up testing framework; Tamsin versions of scanner, grammar, parser, desugarer, analyzer, and compiler found in `mains` subdir. * Most `tamsin` verbs, and their versions in Tamsin, corresponding to intermediate phases, output reprified terms. * `tamsin` significantly re-factored so that the interpreter and compiler are more similar, and generating code for production branches is easier. * Added Tamsin-to-C compiler written in Tamsin, which can pass the first 43 or so tests from the spec ("Mini-Tamsin"). 0.2 --- ### language ### * Module-member syntax changed from `.` to `:`. * `:` can be used without any module on the LHS to refer to a production in the current module. * Added "fold" forms, binary `/` and ternary `//`. ### modules ### * `$:char` scanner dropped. Instead, there are `$:byte` (which always returns 8-bit-clean bytes) and `$:utf8` (which always returns UTF-8 sequences.) * Added `$:equal(L,R)`. * `$:unquote(X,L,R)` takes three arguments now. ### implementations ### * Beginnings of user-defined module support (very rudimentary, not to be used.) * Code in `libtamsin` is much more robust. AST-builder written in Tamsin now compiles and runs correctly. * Added a desugaring phase to `tamsin`, and a desugarer written in Tamsin. * Added Micro-Tamsin interpreter, written in Tamsin. Can pass the first 30 tests from the spec. 0.1 --- Initial release.