Like many languages, the OpenEdge ABL includes two basic types of code:
Compile time, sometimes known as non-executable code
Run-time, sometimes known as executable code
However, as an interpretive language, ABL syntax combines compile-time and run-time components in many more ways than a compiled language like C. The flexibility of this syntax helps implement the rich variety of defaults that can be overridden that characterizes the ABL.
Compile-time Code: Certain statements exist only to generate r-code when OpenEdge compiles them. These are compile-time statements. That is, they create static data and user interface resources (widgets) that the run-time statements can reference and modify, but not destroy, during execution.
Run-time Code: Run-time statements use the static resources created by compile-time statements, but can also create, use, and destroy dynamic resources at run time. That is, run-time statements include statements that interact with static resources, dynamic resources, or both. Many run-time statements also include compile-time options. These options generate resources at compile time that are later used by the same statements at run time.