Compiler, Interpreter, Bedanya Apa?

Dalam bahasa pemrograman, umumnya suatu bahasa pemrograman menggunakan 2 cara untuk menterjemahkan perintah ke dalam bahasa mesin yang dimengerti oleh komputer, yaitu secara interpret (disebut bahasa interpreter) dan secara compile (disebut bahasa compiler).

Ini berlaku untuk hampir semua bahasa pemrograman yang ada saat ini, sebut saja diantaranya:
Javascript, PHP, Java, C++, Ruby, Python, dan sebagainya.

Tulisan ini akan coba menjelaskan secara sederhana perbedaan dari 2 cara tersebut. Harapannya semoga bisa memudahkan yang baru mulai belajar ngoding.

Interpreter

Contoh kode di bawah ini adalah kode Javascript, di mana Javascript adalah salah satu bahasa interpreter:

//interpreter

function calculation(a,b) {
  return a + b;
}

for (let i=0; i<500; i++) {
  calculation(3,7);
}

Oleh Javascript, kode di atas akan dieksekusi baris per baris on the fly (aka langsung diproses saat dibaca) setiap kali program dijalankan.

Di kode ini, kita hanya membuat fungsi yang akan mengembalikan penjumlahan antara parameter a dan b. Kemudian di bawahnya kita menjalankan loop / perulangan sebanyak 500 kali, di mana yang diulang adalah fungsi calculation dengan parameter a=3 dan b=7.

Pada contoh kode loop di atas, interpreter memiliki satu kelemahan, di mana karena dia perlu interpretasi setiap kali program dijalankan, maka otomatis ini menambah waktu eksekusi program. Jika misal kode program di atas dijalankan 2 kali, maka otomatis CPU perlu melakukan eksekusi looping selama 500×2 = 1000 kali

Pada compiler, hal ini tidak perlu terjadi karena compiler language akan menghasilkan kode program final yang sudah dioptimasi, salah satunya untuk kasus looping tersebut, di mana program hasil compile tidak perlu lagi melakukan loop tersebut karena sudah diterjemahkan di awal.

Untuk melakukan interpretasi, sebuah bahasa pemrograman memerlukan mesin / engine interpreter, yang biasanya diberi nama sama dengan bahasa pemrograman tersebut. Misal:
PHP -> PHP Interpreter
Javascript -> Javascript Interpreter

Mungkin ada yang familiar dengan XAMPP / WAMPServer bagi pengguna PHP ? Nah sebenarnya di dalam bundle software tersebut ada PHP Engine, yang merupakan PHP Interpreter. PHP Engine di sini adalah software tersendiri, namun oleh XAMPP / WAMPServer dijadikan satu kesatuan bersama dengan software lain semisal MariaDB (Database), Apache (Web Server), untuk memudahkan developer pemula dalam belajar bahasa pemrograman.

Bagi developer angkatan 90-an, mereka ga mengenal XAMPP / WAMPServer, karena mereka harus membangun semua ekosistem tersebut dari awal (setup manual). Maka berbahagialah para developer yang kekinian, karena kalian sudah dimanjakan sekali saat ini. Walaupun juga memunculkan masalah di mana developer kekinian terkadang tidak mengerti bagaimana sebuah bahasa pemrograman itu kok bisa jalan di komputer mereka, tanpa tau bagaimananya.

Khusus Javascript, mesin interpreter nya terletak di dalam web browser yang digunakan (Chrome, Firefox, Edge, Opera dll).

Adapun contoh bahasa interpreter yang lain, bisa dilihat di sini -> List kumpulan bahasa pemrograman interpreter

Compiler

Mari lihat kembali kode yang sama di atas, namun kali ini kita passing dia ke mesin compiler:

//compiler

function calculation(a,b) {
  return a + b;
}

for (let i=0; i<500; i++) {
  calculation(3,7);
}

Compiler language / bahasa pemrograman berbasis compiler, tidak menerjemahkan bahasa secara on the fly / secara langsung ketika dijalankan. Namun yang terjadi adalah, compiler akan membaca semua kode dari atas sampai bawah secara satu kesatuan, kemudian mengubahnya ke kode mesin ataupun kode low level yang akan jadi program final. Ketika program final dijalankan, maka proses compiling tidak perlu dilakukan kembali, kecuali ada ubahan pada kode program. Jadi bisa dibilang compiler ini kerja ahead of time (di awal).

Sama seperti interpreter language, compiler language juga memerlukan sebuah engine / mesin khusus yang bertugas melakukan compiling. Dan kebanyakan bahasa berbasis kompilasi, memiliki lebih dari satu jenis compiler, misalnya saja C++ yang saat ini memiliki kurang lebih 30-an compiler (Lihat -> C++ Compilers).

Compiler juga memiliki keunggulan dalam hal performa dibanding Intepreter. Keunggulan performa ini didapat karena proses compiling biasanya diikuti proses optimasi kode oleh compiler. Semisal ada kode yang melakukan looping / perulangan, maka compiler akan melakukan optimasi di mana kode tersebut tidak lagi di looping pada hasil akhir kompilasi (berupa program). Berbeda dengan interpreter, di mana kode looping akan dijalankan kembali sejumlah looping tersebut selama proses translasi.

Adapun contoh bahasa pemrograman berbasis compiler, bisa dilihat di sini -> List lengkap bahasa pemrograman berbasis compiler

Kekurangan Dan Kelebihan

Nah, kita sudah tau perbedaannya, sekarang kita kupas kekurangan dan kelebihannya pada tabel di bawah ini.

Note:
– PROS -> Kelebihan
– CONS -> Kekurangan

Tipe Bahasa PROS CONS
Interpreter

– Lebih cepat dalam hal development flow dan debug, karena langsung diterjemahkan on the fly

– Program yang dihasilkan dari bahasa interpreter biasanya kalah performanya oleh compiler language. Hal ini terjadi karena proses interpretasi biasanya tidak melalui optimasi seperti compiler. dan setiap jalannya program selalu harus diinterpretasi, yang mana otomatis menambahkan waktu eksekusi

Compiler

– Program yang dihasilkan dari bahasa compiler biasanya lebih baik performanya. Ini dikarenakan bahasa yang dicompile juga sudah melalui proses optimasi ketika dicompile ke kode final dan proses compile ini juga hanya satu kali sebelum program di finalisasi, berbeda dengan interpreter yang harus dilakukan setiap saat program dijalankan

– Lebih lambat dalam hal development flow dan debug, karena butuh dicompile terlebih dahulu ke low level language