My favorites | Sign in
Logo
                

Libjit is a library that aims to become the standard tool for dynamic compilation. Unlike its competitors like the nanojit, the GNU lightning, and the LLVM, libjit is a project that is open source and free and free software and faster and more platform-independent and easier in usage and easier in support. Libjit can be reused on the GNU/Linux, GNU, Hurd, Linux, Debian, Ubuntu, Suse, RedHat, Fedora Core, Windows, Windows Vista, Windows XP and many other operating systems, hardware and software platforms.

This site contains libjit-linear-scan a library for dynamic compilation based on libjit. We study fast compilation, dynamic compilation and dynamic verification. We study generation of binary code, "optimal" register allocation, the CLR, the ECMA-335, the Microsoft Common Intermediate Language, virtual machines, embedded systems and the cloud computing.

If you are looking for the official version please check out the DotGNU site. You can download a Windows package of the GNU Portable.NET 0.8.0 on this web site.

Free software for advanced just-in-time and dynamic compilation

The design of libjit and its original source code base were built by Rhys Weatherley and Norbert Bollow. They built the DotGNU and the Portable.NET implementation of the Common Language Infrastructure for the Free Software Foundation. Later Kirill Kononenko, Klaus Treichel, Aleksey Demakov continued the development and design of the library. These researchers fixed the source code and added the missing parts toward the libjit 0.1.2 release. This version is suitable for just-in-time compilation. Secondly, they created with the libjit a just-in-time compiler for the GNU Portable.NET and added a new codec parser into the Portable.NET.

Why should we dynamically compile with the libjit library and its API?

We support a standard API. It's independent of the bytecode format, of the garbage collector, of the shared libraries and the bytecode specifics. We provide standard means for arithmetic operations, types conversions, exceptions handling and memory accesses.

Libjit is in our opinion the best library for development of advanced just-in-time compilation in virtual machine implementations, domain-specific languages, dynamic programming languages, dynamic verification and scripting languages. Unlike the nano JIT and GNU lightning and the LLVM libjit provides all of the following properties:

We believe that a support of new hardware and software platforms by other software developers can be done very quickly. When libjit doesn't know how to generate binary code it fallbacks into an interpretation mode.

Why do you have this web page? Is this a fork of libjit? Should I reuse this branch of the libjit library?

- No this is not a fork.

- Yes you can experiment with this branch of the libjit. However, this code is experimental and we know that it works on our machines. We need a lot more of debugging and testing to be able to add this code into the main repository and build an official release.

How was created this source code base?

We made an integration of a variant of an optimal linear scanning algorithm into the libjit and found that a lot more of research and development are required to make the optimization useful. We created this branch of libjit and added a support of a few optimizations. For example, we support a few "optimal" register allocations and data-flow and control-flow analysis. These algorithms are enabled with various optimization levels and are adaptive. We can only hope that our research helps other software projects that already use or implement dynamic compilation

See more information and downloads section for many answers of questions including this short review, how productivity of libjit design and its approach for just-in-time and fast dynamic compilation compares to use for this task of LLVM or GNU lightning

The source code of the libjit linear scan 0.1.2.5 are available for download

You can have a look at the downloads for a package of the source code of the libjit linear scan 0.1.2.5, for the documentation and research papers and benchmarks and the review of its architecture. (btw, the source code is temporary unavailable. We are debugging it. Meanwhile, you can reuse the git repository of libjit)

This release included besides a support of a few features of the git repository:

Where is libjit library used? For example, do you use it?

Yes we use it.

Libjit research is applied as a research base in a few independent research projects:

Where can I find a documentation and tutorials?

http://www.gnu.org/software/dotgnu/libjit-doc/libjit.html

The primary interface is in C, for maximal reusability. Class interfaces are available for programmers who prefer C++. Designed for portability to all major 32-bit and 64-bit platforms. Simple three-address API for library users, but opaque enough that other representations can be used inside the library in future without affecting existing users. Up-front or on-demand compilation of any function. In-built support to re-compile functions with greater optimization, automatically redirecting previous callers to the new version. Fallback interpreter for running code on platforms that don’t have a native code generator yet. This reduces the need for programmers to write their own interpreters for such platforms. Arithmetic, bitwise, conversion, and comparison operators for 8-bit, 16-bit, 32-bit, or 64-bit integer types; and 32-bit, 64-bit, or longer floating point types. Includes overflow detecting arithmetic for integer types. Large set of mathematical and trigonometric operations (sqrt, sin, cos, min, abs, etc) for inlining floating-point library functions. Simplified type layout and exception handling mechanisms, upon which a variety of different object models can be built. Support for nested functions, able to access their parent’s local variables (for implementing Pascal-style languages).

--Rhys Weatherley

The mailing lists and google groups

Dotgnu-pnet mailing list

If you want to ask about use of libjit with any other project you probably might be interested to contact mailing lists of those projects. We think the following projects might be interested to use libjit:

How to contribute to the development of the libjit? How can I get a few special improvements into the libjit that my group wants for its software and hardware platform?

Your job queries and monetary donations can help us to contribute more of our precious time

Please use savannah and libjit mailing list for submission of your patch or to report a bug you found. Please tell us your thoughts, share your idea on how you would like use libjit library. Please let us know your suggestions on how libjit community may improve libjit library even better for you, for your business needs or your cutting edge research project.

If you are interested in submission of your own source code or a patch of a new "smart" algorithm or you find a need for a repository access then you probably may want an access to the repository of the libjit linear scan.

Access to the repository of the libjit linear scan is given on the first request.

Related projects

A project led by Novell (formerly by Ximian) to create an ECMA standard compliant, .NET-compatible set of tools, including among others a C# compiler and a CLR implementation.

A software framework available with several Microsoft Windows operating systems. It includes a large library of coded solutions to prevent common programming problems and a virtual machine that manages the execution of programs written specifically for the framework. The .NET Framework is a key Microsoft offering and is intended to be used by most new applications created for the Windows platform.

A .NET platform for extremely resource-constrained devices.

An extensible embedded operating system written in C#. Cosmos also encompasses a compiler (IL2CPU) for converting CIL (.NET) bytecode into native instructions. The operating system is compiled together with a user program and associated libraries (written in any .NET language) using IL2CPU to create a bootable standalone native binary. The binary can be run off a floppy, usb key, or inside a VM. Cosmos is in early stages of development. The currently supported architecture is x86, with more planned.

An open source .NET-C# based operating system currently under development by a group of volunteers and presided over by a team of six project administrators (Mircea-Cristian Racasan, Bruce Markham, Johann MacDonagh, Sander van Rossen, Jae Hyun and William Lahti). This operating system is only one of two C# based operating systems released under an open source license. SharpOS is still under major development with only one public version available and a basic command line interface

A Ruby real-time computer vision extension running under GNU+Linux and Microsoft Windows

The Ludicrous JIT Compiler

Our contact information:









Hosted by Google Code