Derleyici
- İngilizcesi
- Compiler
- Okunuşu
- kımpaylır
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
Ö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
# 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.jsSı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
- Derleyici vs YorumlayıcıDerleyici programın tamamını çalışmadan önce çevirir; yorumlayıcı ise kaynak kodu çalışma anında adım adım yürütür ve ham hız yerine hızlı geri bildirim sunar.
- Derleyici vs TranspilerDerleyici kodu makinenin ya da VM'in çalıştıracağı alt seviye bir biçime çevirir; transpiler ise başka bir üst seviye dile, örneğin TypeScript'i JavaScript'e.
İlgili sayfalar
- Veri türüProgramlamanın Temelleri, s. 54Veri türü, bir programa bir verinin sayı ya da metin gibi hangi tür bir değer taşıdığını ve hangi işlemlerin ona uygulanabileceğini söyleyen sınıflandırmadır.
- İstisnaProgramlamanın Temelleri, s. 28İstisna, bir hata oluştuğunda programın normal akışını kesen bir olaydır; kod bunu programı çökertmek yerine yakalayıp ele alabilir.
- TypeScriptWeb Geliştirme, s. 51TypeScript, JavaScript üzerine statik tipler ekleyerek birçok hatayı kod çalışmadan yakalayan ve düz JavaScript'e derlenen bir programlama dilidir.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- WebAssemblyWeb Geliştirme, s. 59WebAssembly, web tarayıcılarında yerele yakın hızda çalışan ve C++, Rust, Go gibi dillerle hızlı web kodu yazılmasını sağlayan kompakt bir ikili kod biçimidir.
- JIT derlemeProgramlamanın Temelleri, s. 30JIT derleme, programın en sık çalışan kısımlarını çalışma anında makine koduna çevirerek yorumlayıcının hızlı açılışını derlenmiş kodun hızıyla birleştirir.
- Programlama DiliProgramlama Dilleri, s. 25Programlama dili, bilgisayarın yerine getirebileceği talimatları yazmak için kesin kuralları olan biçimsel bir dildir; Python, JavaScript, Java ya da C gibi.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin