Hy

Latest version: v0.28.0

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

Scan your dependencies

Page 1 of 6

1.0a4

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

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

Other Breaking Changes
------------------------------
* `import` and `require` no longer need outer brackets.
`(import [foo [bar]])` is now `(import foo [bar])`
and `(import [foo :as baz])` is now `(import foo :as baz)`.
To import all names from a module, use `(import foo *)`.
* Lots of objects (listed below) have been spun off to a new package
called `Hyrule`_, from which you can `import` or `require` them.
Thus Hy now brings only the `hy` module and a limited set of core
macros into scope automatically.

* Functions: `butlast`, `coll?`, `constantly`, `dec`, `destructure`, `distinct`, `drop-last`, `end-sequence`, `flatten`, `inc`, `macroexpand-all`, `parse-args`, `pformat`, `postwalk`, `pp`, `pprint`, `prewalk`, `readable?`, `recursive?`, `rest`, `saferepr`, `walk`
* Classes: `PrettyPrinter`, `Sequence`
* Macros: `%`, `:`, `->`, `->>`, `ap-dotimes`, `ap-each`, `ap-each-while`, `ap-filter`, `ap-first`, `ap-if`, `ap-last`, `ap-map`, `ap-map-when`, `ap-reduce`, `ap-reject`, `as->`, `assoc`, `cfor`, `comment`, `defmacro!`, `defmacro/g!`, `defmain`, `defn+`, `defn/a+`, `defseq`, `dict=:`, `do-n`, `doto`, `fn+`, `fn/a+`, `ifp`, `let+`, `lif`, `list-n`, `loop`, `ncut`, `of`, `profile/calls`, `profile/cpu`, `seq`, `setv+`, `smacrolet`, `unless`, `with-gensyms`

* Functions that provide first-class Python operators, such as `+`
in constructs like `(reduce + xs)`, are no longer brought
into scope automatically. Say `(import hy.pyops *)` to get them.
* Hy scoping rules more closely follow Python scoping in certain edge
cases.
* `let` is now a core macro with somewhat different semantics. In
particular, definition-like core macros (`defn`, `defclass`,
`import`) now introduce new names that shadow corresponding
`let`-bound names and persist outside the body of the `let`.
* The constructors of `String` and `FString` now check that the input
would be syntactically legal as a literal.
* `hy.extra.reserved` has been renamed to `hy.reserved`.

New Features
------------------------------
* `hy.repr` now supports several more standard types.
* The attribute access macro `.` now allows method calls. For example,
`(. x (f a))` is equivalent to `(x.f a)`.
* `hy.as-model` checks for self-references in its argument.
* New function `hy.model_patterns.keepsym`.

Bug Fixes
------------------------------
* In comprehension forms other than `for`, assignments (other than
`:setv` and loop clauses) are now always visible in the surrounding
scope.
* `match` now only evaluates the subject once.
* `let` will no longer re-evaluate the default arguments of a
function it's used in.
* `hy.repr` now properly formats bracket strings.
* The `repr` and `str` of string models now include `brackets` if
necessary.
* When standard output can't accommodate Unicode, `hy2py` now crashes
instead of emitting incorrect Python code.
* Fixed a bug with self-requiring files on Windows.
* Improved error messages for illegal uses of `finally` and `else`.

.. _Hyrule: https://github.com/hylang/hyrule

1.0a3

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

Bug Fixes
------------------------------
* Fixed a dependency-management bug that prevented installation of Hy
from a wheel on Pythons < 3.9.

1.0a2

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

Removals
------------------------------
* All reimplementations of functions in the package `Toolz`_ have been
removed. Import these from Toolz (or `CyToolz`_) instead. Beware that
the Toolz functions are not all drop-in replacements for the old Hy
functions; e.g., `partition` has a different order of parameters.

* `complement`, `compose` (formerly `comp` in Hy), `drop`, `first`,
`identity`, `interleave`, `interpose`, `iterate`, `juxt`, `last`,
`merge-with`, `nth`, `partition`, `second`, `take-nth`, `take`

* All aliases of objects in Python's standard library have been removed.
Import these objects explicitly instead.

* From `itertools`: `accumulate`, `chain`,
`combinations-with-replacement` (formerly `multicombinations` in
Hy), `combinations`, `compress`, `count`, `cycle`, `dropwhile`
(formerly `drop-while`), `filterfalse` (formerly `remove`),
`groupby` (formerly `group-by`), `islice`, `permutations`,
`product`, `repeat`, `starmap` (formerly `*map`), `takewhile`
(formerly `take-while`), `tee`, `zip-longest`
* From `functools`: `reduce`
* From `fractions`: `Fraction` (formerly `fraction`)

* The following core predicate functions have been removed. Use
`isinstance` etc. instead.

* `empty?`, `even?`, `every?`, `float?`, `integer-char?`,
`integer?`, `iterable?`, `iterator?`, `keyword?`, `list?`, `neg?`,
`none?`, `numeric?`, `odd?`, `pos?`, `some`, `string?`, `symbol?`,
`tuple?`, `zero?`

* Several other core functions and macros have been removed:

* `keyword`: Use `(hy.models.Keyword (hy.unmangle …))` instead.
* `repeatedly`: Use `toolz.iterate` instead.
* `if-not`: Use `(if (not …) …)` instead.
* `lif-not`: Use `(lif (not …) …)` instead.
* `macro-error`: Use `raise` instead.
* `calling-module`: Now internal to Hy.
* `calling-module-name`: Now internal to Hy.

Other Breaking Changes
------------------------------
* `if` no longer allows more than three arguments. Use `cond` instead.
* `cut` with exactly two arguments (the object to be cut and the
index) now works like Python slicing syntax and the `slice`
function: `(cut x n)` gets the first `n` elements instead of
everything after the first `n`.
* In `defn`, the return-value annotation, if any, is now placed before
the function name instead of after.
* Python reserved words are no longer allowed as parameter names, nor
as keywords in keyword function calls.
* Hy model objects are no longer equal to ordinary Python values.
For example, `(!= 1 '1)`. You can promote values to models with
`hy.as-model` before making such a check.
* The following functions are now called as attributes of the `hy` module:

* `hy.disassemble`, `hy.gensym`, `hy.macroexpand`,
`hy.macroexpand-1`, `hy.repr` (formerly
`hy.contrib.hy-repr.hy-repr`), `hy.repr-register` (formerly
`hy.contrib.hy-repr.hy-repr-register`)

* `cmp` has been renamed to `chainc`.
* `defclass` no longer automatically adds `None` to the end of
`__init__` method definitions.
* All special forms have been replaced with macros. This won't affect
most preexisting code, but it does mean that user-defined macros can
now shadow names like `setv`.
* `hy.repr` no longer uses the registered method of a supertype.
* The constructors of `Symbol` and `Keyword` now check that the input
would be syntactically legal.
* Attempting to call a core macro not implemented on the current
version of Python is now an error.
* `hy.extra.reserved.special` has been replaced with
`hy.extra.reserved.macros`.

New Features
------------------------------
* `hy-repr` is now the default REPL output function.
* The command `python -m hy` now works the same as `hy`.
* New function `hy.as-model`.
* New macro `match` (Python 3.10 only).
* `annotate` is now a user-visible macro.

Bug Fixes
------------------------------
* Fixed issues with newer prereleases of Python 3.10.
* The REPL now properly displays `SyntaxError`\s.
* Fixed a bug in `pprint` in which `width` was ignored.
* Corrected `repr` and `hy.repr` for f-strings.
* `--spy` and `--repl-output-fn` can now overwrite `HYSTARTUP` values.

.. _Toolz: https://toolz.readthedocs.io
.. _CyToolz: https://github.com/pytoolz/cytoolz

1.0a1

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

Removals
------------------------------
* The core function `name` has been removed.
Use `unmangle` or the `name` 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` and `require` can now take macro names as string
literals.
* New standard macros `do-n`, `list-n`, and `cfor`.
* The location of the REPL history file can now be set with the
environment variable `HY_HISTORY`.
* REPL initialization scripts are now supported with the envrionment
variable `HYSTARTUP`.
* The module `hy.extra.reserved` has a new function `special`.
* 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` and `hy2py` 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.

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 ``.

Page 1 of 6

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.