Releases: basilisp-lang/basilisp
Releases · basilisp-lang/basilisp
Release v0.2.1
Changed
- Exceptions occurring during inlining during macroexpansion are no longer obscured by the outer macroexpansion exception (#1013)
Fixed
- Fix the behaviour of
nil
with several collection functions (#1011) - Fix a bug where
keys
andvals
did not yield keys and values from sequences of map entries (#1018) - Fix a bug where
set
andvec
do not produce collections of map entries when called on map arguments (#1020) - Fix lazy sequences not propagating
AttributeError
(#1019)
Full Changelog: v0.2.0...v0.2.1
Release v0.2.0
Added
- Added the
CollReduce
andKVReduce
protocols inbasilisp.core.protocols
and implementedreduce
in terms of those protocols (#927) - Added support for custom data readers (#924)
- Added
*default-data-reader-fn*
(#924) - Added
basilisp.pprint/print-table
function (#983) - Added
basilisp.core/read-seq
function (#986, #999) - Added various compiler arguments to CLI commands (#989)
- Added support for destructuring namespaced symbols using the
:ns/syms
syntax and non-keyword values in standard associative destructuring forms (#836)
Changed
- Improved on the nREPL server exception messages by matching that of the REPL user-friendly format (#968)
- Types created via
deftype
andreify
may declare supertypes as abstract (taking precedence over trueabc.ABC
types) and specify their member list using^:abstract-members
metadata (#942) - Load functions (
load
,load-file
,load-reader
, etc.) now return the value of the last form evaluated. (#984) - nREPL server no longer hangs waiting for client connections to close on exit (#1002)
- Align
basilisp.core/deref
with Clojure to by updating the timeout input argument to be in milliseconds instead of seconds (#1007)
Fixed
- Fix inconsistent behavior with
basilisp.core/with
when thebody
contains more than one form (#981) - Fix an issue with
basilisp.core/time
failing when called outsidebasilisp.core
(#991) - Fix an issue with
basilisp.core/promise
where a thread waiting for a value from another thread might not wake up immediately upon delivery (#983). - Fix using keyword as a function not returning the default value in some cases (#997)
- Fix an issue where Python
SyntaxWarning
s would be emitted for certain compiled code (#996) - Fix an issue where 2- and 3-arity
range
invocations returned unexpected results (#1004)
Removed
- Removed
python-dateutil
andreaderwriterlock
as dependencies, switching to standard library components instead (#976)
Other
- Run PyPy CI checks on Github Actions rather than CircleCI (#971)
Full Changelog: v0.1.1...v0.2.0
Release v0.1.1
Added
- Added several missing functions to
basilisp.core
(#956)
Fixed
- Fixed an issue where attempting to run a namespace from the CLI could fail in certain cases (#957)
- Fixed an issue with
keep
andkeep-indexed
two-arity forms not preserving the transformed values (#962) - Fixed an issue with
basilisp.test/is
where the expected value was misreported on failure of non(= ...)
expr (#965)
Full Changelog: v0.1.0...v0.1.1
Release v0.1.0
Added
- Added
:end-line
and:end-col
metadata to forms during compilation (#903) - Added
basilisp.repl/source
to allow inspecting source code from the REPL (#205) - Added
conj
1 and 0 arities (#954)
Changed
- Updated dozens of type annotations in the compiler to satisfy MyPy 1.11 (#910)
- Update the
StreamReader
methods to stop using the term "token" to refer to individual UTF-8 characters (#915) - Update the list of Python dunder methods which are allowed to be implemented for all
deftype*
andreify*
types (#943) - ISeq now inherits from IPersistentCollection so
coll?
,empty
, andconj
can now be used with sequences (#954)
Fixed
- Fix a bug where
.
characters were not allowed in keyword names (#899) - Fix a bug where nested quotation marks were not escaped properly by various print functions and at the REPL (#894)
- Fix a bug that caused a syntax error when presenting any filepath that includes the MS-Windows
\
file separator to the cli run command (#912) - Fix a bug where the core functions
symbol
andkeyword
would not accept non-string data types (#911) - Fix a bug where the compiler would emit warnings on when a Var was redef'ed even if that Var was initially defined with
^:redef
metadata (#916) - Fix a bug where reader column offset numbering began at 1, rather than 0 (#905)
- Fix a bug where
basilisp.core/boolean
was returning the boolean coercions like Python rather than like Basilisp (#928) - Fix a bug where Basilisp vectors were not callable (#932)
- Fix a bug where
basilisp.lang.seq.LazySeq
instances were not thread-safe (#934) - Fix a bug where Seqs wrapping Python Iterable instances were not thread-safe (#936)
- Fix several bugs where code was being executed from a string with interpolated variables, which could've allowed for code (#938)
- Fix a bug where record types and data readers whose fully qualified name started with a "b" could not be read (#947)
Other
- Add several sections to Concepts documentation module (#666)
- Add REPL documentation module (#250)
- Add documentation module for Basilisp interfaces (#920)
- Add GitHub source links to generated API documentation (#921)
- Update Concepts documentation module with See Also links for most sections (#925)
- Update Sphinx documentation theme (#909)
- Update documentation to directly reference Python documentation and fix many other minor issues and misspellings (#907, #919)
Release v0.1.0b2
Added
- Added filename metadata to compiler exceptions (#844)
- Added a compile-time warning for attempting to call a function with an unsupported number of arguments (#671)
- Added support for explicit cause exception chaining to the
throw
special form (#862) - Added
basilisp.stacktrace
namespace (#721) - Added support for
*flush-on-newline*
to flush theprn
andprintln
output stream after the last newline (#865) - Added support for binding destructuring in
for
bindings (#774) - Added
==
as an alias to=
(#859) - Added custom exception formatting for
basilisp.lang.compiler.exception.CompilerException
andbasilisp.lang.reader.SyntaxError
to show more useful details to users on errors (#870) - Added
merge-with
core function (#860) - Added
fnext
core function (#879) - Added
INamed
interface for Keywords and Symbols (#884) - Added
*print-namespace-maps*
dynamic var support (#882)
Changed
- Cause exceptions arising from compilation issues during macroexpansion will no longer be nested for each level of macroexpansion (#852)
- Support for optional metadata argument in
defmulti
(#857) - Aligned
rem
andquot
methodologies with corresponding Clojure fns (#848)
Fixed
- Fix a bug where
basilisp.lang.compiler.exception.CompilerException
would nearly always suppress line information in it'sdata
map (#845) - Fix a bug where the function returned by
partial
retained the meta, arities, andwith_meta
method of the wrapped function rather than creating new ones (#847) - Fix a bug where exceptions arising while reading reader conditional forms did not include line and column information (#854)
- Fix a bug where names
def
'ed without reader metadata would cause the compiler to throw an exception (#850) - Fix an issue where
concat
on maps was iterating over the keys instead of the key/value pairs (#871) - Fix a bug where the compiler would throw an exception partially macroexpanding forms with
recur
forms provided as arguments (#856) - Fix a bug where the original
(var ...)
form is not retained during analysis, causing it to be lost in calls tomacroexpand
(#888) - Fix issue with the reader var macro failing in syntax quote when unquoting a symbol, e.g. `(#'~symbol) (#889)
- Fix issue where
(str seq)
was printing seq string items without quotation marks (#891) - Fix issue where interop failed to access property name matching a builtins name (#896)
Release v0.1.0b1
Added
- Added support for passing through
:tag
metadata to the generated Python AST (#354) - Added support for calling symbols as functions on maps and sets (#775)
- Added support for passing command line arguments to Basilisp (#779)
- Added support for autocompleting names in the
python/
pseudo-namespace for Python builtins at the REPL (#787) - Added a subcommand for bootstrapping the Python installation with Basilisp (#790)
- Added support for executing Basilisp namespaces directly via
basilisp run
and bypython -m
(#791) - Added the
memoize
core fn (#812) - Added support for
thrown-with-msg?
assertions tobasilisp.test/is
(#831) - Added support for reading scientific notation literals, octal and hex integer literals, and arbitrary base (2-36) integer literals (#769)
- Added support for passing trailing maps to functions which accept Basilisp keyword arguments (#663)
- Added support for loading namespaces as an alias only (#664)
Changed
- Optimize calls to Python's
operator
module into their corresponding native operators (#754) - Allow vars to be callable to adhere to Clojure conventions (#767)
- Adjust input path compatibility in
basilisp.core/load
input path to be relative to the namespace or the root path (#782) - No longer warn on unused bindings when their name begins with
_
(#756) - Improve the Python generation for
do
,if
,let*
, andletfn*
forms to avoid unnecessary extra assignments (#793, #794, #799) - Generate Python classes for
deftype*
andreify*
forms using modern@attr.define
,@attr.frozen
, and@attr.field
APIs (#799) - Generate Protocol functions with nicer names based on the protocol function and dispatch type (#803)
- Loosen the dependency specification for Immutables and Pyrsistent to allow for a wider version range (#805)
- Allow
case
forms with only a default expression (#807) - Make
pr
a dynamic variable (#820) - Emit OS specific line endings for the
println
andprn
fns (#810) - Support any character in character literals (#816)
- Loosen
typing-extensions
dependency's minimal version to 4.7.0 (#809)
Fixed
- Fix issue with
(count nil)
throwing an exception (#759) - Fix issue with keywords not testing for membership in sets when used as a function (#762)
- Fix an issue for executing Basilisp scripts via a shebang where certain platforms may not support more than one argument in the shebang line (#764)
- Fix issue with keywords throwing
TypeError
when used as a function on vectors (#770) - Fix an issue where the constructors of types created by
deftype
anddefrecord
could not be called if they contained-
characters (#777) - Fix issue with the variadic ampersand operator treated as a binding in macros (#772)
- Fix a bug the variadic arg symbol was not correctly bound to
nil
when no variadic arguments were provided (#801) - Fix a bug where the quotient of very large numbers was incorrect (#822)
- Fix a bug where
basilisp.test/is
may fail to generate expected/actual info on failures when declared inside a macro (#829) - Fix a bug where sequential destructuring bindings do not bind names correctly when nested within associative destructuring bindings (#834)
Removed
- Removed support for PyPy 3.8 (#785)
Other
Release v0.1.0b0
Added
- Added rudimentary support for
clojure.stacktrace
withprint-cause-trace
(part of #721) - Added support for
bytes
literals using a#b
prefix (#732) - Added support for Python 3.12 (#734)
- Added a default reader conditional for the current platform (
windows
,darwin
,linux
, etc.) (#692) - Added support for
bencode
binary encoding (part of #412) - Ported nbb's nrepl-server module to basilisp (#412)
Changed
- Basilisp now supports PyTest 7.0+ (#660)
Fixed
- Fix issue with
case
evaluating all of its clauses expressions (#699) - Fix issue with relative paths dropping their first character on MS-Windows (#703)
- Fix incompatibility with
(str nil)
returning "nil" (#706) - Fix
sort-by
support for maps and boolean comparator fns (#709) - Fix
sort
support for maps and boolean comparator fns (#711) - Fix
(is (= exp act))
should only evaluate its args once on failure (#712) - Fix issue with
with
failing with a traceback error when an exception is thrown (#714) - Fix issue with
sort-*
family of funtions returning an error on an empty seq (#716) - Fix issue with
intern
failing when used (#725) - Fix issue with
ns
not being available afterin-ns
on the REPL (#718) - Fixed issue with import modules aliasing using ns eval (#719)
- Fix issue with
ns-resolve
throwing an error on macros (#720) - Fix issue with py module
readerwritelock
locks handling (#722) - Fix issue with basilisp.io/writer :append mode not working (#741)
- Fix issue with attempting to inline functions which reference other Python modules that aren't available in the inline destination (#746)
Removed
- Removed the dependency
astor
for versions of Python 3.9+ (#736) - Removed
basilisp.__version__
in favor of usingimportlib.metadata
for version info (#617) - Removed a shim to Python's
ast
module to support compatibility with Python 3.6 and 3.7 (#749)
Other
- Switch to PyLint and Ruff for linting from Prospector (#739)
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)