Skip to main content

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.

Author and license

Copyright (C) 2015 Christian Stigen Larsen

Distributed under the LGPL v2.1 or later. You are allowed to change the license on a particular copy to the LGPL v3.0, the GPL v2.0 or the GPL v3.0.

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

lyn-0.0.3.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

lyn-0.0.3-py2.py3-none-any.whl (9.0 kB view details)

Uploaded Python 2Python 3

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

Hashes for lyn-0.0.3.tar.gz
Algorithm Hash digest
SHA256 b0a4be189e74b9fc25b55386fab72900a73a3f0bd46ce0aed4409615ade35cb4
MD5 4443c534075e01fb3fe6c79e128aed66
BLAKE2b-256 f895e9bbf8220df232a2a1ad8f026cdd02b746178eba6b7438cb80e2fd4fb368

See more details on using hashes here.

File details

Details for the file lyn-0.0.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for lyn-0.0.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7b1e3bb8c5baba42d9ccdfae8c9cae6cb209f40f10d119134ac84f7049bdb530
MD5 b64a67e3d19b2d74648172b9bc0de258
BLAKE2b-256 75011757fb6ee6ef384354d162c62b74be254d9dd75f34f6a47b0e1f6c69f015

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page