Skip to content

Releases: basilisp-lang/basilisp

Release v0.1.0a2

06 Aug 20:56
f6bebc5
Compare
Choose a tag to compare
Release v0.1.0a2 Pre-release
Pre-release

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. as basilisp. 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

07 Jul 12:39
4d737a6
Compare
Choose a tag to compare
Release v0.1.0a1 Pre-release
Pre-release

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 using are (#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 try special form (#640)
  • Fixed a bug where re-defing 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

  • Removed Click as a dependency in favor of builtin argparse (#622, #624, #636)
  • Removed Atomos as a dependency in favor of readerwriterlock (#624)

Release v0.1.dev15

22 Apr 12:50
ca78e9f
Compare
Choose a tag to compare
Release v0.1.dev15 Pre-release
Pre-release

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 to basilisp.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 to basilisp.lang.seq so it can be used within that module and by basilisp.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 to basilisp.template to match Clojure (#599)
  • Refactor compiler to use functools.singledispatch for type based dispatch (#605)
  • Rename List, Map, Set, and Vector to PersistentList, PersistentMap, PersistentSet, and PersistentVector respectively (#605)

Bug Fixes

  • Fixed a bug where def forms did not permit recursive references to the def'ed Vars (#578)
  • Fixed a bug where concat could cause a RecursionEror if used on a LazySeq instance which itself calls concat (#588)
  • Fixed a bug where map literals in function reader macro forms caused errors during reading (#599)
  • Fixed a bug where some-> and some->> threading macros would thread nil 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

18 Jun 21:43
e76e5a1
Compare
Choose a tag to compare
Release v0.1.dev14 Pre-release
Pre-release

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.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, and reify 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 responds nil (or its default) for any unsupported types (#570)
  • nth now supports only sequential collections (or nil) 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 returns nil, 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 incorrect nil return (#523)
  • Fixed a bug where defonce would throw a Python SyntaxError due to a superfluous global 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 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 reduce required a 1-arity function for the variant with an initial value, rather than returning that initial value (#567)

Release v0.1.dev13

17 Mar 01:22
0322fe8
Compare
Choose a tag to compare
Release v0.1.dev13 Pre-release
Pre-release

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, and defonce macros (#480)
  • Added EDN reader in the basilisp.edn namespace (#477)
  • Added line, column, and file information to reader SyntaxErrors (#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 to basilisp.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 refers basilisp.core by default, which allows callers to exclude basilisp.core names in the ns 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 atoms in basilisp.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

26 Jan 16:07
91e9437
Compare
Choose a tag to compare
Release v0.1.dev12 Pre-release
Pre-release

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!, and reset-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 for basilisp.core (#456)

Changes

  • Compile attrs instances internally without cmp keyword argument for attrs >= 19.2.0 (#448)
  • Small Python changes in the compiler to remove redundant operations (#450)

Bug Fixes

  • Fixed an issue where macroexpand and macroexpand-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 of multiprocessing for Python 3.8 (#446)
  • Correct the with-meta interface and replace incorrect usages with vary-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

27 Jul 21:24
65787f3
Compare
Choose a tag to compare
Release v0.1.dev11 Pre-release
Pre-release

New Features

  • macroexpand and macroexpand-1 functions (#394)
  • reset-vals! and swap-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 to IAssociative (#410)
  • Support for Reader Conditional syntax (#409)

Changes

  • Python builtins may now be accessed using the python namespace from within Basilisp code, rather than builtins (#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 use push-thread-bindings and pop-thread-bindings, which use a thread-local for bindings, to more closely emulate Clojure (#405)
  • Internal IAsssociative.entry usages have been changed to ILookup.val_at (#410)

Bug Fixes

  • Allow direct code references to static methods and fields (#392)

Release v0.1.dev10

06 May 12:41
f6eba09
Compare
Choose a tag to compare
Release v0.1.dev10 Pre-release
Pre-release

New Features

  • Added support for Record data types (#374, #378, and #380)
  • Lots more useful core library functions (#373)

Changes

  • Refactor core interfaces under basilisp.lang.interfaces module (#370)
  • Organize interface hierarchy to match Clojure's (#372)
  • Compile qualified basilisp.lang.* module references down to aliased references (#366)
  • let and loop forms may now have empty binding vectors and empty bodies (#382)

Release v0.1.dev9

30 Mar 00:05
fb6f16e
Compare
Choose a tag to compare
Release v0.1.dev9 Pre-release
Pre-release

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 or defasync form) and new await 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

11 Mar 01:47
0b35671
Compare
Choose a tag to compare
Release v0.1.dev8 Pre-release
Pre-release

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)

Bug Fixes

  • Quoted interop forms and properties no longer emit errors (#326)
  • Improve test suite performance by using a mutable dict for lrepr kwargs generation (#331)
  • Attach line and column metadata to functions, quoted, and deref forms (#333)
  • Log internal nth messages as TRACE rather than DEBUG (#335)