Le temps de compilation peut être subdivisé en fonction des phases du compilateur. La plupart des compilateurs comportent au moins les phases suivantes : analyse syntaxique , analyse sémantique et génération de code . De nombreux compilateurs incluent une ou plusieurs phases d’optimisation. Par exemple, chaque expression constante peut être évaluée lors de la compilation afin de produire une valeur permettant d’améliorer les performances d’exécution.
Les propriétés d'un programme qui peuvent être déterminées à la compilation incluent les vérifications de limites (par exemple, prouver qu'un indice de tableau ne dépasse pas les limites du tableau), l'absence d'interblocage dans les langages concurrents , ou les temps d'exécution (par exemple, prouver qu'une séquence de code ne prend pas plus d'un temps alloué). Pour les langages statiquement typés tels que C++ , Java ou Rust , les types sont vérifiés à la compilation pour garantir la sûreté des types .
La compilation fait généralement partie du processus de construction (lors de la construction). Une construction peut également inclure l'édition de liens (lors de l'édition de liens). Le temps d'exécution correspond à la durée pendant laquelle le programme est en cours d'exécution.
La compilation intervient généralement comme une étape distincte avant l'exécution d'un programme. Cependant, avec la compilation dynamique , la transformation en langage machine se fait pendant l'exécution représentation intermédiaire (RI) et une étape d'exécution qui convertit la RI en code machine.