v0.9.0
This release focused upon increased compatibility with Mal, which meant allowing alternative ways of expressing things that had previously been possible in a niche way.
For example this is how we defined a factorial-function:
(define fact (lambda (n)
(if (<= n 1)
1
(* n (fact (- n 1))))))
That is nice and clear, but using "define" and "lambda" might be confusing. So now we can write that in the way that a Mal user might expect and prefer:
(set! fact (fn* (n)
(if (<= n 1)
1
(* n (fact (- n 1))))))
We've increased compatibility by adding expected standard-forms, such as fn*
, let*
, set!
, and defmacro!
. We've also updated the standard-library, which is written in lisp, to add some methods users might expected - for example false?
, slurp
, true?
, vals
, and contains?
.
Test-coverage remains at 100%, and our fuzz-tester hasn't revealed any unexpected segfaults/panics.
Finally we updated our README.md file, and added (arch)
and (os)
methods, to allow conditional execution at run-time, based on environment. It is also possible to execute code upon the CLI without reading a file:
yal -e "(print (os))"