Tamsin Release History
This is an interim release, created because the tests pass here, even though not everything aimed for for the next release has been achieved.
- The RHS of → can be a pattern term.
- "Proper quoted" strings.
mini-tamsin.tamsinis an interpreter for "Mini-Tamsin", written in Tamsin.
- Better error reporting.
- Improvements or bugfixes in the C-language implementation of
- 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.
- EOF is no longer a special kind of term; it is no longer exposed, as
a value, to Tamsin programs. (
- 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
$:utf8scanner for its scanning. This prevents the common shooting-self-in-foot error of selecting a production that is not itself
usinganother scanner (which would result in an infinite loop of the production scanner trying to use itself as its subsidiary scanner.)
struct term *s are (almost) always
constin 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 termfor the atom is allocated if one already exists (the existing one is shared.) This reduces memory usage significantly.
@(work on different implicit buffer.)
- Tamsin-to-C compiler written in Tamsin (
mains/compiler.tamsin) passes all tests, and can compile itself.
tamsin.sysmodmodule in Python version.
- Defined what it means to
- Clarified some matters as implementation-defined.
$:equalnow does deep equality of arbitrary ground terms.
- Some standard modules ship in the distribution:
- Support for user-defined modules.
tamsincan 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
tamsinverbs, and their versions in Tamsin, corresponding to intermediate phases, output reprified terms.
tamsinsignificantly 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").
- Module-member syntax changed from
:can be used without any module on the LHS to refer to a production in the current module.
- Added "fold" forms, binary
$:charscanner dropped. Instead, there are
$:byte(which always returns 8-bit-clean bytes) and
$:utf8(which always returns UTF-8 sequences.)
$:unquote(X,L,R)takes three arguments now.
- Beginnings of user-defined module support (very rudimentary, not to be used.)
- Code in
libtamsinis 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.