Menu
CoddyTech

Apa Itu Compiler?

Compiler adalah program yang menerjemahkan source code yang ditulis dalam sebuah bahasa pemrograman menjadi kode mesin, atau bentuk lain yang lebih rendah tingkatnya seperti bytecode, sebelum program dijalankan. Program hasil terjemahan itu lalu bisa berjalan tanpa source code aslinya.

Oleh Kevin Spektor, Co-founder & CTO

Diperbarui 24 September 2026

Source code
  1. 1print("Hello")
  2. 2total = 2 + 3
  3. 3print(total)
  4. 4print("Done")
Output
Jumlah compile0
Jumlah run0

Compile sekali, lalu jalankan programnya sesering yang kamu mau: penghitung run bertambah, penghitung compile tidak. Nyalakan salah ketiknya, dan compiler menolak seluruh program, jadi tidak ada yang tercetak.

Simpan program C ini sebagai hello.c:

#include <stdio.h>

int main(void) {
    int price = 4;
    printf("Total: %d\n", price * 3);
    return 0;
}

Lalu ketik gcc hello.c -o hello. Sejenak tidak ada yang terlihat terjadi, lalu muncul file baru bernama hello di samping source code-mu. File itu adalah output compiler: kode mesin yang bisa dijalankan prosesormu. Hapus hello.c, dan ./hello tetap berjalan, karena semua yang dibutuhkan program sudah diterjemahkan.

gcc hello.c -o hello
./hello
Total: 12

Belum menginstal gcc? Tempel hello.c ke compiler C online.

Cara kerja compiler, langkah demi langkah

Compiler membaca source code sebagai teks biasa dan memprosesnya dalam beberapa tahap. Ambil satu baris total = price * 3:

  1. Analisis leksikal. Teks dipecah menjadi token, yaitu "kata-kata" dalam bahasa itu: nama total, operator =, nama price, operator *, angka 3. Spasi dan komentar dibuang di tahap ini.
  2. Parsing. Token-token disusun menjadi pohon sintaks yang mencatat strukturnya: sebuah assignment yang nilainya adalah perkalian price dan 3. Kode yang melanggar tata bahasa bahasa itu berhenti di sini dengan syntax error.
  3. Analisis semantik. Compiler memeriksa maknanya: apakah price sudah dideklarasikan, apakah tipenya cocok, apakah fungsi yang dipanggil memang ada.
  4. Optimasi. Program ditulis ulang supaya berjalan lebih cepat atau memakai lebih sedikit memori tanpa mengubah apa yang dilakukannya. x * 2 bisa menjadi satu instruksi shift, dan kode yang tidak mungkin pernah dijalankan dihapus.
  5. Pembuatan kode. Compiler menulis output untuk sebuah target: kode mesin x86-64 atau ARM, atau bytecode untuk sebuah mesin virtual.

Untuk C dan C++ ada satu langkah terakhir, linking, yang menggabungkan file-file yang sudah kamu compile dengan kode library (seperti printf dari library standar C) menjadi satu file executable. gcc menjalankan linker untukmu, itulah sebabnya semuanya terasa seperti satu perintah.

Python menyertakan dua tahap pertama sebagai modul standar, jadi kamu bisa melihat keduanya bekerja pada input sungguhan:

NAME 'total'
OP '='
NAME 'price'
OP '*'
NUMBER '3'
Assign(
  targets=[
    Name(id='total', ctx=Store())],
  value=BinOp(
    left=Name(id='price', ctx=Load()),
    op=Mult(),
    right=Constant(value=3)))

Pohon itulah yang dipakai oleh bagian compiler selanjutnya. Pohon ini tidak lagi peduli pada spasi atau baris baru, hanya pada strukturnya: isi total dengan hasil perkalian price dengan 3.

Compile time: error yang ditemukan sebelum program berjalan

Karena compiler membaca seluruh program sebelum ada bagian yang dijalankan, compiler bisa menolak kesalahan sejak awal. Dalam contoh ini, tidak satu pun dari tiga baris print di dalam source yang berjalan, bahkan yang pertama sekalipun, karena compiler Python menolak teks itu sebelum eksekusi dimulai:

Rejected before running anything:
  '(' was never closed (line 3)

Compiler untuk bahasa yang bertipe statis menangkap lebih dari sekadar sintaks. Baris C ini, di file bernama bad.c, benar secara tata bahasa, tetapi menyimpan teks di variabel integer:

int count = "five";

GCC 14 dan yang lebih baru berhenti dengan error:

bad.c:4:17: error: initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]

Kesalahan yang sama di Python baru akan muncul saat baris itu dijalankan. Bisa menangkapnya saat compile time adalah salah satu alasan tim besar memilih bahasa yang di-compile dan bertipe statis. Meski begitu, compiler tidak bisa menangkap semuanya: membagi dengan angka yang ternyata nol, atau membaca file yang tidak ada, tetap gagal saat program berjalan.

Contoh compiler

CompilerMembacaMenghasilkan
GCC, ClangC, C++Kode mesin untuk x86-64, ARM, dan lainnya
MSVC (Microsoft Visual C++)C, C++File executable Windows (.exe, .dll)
javacJavaBytecode JVM (file .class)
rustcRustKode mesin
go buildGoSatu file executable
tscTypeScriptJavaScript

Dua baris menunjukkan bahwa "kode mesin" bukan satu-satunya output yang mungkin. javac menghasilkan bytecode yang dijalankan oleh Java Virtual Machine, bagian dari runtime environment Java. tsc mengubah TypeScript menjadi JavaScript, bahasa tingkat tinggi lainnya; compiler yang melakukan ini sering disebut transpiler.

Kode mesin hasil compile terikat pada satu keluarga CPU dan satu sistem operasi. Program yang di-compile untuk Windows di x86-64 tidak berjalan di Mac dengan chip Apple seri M; kamu meng-compile source yang sama lagi untuk setiap target.

Compiler atau interpreter

Interpreter menjalankan source code secara langsung alih-alih menghasilkan file program terpisah, dan begitulah Python dan Ruby biasanya dijalankan. Sebagian besar tool bahasa modern memakai kedua ide itu: CPython meng-compile file-mu menjadi bytecode lalu meng-interpretasikannya, sedangkan JVM dan engine V8 milik JavaScript meng-compile kode yang sering dipakai menjadi kode mesin saat program sedang berjalan. Tabel perbandingan lengkapnya ada di halaman compiler vs interpreter.

Kesalahpahaman yang umum

  • "Kalau bisa di-compile, pasti jalan." Compiler memeriksa bahwa program itu valid, bukan bahwa program itu benar. Kesalahan logika dan kegagalan saat program berjalan, seperti pembagian dengan nol, tetap lolos.
  • "Python tidak di-compile." CPython meng-compile setiap file menjadi bytecode sebelum menjalankannya. File .pyc di folder __pycache__ adalah bytecode tersebut, disimpan untuk modul-modul yang di-import programmu supaya run berikutnya bisa melewati langkah itu.
  • "Compiler online adalah compiler." Situs yang menjalankan kodemu di browser mengirim kodenya ke server yang menjalankan seluruh toolchain (compiler, linker, dan programnya sendiri) lalu mengembalikan output-nya. Compiler hanya salah satu bagiannya.
  • "Kode yang sudah di-compile bisa berjalan di mana saja." Kode itu berjalan di CPU dan sistem operasi tempat kode itu dibangun. Portabilitas didapat dengan meng-compile ulang, atau lewat mesin virtual seperti JVM.

Lanjut ke mana

Dokumentasi C menunjukkan compiler dalam pemakaian sehari-hari: cara compile dan menjalankan C membahas preprocessing, compiling, assembling, dan linking dengan perintah gcc sungguhan. Untuk melihat cara lain menjalankan kode, baca compiler vs interpreter, lalu runtime environment untuk apa yang mengelilingi sebuah program setelah ia mulai berjalan. Kursus C adalah tempat yang bagus untuk berlatih dengan bahasa yang di-compile.

Pertanyaan yang sering diajukan

Apa saja komponen sebuah compiler?

Compiler biasanya dijelaskan dalam tiga bagian. Front end membaca source code, memecahnya menjadi token, mem-parse-nya menjadi pohon sintaks, dan memeriksa tipe. Middle end mengoptimalkan bentuk perantara dari program, dan back end menghasilkan kode mesin atau bytecode untuk CPU tujuan.

Bagaimana sebuah compiler bisa meng-compile dirinya sendiri?

Lewat bootstrapping. Versi pertama sebuah compiler ditulis dalam bahasa yang sudah ada, atau di-compile oleh compiler yang lebih lama, lalu dipakai untuk meng-compile versi berikutnya yang ditulis dalam bahasa barunya sendiri. GCC, misalnya, sebagian besar ditulis dalam C dan C++ dan dibangun dengan compiler C++ yang sudah ada, sering kali GCC versi sebelumnya.

Apa bedanya compiler dan assembler?

Compiler menerjemahkan bahasa tingkat tinggi seperti C atau Rust, di mana satu baris bisa menjadi banyak instruksi mesin. Assembler menerjemahkan bahasa assembly, di mana setiap baris hampir selalu sama dengan satu instruksi mesin. Compiler seperti GCC sering menghasilkan assembly lebih dulu lalu menyerahkannya ke assembler.

Apa itu JIT compiler?

Compiler just-in-time (JIT) menerjemahkan kode menjadi kode mesin saat program sedang berjalan, bukan sebelumnya. Compiler ini mengamati bagian mana yang paling sering dijalankan lalu meng-compile bagian itu, sehingga program yang berjalan lama makin cepat seiring waktu. JVM, engine V8 milik JavaScript, dan PyPy semuanya memakai kompilasi JIT.

Apakah saya harus menginstal compiler untuk belajar pemrograman?

Tidak di awal. Editor berbasis browser dan playground online menjalankan compiler atau interpreter di server untukmu. Saat kamu pindah ke komputermu sendiri, C dan C++ butuh compiler seperti GCC atau Clang, Java butuh JDK, dan Python butuh interpreter Python.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai