Skip to content

Commit

Permalink
Merge pull request #1652 from Kodiologist/release
Browse files Browse the repository at this point in the history
Hy 0.15.0
Kodiologist authored Jul 21, 2018

Verified

This commit was signed with the committer’s verified signature.
mike182uk Michael Barrett
2 parents bd0486e + 4020f3d commit addf9c4
Showing 5 changed files with 53 additions and 47 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@ python:
- pypy3
install:
- pip install -r requirements-travis.txt
- pip install --process-dependency-links -e .
- pip install -e .
script: pytest
cache: pip
after_success: make coveralls
83 changes: 41 additions & 42 deletions NEWS.rst
Original file line number Diff line number Diff line change
@@ -1,79 +1,78 @@
.. default-role:: code

Unreleased
0.15.0
==============================

Removals
------------------------------
* Dotted lists, `HyCons`, `cons`, `cons?`, and `list*` have been removed.
These were redundant with Python's built-in data structures and Hy's most
common model types (`HyExpression`, `HyList`, etc.).
* Dotted lists, `HyCons`, `cons`, `cons?`, and `list*` have been
removed. These were redundant with Python's built-in data structures
and Hy's most common model types (`HyExpression`, `HyList`, etc.).
* `&key` is no longer special in lambda lists. Use `&optional` instead.
* Tuple unpacking is no longer built into special forms for function
definition (`fn` etc.)
* Macros `ap-pipe` and `ap-compose` have been removed.
Anaphoric macros do not work well with point-free style programming,
in which case both threading macros and `comp` are more adequate.
* Lambda lists can no longer unpack tuples.
* `ap-pipe` and `ap-compose` have been removed. Use threading macros and
`comp` instead.
* `for/a` has been removed. Use `(for [:async ...] ...)` instead.
* `(except)` is no longer allowed. Use `(except [])` instead.
* `(import [foo])` is no longer allowed. Use `(import foo)` instead.

Other Breaking Changes
------------------------------
* `HyExpression`, `HyDict`, and `HySet` no longer inherit from `HyList`.
This means you can no longer use alternative punctuation in place of
square brackets in special forms (e.g. `(fn (x) ...)` instead of
the standard `(fn [x] ...)`).
* Mangling rules have been overhauled, such that mangled names
are always legal Python identifiers
* `_` and `-` are now equivalent even as single-character names
* Mangling rules have been overhauled; now, mangled names are
always legal Python identifiers.
* `_` and `-` are now equivalent, even as single-character names.

* The REPL history variable `_` is now `*1`
* The REPL history variable `_` is now `*1`.

* Non-shadow unary `=`, `is`, `<`, etc. now evaluate their argument
instead of ignoring it. This change increases consistency a bit
and makes accidental unary uses easier to notice.
instead of ignoring it.
* `list-comp`, `set-comp`, `dict-comp`, and `genexpr` have been replaced
by `lfor`, `sfor`, `dfor`, and `gfor`, respectively, which use a new
syntax and have additional features. All Python comprehensions can now
be written in Hy.
* `hy-repr` uses registered functions instead of methods
* `HyKeyword` no longer inherits from the string type and has been
made into its own object type.
* `HySymbol` no longer inherits from `HyString`.
* `(except)` is no longer allowed. Use `(except [])` instead.
* `(import [foo])` is no longer allowed. Use `(import foo)` instead.
* `&`-parameters in lambda lists must now appear in the same order that
Python expects.
* Literal keywords now evaluate to themselves, and `HyKeyword` no longer
inherits from a Python string type
* `HySymbol` no longer inherits from `HyString`.

New Features
------------------------------
* Python 3.7 is now supported
* Added `mangle` and `unmangle` as core functions
* More REPL history result variables: `*2`, `*3`. Added last REPL error
variable: `*e`
* `defclass` in Python 3 now supports specifying metaclasses and other
keyword arguments
* Added a command-line option `-E` per CPython
* `while` and `for` are allowed to have empty bodies
* `for` supports the various new clause types offered by `lfor`
* Added a new module ``hy.model_patterns``
* `defmacro!` now allows optional args
* Python 3.7 is now supported.
* `while` and `for` are allowed to have empty bodies.
* `for` supports the various new clause types offered by `lfor`.
* `defclass` in Python 3 supports specifying metaclasses and other
keyword arguments.
* Added `mangle` and `unmangle` as core functions.
* Added more REPL history variables: `*2` and `*3`.
* Added a REPL variable holding the last exception: `*e`.
* Added a command-line option `-E` per CPython.
* Added a new module `hy.model_patterns`.

Bug Fixes
------------------------------
* `hy2py` should now output legal Python code equivalent to the input Hy
code in all cases, modulo some outstanding bugs in `astor`
* Fix `(return)` so it works correctly to exit a Python 2 generator
* Fixed a case where `->` and `->>` duplicated an argument
* Fixed bugs that caused `defclass` to drop statements or crash
* Fixed a REPL crash caused by illegle unicode escape string inputs
* `NaN` can no longer create an infinite loop during macro-expansion
* Fixed a bug that caused `try` to drop expressions
* Fixed a bug where the compiler didn't properly compile `unquote-splice`
* Trying to import a dotted name is now a syntax error, as in Python
code in all cases.
* Fixed `(return)` so it can exit a Python 2 generator.
* Fixed a case where `->` and `->>` duplicated an argument.
* Fixed bugs that caused `defclass` to drop statements or crash.
* Fixed a REPL crash caused by illegal backslash escapes.
* `NaN` can no longer create an infinite loop during macro-expansion.
* Fixed a bug that caused `try` to drop expressions.
* The compiler now properly recognizes `unquote-splice`.
* Trying to import a dotted name is now a syntax error, as in Python.
* `defmacro!` now allows optional arguments.
* Fixed handling of variables that are bound multiple times in a single
`let`.

Misc. Improvements
----------------------------
* `hy-repr` supports more standard types
* `hy-repr` uses registered functions instead of methods.
* `hy-repr` supports more standard types.

0.14.0
==============================
5 changes: 1 addition & 4 deletions setup.py
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@ def run(self):
"." + filename[:-len(".hy")])
install.run(self)

install_requires = ['rply>=0.7.6', 'astor', 'funcparserlib>=0.3.6', 'clint>=0.4']
install_requires = ['rply>=0.7.6', 'astor>=0.7.1', 'funcparserlib>=0.3.6', 'clint>=0.4']
if os.name == 'nt':
install_requires.append('pyreadline>=2.1')

@@ -40,9 +40,6 @@ def run(self):
name=PKG,
version=__version__,
install_requires=install_requires,
dependency_links=[
'git+https://github.com/berkerpeksag/astor.git#egg=astor-0.7.0'
],
cmdclass=dict(install=Install),
entry_points={
'console_scripts': [
5 changes: 5 additions & 0 deletions tests/resources/pydemo.hy
Original file line number Diff line number Diff line change
@@ -29,6 +29,11 @@ Call me Ishmael. Some years ago—never mind how long precisely—having little
(setv myset #{4 5 6})
(setv mydict {7 8 9 900 10 15})
(setv emptylist [])
(setv emptytuple (,))
(setv emptyset #{})
(setv emptydict {})
(setv mylistcomp (lfor x (range 10) :if (% x 2) x))
(setv mysetcomp (sfor x (range 5) :if (not (% x 2)) x))
(setv mydictcomp (dfor k "abcde" :if (!= k "c") [k (.upper k)]))
5 changes: 5 additions & 0 deletions tests/test_hy2py.py
Original file line number Diff line number Diff line change
@@ -53,6 +53,11 @@ def assert_stuff(m):
assert m.myset == {4, 5, 6}
assert m.mydict == {7: 8, 9: 900, 10: 15}

assert m.emptylist == []
assert m.emptytuple == ()
assert m.emptyset == set()
assert m.emptydict == {}

assert m.mylistcomp == [1, 3, 5, 7, 9]
assert m.mysetcomp == {0, 2, 4}
assert m.mydictcomp == dict(a="A", b="B", d="D", e="E")

0 comments on commit addf9c4

Please sign in to comment.