Compiler adalah program utilitas - mereka mengubah teks bahasa pemrograman menjadi kode mesin. Jika bahasa pemrograman menjelaskan perangkat lunak yang kebetulan menjadi kompiler .....
Compiler juga dapat menghasilkan kode mesin untuk arsitektur lain. Misalnya, Apple mengkompilasi iOS menggunakan rak server berbasis Intel. Kompiler tidak harus menjalankan kode ARM yang dihasilkannya, cukup tulis ke disk.
Compiler 2.0 harus ditulis dalam bahasa yang dapat diproses oleh kompiler 1.0, tetapi ia dapat membuat compiler 2.0 dengan fitur yang lebih baru seperti optimisasi. Anda kemudian dapat mengkompilasi ulang kode sumber menggunakan kompiler 2.0 dan membuat versi yang lebih baik dari dirinya sendiri. Sekali lagi, kompiler tidak tahu itu membuat versi lain dari dirinya sendiri.
Jika kita pergi cukup jauh kembali ke kabut waktu maka kita mencapai titik di mana kita tidak memiliki kompiler - iterasi pertama dari bahasa tingkat tinggi. Kemudian kita harus mengeluarkan pensil dan buku opcode dan menulis yang pertama dalam pertemuan. Bagaimana kami menulis assembler pertama? Entri kode mesin langsung, mungkin pada pita kertas yang dilubangi, atau membalik saklar di panel depan.