For a list of breaking changes, check here
- Fix function reference equality #587
- Don't convert Clojure values to JS values automatically in interop #602
- Calling comment with 49 (or more) args fails in CLJS #603
- Use
IllegalArgumentException
incase
when providing duplicate dispatch values - Improve error message when protocol not found for class
- Add
thread-bound?
predicate #560 - Allow
set!
to mutate objects in CLJS #563 - Experimental
SCI_ELIDE_VARS
environment variable for smaller CLJS bundle size - Support trailing metadata in
defn
#567 - GC improvement: don't hang on to all external bindings in closure
- Several performance improvements
- Expose
intern
in core API - Several fixes regarding
try
/catch
in CLJS #583, #584, #585 case
expression generated by macro doesn't work correctly #586
- Fix metadata on non-constant map literal expression #546
- Support
:reload-all
#552 - Support new kwargs handling from 1.11.0 #553.
- Allow dynamic
:doc
ondef
/defn
#554. - Fix metadata on nested evaluated map #555
- Bug with protocol methods in record where later arg overrides "this" #557
- Support :rename in :refer-clojure #558
- Add
aset-...
,delay?
,bit-clear
- Add
bound-fn
andbound-fn*
- Add arg count check for
clojure.core/for
- Detect cyclic load dependencies #531
- Add
force
- Add
dissoc!
(@wilkerlucio)
- BREAKING: Do not merge ex-data into sci error #534 (@GreshamDanielStephens)
- Pick fn arity independent of written order #532 (@GreshamDanielStephens)
(instance? clojure.lang.IAtom 1)
returnstrue
#537- Fix
ns-unmap
on referred var #539
- if with falsy literal returns nil #529
- Fix error reporting in case of arity error #518
- Shadowing record field names in protocol functions #513
- Fix destructuring in protocol method for record #512
- Faster processing of maps, sets and vectors #482
- Prioritize current namespace vars in syntax quote #509
- Fix ns-publics to not include refers #520
- Add
refer-clojure
macro #519 - Syntax quote resolves referred var incorrectly #526
- Priorize referred vars over vars in current ns #527
- Improvements for using
type
ondefrecord
#492 - Deref vars at analysis time that have
:inline
metadata in Clojure #483 - Keep only location metadata for seqs and symbols #488
- Conditionally defined vars should not have metadata #496
- Fix interop on map #506
- Performance improvements #500, #502, #504
- Fix shadow-cljs warnings #499
Thanks for contributing to this release:
@lread, @patrick-galvin, @SevereOverfl0w, @djblue, @kwrooijen, @sogaiu, @joinr, @RickMoynihan, @galdober
- Removed
:realize-max
and:preset :termination-safe
. In the light of #348 it would be misleading to claim that sci can guarantee termination within reasonable time.
- Add
class?
,iterator-seq
,remove-watch
,realized?
,clojure.walk/macroexpand-all
,find-var
,lazy-cat
,bound?
,*print-namespace-maps*
,get-thread-bindings
,var-get
,var-set
,with-local-vars
- Add
fork
API function #369 - Add API functions for parsing code and evaluating forms:
sci.core/reader
,sci.core/parse-string
,sci.core/parse-next
,sci.core/eval-form
#404 - Support implementing
IDeref
,IAtom
,IAtom2
(and CLJS equivalents) #401 - Add API vars
print-meta
,print-level
which can be used withsci.core/binding
to control the dynamic var equivalent in sci programs - Support calling
symbol
on a var #453 :disable-arity-checks
option: when used, sci behaves similarly to CLJS/JS by not checking the provided number of arguments and allowing less or more for single and fixed arity functions #460
- Alter-var-root uses thread-bound value to update #359
- Eval metadata on var created with defn #371
- Metadata fn on var f fails if referring to f #363
- Fix missing protocol methods #367 (@patrick-galvin)
- Support multiple methods of protocol on defrecord
- Allow re-binding of core vars with clojure.core/with-redefs #375
- Fix false dynamic binding #379
- Don't eval record returned from reader function #386
- Implement
->
andas->
as normal macros #390, #462 (@kwrooijen) defn
should not introduce local for name in body #384- Fix wrong arity in error message when calling macro #392
- Throw when trying to redefine referred var #398
- Fix for
use
120175f - Fix importing protocol classes from namespaces with hyphens #410
- Performance enhancements #415, #452, #468, #470, #472, #473, #475, #478, #480
- Support top-level do emitted from macro #421
- Support map constructor for maps #431
- Partial support for multiple reified classes 323a257
- Fix calling literal symbol babashka/babashka#622
- Allow user-defined vars when def is allowed #434
- Fix default destructuring with false #436
- Fix reflection warning in multimethods code #437 (@galdober)
- Support nested libspecs #399
- Aliases in protocol functions should work #440
- Allow users to override :line metadata #443
- Support second arg (env) in
resolve
- Preserve and eval reader meta on coll literals and functions #447, #448
- Fix #js object reading #449
- Support unmap for imported classes #432
- Fix for reader conditional parsing borkdude/edamame#65
- Dotted field access for JS interop #450
- Syntax checks for binding #458
- Add
boolean?
to constant check #465 (@kwrooijen) - Check macro var value at analysis time #467
- Excluded clojure var still gets resolved to in syntax quote #466
Thank to @jeroenvandijk, @jjttjj, @justone, @sogaiu and @armincerf for contributing.
- Implement hierarchies (
derive
etc.) #237 - Implement multimethods #236
- Add
ns-interns
,ns-imports
,ns-refers
,ns-map
,all-ns
- Add
do-template
- Add
clojure.edn
namespace - Add
promise
anddeliver
(@jeroenvandijk) - Add
:readers
option to support data readers (@jjttjj) - Add
tagged-literal
- Add
when-some
andif-some
(@justone) - Add
re-matcher
- Add
re-groups
(@sogaiu) - Implement
read-string
+eval
#285 - Add
ns-unmap
(@sogaiu) - Support
*print-length*
#294 - Add
while
macro #296 - Add
clojure.repl/find-doc
#304 - Add
clojure.repl/apropos
#317 - Add
memoize
- Add
load-string
#307 - Add
clojure.repl/pst
- Add
with-bindings
macro #289 - Add
ns-resolve
- Add
clojure.core/read
#317 - Add
remove-ns
#318 - Add
requiring-resolve
#316 - Add
tagged-literal?
function (@armincerf) - Support
with-redefs
#325 - New
create-ns
,new-macro-var
,copy-var
,init
andeval-string*
API functions - Add
enumeration-seq
- Add
bean
- Support GraalVM java11 #332
- Support
*print-meta*
#334 - Support
clojure.core/intern
#336 - Defprotocol and defrecord support #279, #319
- Add
double-array
andshort-array
- Add support for
*print-level*
- Elide metadata from function results (this makes calling evaluated functions from JavaScript easier) #259
- Eval metadata on vars (e.g.
(def ^{:test (fn [] \"foo\")} x)
). - Syntax check on amount of args for
if
(@jeroenvandijk) - Support namespace metadata #269
require
can now be used as a functionfind-ns
should returnnil
for non-existent namespace #299- Mark
dotimes
as termination-safe #298 - Fix metadata on syntax-quoted values #301
- Add support for
:refer :all
in namespace form #297 - Support
:rename
in:require
#303 - Add support for
use
#302 resolve
can now be used a functionloop
bindings can refer to previous ones- JS interop improvements #312
- Fix handling
atom
with metadata #314 - Fix unqualified binding of
when
andnth
infor
macro - More JS interop improvements (@jeroenvandijk)
- Fix for variadic recur #321
- Fix for associative destructuring (commit)
- Add syntax check for
ns
macro: first arg is required and should be symbol - Fix dynamic binding for functions
- Fix parser line numbers when using shebang
- Remove Java API, don't include AOT-ed sources in release
- Preserve location information in error when
NullPointerException
occurs - Support alternative field access syntax
(. Integer -SIZE)
#339 - Check syntax of
def
and report too many arguments #340 - Fix alternative field access syntax
(Integer/SIZE)
- Fix resolving var from other namespace via refer
Details about releases prior to v0.1.0 can be found here.
- Do not merge ex-data into sci error #534
- Removed
:realize-max
and:preset :termination-safe
. In the light of #348 it would be misleading to claim that sci can guarantee termination within reasonable time.
:row
and:col
metadata have been renamed to:line
and:column
to be more compatible with Clojure.
- macros provided via options (functions marked with
:sci/macro
metadata) now have two additional arguments at the start:&env
and&form
.