Skip to content

Releases: basilisp-lang/basilisp

Release v0.2.1

29 Aug 17:43
abaf009
Compare
Choose a tag to compare

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 and vals did not yield keys and values from sequences of map entries (#1018)
  • Fix a bug where set and vec 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

27 Aug 14:01
2116945
Compare
Choose a tag to compare

Added

  • Added the CollReduce and KVReduce protocols in basilisp.core.protocols and implemented reduce 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 and reify may declare supertypes as abstract (taking precedence over true abc.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 the body contains more than one form (#981)
  • Fix an issue with basilisp.core/time failing when called outside basilisp.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 SyntaxWarnings 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 and readerwriterlock 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

17 Aug 01:05
caf1bfc
Compare
Choose a tag to compare

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 and keep-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

09 Aug 15:47
2998e81
Compare
Choose a tag to compare

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* and reify* types (#943)
  • ISeq now inherits from IPersistentCollection so coll?, empty, and conj 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 and keyword 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

28 May 13:15
c4f6a31
Compare
Choose a tag to compare

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 the prn and println 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 and basilisp.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 and quot methodologies with corresponding Clojure fns (#848)

Fixed

  • Fix a bug where basilisp.lang.compiler.exception.CompilerException would nearly always suppress line information in it's data map (#845)
  • Fix a bug where the function returned by partial retained the meta, arities, and with_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 to macroexpand (#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

25 Jan 22:42
36994ba
Compare
Choose a tag to compare
Release v0.1.0b1 Pre-release
Pre-release

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 by python -m (#791)
  • Added the memoize core fn (#812)
  • Added support for thrown-with-msg? assertions to basilisp.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*, and letfn* forms to avoid unnecessary extra assignments (#793, #794, #799)
  • Generate Python classes for deftype* and reify* 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 and prn 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 and defrecord 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

  • Improve the state of the Python type hints in basilisp.lang.* (#797, #784)
  • Update Sphinx and its associated contrib libraries to ^7.1.0 (#815)

Release v0.1.0b0

29 Dec 18:56
85ffd66
Compare
Choose a tag to compare
Release v0.1.0b0 Pre-release
Pre-release

Added

  • Added rudimentary support for clojure.stacktrace with print-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 after in-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 using importlib.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

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)