Due to this initial performance lag, dynamic compilation is undesirable in certain cases.
This requires the compiler for the programming language to be part of the runtime system.
In consequence, source code can be read in at any time, from the terminal, from a file, or possibly from a data-structure constructed by the running program, and translated into a machine code block or function (which may replace a previous function of the same name), which is then immediately available for use by the program.
Because of the need for speed of compilation during interactive development and testing, the compiled code is likely not to be as heavily optimised as code produced by a standard 'batch compiler', which reads in source code and produces object files that can subsequently be linked and run.
In this case porting requires only changing the 'back end' compiler.