Apa Itu Interpreter?
Interpreter adalah program yang menjalankan source code secara langsung, mengerjakan instruksinya satu per satu sambil berjalan, alih-alih menerjemahkan seluruh program lebih dulu menjadi file kode mesin terpisah. Implementasi standar Python dan Ruby adalah interpreter.
Diperbarui 24 September 2026
- 1print("Hello")
- 2total = 2 + 3
- 3print(total)
- 4print("Done")
Setiap run menerjemahkan baris-barisnya lagi. Nyalakan salah ketiknya, dan interpreter tetap mencetak "Hello" sebelum sampai di baris 3 lalu berhenti.
Ketik python3 hello.py dan output-nya muncul, tetapi lihat isi foldernya setelah itu: tidak ada file program baru yang dibuat. Program yang sebenarnya berjalan adalah python3 itu sendiri, interpreter Python. Ia membaca hello.py, mencari tahu arti setiap pernyataan, lalu mengerjakannya. Jalankan skrip itu lagi besok, dan interpreter membaca source-nya lagi dari awal.
Cara kerja interpreter
Interpreter mengulang satu siklus sampai program selesai: ambil instruksi berikutnya, cari tahu artinya, kerjakan, lalu lanjut. Selama bekerja, ia menyimpan variabel-variabel program di memorinya sendiri, itulah sebabnya total = price * 3 bisa memakai price yang diisi beberapa baris sebelumnya.
Cara paling jelas untuk melihatnya adalah mode interaktif, yang disebut REPL (read, evaluate, print, loop). Ketik python3 tanpa nama file, dan setiap baris langsung berjalan begitu kamu menekan Enter:
>>> price = 4
>>> price * 3
12
Interpreter sungguhan menambahkan satu langkah persiapan. CPython, interpreter Python standar, lebih dulu meng-compile seluruh file-mu menjadi bytecode, yaitu daftar ringkas berisi instruksi-instruksi sederhana, lalu menjalankan sebuah loop yang mengeksekusi bytecode itu satu instruksi demi satu instruksi. Kamu bisa mencetak bytecode untuk satu baris:
Python 3.12 mencetak output berikut (versi lain berbeda di detailnya):
0 0 RESUME 0
1 2 LOAD_NAME 0 (price)
4 LOAD_CONST 0 (3)
6 BINARY_OP 5 (*)
10 STORE_NAME 1 (total)
12 RETURN_CONST 1 (None)
Setiap baris itu adalah satu langkah dalam loop interpreter: ambil nilai price, ambil konstanta 3, kalikan keduanya, simpan hasilnya di total. Tidak satu pun dari itu kode mesin; interpreter, yang sendirinya adalah program C yang sudah di-compile, yang mengerjakan setiap langkah.
Error muncul saat barisnya dijalankan
Karena interpreter mengeksekusi sambil berjalan, sebuah program bisa mengerjakan sesuatu yang nyata sebelum menemui kesalahan. Jalankan ini, dan dua baris pertama tercetak sebelum crash:
Step 1: starting
Step 2: still fine
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
Kesalahan sintaks berperilaku lain, karena CPython meng-compile seluruh file menjadi bytecode sebelum menjalankan bagian mana pun. Ubah baris 3 menjadi print("Step 3:" 10) (komanya hilang), dan tidak ada yang tercetak sama sekali, bahkan Step 1 pun tidak:
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Jadi "interpreter menjalankan kode baris demi baris" hanya separuh benar. Tata bahasa diperiksa untuk seluruh file lebih dulu; semua hal lain, seperti membagi dengan nol atau memakai nama yang tidak ada, baru ditemukan saat baris itu dieksekusi. Lihat syntax error untuk jenis yang pertama.
Compiler vs interpreter
Compiler menerjemahkan seluruh program menjadi file terpisah sebelum program berjalan. Interpreter menjalankan programnya sendiri, setiap kali. Perbedaan praktisnya berasal dari situ:
| Compiler | Interpreter | |
|---|---|---|
| Kapan pekerjaannya terjadi | Sekali, sebelum program berjalan | Setiap kali program berjalan |
| Output | File terpisah (executable atau bytecode) | Tidak ada file program terpisah |
| Yang kamu berikan ke pengguna | Program hasil compile | Source code-nya, plus interpreter yang terinstal di komputer mereka |
| Pemeriksaan error | Sintaks dan, di bahasa bertipe, error tipe untuk seluruh program sebelum berjalan | Sintaks biasanya diperiksa lebih dulu; error lain muncul saat baris yang salah dijalankan |
| Edit lalu jalankan | Compile ulang setiap kali ada perubahan | Simpan, lalu jalankan lagi |
| Kecepatan | Lebih cepat, CPU menjalankan kode mesin secara langsung | Lebih lambat, setiap instruksi diuraikan saat program berjalan |
| Portabilitas | Compile ulang untuk setiap CPU dan sistem operasi | Source yang sama berjalan di mana pun interpreter-nya ada |
| Bahasa yang umum | C, C++, Rust, Go | Python, Ruby, PHP, Bash |
Selisih kecepatannya nyata untuk loop aritmetika yang padat: loop yang sama bisa berjalan berkali-kali lipat lebih cepat sebagai C yang di-compile dibandingkan di CPython. Untuk program yang sebagian besar waktunya menunggu jaringan, disk, atau pengguna, perbedaannya sering terlalu kecil untuk terasa.
Di-compile atau di-interpretasikan bukan sifat bahasanya
Bahasa adalah sekumpulan aturan; compiler atau interpreter adalah program yang mengimplementasikannya. Bahasa yang sama bisa dijalankan dengan dua cara, dan sebagian besar bahasa populer mencampur keduanya:
- Python. CPython meng-compile ke bytecode lalu meng-interpretasikannya. PyPy, implementasi lain, menambahkan compiler just-in-time (JIT) yang mengubah kode yang sering dijalankan menjadi kode mesin saat program berjalan.
- Java.
javacmeng-compile source menjadi bytecode lebih dulu. Java Virtual Machine lalu meng-interpretasikan bytecode itu dan meng-compile JIT method-method yang paling sibuk menjadi kode mesin. Sejak Java 11,java Main.javamenjalankan satu file source secara langsung dengan meng-compile-nya di memori lebih dulu. - JavaScript. Browser dan Node.js memakai engine seperti V8, yang mulai dengan meng-interpretasikan kode lalu meng-compile bagian-bagian yang paling sering dipakai menjadi kode mesin saat program berjalan.
- C dan C++. Hampir selalu di-compile lebih dulu dengan GCC, Clang, atau MSVC.
python3 app.py # Python: interpreter, bytecode behind the scenes
node app.js # JavaScript: V8 interprets, then JIT-compiles
javac Main.java # Java step 1: compile to Main.class
java Main # Java step 2: the JVM runs the bytecode
Apa pun jenisnya, interpreter atau mesin virtual adalah bagian dari runtime environment program: ia harus terinstal di mana pun program itu berjalan.
Kesalahpahaman yang umum
- "Interpreter menerjemahkan setiap baris menjadi kode mesin." Interpreter klasik tidak pernah menghasilkan kode mesin untuk programmu. Ia membaca sebuah instruksi lalu mengerjakannya dengan kode yang sudah di-compile ke dalam interpreter itu. Menghasilkan kode mesin saat program berjalan adalah tugas JIT compiler.
- "Bahasa yang di-interpretasikan tidak punya langkah compile." CPython, YARV milik Ruby, dan PHP semuanya meng-compile ke bytecode lebih dulu. Langkah itu otomatis dan tidak terlihat, jadi mudah terlewat.
- "Di-interpretasikan berarti lambat." Kompilasi JIT sudah menutup sebagian besar selisihnya. V8 menjalankan JavaScript cukup cepat untuk aplikasi besar seperti VS Code, yang dibangun di atas Electron.
- "Python adalah interpreter-nya." Python adalah bahasanya. CPython, PyPy, dan MicroPython adalah interpreter yang berbeda untuk bahasa itu, dan bisa berbeda dalam kecepatan maupun library yang didukung.
Lanjut ke mana
Untuk separuh lain dari perbandingan ini, baca apa itu compiler dan bagaimana compiler mengubah source code menjadi kode mesin. Halaman runtime environment menjelaskan apa lagi yang dibawa interpreter bersamanya. Untuk mencoba interpreter sendiri, jalankan skrip Python atau buka playground Python.
Pertanyaan yang sering diajukan
Apakah Python itu compiler atau interpreter?
Python adalah bahasa; program yang menjalankannya biasanya CPython, yang merupakan interpreter. CPython lebih dulu meng-compile kodemu menjadi bytecode secara otomatis, lalu meng-interpretasikan bytecode itu. Ada juga implementasi lain, seperti PyPy, yang menambahkan JIT compiler.
Apakah C++ itu interpreter atau compiler?
C++ adalah bahasa, dan hampir selalu di-compile lebih dulu dengan compiler seperti GCC, Clang, atau MSVC. Hasilnya adalah file executable native untuk satu CPU dan sistem operasi. Ada tool interaktif untuk C++, tetapi tool itu meng-compile setiap potongan kode di balik layar.
Mana yang lebih cepat, interpreter atau compiler?
Program yang di-compile biasanya berjalan lebih cepat, karena CPU menjalankan kode mesin secara langsung, bukan interpreter yang menguraikan setiap langkah. Interpreter lebih cepat dimulai, karena tidak ada proses build terpisah. JIT compiler, yang dipakai JVM dan V8, mempersempit selisihnya dengan meng-compile kode yang paling sibuk saat program berjalan.
Apa itu REPL?
python3 atau node tanpa nama file akan membukanya. REPL berguna untuk mencoba ide kecil tanpa membuat file.Bisakah sebuah bahasa di-compile sekaligus di-interpretasikan?
javac, lalu di-interpretasikan dan di-compile JIT oleh JVM, dan untuk bahasa seperti Python dan JavaScript ada interpreter maupun compiler.