LibJIT

The Libjit Just-In-Time compilation library, generally known as libJIT, is a library for development of advanced just-in-time compilation (JIT) in virtual machine implementations, dynamic programming languages, and scripting languages. Design of Libjit API and its source code have been started by Rhys Weatherley and Norbert Bollow, also original creators of DotGNU and Portable.NET open source / free software implementation of Common Language Infrastructure for Free Software Foundation. Libjit has been released to public in April 2004. Starting from November 2005 Kirill Kononenko, Klaus Treichel, Radek Polak, Aleksey Demakov, Avinash Atreya, Ankur Arora, Praveen Arimbrahodiyil, Christian Kohlmeyer continued development and design of Libjit. First, they created missing parts and fixed already existing ones towards a release version suitable for software engineers developing just-in-time compilers. Secondly, Klaus Treichel and Kirill Kononenko have originally created with Libjit themselves from scratch a just-in-time compiler for Portable.NET with addition of another codec parser in Portable.NET source code.
Notable applications
* Industrial lasers produced by TRUMPF Laser Division for embedded systems software running on Portable.NET and using its managed implementation of Windows.Forms class of Microsoft .NET Framework. Libjit is used in the Portable.NET Just-In-Time compiler.
* Intermediate Language Distributed Just In Time (ILDJIT), developed by Simone Campanoni and Formal Languages And Compilers Group Politecnico di Milano. Libjit is used for code generation and optimization.
* HornetsEye by Jan Wedekind and Mobile Machines and Vision Laboratory (MMVL), a part of the Centre for Robotics and Automation (CENRA) at the Materials and Engineering Research Institute (MERI). Libjit is used to accelerate real-time image and video processing with Ruby.
Code representation
Libjit supports a language-independent intermediate representation and type system. Most of the opcodes have a form similar to three address code. Each opcode is in form very close to static single assignment form (SSA), meaning that each variable is assigned most frequently once and is frozen. This helps simplify the analysis of dependencies among variables.
Any form of type conversion, from coercion to the downcasting of an object, is performed explicitly using the Libjit intermediate representation operation codes. Libjit has basic types, like integers, floating point values, pointers, structures, both fixed sizes, and platform dependent size. A type construct in a concrete language can be represented by combining these basic types in Libjit. For example, a class in Common Intermediate Language can be represented by a combination of structures, and pointers.
 
< Prev   Next >