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.corefunctions 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
withmacro definition to match the Python language spec (#656) - Fixed a bug where
py->lispdid 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.ionamespace with polymorphic reader and writer functions (#645) - Added support for coroutines and generators using
yieldsyntax (#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/aredocstring 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
seqing 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
tryspecial form (#640) - Fixed a bug where re-
defing a Var (regardless of^:redefmetadata) 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
::kwsyntax (#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-catfunction 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_seqtobasilisp.lang.seqso it can be used within that module and bybasilisp.lang.runtimewithout 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.templatetobasilisp.templateto match Clojure (#599) - Refactor compiler to use
functools.singledispatchfor type based dispatch (#605) - Rename
List,Map,Set, andVectortoPersistentList,PersistentMap,PersistentSet, andPersistentVectorrespectively (#605)
Bug Fixes
- Fixed a bug where
defforms did not permit recursive references to thedef'ed Vars (#578) - Fixed a bug where
concatcould cause aRecursionErorif used on aLazySeqinstance 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 threadnilfirst arguments (#599)
Removed
- Removed
pyfunctionaldependency in favor of Python standard library functions (#589)
Other
- Basilisp uses
poetryfor dependency and virtual environment management, as well as for publishing to PyPI (#616)
Release v0.1.dev14
New Features
- Added support for
futures (#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
deftypes (#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.jsonnamespace (#484) - Added support for generically diffing Basilisp data structures in
basilisp.datanamespace (#555) - Added support for artificially abstract bases classes in
deftype,defrecord, andreifytypes (#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) getnow respondsnil(or its default) for any unsupported types (#570)nthnow supports only sequential collections (ornil) and will throw an exception for any invalid types (#570)- Use
functools.singledispatchfor to achieve higher performance polymorphism on most runtime functions (#552, #559) - Update the keyword cache to use a Python
threading.Lockrather than an Atom (#552) restno longer returnsnil, it always returns an empty sequence (#558)
Bug Fixes
- Fixed a bug where the Basilisp AST nodes for return values of
deftypemembers could be marked as statements rather than expressions, resulting in an incorrectnilreturn (#523) - Fixed a bug where
defoncewould throw a Python SyntaxError due to a superfluousglobalstatement 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
deftypecould not be referred to directly (defeating the purpose of the static or class method) (#537) - Fixed a bug where
deftypeforms 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
deftypeforms 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
imported 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
reducerequired 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
letfnspecial form (#473) - Added
defn-,declare, anddefoncemacros (#480) - Added EDN reader in the
basilisp.ednnamespace (#477) - Added line, column, and file information to reader
SyntaxErrors (#488) - Added context information to the
CompilerExceptionstring output (#493) - Added Array (Python list) functions (#504, #509)
- Added shell function in
basilisp.shellnamespace (#515) - Added
apply-templatefunction tobasilisp.core.templatenamespace (#516)
Changed
- Change the default user namespace to
basilisp.user(#466) - Changed multi-methods to use a
threading.Lockinternally rather than an Atom (#478) - Changed the Basilisp module type from
types.ModuleTypeto a custom subtype with support for custom attributes (#482) - Basilisp's runtime function
Namespace.get_or_createno longer refersbasilisp.coreby default, which allows callers to excludebasilisp.corenames in thensmacro (#481) - Namespaces now use a single internal lock rather than putting each property inside of an Atom (#494)
- Refactor the testrunner to use fewer
atoms 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
quotespecial 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.walknamespace with generic tree-walker functions (#434) - Added several new higher-order functions (#433)
- Added
basilisp.templatenamespace with templating utility functions (#433) - Added
basilisp.test/arefor 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
Makefileutility for generating the Python code forbasilisp.core(#456)
Changes
- Compile
attrsinstances internally withoutcmpkeyword argument forattrs>= 19.2.0 (#448) - Small Python changes in the compiler to remove redundant operations (#450)
Bug Fixes
- Fixed an issue where
macroexpandandmacroexpand-1attempted 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
ISeqiterators could stack overflow for long sequences (#445) - Fixed the
importertest suite's use ofmultiprocessingfor Python 3.8 (#446) - Correct the
with-metainterface 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
macroexpandandmacroexpand-1functions (#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
ILookupinterface toIAssociative(#410) - Support for Reader Conditional syntax (#409)
Changes
- Python builtins may now be accessed using the
pythonnamespace 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
bindingbehavior to usepush-thread-bindingsandpop-thread-bindings, which use a thread-local for bindings, to more closely emulate Clojure (#405) - Internal
IAsssociative.entryusages 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)
defnforms 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
asyncfunctions (via:asyncmetadata ordefasyncform) and newawaitspecial form (#342) - Symbol and keyword completion at the REPL if
readlineis available (#340) - Macro environment is now being passed as the first argument of macros (#339)
- Create Python literals using
#pyreader 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
defforms in the compiler (#324) - Switch builtin exceptions to use
attrs(#334)