TLDR; Joxa v0.1.0 available at http://joxa.org
, docs at http://docs.joxa.org
Joxa is a small semantically clean, functional lisp. It is a
general-purpose language encouraging interactive development and a
functional programming style. Joxa runs on the Erlang Virtual Machine.
Like other Lisps, Joxa treats code as data and has a full (unhygienic)
macro system. This release introduces a number of changes to the
language and runtime system.
Joxa 0.1.0 Changes
* A large increase in both the quality and the quantity of documentation
* Numerous bug fixes to the compiler
* `any` and `all` functions added to joxa-lists
* `joxa-otp/behaviour!` now correctly checks for a behaviour
* Joxa now contains a built in concurrent compiler for multiple file
compilation. This correctly does dependency ordering within the
* Added the `:joxify` keyword to both `require` and `use` namespace
clause. This alias functions that contain '_' to contain '-'
instead. So for example `(require (proplists :joxify))` would make
`proplists/get_value` available as `proplists/get-value` as
well. While `(use (proplists :joxify :only (get-value/2)))` would
allow `get-value` to be used directly instead of `get_value`.
* The `use` clause for namespaces no longer supports `:as`
* You may now use docstrings in functions. They are not yet available
at runtime but should be in a future release.
* Complex `use` clauses should now behave in a less surprising way.
* All non-matching special forms in the compiler now have a `*`
prefix. For example the non-matching primitive `let` is now
`let*`. This allows macro based matching forms to use those names in
* Much better error reporting for macro failures
* Joxa now uses rebar and can be a dependency in rebar projects
* Empty top level forms, ie `(do ())` and `()` are now supported (and
ignored). This allows macros to exist as check functions that do not
* Packages have been removed from Joxa
* The joxa command now supports `--pa` and `--pz`
* `defspec` can now be declared for remote namespaces. This allows for
mutually recursive modules in joxa.
* You may no longer embed `spec` information directly in the function
* Vastly simplified the bootstrap procedure for Joxa developers.
* Modules are no longer supported in Joxa. Instead `namespaces` using
the keyword `ns` are supported. for example `(module my-foo (require
erlang))` becomes `(ns my-foo (require erlang))`.
* Multiple namespaces may exist in the same file.
* Emacs mode is slightly more accurate in syntax highlighting
* Joxa now supports `(attr pragma native)` as a module attribute. This
allows the module implementor to indicate his knowledge that the
module would do well hipe compiled.
* Joxa now supports aggressive inlining. Finally `definline` is fully
respected and other inlining and optimization opportunities are taken
as they are found. It is now recommended that Joxa only be run on ERTS
5.9 or greater (for line numbers).