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.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.
- 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 itselfusing
another 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) alwaysconst
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.
- Added
@
(work on different implicit buffer.)
- Added
$:gensym
. - Added
$:hexchar
. - Added
$:format_octal
. - Added
$:length
. - Added
list:append
.
- Tamsin-to-C compiler written in Tamsin (
mains/compiler.tamsin
) passes all tests, and can compile itself. - Refactored
$
functions intotamsin.sysmod
module in Python version.
- Defined what it means to
reprify
a term. - Clarified some matters as implementation-defined.
$:equal
now does deep equality of arbitrary ground terms.$:repr
added.$:reverse
added.- Some standard modules ship in the distribution:
list
,tamsin_scanner
, andtamsin_parser
.
- 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").
- 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//
.
$: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.
- 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.
Initial release.