From Wikipedia, the free encyclopedia
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
External
links