This article's
lead sectionmay be too short to adequately
summarize the key points. Please consider expanding the lead to
provide an accessible overview of all important aspects of the article.(June 2021)
In
computer science, dynamic recompilation is a feature of some
emulators and
virtual machines, where the system may
recompile some part of a
program during execution. By compiling during execution, the system can tailor the generated code to reflect the program's run-time environment, and potentially produce more efficient
code by exploiting information that is not available to a traditional static
compiler.
Uses
Most dynamic recompilers are used to convert machine code between architectures at runtime. This is a task often needed in the emulation of legacy gaming platforms. In other cases, a system may employ dynamic recompilation as part of an
adaptive optimization strategy to execute a portable program representation such as
Java or .NET
Common Language Runtime bytecodes. Full-speed debuggers also utilize dynamic recompilation to reduce the space overhead incurred in most
deoptimization techniques, and other features such as dynamic
thread migration.
Tasks
The main tasks a dynamic recompiler has to perform are:
Reading in machine code from the source platform
Emitting machine code for the target platform
A dynamic recompiler may also perform some auxiliary tasks:
FreeKEYB, an international DOS keyboard and console driver with many usability enhancements utilized
self-modifying code and
dynamic dead code elimination to minimize its in-memory image based on its user configuration (selected features, languages, layouts) and actual runtime environment (OS variant and version, loaded drivers, underlying hardware), automatically resolving dependencies, dynamically relocating and recombining code sections on byte-level granularity and optimizing opstrings based on semantic information provided in the source code, relocation information generated by special tools during assembly and profile information obtained at load time.[4]
The backwards compatibility functionality of the
Xbox 360 (i.e. running games written for the original
Xbox) is widely assumed to use dynamic recompilation.
Apple's
Rosetta 2 for Apple silicon, permits many applications compiled for
x86-64-based processors to be translated for execution on Apple silicon.