Releases: basilisp-lang/basilisp
Releases · basilisp-lang/basilisp
Release v0.1.0a2
Added
- Added support for fixtures in
basilisp.test
(#654) - Added support for Python 3.10 and 3.11 (#659, #693)
- Added a Sphinx autodoc plugin for generating API documentation for Basilisp namespaces (#658)
- Added support for rewriting required namespaces starting with
clojure.
asbasilisp.
if the original name isn't found on the import path (#670, #676) - Added support for inlining simple functions (#673)
- Added the
clojure.core
functions from v1.11 (#672)
Changed
- Set tighter bounds on dependency version ranges (#657)
- Improved on and completed several different sections of the documentation (#661, #669)
- Delete unused utility functions after they are generated and executed by the REPL to save memory (#674)
Fixed
- Fixed the
with
macro definition to match the Python language spec (#656) - Fixed a bug where
py->lisp
did not convert map keys or values into Basilisp objects (#679)
Other
- Run CPython CI checks on Github Actions rather than CircleCI (#683)
- Remove support for Python 3.6 and 3.7, which are both EOL (#691)
- Fix test suite failures on Windows and add Github Actions runners for testing on Windows (#688)
- Update Prospector version for linting (#694)
New Contributors
Full Changelog: v0.1.0a1...v0.1.0a2
Release v0.1.0a1
Added
- Added a bootstrapping function for easily bootstrapping Basilisp projects from Python (#620)
- Added support for watchers and validator functions on Atoms and Vars (#627)
- Added support for Taps (#631)
- Added support for hierarchies (#633)
- Added support for several more utility Namespace and Var utility functions (#636)
- Added
basilisp.io
namespace with polymorphic reader and writer functions (#645) - Added support for coroutines and generators using
yield
syntax (#652)
Changed
- PyTest is now an optional extra dependency, rather than a required dependency (#622)
- Generated Python functions corresponding to nested functions are now prefixed with the containing function name, if one exists (#632)
basilisp.test/are
docstring now indicates that line numbers may be suppressed on assertion failures created usingare
(#643)- Multimethods now support providing a custom hierarchy and dispatch to registered values using
isa?
(#644)
Fixed
- Fixed a bug where
seq
ing co-recursive lazy sequences would cause a stack overflow (#632) - Fixed a spurious failure in the test runner and switched to using macro forms for test line numbers (#631)
- Fixed a bug that allowed dynamic Vars to be
set!
even if they weren't thread-bound (#638) - Fixed a bug where it was impossible to specify negative CLI options for the compiler flags (#638)
- Fixed a bug where it was impossible to use more than a single body expression in a
try
special form (#640) - Fixed a bug where re-
def
ing a Var (regardless of^:redef
metadata) would not update metadata or dynamic flag (#642) - Fixed a bug where private Vars could be resolved from the source namespace of a public macro during macroexpansion (#648)
- Fixed a bug where trailing quotes were not allowed in Symbols and Keywords (#650)
Removed
Release v0.1.dev15
New Features
- Added support for auto-resolving namespaces for keyword from the current namespace using the
::kw
syntax (#576) - Added support for namespaced map syntax (#577)
- Added support for numeric constant literals for NaN, positive infinity, and negative infinity (#582)
- Added
*basilisp-version*
and*python-version*
Vars tobasilisp.core
(#584) - Added support for function decorators to
defn
(#585) - Added the current Python version (
:lpy36
,:lpy37
, etc.) as a default reader feature for reader conditionals (#585) - Added default reader features for matching Python version ranges (
:lpy36+
,:lpy38-
, etc.) (#593) - Added
lazy-cat
function for lazily concatenating sequences (#588) - Added support for writing EDN strings from
basilisp.edn
(#600) - Added a persistent queue data type (#606)
- Added support for transducers (#601)
- Added support for Python 3.9 (#608)
- Added support for 3-way comparators (#609)
Changed
- Moved
basilisp.lang.runtime.to_seq
tobasilisp.lang.seq
so it can be used within that module and bybasilisp.lang.runtime
without circular import (#588) - Keyword hashes are now pre-computed when they are created, so they do not need to be recomputed again to be fetched from the intern cache (#592)
- The compiler now uses the pre-computed hash to lookup keywords directly, which should improve lookup time for repeated invocations (#592)
- Symbol hashes are now pre-computed when they are created (#592)
- Moved
basilisp.core.template
tobasilisp.template
to match Clojure (#599) - Refactor compiler to use
functools.singledispatch
for type based dispatch (#605) - Rename
List
,Map
,Set
, andVector
toPersistentList
,PersistentMap
,PersistentSet
, andPersistentVector
respectively (#605)
Bug Fixes
- Fixed a bug where
def
forms did not permit recursive references to thedef
'ed Vars (#578) - Fixed a bug where
concat
could cause aRecursionEror
if used on aLazySeq
instance which itself callsconcat
(#588) - Fixed a bug where map literals in function reader macro forms caused errors during reading (#599)
- Fixed a bug where
some->
andsome->>
threading macros would threadnil
first arguments (#599)
Removed
- Removed
pyfunctional
dependency in favor of Python standard library functions (#589)
Other
- Basilisp uses
poetry
for dependency and virtual environment management, as well as for publishing to PyPI (#616)
Release v0.1.dev14
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)
Release v0.1.dev13
New Features
- Added support for Shebang-style line comments (#469)
- Added multiline REPL support using
prompt-toolkit
(#467) - Added node syntactic location (statement or expression) to Basilisp AST nodes emitted by the analyzer (#463)
- Added
letfn
special form (#473) - Added
defn-
,declare
, anddefonce
macros (#480) - Added EDN reader in the
basilisp.edn
namespace (#477) - Added line, column, and file information to reader
SyntaxError
s (#488) - Added context information to the
CompilerException
string output (#493) - Added Array (Python list) functions (#504, #509)
- Added shell function in
basilisp.shell
namespace (#515) - Added
apply-template
function tobasilisp.core.template
namespace (#516)
Changed
- Change the default user namespace to
basilisp.user
(#466) - Changed multi-methods to use a
threading.Lock
internally rather than an Atom (#478) - Changed the Basilisp module type from
types.ModuleType
to a custom subtype with support for custom attributes (#482) - Basilisp's runtime function
Namespace.get_or_create
no longer refersbasilisp.core
by default, which allows callers to excludebasilisp.core
names in thens
macro (#481) - Namespaces now use a single internal lock rather than putting each property inside of an Atom (#494)
- Refactor the testrunner to use fewer
atom
s inbasilisp.test
(#495)
Bug Fixes
- Fixed a reader bug where no exception was being thrown splicing reader conditional forms appeared outside of valid splicing contexts (#470)
- Fixed a bug where fully Namespace-qualified symbols would not resolve if the current Namespace did not alias the referenced Namespace (#479)
- Fixed a bug where the
quote
special form allowed more than one argument and raised an unintended exception when no argument was provided (#497) - Fixed a bug where compiler options specified via command-line argument or environment variable were not honored by the importer (#507)
- Fixed a bug where private Vars from other Namespaces could be referenced if the Namespace was aliased when it was required (#514)
- Fixed a bug where collections with trailing end tokens separated from the collection only by a comment (#520)
Release v0.1.dev12
New Features
- Added new control structures:
dotimes
,while
,dorun
,doall
,case
,for
,doseq
,..
,with
,doto
(#431) - Added
basilisp.walk
namespace with generic tree-walker functions (#434) - Added several new higher-order functions (#433)
- Added
basilisp.template
namespace with templating utility functions (#433) - Added
basilisp.test/are
for writing multiple similar assertions (#433) - Added many new collection and sequence functions (#439)
- Added support for Promises (#440)
- Added support for Python 3.8 (#447)
- Added
vary-meta
,alter-meta!
, andreset-meta!
utility functions (#449) - Added support for the primitive type coercion API (#451)
- Added support for the unchecked arithmetic API (#452)
- Added a
Makefile
utility for generating the Python code forbasilisp.core
(#456)
Changes
- Compile
attrs
instances internally withoutcmp
keyword argument forattrs
>= 19.2.0 (#448) - Small Python changes in the compiler to remove redundant operations (#450)
Bug Fixes
- Fixed an issue where
macroexpand
andmacroexpand-1
attempted to resolve symbols rather than leaving them unresolved (#433) - Fixed an issue with transient macro namespace symbol resolution in the analyzer (#438)
- Fixed a bug where
ISeq
iterators could stack overflow for long sequences (#445) - Fixed the
importer
test suite's use ofmultiprocessing
for Python 3.8 (#446) - Correct the
with-meta
interface and replace incorrect usages withvary-meta
(#449) - Fixed an issue where line/column metadata was not properly being fetched by the analyzer (#454)
- Warnings for Basilisp code now indicate namespace and line number of that code (#457)
- Errors resolving nested symbols are now much more helpful (#459)
Release v0.1.dev11
New Features
macroexpand
andmacroexpand-1
functions (#394)reset-vals!
andswap-vals!
Atom functions (#399)format
,printf
, and a few other formatting functions (#401)rand
,rand-int
, and a few other basic random functions (#402)assoc-in
,update-in
, and a few other associative utility functions (#404)- Several namespace utility functions (#405)
- Preliminary support for Python 3.8 (#406 and #407)
- Added the
ILookup
interface toIAssociative
(#410) - Support for Reader Conditional syntax (#409)
Changes
- Python builtins may now be accessed using the
python
namespace from within Basilisp code, rather thanbuiltins
(#400) - Basilisp code files can now be named and organized more like Clojure projects.
__init__
files are not necessary, though they may still be used. Folders can bear the same name as a namespace file, which will allow nesting. (#393) - Renamed Basilisp's parser module to analyzer, to more accurately reflect it's purpose (#390)
- Changed
binding
behavior to usepush-thread-bindings
andpop-thread-bindings
, which use a thread-local for bindings, to more closely emulate Clojure (#405) - Internal
IAsssociative.entry
usages have been changed toILookup.val_at
(#410)
Bug Fixes
- Allow direct code references to static methods and fields (#392)
Release v0.1.dev10
Release v0.1.dev9
New Features
- Add support for custom data types (#352)
- Add an environment variable which allows users to disable emitting Python AST strings (#356)
- Functions now support metadata (#347)
defn
forms can attach metadata to functions via an attribute map (#350)- Basilisp code can be executed as a script via the CLI from standard in (#349)
- Support for
async
functions (via:async
metadata ordefasync
form) and newawait
special form (#342) - Symbol and keyword completion at the REPL if
readline
is available (#340) - Macro environment is now being passed as the first argument of macros (#339)
- Create Python literals using
#py
reader tag and corresponding Basilisp data structure (#337)
Bug Fixes
- Nested Python imports can no longer be obscured by their parent module name (#360)
Release v0.1.dev8
Non-code Changes
- CircleCI is now being used to build Basilisp.
- CircleCI is now building Basilisp on PyPy.
New Features
- Basilisp compiler parses Basilisp code into an intermediate AST prior to Python code generation (#325)
- Add meta to
def
forms in the compiler (#324) - Switch builtin exceptions to use
attrs
(#334)