github hylang/hy 0.13.0

latest releases: 0.24.0, 1.0a4, 1.0a3...
6 years ago

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. Use setv instead.
  • lambda has been removed, but fn now does exactly what lambda did
  • defreader has been renamed to defsharp; 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 all excepts, and finally 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 an except or finally 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 and str 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 returns None
  • When a try form executes an else clause, the return value for the try form is taken from else instead of the try body. For example, (try 1 (except [ValueError] 2) (else 3)) returns 3.
  • xor: If exactly one argument is true, return it
  • hy.core.reserved is now hy.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 iterators
  • read and read-str no longer raise an error when the input parses to a false value (e.g., the empty string)
  • A yield inside of a with statement will properly suppress implicit returns
  • setv no longer unnecessarily tries to get attributes
  • loop no longer replaces string literals equal to "recur"
  • The REPL now prints the correct value of do and try 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

Don't miss a new hy release

NewReleases is sending notifications on new releases.