In
computer science
Computer science is the study of computation, information, and automation. Computer science spans Theoretical computer science, theoretical disciplines (such as algorithms, theory of computation, and information theory) to Applied science, ...
, compile time (or compile-time) describes the time window during which a language's statements are converted into
binary instructions for the processor to execute. The term is used as an adjective to describe concepts related to the context of program compilation, as opposed to concepts related to the context of program execution (
run time).
For example, ''compile-time requirements'' are
programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
requirements that must be met by
source code
In computing, source code, or simply code or source, is a plain text computer program written in a programming language. A programmer writes the human readable source code to control the behavior of a computer.
Since a computer, at base, only ...
before compilation and ''compile-time properties'' are properties of the program that can be reasoned about during compilation. The actual length of time it takes to compile a program is usually referred to as ''compilation time''.
Overview
Most compilers have at least the following compiler phases (which therefore occur at compile-time):
syntax analysis,
semantic analysis, and
code generation. During optimization phases, constant expressions in the source code can also be evaluated at compile-time using
''compile-time execution'', which reduces the constant expressions to an immediate, single value. This is not necessary for correctness, but to improve program performance during runtime.
Programming language definitions usually specify compile time requirements that source code must meet to be successfully compiled. For example, languages may stipulate that the amount of storage required by types and variables can be deduced.
Properties of a program that can be reasoned about at compile time include
range-checks (e.g., proving that an array index will not exceed the array bounds),
deadlock freedom in
concurrent languages, or timings (e.g., proving that a sequence of code takes no more than an allocated amount of time). For statically-typed languages such as
Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
or
Rust, types are checked at compile time to ensure
type safety.
Compile-time occurs before
link time (when the output of one or more compiled files are joined) and
runtime (when a
program is
executed). However, in the case of
dynamic compilation, the final transformations into
machine language happen at run time. Some compile-time operations can also be deferred to link-time while still not incurring a run-time cost.
See also
*
Compiling
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs tha ...
*
Type system
In computer programming, a type system is a logical system comprising a set of rules that assigns a property called a ''type'' (for example, integer, floating point, string) to every '' term'' (a word, phrase, or other set of symbols). Usu ...
*
Just-in-time compilation
*
Ahead-of-time compilation
In computer science, ahead-of-time compilation (AOT compilation) is the act of compiling an (often) higher-level programming language into an (often) lower-level language before execution of a program, usually at build-time, to reduce the amount ...
References
Compiler construction
{{Comp-sci-stub