New Features
- Added support for
future
s (#441) - Added support for calling Python functions and methods with keyword arguments (#531)
- Added support for Lisp functions being called with keyword arguments (#528)
- Added support for multi-arity methods on
deftype
s (#534) - Added metadata about the function or method context of a Lisp AST node in the
NodeEnv
(#548) - Added
reify*
special form (#425) - Added support for multi-arity methods on
definterface
(#538) - Added support for Protocols (#460)
- Added support for Volatiles (#460)
- Added JSON encoder and decoder in
basilisp.json
namespace (#484) - Added support for generically diffing Basilisp data structures in
basilisp.data
namespace (#555) - Added support for artificially abstract bases classes in
deftype
,defrecord
, andreify
types (#565) - Added support for transient maps, sets, and vectors (#568)
Changed
- Basilisp set and map types are now backed by the HAMT provided by
immutables
(#557) get
now respondsnil
(or its default) for any unsupported types (#570)nth
now supports only sequential collections (ornil
) and will throw an exception for any invalid types (#570)- Use
functools.singledispatch
for to achieve higher performance polymorphism on most runtime functions (#552, #559) - Update the keyword cache to use a Python
threading.Lock
rather than an Atom (#552) rest
no longer returnsnil
, it always returns an empty sequence (#558)
Bug Fixes
- Fixed a bug where the Basilisp AST nodes for return values of
deftype
members could be marked as statements rather than expressions, resulting in an incorrectnil
return (#523) - Fixed a bug where
defonce
would throw a Python SyntaxError due to a superfluousglobal
statement in the generated Python (#525) - Fixed a bug where Basilisp would throw an exception when comparing seqs by
=
to non-seqable values (#530) - Fixed a bug where aliased Python submodule imports referred to the top-level module rather than the submodule (#533)
- Fixed a bug where static methods and class methods on types created by
deftype
could not be referred to directly (defeating the purpose of the static or class method) (#537) - Fixed a bug where
deftype
forms could not be declared without at least one field (#540) - Fixed a bug where not all builtin Basilisp types could be pickled (#518)
- Fixed a bug where
deftype
forms could not be created interfaces declared not at the top-level of a code block in a namespace (#376) - Fixed multiple bugs relating to symbol resolution of
import
ed symbols in various contexts (#544) - Fixed a bug where the
=
function did not respect the equality partition for various builtin collection types (#556) - Fixed a bug where collection types could evaluate as boolean
false
(#566) - Fixed a bug where
reduce
required a 1-arity function for the variant with an initial value, rather than returning that initial value (#567)