Seperti yang dikatakan orang lain, disusun dan ditafsirkan khusus untuk implementasi bahasa pemrograman; mereka tidak melekat dalam bahasa tersebut. Misalnya ada juru bahasa C.
Namun, kami dapat (dan dalam praktiknya kami melakukannya) mengklasifikasikan bahasa pemrograman berdasarkan penerapannya yang paling umum (terkadang kanonik). Misalnya, kami mengatakan C dikompilasi.
Pertama, kita harus mendefinisikan tanpa ambiguitas interpreter dan compiler:
Sebuah interpreter untuk bahasa X adalah sebuah program (atau mesin, atau hanya semacam mekanisme pada umumnya) yang mengeksekusi program p ditulis dalam bahasa X sehingga ia melakukan efek dan mengevaluasi hasil seperti yang ditentukan oleh spesifikasi X .
Sebuah compiler dari X ke Y adalah program (atau mesin, atau hanya semacam mekanisme pada umumnya) yang menerjemahkan program p dari beberapa bahasa X ke dalam program semantik setara p' dalam beberapa bahasa Y sedemikian rupa sehingga menafsirkan p ' dengan seorang juru bahasa untuk Y akan menghasilkan hasil yang sama dan memiliki efek yang sama seperti menafsirkan p dengan seorang juru bahasa untuk X .
Perhatikan bahwa dari sudut pandang programmer, CPU adalah juru bahasa mesin untuk bahasa mesin asli masing-masing.
Sekarang, kita dapat melakukan klasifikasi tentatif bahasa pemrograman menjadi 3 kategori tergantung pada penerapannya yang paling umum:
- Bahasa Hard Compiled: Ketika program dikompilasi seluruhnya ke bahasa mesin. Interpreter yang digunakan hanya CPU. Contoh: Biasanya, untuk menjalankan program di C, kode sumber dikompilasi ke bahasa mesin, yang kemudian dieksekusi oleh CPU.
- Bahasa yang ditafsirkan: Jika tidak ada kompilasi bagian mana pun dari program asli ke bahasa mesin. Dengan kata lain, tidak ada kode mesin baru yang dibuat; hanya kode mesin yang ada yang dijalankan. Penerjemah selain CPU juga harus digunakan (biasanya program). Contoh: Dalam implementasi kanonik Python, kode sumber dikompilasi terlebih dahulu ke bytecode Python dan kemudian bytecode itu dijalankan oleh CPython, program interpreter untuk bytecode Python .
- Bahasa Soft Compiled: Ketika penerjemah selain CPU digunakan tetapi juga bagian dari program asli dapat dikompilasi ke bahasa mesin. Ini adalah kasus Java, di mana kode sumber dikompilasi ke bytecode terlebih dahulu dan kemudian, bytecode dapat diinterpretasikan oleh Java Interpreter dan / atau lebih lanjut dikompilasi oleh compiler JIT.
Kadang-kadang, bahasa yang dikompilasi lunak dan keras dirujuk ke hanya dikompilasi, sehingga C #, Java, C, C ++ dikatakan dikompilasi.
Dalam kategorisasi ini, JavaScript dulunya adalah bahasa yang ditafsirkan, tetapi itu sudah bertahun-tahun yang lalu. Saat ini, JIT dikompilasi ke bahasa mesin asli di sebagian besar implementasi JavaScript utama jadi saya akan mengatakan bahwa itu termasuk dalam bahasa kompilasi lunak.