Ana içeriğe geç

Derleyici

İngilizcesi
Compiler
Okunuşu
kımpaylır
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/compiler

Kısaca

Derleyici, bir programlama dilinde yazılmış kaynak kodu, bilgisayarın çalıştırabileceği makine kodu gibi daha alt seviyeli bir biçime çeviren programdır.

Derleyici nedir?

Derleyici, yazdığınız insan tarafından okunabilir kodu bilgisayarın yürütebileceği talimatlara dönüştürür. C, C++, Go ve Rust gibi dillerde derleyici, belirli bir işlemci için makine kodu üretir ve bunu bir çalıştırılabilir dosya olarak paketler. Java ve C# gibi diller için olanlar gibi diğer derleyiciler ise bir sanal makinenin sonradan çalıştırdığı, bytecode adlı bir ara biçim üretir.

Derleme aşamalar hâlinde gerçekleşir. Derleyici önce kaynak kodu okur ve onu token'lara ayırır, ardından bu token'ları programın yapısını temsil eden bir ağaca çözümler (parse), tür uyuşmazlığı gibi hatalara karşı denetler, en iyileştirir ve son olarak çıktı kodunu üretir. Bunların hepsi program çalışmadan önce gerçekleştiği için birçok hata, bir kullanıcı görmeden çok önce, derleme zamanında yakalanır.

Derleyici, bir kitabın tamamını yayımlanmadan önce başka bir dile çeviren bir çevirmene benzer; böylece okurlar bitmiş bir çeviri alır. Yorumlayıcı (interpreter) ise bir konuşmayı yapılırken cümle cümle çeviren bir sözlü çevirmen gibidir. Python ve JavaScript gibi diller geleneksel olarak yorumlanır, ancak V8 gibi modern motorlar, program çalışırken sık çalışan kodu makine koduna dönüştürmek için tam zamanında (JIT) derleme kullanır.

Derleyiciler ile yorumlayıcılar arasındaki çizgi pratikte bulanıktır, çünkü birçok dil ikisini de kullanır. İlgili bir terim olan transpiler, benzer düzeyde diller arasında çeviri yapan bir derleyicidir; TypeScript'i JavaScript'e dönüştüren TypeScript derleyicisi (tsc) buna örnektir. Derleme zamanı hataları çalışma zamanı hatalarından da farklıdır: ilki programın oluşturulmasını engeller, ikincisi ise program çalışırken ortaya çıkar.

Bir bakışta

Derleyici kaynak kodu aşama aşama makine koduna çevirir: metni token'lara ayırır, bunları bir sözdizimi ağacına dönüştürür, ağacı denetleyip iyileştirir ve işlemci için komutlar üretir.Kaynak kodx = a + 1Token'larx · = · a · + · 1Sözdizimi ağacıayrıştırDenetletipler · iyileştirMakine kodumov · add=x+a1ağaç olarak x = a + 1tip hatası, satır 3çalışmadan yakalanır
Yanlış tip gibi hatalar denetim aşamasında, program daha hiç çalışmadan yakalanır.

Önemli noktalar

  • Derleyici, kaynak kodu makine koduna, bytecode'a ya da başka bir dile çevirir.
  • Aşamalar hâlinde çalışır: token'lara ayırma, çözümleme, denetleme, en iyileme ve kod üretme.
  • Derleme zamanı hataları, program hiç çalışmadan önce yakalanır.
  • Yorumlayıcı ise kodu önceden tamamen çevirmek yerine doğrudan çalıştırır.
  • TypeScript derleyicisi gibi bir transpiler, benzer üst seviyeli diller arasında kod dönüştürür.

Örnek

Programları komut satırından derlemekbash
# Compile a C program into a native executable, then run it
gcc hello.c -o hello
./hello

# Compile Java source into bytecode for the Java Virtual Machine
javac Hello.java
java Hello

# Transpile TypeScript into JavaScript, then run it with Node.js
npx tsc app.ts
node app.js

Sık sorulan sorular

Derleyici ile yorumlayıcı arasındaki fark nedir?

Derleyici, tüm programı önceden, genellikle makine koduna olmak üzere başka bir biçime çevirir ve bu kod sonra çalışır. Yorumlayıcı ise program çalışırken kaynak kodu doğrudan okur ve yürütür; birçok modern dil her iki yaklaşımı da birleştirir.

JavaScript derlenen bir dil mi, yorumlanan bir dil mi?

İkisi de. JavaScript çoğunlukla yorumlanan bir dil olarak tanımlanır, ancak Chrome ve Node.js'te kullanılan V8 gibi modern motorlar bir yorumlayıcıyla başlar, ardından sık kullanılan kodu anında en iyilenmiş makine koduna derler; buna tam zamanında (just-in-time) derleme denir.

Transpiler nedir?

Transpiler ya da kaynaktan kaynağa derleyici, kodu bir üst seviyeli dilden diğerine, örneğin TypeScript'ten JavaScript'e çevirir. Babel gibi araçlar da modern JavaScript'i uyumluluk için eski sözdizimine dönüştürmek amacıyla transpile kullanır.

Sık karşılaştırılanlar

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar