Menu
Coddy logo textTech

Derleyici nedir?

Derleyici, bir programlama dilinde yazılmış kaynak kodu, program çalışmadan önce makine koduna ya da bytecode gibi daha alt seviyeli başka bir biçime çeviren programdır. Çevrilmiş program daha sonra orijinal kaynak olmadan çalışabilir.

Yazan Kevin Spektor, Kurucu ortak ve CTO

Güncellendi: 24 Eylül 2026

Kaynak kod
  1. 1print("Hello")
  2. 2total = 2 + 3
  3. 3print(total)
  4. 4print("Done")
Çıktı
Derleme sayısı0
Çalıştırma0

Bir kez derle, sonra programı istediğin kadar çalıştır: çalıştırma sayacı artar, derleme sayacı artmaz. Yazım hatasını aç: derleyici programın tamamını reddeder ve hiçbir şey yazdırılmaz.

Bu C programını hello.c olarak kaydet:

#include <stdio.h>

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

Sonra gcc hello.c -o hello yaz. Bir an görünür bir şey olmaz, ardından kaynağının yanında hello adında yeni bir dosya belirir. Bu dosya derleyicinin çıktısıdır: işlemcinin çalıştırabileceği makine kodu. hello.c dosyasını silsen bile ./hello çalışmaya devam eder, çünkü programın ihtiyaç duyduğu her şey zaten çevrilmiştir.

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

Derleyici adım adım nasıl çalışır

Derleyici kaynak kodu düz metin olarak okur ve aşama aşama işler. Tek bir satırı ele alalım, total = price * 3:

  1. Sözcüksel analiz. Metin, dilin "kelimeleri" olan token'lara bölünür: total adı, = operatörü, price adı, * operatörü, 3 sayısı. Boşluklar ve yorumlar bu aşamada atılır.
  2. Ayrıştırma (parsing). Token'lar yapıyı kaydeden bir sözdizimi ağacına dizilir: değeri price ile 3'ün çarpımı olan bir atama. Dilin dilbilgisine uymayan kod burada bir sözdizimi hatasıyla durur.
  3. Anlamsal analiz. Derleyici anlamı kontrol eder: price tanımlanmış mı, tipler uyumlu mu, çağrılan fonksiyon var mı.
  4. Optimizasyon. Program, yaptığı işi değiştirmeden daha hızlı çalışacak ya da daha az bellek kullanacak şekilde yeniden yazılır. x * 2 tek bir kaydırma talimatına dönüşebilir, hiçbir zaman çalışamayacak kod silinir.
  5. Kod üretimi. Derleyici bir hedef için çıktı yazar: x86-64 ya da ARM makine kodu veya bir sanal makine için bytecode.

C ve C++'ta son bir adım olan bağlama (linking), derlenmiş dosyalarını kütüphane koduyla (C standart kütüphanesindeki printf gibi) birleştirip tek bir çalıştırılabilir dosya yapar. gcc bağlayıcıyı senin yerine çalıştırır; hepsinin tek bir komut gibi gelmesinin nedeni budur.

Python ilk iki aşamayı standart modüller olarak sunar, böylece onları gerçek bir girdi üzerinde çalışırken izleyebilirsin:

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)))

Derleyicinin geri kalanı bu ağaç üzerinden çalışır. Artık boşluklar ya da satır sonları önemli değildir, yalnızca yapı önemlidir: price ile 3'ün çarpımını total değişkenine ata.

Derleme zamanı: program çalışmadan bulunan hatalar

Derleyici, programın herhangi bir kısmı çalışmadan önce tamamını okuduğu için hataları erkenden reddedebilir. Bu örnekte source içindeki üç print satırından hiçbiri çalışmaz, ilki bile, çünkü Python'un derleyicisi metni çalıştırma başlamadan reddeder:

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

Statik tipli dillerin derleyicileri sözdiziminden fazlasını yakalar. bad.c adlı bir dosyadaki bu C satırı dilbilgisi açısından doğrudur, ama bir tam sayı değişkenine metin koyar:

int count = "five";

GCC 14 ve sonraki sürümler bir hatayla durur:

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

Aynı hata Python'da ancak o satır çalıştığında ortaya çıkar. Hatayı derleme zamanında yakalamak, büyük ekiplerin derlenen, statik tipli dilleri seçmesinin nedenlerinden biridir. Yine de derleyici her şeyi yakalayamaz: sıfır çıkan bir sayıya bölmek ya da var olmayan bir dosyayı okumak çalışma zamanında yine hata verir.

Derleyici örnekleri

DerleyiciOkuduğuÜrettiği
GCC, ClangC, C++x86-64, ARM ve diğerleri için makine kodu
MSVC (Microsoft Visual C++)C, C++Windows çalıştırılabilir dosyaları (.exe, .dll)
javacJavaJVM bytecode'u (.class dosyaları)
rustcRustMakine kodu
go buildGoTek bir çalıştırılabilir dosya
tscTypeScriptJavaScript

Tablodaki iki satır, makine kodunun tek olası çıktı olmadığını gösterir. javac, Java çalışma zamanı ortamının bir parçası olan Java Sanal Makinesi'nin çalıştırdığı bytecode'u üretir. tsc ise TypeScript'i başka bir yüksek seviyeli dil olan JavaScript'e çevirir; bunu yapan derleyiciye çoğu zaman transpiler denir.

Derlenmiş makine kodu tek bir işlemci ailesine ve tek bir işletim sistemine bağlıdır. x86-64 üzerinde Windows için derlenmiş bir program, Apple M serisi çipli bir Mac'te çalışmaz; aynı kaynağı her hedef için yeniden derlersin.

Derleyici mi yorumlayıcı mı

Bir yorumlayıcı, ayrı bir program dosyası üretmek yerine kaynak kodu doğrudan çalıştırır; Python ve Ruby genellikle böyle çalıştırılır. Modern dil araçlarının çoğu iki fikri birlikte kullanır: CPython dosyanı bytecode'a derler ve sonra onu yorumlar, JVM ve JavaScript'in V8 motoru da sık kullanılan kodu program çalışırken makine koduna derler. Yan yana tam tablo derleyici ve yorumlayıcı farkı sayfasındadır.

Yaygın yanlış inanışlar

  • "Derleniyorsa çalışıyordur." Derleyici programın geçerli olup olmadığını kontrol eder, doğru olup olmadığını değil. Mantık hataları ve sıfıra bölme gibi çalışma zamanı hataları arada kaçar.
  • "Python derlenmez." CPython her dosyayı çalıştırmadan önce bytecode'a derler. __pycache__ klasörlerindeki .pyc dosyaları bu bytecode'dur; programının içe aktardığı modüller için kaydedilir ki bir sonraki çalıştırma bu adımı atlayabilsin.
  • "Online derleyici bir derleyicidir." Kodunu tarayıcıda çalıştıran siteler onu, tüm araç zincirini (derleyici, bağlayıcı ve programın kendisi) çalıştırıp çıktıyı geri döndüren bir sunucuya gönderir. Derleyici bunun yalnızca bir parçasıdır.
  • "Derlenmiş kod her yerde çalışır." Kod, derlendiği işlemci ve işletim sisteminde çalışır. Taşınabilirlik yeniden derlemekten ya da JVM gibi bir sanal makineden gelir.

Sırada ne var

C belgeleri derleyiciyi günlük kullanımda gösterir: C nasıl derlenir ve çalıştırılır sayfası gerçek gcc komutlarıyla ön işleme, derleme, assembly ve bağlama adımlarını anlatır. Kodu çalıştırmanın diğer yolunu görmek için derleyici ve yorumlayıcı farkı sayfasını, ardından program başladıktan sonra onu neyin çevrelediğini anlatan çalışma zamanı ortamı sayfasını oku. Derlenen bir dille pratik yapmak için C kursu iyi bir başlangıçtır.

Sıkça Sorulan Sorular

Bir derleyici hangi bileşenlerden oluşur?
Derleyici genellikle üç parça hâlinde anlatılır. Ön uç (front end) kaynak kodu okur, token'lara böler, bir sözdizimi ağacına ayrıştırır ve tipleri kontrol eder. Orta katman (middle end) programın ara bir biçimini optimize eder, arka uç (back end) de hedef işlemci için makine kodu ya da bytecode üretir.
Bir derleyici kendini nasıl derleyebilir?
Bootstrapping denen yöntemle. Bir derleyicinin ilk sürümü var olan bir dilde yazılır ya da daha eski bir derleyiciyle derlenir, sonra yeni dilin kendisiyle yazılmış sonraki sürümü derlemek için kullanılır. Örneğin GCC büyük ölçüde C ve C++ ile yazılmıştır ve var olan bir C++ derleyicisiyle, çoğu zaman daha eski bir GCC ile derlenir.
Derleyici ile assembler arasındaki fark nedir?
Derleyici, C ya da Rust gibi yüksek seviyeli bir dili çevirir; burada tek bir satır birçok makine talimatına dönüşebilir. Assembler ise her satırın neredeyse birebir tek bir makine talimatına karşılık geldiği assembly dilini çevirir. GCC gibi derleyiciler çoğu zaman önce assembly üretir ve onu bir assembler'a verir.
JIT derleyici nedir?
Just-in-time (JIT) derleyici, kodu program çalışmadan önce değil, çalışırken makine koduna çevirir. Hangi kısımların en sık çalıştığını izler ve onları derler; böylece uzun süre çalışan bir program ilerledikçe hızlanır. JVM, JavaScript'in V8 motoru ve PyPy JIT derleme kullanır.
Programlama öğrenmek için derleyici kurmam gerekir mi?
Başta gerekmez. Tarayıcı tabanlı düzenleyiciler ve online playground'lar derleyiciyi ya da yorumlayıcıyı senin için bir sunucuda çalıştırır. Kendi bilgisayarına geçtiğinde C ve C++ için GCC ya da Clang gibi bir derleyici, Java için bir JDK, Python için de Python yorumlayıcısı gerekir.
Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA