Here's another interesting open-source project that's leveraging LLVM
to do some interesting things with the Python programming language.
Shared this week on the LLVMdev mailing list
was Pymothoa, another LLVM JIT extension to Python.
As explained on the project's web-site
, "Pymothoa extends the Python language by adding JIT compilation without any modification of the interpreter source code. Pymothoa lives at the application level. It uses the AST generated by Python. Therefore, users write in the original Python syntax but with a new contextual meaning in some cases using the new dialect provided by Pymothoa. User uses the decorators provided to mark Python functions for JIT compilation. Pymothoa uses LLVM for the JIT ability. Comparing to writing C-extension to speedup Python, Pymothoa is less cumbersome and easier to distribute as the user does not need to compile the C-extensions. Programming in the Pymothoa dialect is similar to writing in C. Variables must be declared and are statically typed. Despite a few extra constructs, the syntax is the same as raw Python code."
Pymothoa supports using Python syntax for low-level C-like programming and supports portable vector programming. However, it does not currently support exceptions or Python objects and does not work for class methods. Pymothoa works with Python 2.6 and newer while being able to take advantage of LLVM 3.1.
So far the responses from those involved with LLVM have been very positive towards Pymothoa. E.g. "This is awesome! The noninvasive approach that you took is really cool." "That looks very interesting! It is very nice to see how easy it is to install and how easy it is to add proper function annotations. Also, the generated source code seems to be a good start."
Among other projects using LLVM with Python are Unladen Swallow and PyPy. PyPy
is a re-implementation of Python within Python itself that supports C and LLVM targets. Unladen Swallow
is an LLVM-based Python compiler that strives to be over five times faster than CPython, maintain source-level compatibility, stable application performance, and other performance-related features by leveraging the LLVM compiler infrastructure.