2b11b9be20
Importing or executing a Hy file now loads the byte-compiled version if it exists and is up to date, and if not, the source is byte-compiled after it's parsed.
This change can speed up Hy a lot. Here are some examples comparing run times of the current master (491b474e
) to this commit, on my laptop with Python 3.6:
- `nosetests --exclude='test_bin'` goes from 3.8 s to 0.7 s (a 5-fold speedup)
- `hy -c '(print "hello world")` goes from 0.47 s to 0.20 s (a 2-fold speedup)
- Rogue TV's startup goes from 3.6 s to 0.4 s (a 9-fold speedup)
Accompanying changes include:
- `setup.py` now creates and installs bytecode for `hy.core`, `hy.contrib`, and `hy.extra`.
- The `hyc` command under Python 3 now creates bytecode in `__pycache__`, as usual for Python 3, instead of putting the `.pyc` right next to the source file like Python 2 does.
I've removed a test of `hy.extra.anaphoric.a-if` that triggers #1268 when the test file is byte-compiled and then hits some weird `macroexpand` bug or something when I try to work around that—Nose crashes when trying to produce an error message, and I can't seem to replicate the bug without Nose.
25 lines
445 B
INI
25 lines
445 B
INI
[nosetests]
|
|
detailed-errors=1
|
|
with-coverage=1
|
|
cover-package=hy
|
|
nocapture=1
|
|
|
|
[wheel]
|
|
universal = 1
|
|
|
|
[coverage:run]
|
|
omit =
|
|
*/python?.?/*
|
|
*/lib-python/?.?/*.py
|
|
*/lib_pypy/_*.py
|
|
*/site-packages/nose/*
|
|
*/pypy/*
|
|
|
|
[coverage:report]
|
|
exclude_lines =
|
|
# Have to re-enable the standard pragma
|
|
pragma: no cover
|
|
# We want ignore_errors so we don't get NoSource warnings for loading
|
|
# byte-compiled Hy modules.
|
|
ignore_errors = True
|