Python bindings for GNU Lightning JIT
Project description
Lyn provides Python bindings for GNU Lightning, the light-weight just-in-time (JIT) compiler that translated to native machine code.
The code is hosted on https://github.com/cslarsen/lyn/ and is installable from https://pypi.python.org/pypi/lyn/.
“Lyn” is the Norwegian word for “lightning”.
NOTE: This project is currently in extremely early stages!
Status
As mentioned above, Lyn is fledgling: I’ve just spent a few hours on it, so almost nothing is supported and — in particular — I’ve only targeted x86-64 opcodes just yet.
In spite of this, I’ve managed to create a really simple program in Python that is JIT-compiled to native x86-64 machine code: A glorious function that returns the value of 123! Here’s the code:
#!/usr/bin/env python from lyn import * lib = Lightning() with lib.state() as jit: jit.prolog() # The actual code jit.movi(Register.V0, 123) jit.retr(Register.V0) function = jit.emit_function() print("Should get 123 here: %s" % function())
I’m using ctypes for creating the bindings, which comes with some challenges: GNU Lightning is written in C, and relies heavily on compile-time macros that define machine specific opcodes, register values and so on. Because of this, it would be more natural to simply create bindings through a C extension. On the other hand, though, ctypes makes it possible to ship Lyn as a platform independent, pure Python source. I’ll chew on this for a while, and we’ll see what happens.
Installation
Either:
$ pip install lyn
or:
$ python setup.py install
Requirements
You need GNU Lightning version 2.1.0, built as a shared library.
Remember to configure GNU Lightning with the option --enable-shared. To use the disassembler, you should also add --enable-disassembler.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file lyn-0.0.3.tar.gz
.
File metadata
- Download URL: lyn-0.0.3.tar.gz
- Upload date:
- Size: 15.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
b0a4be189e74b9fc25b55386fab72900a73a3f0bd46ce0aed4409615ade35cb4
|
|
MD5 |
4443c534075e01fb3fe6c79e128aed66
|
|
BLAKE2b-256 |
f895e9bbf8220df232a2a1ad8f026cdd02b746178eba6b7438cb80e2fd4fb368
|
File details
Details for the file lyn-0.0.3-py2.py3-none-any.whl
.
File metadata
- Download URL: lyn-0.0.3-py2.py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
7b1e3bb8c5baba42d9ccdfae8c9cae6cb209f40f10d119134ac84f7049bdb530
|
|
MD5 |
b64a67e3d19b2d74648172b9bc0de258
|
|
BLAKE2b-256 |
75011757fb6ee6ef384354d162c62b74be254d9dd75f34f6a47b0e1f6c69f015
|