Language Changes
- Pythons 2.6, 3.0, 3.1, and 3.2 are no longer supported
let
has been removed. Python's scoping rules do not make a proper implementation of it possible. Usesetv
instead.lambda
has been removed, butfn
now does exactly whatlambda
diddefreader
has been renamed todefsharp
; what were previously called "reader macros", which were never true reader macros, are now called "sharp macros"try
now enforces the usual Python order for its elements (else
must follow allexcept
s, andfinally
must come last). This is only a syntactic change; the elements were already run in Python order even when defined out of order.try
now requires anexcept
orfinally
clause, as in Python- Importing or executing a Hy file automatically byte-compiles it, or loads a byte-compiled version if it exists and is up to date. This brings big speed boosts, even for one-liners, because Hy no longer needs to recompile its standard library for every startup.
- Added bytestring literals, which create
bytes
objects under Python 3 andstr
objects under Python 2 - Commas and underscores are allowed in numeric literals
- Many more operators (e.g.,
**
,//
,not
,in
) can be used as first-class functions - The semantics of binary operators when applied to fewer or more than two arguments have been made more logical
(** a b c d)
is now equivalent to(** a (** b (** c d)))
, not(** (** (** a b) c) d)
setv
always returnsNone
- When a
try
form executes anelse
clause, the return value for thetry
form is taken fromelse
instead of thetry
body. For example,(try 1 (except [ValueError] 2) (else 3))
returns3
. xor
: If exactly one argument is true, return ithy.core.reserved
is nowhy.extra.reserved
cond
now supports single argument branches
Bug Fixes
- All shadowed operators have the same arities as real operators
- Shadowed comparison operators now use
and
instead of&
for chained comparisons partition
no longer prematurely exhausts input iteratorsread
andread-str
no longer raise an error when the input parses to a false value (e.g., the empty string)- A
yield
inside of awith
statement will properly suppress implicit returns setv
no longer unnecessarily tries to get attributesloop
no longer replaces string literals equal to "recur"- The REPL now prints the correct value of
do
andtry
forms - Fixed a crash when tokenizing a single quote followed by whitespace
Misc. Improvements
- New contrib module
hy-repr
- Added a command-line option
--repl-output-fn