Perbedaan Compiler dan Interpreter
Bagi yang berkecimpung dalam dunia pemrograman, kedua kata
ini (compiler dan interpreter) sudah sering didengar. Namun kita tidak dapat secara pasti
mendeskripsikannya,karena yang terpenting bagi kita…kita dapat membuat sebuah
program. Disaat ada pertanyaan dari teman atau seseorang yang baru menekuni
bahasa pemrograman….barulah kita mulai mencari tahu.
Ada banyak sumber yang menjelaskan perbedaan keduanya, namun
penjelasan dalam bentuk kalimat tanpa disertai contoh….tentunya tidak mudah
dipahami.
Berangkat dari hal yang dikemukakan diatas….dalam ulasan
perbedaan compiler dan interpreter akan diusahakan pembahasan yang lebih mudah
dipahami.
Pendahuluan
Komputer
hanya memahami bahasa mesin (machine language) yang disebut binary code,yaitu
berupa 0 dan 1. Baik “compiler” dan “interpreter” memilki tujuan yang sama,
yaitu: mengubah bahasa pemrograman ke dalam bentuk “binary code”.
Gambar.1 Konversi machine dari Compiler dan Interpreter |
Setiap komputer
memiliki tipikal CPU yang berbeda, instruksi biner pada CPU akan terlihat
seperti berikut:
1010010110111010
1001110110000111
0001110010110001
Instruksi
bilangan biner diatas disimpan pada lokasi memori yang disebut dengan “Register”
dalam CPU. Setiap CPU (microprocessor) memiliki sekumpulan register yang
berbeda-beda. Hal ini dipengaruhi oleh arsitektur processor yang digunakan.
Walaupun
keduanya memiliki tujuan yang sama, namun cara mengeksekusinya berbeda.
Compiler
Jika kita sedang membuat sebuah program dengan menggunakan bahasa pemrograman tingkat tinggi (High Level Language) seperti menggunakan Bahasa Pemrograman C.
Maka untuk menjalankannya program tersebut akan diterjemahkan ke dalam bahasa mesin oleh sebuah compiler.
Gambar.2 Program C |
Maka untuk menjalankannya program tersebut akan diterjemahkan ke dalam bahasa mesin oleh sebuah compiler.
Native Compiler dan
Cross Compiler
Compiler dibagi menjadi dua kategori berdasarkan code machine
yang digenerate-nya:
1. Native Compiler
2. Cross Compiler
1. Native Compiler
2. Cross Compiler
Untuk “Native Compiler”, jika kita mengcompile bahasa c
diatas pada arsitektur processor x86 yang mengenerate file executable, maka
hanya berjalan pada mesin arsitektur yang sama.
Sedangkan “Cross compiler” mengenerate kode mesin untuk
arsitektur prosessor lain meskipun program bahasa c tersebut dijalankan pada
mesin arsitekur prosessor yang berbeda. Cross compiler sering digunakan pada
embedded device.
Prinsip kerja Compiler
Prinsip kerja Compiler
Seperti contoh program bahasa C yang ditunjukkan oleh Gambar.2
diatas, ketika kita menggunakan #include <stdio.h>, compiler akan
mengecek eksistensi dari file "stdio.h". File “stdio.h” berada pada folder “include” . Jika tidak ditemukan maka akan keluar pesan error dan mengakibatkan proses
kompilasi gagal.
Jika ditemukan file “stdio.h” maka akan dicek fungsi “printf”
yang telah didefinisikan pada file “stdio.h”. Jika fungsi tersebut tersedia,
maka proses akan dilanjutkan dengan baris program berikutnya sampai dengan
selesai.
Jika program dari gambar.2 berhasil setelah decompile, compiler
akan menghasilkan sebuah file obj dan akan menginisiasi linker. Linker
merupakan program yang menghubungkan ke semua file-file termasuk file library yang saling berhubungan
dari projek yang kita buat. Fungsi lain dari Linker menterjemahkan OS API (Application
Programming Interface) call ke alamat
memori yang sesuai.
Linker mengetahui alamat memori di mana kode untuk
fungsi-fungsi ini berada, dan menerjemahkan fungsi panggilan ke alamat memori
yang sesuai dengan pada ruang memori sistem operasi.
Berikut ini adalah diagram prinsip kerja dari Compiler seperti yang ditunjukkan oleh Gambar.3.
Gambar.3.Prinsip Kerja Compiler |