git @ Cat's Eye Technologies Tamsin / master HISTORY.markdown
master

Tree @master (Download .tar.gz)

HISTORY.markdown @masterview rendered · raw · history · blame

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.