Difference between revisions of "LLVM"

From YobiWiki
Jump to navigation Jump to search
m
m
Line 1: Line 1:
  +
=LLVM=
  +
=with Python=
 
==[http://www.llvmpy.org/ llvmpy]==
  +
 
==Numba==
 
==Numba==
 
Numba is a NumPy aware dynamic compiler for Python. It creates LLVM bit-code from Python syntax and then creates a wrapper around that bitcode to call from Python.
 
Numba is a NumPy aware dynamic compiler for Python. It creates LLVM bit-code from Python syntax and then creates a wrapper around that bitcode to call from Python.
Line 28: Line 32:
   
 
'''TODO''' not clear yet from the doc how to use it...
 
'''TODO''' not clear yet from the doc how to use it...
  +
===Pyston===
==[http://www.llvmpy.org/ llvmpy]==
 
  +
by Dropbox
  +
* https://tech.dropbox.com/2014/04/introducing-pyston-an-upcoming-jit-based-python-implementation/
  +
Not mature yet
  +
==old attempts==
  +
* [http://www.mdevan.org/llvm-py/examples.html llvm-py]
  +
* [https://code.google.com/p/rpython/ RPython]
  +
* [https://code.google.com/p/unladen-swallow/ Unladen Swallow]
  +
* [https://code.google.com/p/py2llvm/ py2llvm]

Revision as of 10:34, 20 May 2014

LLVM

with Python

llvmpy

Numba

Numba is a NumPy aware dynamic compiler for Python. It creates LLVM bit-code from Python syntax and then creates a wrapper around that bitcode to call from Python.

pycc allows users to compile Numba functions into a shared library. The user writes the functions, exports them and the compiler will import the module, collect the exported functions and compile them to a shared library. Below is an example:

from numba import *
def mult(a, b):
    return a * b
export('mult f8(f8, f8)'))(mult)
export(['multf f4(f4, f4)', 'multi i4(i4, i4)'])(mult)
export('multc c16(c16, c16)'))(mult)

llpython

Part of llvmpy

The primary goal of the llpython package is to provide a Python dialect/subset that maps directly to LLVM code.
LLPython differs from its originating LLVM translator, Numba, in the following aspects:

  • LLPython code is not intended to work in Python if not translated and wrapped.
  • The LLPython translator only uses LLVM types.
  • LLPython is explicitly typed, and does not support type inference. LLPython does not support implicit casts, all casts must be explicit.
  • LLPython supports code that directly calls the C API, the Python C API, and the llvm.core.Builder methods.

We developed LLPython with the initial goal of simplifying writing LLVM code.

TODO not clear yet from the doc how to use it...

Pyston

by Dropbox

Not mature yet

old attempts