~technomancy/fennel

[ANN] Fennel 0.6.0 released

Details
Message ID
<87ft7yw4pb.fsf@hagelb.org>
DKIM signature
missing
Download raw message
Hello Fennelers!

I've just pushed out a new 0.6.0 release.

The biggest change here is that macros are loaded in a sandbox which
emits a warning if they access anything outside a small list of allowed
functions. This should set us on the path for safer code loading in the
long run, though today it does not actually block access to these
things.

The idea is that macros should default to not needing to do any I/O or
system-level things; they should just be about transforming code and
nothing else. Right now if you try to do other things, you will get a
warning, but in the future these operations will be blocked
altogether. I don't foresee this causing many issues since macros
shouldn't be making those kinds of calls anyway, but if you do get a
warning for something that you feel like shouldn't be blocked, please
bring it up so we can investigate.

The other big change is the plugin system. This will allow you to extend
the compiler by hooking into various lifecycle events. One example is a
linter which can catch unused locals or confirm that functions you call
from a module have the right number of arguments:

    https://git.sr.ht/~technomancy/fennel/tree/main/src/linter.fnl

But the plugin API is pretty flexible and could be used for all kinds of
things. Unfortunately this flexibility comes with a cost; it is also the
most unstable part of Fennel since it exposes compiler internals. With
Fennel we try to very hard maintain backwards-compatibility, but that
compatibility does *not* apply to the plugin system at this time. We
encourage you to experiment with plugins, but expect breakage.

You can see some details here:

    https://fennel-lang.org/api#plugins

For a full list of user-visible changes:

* Change table reference notation in fennelview to use `@`.
* Fix a bug where long arglists could get jumbled.
* Add plugin system.
* Sandbox compiler environment and emit a warning when it leaks.
* Fix a bug where repls would fail when provided with an overridden env.
* Expose `list?` and `sym?` in compiler API.
* Fix a bug where method calls would early-evaluate their receiver.
* Fix a bug where multi-arity comparisons would early-evaluate their arguments.
* Add `--lua` CLI flag for specifying a custom Lua command/executable. (#324)

Thanks to everyone who contributed to this release. You can download the
latest version here:

    https://fennel-lang.org/downloads/fennel-0.6.0
    https://fennel-lang.org/downloads/fennel-0.6.0.asc

Or you can pull it in thru git or luarocks. Please note that the
canonical repository[1] is now https://git.sr.ht/~technomancy/fennel
and the primary branch for development is "main" rather than the old
"master" branch.

cheers,
Phil

[1] - We continue to maintain a mirror on GitHub and accept pull request
and bug reports at https://github.com/bakpakin/Fennel/ for users who
prefer that.
Export thread (mbox)