This is pretty close to what I'm doing for my PhD research-- it's an annoyingly hard problem! Travis will probably make smarter design choices than me, but my project has ended up being of limited use due to the non-obvious subset of Python we are able to accelerate. Advice for anyone else trying to add a JIT on top of an existing language: either craft a DSL with extremely well defined boundaries or support the whole language from the beginning.
To fully expound the difference would take a lot of discussion. But, summarizing:
* Numba is not nearly as ambitious as US (Numba will be fine with some user-directed information and with a subset of the language that gets compiled)
* Numba will focus on compilation rather than JITing --- in other words it won't be trying to detect hot-spots and compile segments (actually LLVM is not a good candidate for that sort of thing as it is not a very fast or memory-efficient compiler for a lot of reasons, I believe this is why PyPy does not use it anymore, for example).
* Numba will be much closer to Cython in spirit than Unladen Swallow (or PyPy) --- people who just use Cython for a loop or two will be able to use Numba instead
* Numba will borrow the idea of call-sites from IronPython wherein a function is replaced by a generic function that dispatches based on input types to either cached compiled code for the types specified or the generic function.
* Numba will be mainly about trying to leverage the code-generation of LLVM which multiple hardware manufacturers are using (Intel's OpenCL support, Nvidia's PTX backend, Apple's CLang, etc.) for NumPy arrays
Judging my what I heard, Numba was quite the talk of the town at Pycon (though this could be totally biased - I wasn't there so can't comment first hand!)
10 comments
[ 3.1 ms ] story [ 34.0 ms ] threadIt would be nice to see some benchmarks.
If Numba lives up to expectations, Travis Oliphant should be knighted.
Personally, numerical computing is more important to me. So the 7 benchmarks listed at julialang.org seem great to me.
http://shootout.alioth.debian.org/
(summarizing how Numba differs from Unladen Swallow)
-----
>> what is the difference to http://www.python.org/dev/peps/pep-3146/ ?
To fully expound the difference would take a lot of discussion. But, summarizing:
* Numba is not nearly as ambitious as US (Numba will be fine with some user-directed information and with a subset of the language that gets compiled)
* Numba will focus on compilation rather than JITing --- in other words it won't be trying to detect hot-spots and compile segments (actually LLVM is not a good candidate for that sort of thing as it is not a very fast or memory-efficient compiler for a lot of reasons, I believe this is why PyPy does not use it anymore, for example).
* Numba will be much closer to Cython in spirit than Unladen Swallow (or PyPy) --- people who just use Cython for a loop or two will be able to use Numba instead
* Numba will borrow the idea of call-sites from IronPython wherein a function is replaced by a generic function that dispatches based on input types to either cached compiled code for the types specified or the generic function.
* Numba will be mainly about trying to leverage the code-generation of LLVM which multiple hardware manufacturers are using (Intel's OpenCL support, Nvidia's PTX backend, Apple's CLang, etc.) for NumPy arrays
-Travis