A program lifecycle phase is a distinct period of time that is relevant to the operation of a computer program as it transitions from development to execution. Any distinct period in a program's life cycle in which the operational state of the program changes can be identified as a time. For example, compile time is when a program is compiled and link time is when a program is linked. Also, phases can often be divided into component phases. For example, build time might be divided into compile and link times, compile time into parse and code-generation times, and run time into initialization and normal-operation times.
A program tends to transition through phases in sequences, but often not from first to last and sometimes some are skipped. For example, when programming, a developer may repeatedly edit, build, and run a program without distributing or installing it. After programming is complete, then it may be distributed to and installed by a user.
Even though the term program lifecycle phase is less than notable, the times (phases) are well-known, commonly-used and notable. The collective term is used for this article for lack of a better term.
The operational phases of a program vary by its development technology. For example, a compiled program involves compile and link phases, but an interpreted program has no such phases – is distributed as source code. Even for compiled programs, the phases vary. For example, some runtimes (such as for .Net and Java) include a just-in-time compilation phase, yet more traditional runtimes (such as for C) do not.
The phases for a program that is compiled to a host-native executable typically include:
Binding time describes whether an association between entities is fixed either before (early) or after (late) the program starts running. The phases described here provide a way to describe when the binding occurs more precisely. For example, an early binding might be made at design, compile or link time.
One of the key functions of parallel computing development is specializing the code to the host runtime environment. [10] [11] Such specialization cannot be performed before that environment is known. If the desire is for the same code to run on a variety of hardware platforms, then such specialization cannot happen during edit or compile phases. The earliest phase would be the distribution phase, [12] if a system were put in place that gathers hardware information, then chooses an executable that is already specialized to that hardware or substantially similar hardware, or generates a specialized binary on the fly. Likewise, specialization could be performed at load time, [13] by invoking a binary rewriting tool [14] in combination with a tool that uses the control flow structure to generate a specialized form.