Removals
- The core function
name
has been removed.
Useunmangle
or thename
attribute of keyword objects instead. deftag
has been removed. Instead of(deftag foo …)
,
say(defmacro "#foo" …)
.#doc
has been removed. Instead of#doc @
, say(doc "#@")
.__tags__
has been removed. Tag macros are now tracked in
__macros__
.
Other Breaking Changes
- Lambda lists (function parameter lists) have been simplified.
&optional
is gone,&args
is#*
,&kwargs
is#**
, and
&kwonly
is*
. Thus,[a &optional b [c 3] &rest args &kwargs kwargs]
is now[a [b None] [c 3] #* args #** kwargs]
. - Hy models have been renamed to remove "Hy", and are no longer
automatically brought into scope. Thus,HyList
is now
hy.models.List
. eval
is no longer automatically brought into scope. Call it as
hy.eval
(or import it explicitly).- Calling a keyword object now does a string lookup, instead of a
keyword-object lookup. Thus,(:key obj)
is equivalent to(get obj (mangle (. :key name)))
. - To require a tag macro
foo
, instead of(require [module [foo]])
,
you must now say(require [module ["#foo"]])
. - Mangling no longer converts leading hyphens to underscores, and
unmangling no longer converts leading underscores to hyphens. - F-strings now have their own model type, and store their code parts
as models instead of strings.
New Features
- Python 3.10 is now supported.
- Lambda lists now support positional-only arguments.
- F-strings now support
=
syntax per Python. with
now supports unnamed context managers.defmacro
andrequire
can now take macro names as string
literals.- New standard macros
do-n
,list-n
, andcfor
. - The location of the REPL history file can now be set with the
environment variableHY_HISTORY
. - REPL initialization scripts are now supported with the envrionment
variableHYSTARTUP
. - The module
hy.extra.reserved
has a new functionspecial
. - New module
hy.contrib.destructure
for Clojure-style destructuring. - New module
hy.contrib.slicing
for multi-index sequence slicing.
Bug Fixes
- Fixed the identifier
J
being incorrectly parsed as a complex
number. - Attempts to assign to constants are now more reliably detected.
- Fixed a bug where AST nodes from macro expansion did not properly
receive source locations. - Fixed
doc
sometimes failing to find core macros. doc
now works with names that need mangling.- Fixed bugs with
require
of names that need mangling. - Fixed a compiler crash from trying to use
..
as an operator. - Fixed namespace pollution caused by automatic imports of Hy builtins
and macros. require
now works with relative imports and can name modules as
members, as in(require [hy.contrib [walk]])
.- Fixed error handling for illegal macro names.
- Fixed
hyc
andhy2py
not finding relative imports. - Fixed
hy.contrib.walk.smacrolet
requiring a module name.
Misc. Improvements
- The library
astor
is no longer required on Pythons ≥ 3.9.