Removals
- Python 3.3 is no longer supported
def
is gone; usesetv
insteadapply
is gone; use the new#*
and#**
syntax insteadyield-from
is no longer supported under Python 2- Periods are no longer allowed in keywords
- Numeric literals can no longer begin with a comma or underscore
- Literal
Inf
\s andNaN
\s must now be capitalized like that
Other Breaking Changes
- Single-character "sharp macros" are now "tag macros", which can have longer names
xi
fromhy.extra.anaphoric
is now a tag macro#%
eval
is now a function instead of a special form
New Features
- The compiler now automatically promotes values to Hy model objects as necessary, so you can write
(eval `(+ 1 ~n))
instead of(eval `(+ 1 ~(HyInteger n)))
return
has been implemented as a special form- Added a form of string literal called "bracket strings" delimited by
#[FOO[
and]FOO]
, whereFOO
is customizable - Added support for PEP 492 (
async
andawait
) withfn/a
,defn/a
,with/a
, andfor/a
- Added Python-style unpacking operators
#*
and#**
(e.g.,(f #* args #** kwargs)
) - Added a macro
comment
- Added EDN
#_
syntax to discard the next term while
loops may now contain anelse
clause, likefor
loops#%
works on any expression and has a new&kwargs
parameter%**
- Added a macro
doc
and a tag macro#doc
get
is available as a function~@
(unquote-splice
) form now accepts any false value as empty
Bug Fixes
- Relative imports (PEP 328) are now allowed
- Numeric literals are no longer parsed as symbols when followed by a dot and a symbol
- Hy now respects the environment variable
PYTHONDONTWRITEBYTECODE
- String literals should no longer be interpreted as special forms or macros
- Tag macros (née sharp macros) whose names begin with
!
are no longer mistaken for shebang lines - Fixed a bug where REPL history wasn't saved if you quit the REPL with
(quit)
or(exit)
exec
now works under Python 2- No TypeError from multi-arity
defn
returning values evaluating toNone
try
forms are now possible indefmacro
anddeftag
- Multiple expressions are now allowed in
try
- Fixed a crash when
macroexpand
\ing a macro with a named import - Fixed a crash when
with
suppresses an exception.with
now returnsNone
in this case. - Fixed a crash when
--repl-output-fn
raises an exception - Fixed a crash when
HyTypeError
was raised with objects that had no source position assoc
now evaluates its arguments only once each- Multiple expressions are now allowed in the
else
clause of afor
loop else
clauses infor
andwhile
are recognized more reliably- Statements in the condition of a
while
loop are repeated properly - Argument destructuring no longer interferes with function docstrings
- Nullary
yield-from
is now a syntax error break
andcontinue
now raise an error when given arguments instead of silently ignoring them
Misc. Improvements
read
,read_str
, andeval
are exposed and documented as top-level functions in thehy
module- An experimental
let
macro has been added tohy.contrib.walk