- Derleme, kaynak kodunu çalıştırılabilir makine koduna dönüştürür.
- Derleyici sözcüksel, sözdizimsel ve anlamsal analiz gerçekleştirir.
- AOT, JIT, çapraz derleyiciler ve transpiler'lar var.
- Derlenmiş kod, yorumlanmış koddan daha hızlıdır.
Programlama dünyasına adım attıysanız, muhtemelen " derleme " terimini duymuşsunuzdur. Bu kavram, yazılım geliştirmenin temelidir, çünkü bir programlama dilinde yazılmış kaynak kodun bir bilgisayarın çalıştırabileceği bir biçime dönüştürülme sürecini tanımlar.
Derlemenin ne anlama geldiğini ve bir derleyicinin nasıl çalıştığını anlamak, kodlarını optimize etmek ve programlama dillerinin nasıl çalıştığını daha iyi anlamak isteyen her programcı için önemlidir. Aşağıda bu sürecin neleri içerdiğini, mevcut derleyici türlerini ve derlenmiş ve yorumlanmış kod arasındaki temel farkları ayrıntılı olarak açıklıyoruz.
Derleme nedir?
Derleme, yüksek seviyeli bir dilden (örneğin C++, Java veya Rust) kaynak kodun, bilgisayar işlemcisinin doğrudan çalıştırabileceği ikili koda veya makine koduna çevrilmesi işlemidir .
Kaynak kod, insanların okuyup anlayabileceği bir dilde yazılır, ancak bilgisayarlar yalnızca ikili kodu yorumlayabilir. Bu nedenle, kaynak kodu çalıştırılabilir koda dönüştürmek için derleyici adı verilen özel bir programa ihtiyaç duyulur. Bu konu hakkında daha fazla bilgi edinmek isterseniz, derleyiciler ve yorumlayıcılar arasındaki kavramlar ve farklar hakkındaki kılavuzumuza başvurabilirsiniz.
Derleyici nedir ve nasıl çalışır?
Derleyici , kaynak kodu nesne koduna veya çalıştırılabilir koda dönüştürmede uzmanlaşmış bir programdır. Bu dönüştürme işlemi birkaç aşamadan oluşur:
1. Ön işleme
Derlemeden önce kaynak kodu, makroların genişletildiği, gerekli dosyaların eklendiği ve derlenen kodun üretilmesinden önce diğer değişikliklerin yapıldığı bir ön işleme aşamasından geçer.
2. Sözcüksel analiz
Derleyici, kaynak kodu tarar ve onu , programlama dilindeki en küçük anlam birimleri olan belirteçlere (token'lara ) ayırır; bunlar anahtar kelimeler, tanımlayıcılar ve operatörler gibi öğelerdir.
3. Sözdizimsel analiz
Bu aşamada kod yapısının programlama dilinin dilbilgisine göre doğru olup olmadığı kontrol edilir. Eğer sözdizimi hataları varsa, derleyici bunları tespit edecek ve programcıya bunların nerede olduğunu bildirerek düzeltebilmesini sağlayacaktır.
4. Anlamsal analiz
Derleyici, koddaki işlemlerin ve ifadelerin mantıklı olup olmadığını kontrol eder. Değişkenlerin ve fonksiyonların iyi tanımlanmış olduğunu ve geçerli işlemlerin gerçekleştirildiğini doğrular. Bu, kodunuzun sorunsuz bir şekilde derlenmesi için çok önemlidir.
5. Orta düzey kod üretimi
Kodun sözdizimi ve anlambilimini doğruladıktan sonra, derleyici ara kod üretir ; bu, makine koduna nihai çeviriden önce optimize edilebilen basitleştirilmiş bir gösterimdir.
6. Kod optimizasyonu
Bu aşamada derleyici, oluşturulan kodu daha verimli hale getirmek , bellek tüketimini ve işlem süresini azaltmak için iyileştirmeler yapar.
7. Makine kodu üretimi
Son olarak, ara kod , bilgisayarın işlemci mimarisine özgü makine kodu talimatlarına dönüştürülür. Bu işlem aşaması, programın donanım üzerinde doğru şekilde çalışmasını sağlamak için hayati önem taşır.
8. Bağlantı
Oluşturulan nesne kodu, nihai yürütülebilir dosyayı üretmek için gerekli kütüphaneler ve diğer modüllerle birleştirilir. Bu kütüphanelerin nasıl yönetildiği ilginçtir ve bunun için, C dili için derleyiciler bölümümüzde bulabileceğiniz gibi, özel bir derleyici yararlı olabilir.
Derleyici türleri
Çalışma biçimlerine ve amaçlarına göre farklı derleyici türleri vardır:
- AOT (Zamanından Önce) derleyiciler:Çalıştırılmadan önce tüm kodları derlerler. Örnekler: GCC, Clang.
- JIT (Tam Zamanında) derleyiciler: Performansı artırmak için kodu yürütme sırasında derlerler. Örnekler: Java için JVM, JavaScript için V8. Bu türün daha derin bir şekilde anlaşılması için, rehberimizi öneriyoruz Tam Zamanında Derleyiciler.
- Çapraz derleyiciler:Çalıştırdıkları platformdan farklı bir platform için çalıştırılabilir kod üretirler. Eğer ilgileniyorsanız, şu konuda okuyabilirsiniz: Çapraz derleyiciler ayrıntılı olarak.
- Transpiler'lar: Kodu bir üst düzey dilden diğerine, örneğin TypeScript'ten JavaScript'e dönüştürürler.
Derlenmiş kod ve yorumlanmış kod
Program yürütmesindeki temel farklardan biri , kodun derlenip derlenmemesidir :
- Derlenmiş kod: Çalıştırılmadan önce tamamen çevrilmiş olur ve genellikle daha hızlıdır. Örnek: C, C++.
- Yorumlanmış kod: Çalışma zamanında satır satır çevrilerek taşınabilirlik kolaylaştırıldı ancak performans düşürüldü. Örnek: Python, JavaScript.
Pratik derleme örneği
Diyelim ki C dilinde bir program yazdınız:
#katmak int main() { printf("Merhaba dünya!\n"); 0 döndür; }
Bu kodu GCC ile bir terminalde derlemek için şunu çalıştırmanız gerekir:
gcc programı.c -o programı
Makale boyunca derleme sürecini, tanımından yazılım geliştirmedeki önemine kadar derinlemesine inceledik. Yorumlanan diller esneklik sunarken, derlenen diller verimlilikleriyle dikkat çekmektedir. Bir derleyicinin nasıl çalıştığını ve sürecin aşamalarını anlamak, programcılar olarak becerilerimizi geliştirmenin anahtarıdır.