Kompilator
Kompilator – tłumaczy z języka wysokiego poziomu (takiego jak C++ czy Java) do języka niskiego poziomu (często do języka Asembler, czy w przypadku Javy do pośredniej formy – kodu bajtowego).
Asembler
Asembler – tłumaczy z języka niskiego poziomu do języka maszynowego (postaci binarnej). W tym momencie otrzymujemy binarną reprezentację naszego programu (nie jest to już forma czytelna dla człowieka).
Linker
Linker – dowiązuje zewnętrzne elementy programu takie jak na przykład biblioteki.