First, I just want to say thank you for the excellent LLVM project. I have been playing with LLVM for the first part of this year and have been quite impressed with what I’ve seen and what is possible. I’ve been coding for a long time, but haven’t had this much fun since I first learned Python. The work you have done has opened the door for a tremendous amount of innovation that I think we are just starting to see. Congratulations to all of the developers.
I started a little project back in January of this year called Numba: https://github.com/numba/numba which uses LLVM to translate from Python byte-code to machine code with the purpose of letting people write faster Python kernels that work on NumPy arrays. Many people currently use a tool like Cython or hand-write an extension to Python in C or C++ when they want to get faster code. Numba will let them get compile their Python code without the extra hassle — because of your work on LLVM. For (a little) more information, here’s a link to the video of the lightning talk I gave at PyCon this year describing Numba and a little bit about how LLVM and Python can work more closely together: http://pyvideo.org/video/657/saturday-morning-lightning-talks
LLVM is still very relevant to Python because of projects like Numba — but you should know that PyPy is no longer using LLVM and Unladen Swallow has not been worked on for several years. The future of LLVM and Python I think is very bright — especially for the scientific and data-analysis user-base.
In order to get Numba working, I first ported the work of Mahadevan R. who wrote rather complete Python bindings to LLVM called llvm-py. Unfortunately, these bindings had not been updated since LLVM 2.8. Now, however, these bindings have been updated for LLVM 3.1 and are now sitting at https://github.com/ContinuumIO/llvm-py We plan to continue to maintain these bindings. Perhaps we could discuss how we might help with the official Python bindings as well as maintain these bindings. As an anecdote to the power and functionality of the llvm-py bindings: a few weeks ago, Dave Beazley (a Python guru) taught a compiler “Master” course in Chicago where the students basically all wrote a compiler in python using ply and llvm-py. It was amazing and very empowering. Several people in that course caught the “bug” of LLVM and Python. We had a to fix a few buglets in llvm-py around static global string initialization, but those changes were pretty simple.
We have ambitious goals for Numba which are achievable primarily because all along the way Numba can be used to speed up real code in the Python ecosystem — especially for people who write math, science, and engineering software in Python. Numba works now for several cases and we’ve managed to get a few people working on the project so that we are now in the process of improving the type system, creating a code-gen path that uses the AST, and performing high-level analysis on the expression graph to generate fast, vectorized code from NumPy array operations written in Python. LLVM is making this all possible.
Mainly my purpose is to introduce myself to this list, communicate my appreciation for your work, and help coordinate with like-minded people who are interested in the power that LLVM brings for fast code generation to high-level languages like Python. We can assist in improving the official Python bindings (but the updated llvm-py bindings do work as well). Dave Beazley (a Python guru) teaches a compiler Master course in Chicago and he used llvm-py in his latest course where all the students built a compiler of a Go-like language in Python using Ply and llvm-py.
If you are interested in numba, check out the code and subscribe to the mailing list by sending an email to email@example.com. The first actual release of Numba will be soon, but until then if you are adventurous feel free to check it out of github.
All the best,