Changelog for husk-scheme-3.6.2

v3.6.2

This release adds support for nested quasi-quotation forms, which now respect depth level. This was done by replacing the quasi-quotation special form with a macro based on the one from chibi scheme. A nice side-benefit is that by removing the special forms, quasi-quotation now works in the compiler.

Also added support for SRFI 2, and-let*. From the SRFI document:

Like an ordinary AND, an AND-LET* special form evaluates its arguments - expressions - one after another in order, until the first one that yields #f. Unlike AND, however, a non-#f result of one expression can be bound to a fresh variable and used in the subsequent expressions. AND-LET* is a cross-breed between LET* and AND.

And added support for environment specifiers, including the following functions:

This release also includes the following bug fixes:

v3.6.1

Added support for GHC 7.6.

v3.6

Enhanced the variable storage model to correctly store references to objects. For example, consider the following:

(define x (list 'a 'b 'c))
(define y x)
(set-cdr! x 4)

After executing this code, previous versions of husk assigned (a b c) to y. With this release, husk now evaluates y to the expected value of (a . 4).

The more general problem is that certain data types denote a memory location which may be modified by mutator functions such as set-cdr!. This is discussed specifically in section 3.4 Storage Model:

Variables and objects such as pairs, vectors, and strings implicitly denote locations or sequences of locations. A string, for example, denotes as many locations as there are characters in the string. (These locations need not correspond to a full machine word.) A new value may be stored into one of these locations using the string-set! procedure, but the string continues to denote the same locations as before.

Internally husk uses Haskell data types, so the husk model differs slightly from the one in R5RS - references are used instead of individual memory locations. This has implications for the set-car! and set-cdr! special forms, where circular lists and similar low-level optimizations are not possible as Haskell lists are used instead of raw pointers. However, these issues aside, the enhanced storage model is a big step forward to bringing husk's variable support closer in line to that of other Schemes.

v3.5.7

The major change in this release is support for explicit renaming macros. This low-level macro system provides the ability to break macro hygiene, if necessary, and offers a macro system that is similar to defmacro.

In addition, all of the character functions from R5RS have been implemented.

v3.5.6

v3.5.5

v3.5.4

v3.5.3.2

v3.5.3.1

v3.5.3

This release adds full support for GHC 7.2.2 / 7.4.1 as well as a number of small enhancements.

v3.5.2.x

This is a series of quick bug-fix releases that allows husk to build under GHC 7.4.1.

v3.5.2

v3.5.1

v3.4.4

This release continues the trend of quick point releases for the 3.4.x series. The key change is support for GHC 7.2:

v3.4.3

v3.4.2

v3.4.1

Added experimental support for let-syntax and letrec-syntax.

Bug fixes:

v3.4

This release adds the first hygienic macro support to husk. There are two "sides" to macro hygiene:

Support has been added for both sides, although there are some issues as noted in the Version 3.4.x Milestones. Macro support will continue to improve in future releases.

In addition, this release contains the following bug fixes:

v3.3

This release includes major improvements to the macro module. In particular:

Other changes:

v3.2.1

v3.2

v3.1

(let ((if +)) (if 1 2 3)) was 2 instead of 6. Now it eval's to 6

v3.0

v2.4

v2.3

v2.2

v2.1

v2.0

v1.3

v1.2

v1.1

v1.0