Hy

Latest version: v1.0.0

Safety actively analyzes 681866 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 7

0.28.0

=============================

Removals
------------------------------
* `doc` has been removed. Use `(help (get-macro foo))` or `(help
(get-macro :reader foo))` instead.
* `delmacro` has been removed. Use `(eval-when-compile (del (get
_hy_macros (hy.mangle "foo"))))` instead.
* `hy.reserved` has been removed. Use `(.keys (builtins._hy_macros))`
or Python's built-in `keyword` module instead.
* The environment variables `HY_DEBUG` and `HY_FILTER_INTERNAL_ERRORS`
have been replaced with `HY_SHOW_INTERNAL_ERRORS`.

Other Breaking Changes
------------------------------
* `defmacro` and `require` can now define macros locally instead of
only module-wide.
* When a macro is `require`\d from another module, that module is no
longer implicitly included when checking for further macros in
the expansion.
* `hy.M` has been renamed to `hy.I`.
* `hy.eval` has been overhauled to be more like Python's `eval`. It
also has a new parameter `macros`.
* `hy.macroexpand` and `hy.macroexpand-1` have been overhauled and
generalized to include more of the features of `hy.eval`.
* `hy` now only implicitly launches a REPL if standard input is a TTY.
* `hy -i` has been overhauled to work as a flag like `python3 -i`.
* `hy2py` now requires `-m` to specify modules, and uses
the same `sys.path` rules as Python when parsing a module
vs a standalone script.
* New macro `deftype`.
* New macro `get-macro`.
* New macro `local-macros`.

New Features
------------------------------
* New syntax `(hy.R.aaa/bbb.m …)` for calling the macro `m` from the
module `aaa.bbb` without bringing `m` or `aaa.bbb` into scope.
* `nonlocal` now also works for globally defined names.
* `defn`, `defn/a`, and `defclass` now support type parameters.
* `HyReader` now has an optional parameter to install existing
reader macros from the calling module.
* New pragma `warn-on-core-shadow`.

Misc. Improvements
------------------------------
* Some syntax errors raised by core macros now have more informative
messages.
* Logical operators now compile to simpler Python code in some cases.

Bug Fixes
------------------------------
* Implicit returns are now disabled in async generators.
* Fixed parsing of infinite and NaN imaginary literals with an
uppercase "J".
* Double quotes inside of bracketed f-strings are now properly handled.
* Fixed incomplete recognition of macro calls with a unary dotted
head like `((. defn) f [])`.
* `~ *` now produces a syntax error instead of a nonsensical result.
* `nonlocal` now works for top-level `let`-bound names.
* `require` now warns when you shadow a core macro, like `defmacro`
already did.
* Fixed `hy.eval` failing on `defreader` or `require` forms that
install a new reader.
* The parameter `result-ok` that was mistakenly included in the
signature of `hy.macroexpand` is now gone.
* `hy -i` with a filename now skips shebang lines.

0.27.0

=============================

Removals
------------------------------
* Python 3.7 is no longer supported.

Other Breaking Changes
------------------------------
* Reader macros now always read a full identifier after the initial
``. Thus, `*foo` is now parsed as a call to the reader macro named
`*foo`; to unpack a variable named `foo`, say `* foo`.
* The names of reader macros names are no longer mangled.
* Question marks (`?`) are no longer mangled specially, so `foo?` now
mangles to `hyx_fooXquestion_markX` instead of `is_foo`.
* `hy2py`'s recursive mode now expects a module name as input, not any
old directory. You must be in the parent directory of the module
directory.

New Features
------------------------------
* Python 3.12 is now supported.
* New built-in object `hy.M` for easy imports in macros.
* `cut` now has a function version in `hy.pyops`.
* The `py` macro now implicitly parenthesizes the input code, so
Python's indentation restrictions don't apply.
* `try` no longer requires `except`, `except*`, or `finally`, and it
allows `else` even without `except` or `except*`.
* `nonlocal` and `global` can now be called with no arguments, in
which case they're no-ops.
* For easier reading, `hy --spy` now prints a delimiter after the
Python equivalent of your code, before the result of evaluating the
code.

Bug Fixes
------------------------------
* Fixed an installation failure in some situations when version lookup
fails.
* Fixed some bugs with traceback pointing.
* Fixed some bugs with escaping in bracket f-strings
* The parser no longer looks for shebangs in the REPL or `hy -c`.
* `require` with relative module names should now work correctly with
`hy -m`, as well as `hy2py`'s recursive mode.
* `hy.models.Symbol` no longer allows constructing a symbol beginning
with ``.

0.26.0

=============================

Removals
------------------------------
* Coloring error messages and Python representations for models is no
longer supported. (Thus, Hy no longer depends on `colorama`.)

Other Breaking Changes
------------------------------
* Various warts have been smoothed over in the syntax of `'`,
\`, `~`, and `~`:

* Whitespace is now allowed after these syntactic elements. Thus one
can apply `~` to a symbol whose name begins with "".
* \` and `~` are no longer allowed in identifiers. (This was already
the case for `'`.)
* The bitwise NOT operator `~` has been renamed to `bnot`.

* Dotted identifiers like `foo.bar` and `.sqrt` now parse as
expressions (like `(. foo bar)` and `(. None sqrt)`) instead of
symbols. Some odd cases like `foo.` and `foo..bar` are now
syntactically illegal.
* New macro `do-mac`.
* New macro `pragma` (although it doesn't do anything useful yet).
* `hy.cmdline.HyREPL` is now `hy.REPL`.
* Redundant scripts named `hy3`, `hyc3`, and `hy2py3` are no longer
installed. Use `hy`, `hyc`, and `hy2py` instead.

New Features
------------------------------
* Pyodide is now officially supported.
* `.`, `..`, etc. are now usable as ordinary symbols (with the
remaining special rule that `...` compiles to `Ellipsis`).
* On Pythons ≥ 3.7, Hy modules can now be imported from ZIP
archives in the same way as Python modules, via `zipimport`_.
* `hy2py` has a new command-line option `--output`.
* `hy2py` can now operate recursively on a directory.

Bug Fixes
------------------------------
* `hy.REPL` now restores the global values it changes (such as
`sys.ps1`) after `hy.REPL.run` terminates.
* `hy.REPL` no longer mixes up Hy's and Python's Readline histories
when run inside Python's REPL.
* Fixed `hy.repr` of non-compilable uses of sugared macros, such as
`(quote)` and `(quote 1 2)`.

.. _zipimport: https://docs.python.org/3.11/library/zipimport.html

0.25.0

==============================

Breaking Changes
------------------------------
* `dfor` no longer requires brackets around its final arguments, so
`(dfor x (range 5) [x (* 2 x)])` is now `(dfor x (range 5) x (* 2
x))`.
* `except*` (PEP 654) is now recognized in `try`, and a placeholder
macro for `except*` has been added.

Bug Fixes
------------------------------
* `__file__` should now be set the same way as in Python.
* `\N{…}` escape sequences are now recognized in f-strings.
* Fixed a bug with `python -O` where assertions were still partly
evaluated.
* Fixed `hy.repr` of `slice` objects with non-integer arguments.

New Features
------------------------------
* Python 3.11 is now supported.

Misc. Improvements
------------------------------
* `hyc` now requires a command-line argument.
* `hyc` prints each path it writes bytecode to, and its messages now
go to standard error instead of standard output.

0.24.0

==============================

This release is a direct successor to 1.0a4. We've returned to 0.*
version numbers to work around the inflexibility of PyPI and pip
regarding the default version to install. (We skipped some version
numbers because this release is several major releases since 0.20.0.)
Sorry for the mess.

Removals
------------------------------
* Tag macros have been removed. Use reader macros instead, rewriting
`(defmacro "foo" [arg] …)` as
`(defreader foo (setv arg (.parse-one-form &reader)) …)`.
* `with-decorator` and `` have been removed in favor of decorator
lists (see below).
* Fraction literals have been removed. Use `fractions.Fraction`
instead.
* Unrecognized backslash escapes in string and byte literals are
no longer allowed. (They've been `deprecated in Python since 3.6
<https://docs.python.org/3.6/reference/lexical_analysis.html#index-23>`_.)
* A bare `` is no longer a legal symbol.
* `u` is no longer allowed as a string prefix. (It had no effect,
anyway.)
* `hy.read-str` has been removed. Use `hy.read`, which now accepts
strings, instead.

Other Breaking Changes
------------------------------
* Tuples are now indicated with `( … )`, as in `(1 2 3)`, instead of
`(, … )`, as in `(, 1 2 3)`.
* Tuples have their own model type, `hy.models.Tuple`, instead of
being represented as `Expression`\s.
* `if` now requires all three arguments. For the two-argument case
(i.e., with no else-clause), `when` is a drop-in replacement.
* `cond` has a new unbracketed syntax::

(cond [a b] [x y z]) ; Old
(cond a b x (do y z)) ; New

* `defmacro` once again requires the macro name as a symbol, not
a string literal.
* Annotations are now indicated by `^` instead of `^`.
* `annotate` (but not `^`) now takes the target first and the type
second, as in `(annotate x int)`.
* The way f-strings are parsed has changed, such that unescaped double
quotes are now allowed inside replacement fields.
* Non-ASCII whitespace is no longer ignored during tokenization like
ASCII whitespace.
* The mangling rules have been refined to account for Python's
treatment of distinct names as referring to the same variable if
they're NFKC-equivalent. Very little real code should be affected.
* `hy.cmdline.run_repl` has been replaced with
`hy.cmdline.HyREPL.run`.

New Features
------------------------------
* Added user-defined reader macros, defined with `defreader`.
* `defn` and `defclass` now allow a decorator list as their first
argument.
* `...` is now understood to refer to `Ellipsis`, as in Python.
* Python reserved words are allowed once more as parameter names and
keyword arguments. Hy includes a workaround for a CPython bug that
prevents the generation of legal Python code for these cases
(`cpython90678`_).
* New macro `export`.

- Or you can set the variable `_hy_export_macros` to control what
macros are collected by `(require module *)`.

* New macro `delmacro`.
* New function `hy.read_many`.
* New function `hy.model_patterns.parse_if`.
* New function `hy.model_patterns.in_tuple`.
* Added a command-line option `-u` (or `--unbuffered`) per CPython.
* Tab-completion in the REPL now attempts to unmangle names.

Bug Fixes
------------------------------
* Fixed a crash when using keyword objects in `match`.
* Fixed a scoping bug in comprehensions in `let` bodies.
* Literal newlines (of all three styles) are now recognized properly
in string and bytes literals.
* `defmacro` no longer allows further arguments after `* args`.
* `!=` with model objects is now consistent with `=`.
* Tracebacks from code parsed with `hy.read` now show source
positions.
* Elements of `builtins` such as `help` are no longer overridden until
the REPL actually starts.
* Readline is now imported only when necessary, to avoid triggering a
CPython bug regarding the standard module `curses`
(`cpython46927`_).
* Module names supplied to `hy -m` are now mangled.
* Hy now precompiles its own Hy code during installation.

.. _cpython46927: https://github.com/python/cpython/issues/46927#issuecomment-1093418916
.. _cpython90678: https://github.com/python/cpython/issues/90678

0.20.0

==============================

Removals
------------------------------
* Python 3.5 is no longer supported.

New Features
------------------------------
* `let` macro now supports extended iterable unpacking syntax.
* New contrib module `pprint`, a Hy equivalent of `python.pprint`.

Bug Fixes
------------------------------
* Fixed a bug that made `hy.eval` from Python fail on `require`.
* Fixed a bug that prevented pickling of keyword objects.
* Fixed a compiler crash from `setv` with an odd number of arguments in
`defclass`.

Page 2 of 7

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.