Releases: tfeb/tfeb-lisp-hax
Utilities: symbolify
symbolify
makes symbols from concatenated string designators. It avoids the nightmare of (make-symbol (concatenate 'string (symbol-name s) "-P"))
and (intern (make-symbol (concatenate 'string (symbol-name s) "-P")))
which tends to pervade complicated macros.
object-accessors: named array element access
with-named-array-references
provides a way of giving names to elements of an array. This is a substrate on which you can map 'structures' onto chunks of an array, which is useful for fast but readable floating-point code.
parse-docstring-body
from the utilities is also now correct, or less incorrect.
let-values is better, process-declarations has a macro
let-values
now avoids rebinding in sequential forms, which can avoid unused variables in cases like
(let*-values (((a b) ...)
((c d) (f a b)))
... don't use a and b ...)
process-declarations
has a new processing-declaration-specifier
macro which makes things a little nicer. It is still unstable. let-values
uses process-declarations
for its declaration processing now.
A possibly-unstable process-declarations hack
I'm just adding this now so other things can depend on it. The interface may be OK but I'm not sure.
let-values
let-values
provides four let
-style macros which work with multiple values.
let-values
andlet*-values
are likelet
andlet*
respectivelylet-values*
andlet*-values*
have semantics likemultiple-value-call
: they take all the values from a number of initforms and use them, in parallel and sequentially respectively.
As an example of let-values*
> (let-values* (((a b c) (values 1 2) 3))
(+ a b c))
6
There are also improvements to valid-type-specifier-p
: it now works by checking that typep
can't signal an error, which I think can't be evaded the way SBCL evades things with subtypep
.
Utilities: valid-type-specifier-p
There's a function, valid-type-specifier-p
which attempts (and perhaps actually does) answer the question 'is something a valid type specifier?'. It is as horrible as you would expect.
Bug fix and enhancements in with-accumulators
with-accumulators
was broken in the last release: it would get the arglist of the local function wrong. This fixes that and adds a new by
argument:
(with-accumulators ((a + :by 1))
...
(a)
...)
will make the local function have no arguments and step by the value of by
. by
is a form evaluated in the current lexical environment for each call.
Utilities enhancements, minimal documentation
org.tfeb.hax.utilities
was previously undocumented. It now is slightly documented but is explicitly not stable.
thunk
and thunk*
are new: this new version is because Štar depends on these now, and I wanted to be able to say that you need at least 8.6.0
Enhancements to collecting and trace-macroexpand
with-accumulators
now can provide defaults for the accumulator functions it defines.
trace-macroexpand
now has its own stream, *trace-macroexpand-output*
, which by default is a synonym stream to *trace-output*
.
Both these changes are (should be!) compatible.
There was no 8.4.0 release.
Catchup release for Štar
This includes an undocumented with-names
macro in utilities, which Štar relies on. There are no other changes since 8.2.1