From Seo Wiki - Search Engine Optimization and Programming Languages
|Stable release||0.1.2 / 12 December 2008|
|License||GNU Lesser General Public License (LGPL)|
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.
 See also
- GNU lightning
- GNU Compiler Collection (GCC)
- Comparison of application virtual machines
- OSADL - Open Source Automation Development Lab
 External links
- Introduction and rationale for libJIT
- Documentation and conference proceedings related to Portable.NET JIT compiler and Libjit Linear Scan project
- Libjit Linear Scan
- "Libjit vs LLVM discussion" Rhys Weatherley (Libjit) and Chris Lattner (LLVM)
- Libjit documentation
- ILDJIT website
- Aleksey Demakov's home page
- DotGNU Portable.NET website
- HornetsEye website
- "DotGNU Southern-Summer of Code" Mail archive of how the Portable.NET JIT compiler and Libjit project began
- DotGNU befreit .NET aus seiner Abhängigkeit, Elektroniknet: Embedded Systems
- HornetsEye web page on JIT compilation
- Libjit developers mail list
- Libjit mailing list archive from 3rd February 2005. "The grants"
- .NET Developer's Journal Mono Releases Version 1.2
- comp.compilers newsgroup: DotGNU compiler project
- Open Source Automation Development Lab