Derleyici, farklı bir programlama dilinde yazılmış olan kaynak kodun, makine diline veya başka bir dile dönüştürülmesini sağlayan otomatikleştirilmiş programlardır. Derleyiciler, kaynak kodu alır ve onu doğrudan çalıştırılabilir kod (executable code) haline getirir. Bu şekilde, kullanıcıların yazdığı kod bilgisayar tarafından doğrudan çalıştırılabilir hale gelir. Derleyiciler, yazılım geliştirme sürecinin önemli bir parçasıdır ve programların daha verimli ve hatasız çalışmasına yardımcı olur.
Derleyici Nasıl Çalışır?
Derleyici, iki kişi arasındaki bir tercüman gibi, iki programlama dili arasında çeviri yapan bir araçtır. Yüksek seviyeli bir programlama diliyle yazılan kaynak kodu, daha düşük seviyeli bir makine diline dönüştürür. Bir tercüman gibi, Compiler da bu çeviri işlemini gerçekleştirirken kaynak kodda bulunan hataları tespit eder ve bu hataları yazılım geliştiricisine bildirir. Bu sayede, kaynak kodun sorunsuz bir şekilde alt seviyeli bir programlama diline dönüştürülmesini sağlar.
Compiler’ın çalışma prensibini basitçe özetlemek gerekirse; C diliyle bir yazılım geliştirdiğinizi varsayalım. Ancak, bu yazılımın bilgisayar tarafından anlaşılabilmesi ve işlenebilmesi için kodun makine diline çevrilmesi gerekmektedir. Bilgisayarınız C dilini doğrudan anlayamaz, fakat PASCAL ile yazılmış bir kodu anlayabilir.
Bu noktada Compiler devreye girer ve C kodunuzu PASCAL diline dönüştürür. Dönüştürme işlemi sırasında ortaya çıkan hataları size bildirir, böylece kodunuzun sorunsuz bir şekilde dönüştürülmesini ve çalışmasını sağlar. Compiler tarafından oluşturulan kod, çalıştırılabilir bir kod dizisi olduğundan, bilgisayar tarafından işlenebilir ve çalıştırılabilir hale gelir.
Derleyicinin Yapısı ve Bileşenleri
Derleyiciler, kaynak kodunu derleyerek, makine kodu olarak adlandırılan işletim sistemi tarafından anlaşılabilen bir programa dönüştüren yazılım araçlarıdır. Derleyicilerin yapısı genellikle üç temel bileşen içerir: ön işleyiciler (preprocessor), derleyiciler (compiler) ve son işleyiciler (linker).
- Ön İşleyiciler (Preprocessor): Bu bileşen, kaynak kodunun işlenmeden önce, önemli olabilecek kısımlarını işleyen ve önemli olmayanları çıkaran bir programdır. Örneğin, #include komutları, makro tanımları ve koşullu derleme ifadeleri gibi özellikleri işlerler.
- Derleyiciler (Compiler): Bu bileşen, ön işlemci tarafından işlenmiş kaynak kodunu makine diline dönüştürür. Derleyici, semantik analiz, kod optimizasyonu, kod oluşturma ve hata denetimi dahil olmak üzere birçok işlemi gerçekleştirir.
- Son İşleyiciler (Linker): Bu bileşen, bir veya daha fazla derlenmiş modülü birleştirir ve işletim sistemi tarafından yürütülebilir bir programa dönüştürür. Bu bileşen, farklı modüllerin aralarındaki fonksiyon çağrıları ve veri değişimi için uygun bağlantıları kurarak, programın tüm kısımlarının doğru şekilde çalışmasını sağlar.
Derleyicinin yapısı, kaynak kodun derlenme sürecini düzenler ve her bileşen, sürecin farklı bir aşamasını yönetir. Derleyicinin yapısı, her bir bileşenin tam olarak nasıl işlev gördüğünü anlamak için de önemlidir. Örneğin, derleyicinin optimizasyon bileşenleri, kaynak kodu oluşturan programcının yazdığı kodu daha etkili ve hızlı hale getirmek için çeşitli teknikler kullanır. Bu teknikler, makine kodunun boyutunu ve çalışma süresini azaltarak, programın performansını artırır.
Derleme Süreci ve Adımları
Derleme süreci, kaynak kodunun derlenmesi sırasında uygulanan adımların bütünüdür. Derleme süreci, farklı programlama dilleri için değişebilir, ancak genel olarak aşağıdaki adımları içerir:
- Ön İşleme (Preprocessing): Kaynak kodu işlemek ve derleyiciye uygun hale getirmek için ön işlemci (preprocessor) kullanılır. Bu adımda, #include, #define gibi ön işlemci yönergeleri ve makrolar işlenir. Sonuç olarak, ön işleme sonunda, derleyici için hazır hale gelen bir kaynak kodu oluşur.
- Söz Dizimi Analizi (Lexical Analysis): Derleyicinin ikinci adımı, söz dizimi analizi yani lexical analysis olarak adlandırılır. Bu adımda, derleyici kaynak kodunun sözcüklerini veya token’larını ayırmak için analiz eder. Bu token’lar, semantik analiz ve kod üretimi için kullanılacak verilerdir.
- Sözdizimi Analizi (Syntax Analysis): Bu adım, derleyicinin, kaynak kodunun gramerini analiz ederek, doğru yapılandırılmış bir program oluşturmasını sağlar. Derleyici, bir sözdizimi ağacı (syntax tree) oluşturur ve bu ağaç, kaynak kodunun yapısal bileşenlerini temsil eder.
- Semantik Analiz (Semantic Analysis): Bu adımda, derleyici, sözdizimi analizi sonrası oluşan ağacın, anlamsal doğruluğunu kontrol eder. Derleyici, değişken ve fonksiyonların tanımlanması, doğru tiplerin kullanımı, atama ifadeleri gibi semantik kuralları kontrol eder.
- Kod Optimizasyonu (Code Optimization): Bu adımda, derleyici, oluşturulan ağaç yapısının doğru çalışması için kodu optimize eder. Bu, kaynak kodun daha hızlı ve daha verimli çalışmasını sağlar. Derleyici, kodu daha basit hale getirerek, makine kodunun boyutunu küçültür ve programın çalışma süresini azaltır.
- Kod Oluşturma (Code Generation): Bu adımda, derleyici, kaynak kodundan makine koduna dönüştürür. Derleyici, sembol tabloları ve diğer veri yapılarını kullanarak, makine kodunu oluşturur.
- Bağlama (Linking): Bu adım, derlenen modüllerin birleştirilmesi ve son işlemi olan executable dosyasının oluşturulmasıdır. Bu adım, dinamik bağlama (dynamic linking) veya statik bağlama (static linking) olarak gerçekleştirilebilir.
Derleme süreci, bir programın kaynak kodunu, makine koduna dönüştürerek, çalıştırılabilir bir formata getirir.
Derleme Hataları ve Hata Ayıklama
Derleme sürecinde birçok hata meydana gelebilir. Bu hatalar, programlama diline ve derleyiciye göre değişebilir. Derleme hataları, aşağıdaki gibi iki kategoride incelenebilir:
- Sözdizimi Hataları (Syntax Errors): Sözdizimi hataları, kaynak kodunun yanlış yazımından kaynaklanır. Derleyici, bu hataları sözdizimi analizi adımında belirleyebilir. Örnek olarak, değişken isimlerinin yanlış yazılması, yanlış kapatılmış parantezler, noktalı virgüllerin eksikliği veya fazlalığı gibi hatalar verilebilir.
- Anlamsal Hatalar (Semantic Errors): Anlamsal hatalar, kaynak kodunun yanlış kullanımından kaynaklanır. Bu hatalar, sözdizimi analizi ve semantik analiz adımlarında belirlenir. Örnek olarak, bir değişkene yanlış bir değer atama, fonksiyon parametrelerinin yanlış kullanımı, tanımsız değişkenler gibi hatalar verilebilir.
Hata ayıklama, derleme sürecindeki hataları düzeltmek için kullanılan bir yöntemdir. Derleme hataları, genellikle derleyici tarafından doğrudan belirtilir ve hata ayıklama süreci sırasında, kaynak kodu değiştirilir. Derleme sürecindeki hataların nedenleri genellikle hata mesajlarında açıkça belirtilir ve bu mesajlar, hataların hızlı bir şekilde tespit edilmesine yardımcı olur. Hata ayıklama, genellikle, hata mesajlarını okumak, kodu düzeltmek ve tekrar derlemek gibi adımları içerir. Hata ayıklama, ayrıca, kodun çalışma sürecindeki hataları da tespit etmek için kullanılan bir yöntemdir. Bu tür hatalar, genellikle çalışma zamanı hataları olarak adlandırılır ve derleme hatalarından farklıdır. Hata ayıklama, bir programın doğru çalışmasını sağlamak için önemlidir ve programcılar tarafından sıklıkla kullanılır.
Derleyicilerin Yüksek Seviyeli Dillerle İlişkisi
Derleyiciler, yüksek seviyeli programlama dilleriyle ilişkilidir. Yüksek seviyeli diller, insanların kolayca anlayabileceği ve yazabileceği kodlar içerir. Bu diller, derleyici tarafından makine koduna dönüştürülmek üzere tasarlanmıştır. Derleyiciler, yüksek seviyeli dillerde yazılmış kaynak kodları alır ve bu kodları makine diline dönüştürür.
Yüksek seviyeli dillerin kullanımı, programlama dillerinin gelişiminde bir dönüm noktasıdır. Önceden, programlar düşük seviyeli dillerde yazılırdı ve bu, kodun daha düşük seviyeli bir formda yazılmasını gerektirirdi. Düşük seviyeli dillerde yazılan kodlar, daha doğrudan donanım üzerinde çalışır ve genellikle daha hızlıdır. Ancak, bu dillerin kullanımı, kodun daha zor anlaşılmasına ve daha zor yazılmasına neden olur.
Yüksek seviyeli dillerin kullanımı, programlama sürecini kolaylaştırdı. Bu diller, kodun daha anlaşılır olmasını sağlar ve yazımı daha kolaydır. Derleyiciler, yüksek seviyeli dillerle yazılan kodları daha düşük seviyeli makine koduna dönüştürerek, bu dillerin kullanımını daha pratik hale getirir. Derleyiciler, yüksek seviyeli dillerle yazılan kodların daha hızlı çalışmasını sağlamak için, kodu optimize eder ve gerekli durumlarda hata ayıklama işlemleri yapar. Bu nedenle, derleyiciler, yüksek seviyeli dillerin yaygın olarak kullanılmasına katkıda bulunur.
Derleyici Optimizasyonları
Derleyici optimizasyonları, derleyicinin ürettiği makine kodunun performansını artırmak için yapılan işlemlerdir. Bu işlemler, kaynak kodunun daha verimli bir şekilde çalışmasını sağlar ve genellikle bellek kullanımını ve işlemci zamanını azaltır.
Aşağıda, derleyici optimizasyonlarının bazı örnekleri verilmiştir:
- Kodun tekrar kullanılması: Derleyici, kodun tekrar kullanılabilecek parçalarını tanımlayarak, kaynak kodun daha az işlemci zamanı ve bellek kullanımı gerektirmesini sağlar.
- Sınırlama kaldırma: Derleyici, kaynak koddaki gereksiz sınırlamaları kaldırarak, kodun daha hızlı çalışmasını sağlar.
- Sıralama optimizasyonu: Derleyici, kodun daha hızlı çalışması için, işlemlerin sırasını optimize eder.
- Bellek yönetimi: Derleyici, kodun daha az bellek kullanmasını sağlamak için, bellek yönetimi optimizasyonları yapar.
- Döngü optimizasyonu: Derleyici, döngüleri optimize ederek, kodun daha hızlı çalışmasını sağlar.
- İfade sadeleştirme: Derleyici, kaynak koddaki gereksiz ifadeleri çıkartarak, kodun daha az işlemci zamanı ve bellek kullanımı gerektirmesini sağlar.
- Önbellek optimizasyonu: Derleyici, önbellek kullanımını optimize ederek, kodun daha hızlı çalışmasını sağlar.
- İşlemci mimarisi optimizasyonu: Derleyici, kodun hedef işlemci mimarisine uygun şekilde optimize ederek, kodun daha hızlı çalışmasını sağlar.
Bu optimizasyonlar, kaynak kodun daha hızlı ve verimli bir şekilde çalışmasını sağlar. Ancak, bazı durumlarda optimizasyonlar, kodun daha karmaşık hale gelmesine ve hata ayıklama işlemlerinin zorlaşmasına neden olabilir. Bu nedenle, derleyici optimizasyonlarının dikkatli bir şekilde yapılması önemlidir.
Derleyicilerin Bellek Yönetimi
Derleyiciler, bellek yönetimi için çeşitli optimizasyon teknikleri kullanır. Bu teknikler, kodun bellek kullanımını optimize ederek daha az bellek kullanımı sağlar ve böylece performansı artırır.
İşte derleyicilerin bellek yönetimi için kullandığı bazı teknikler:
- Bellek havuzu: Derleyiciler, bellek yönetimi için bir bellek havuzu kullanabilirler. Bu, bellek tahsisi ve serbest bırakma işlemlerinin daha hızlı yapılmasını sağlar.
- Bellek yönetimi kodu: Derleyiciler, bellek yönetimi kodunu otomatik olarak ekleyebilirler. Bu, kaynak kodda bellek yönetimini elle yapmak zorunda kalmayı önler.
- Çöp toplama: Derleyiciler, kullanılmayan bellek alanlarını otomatik olarak toplayan bir çöp toplama algoritması kullanabilirler. Bu, bellek sızıntılarını önler ve bellek kullanımını optimize eder.
- Hafıza havuzları: Derleyiciler, sık kullanılan bellek alanlarını saklamak için hafıza havuzları kullanabilirler. Bu, bellek tahsisi ve serbest bırakma işlemlerini hızlandırır.
- Bellek yönetimi optimizasyonu: Derleyiciler, bellek yönetimini optimize ederek daha az bellek kullanımı sağlar. Örneğin, değişkenlerin türüne göre farklı bellek alanları tahsis edilebilir.
Bellek yönetimi optimizasyonları, bellek kullanımını optimize ederek performansı artırır. Ancak, bazı durumlarda bu optimizasyonlar, kodun daha karmaşık hale gelmesine neden olabilir ve hata ayıklama işlemlerini zorlaştırabilir. Bu nedenle, bellek yönetimi optimizasyonlarının dikkatli bir şekilde yapılması önemlidir.
Derleyicilerin İşletim Sistemi İle İlişkisi
Derleyiciler ve işletim sistemi (OS) arasında sıkı bir ilişki vardır. Derleyiciler, OS ile uyumlu çalışacak şekilde tasarlanmıştır ve OS’nin sağladığı hizmetlere erişim sağlayarak çalışırlar.
Derleyiciler, OS tarafından sağlanan hizmetlere erişmek için sistem çağrıları kullanırlar. Bu sistem çağrıları, dosya okuma/yazma işlemleri, bellek tahsisi/serbest bırakma işlemleri, iş parçacığı oluşturma/yönetimi, ağ işlemleri gibi birçok işlemi gerçekleştirmek için kullanılabilir.
Ayrıca, OS’nin sağladığı sanal bellek yönetimi de derleyicilerin performansını etkiler. Derleyiciler, bellek kullanımını optimize etmek için sanal bellek yönetimini etkin bir şekilde kullanabilirler. Bunun yanı sıra, OS’nin sağladığı işlemci zamanlaması da derleyicilerin performansını etkileyebilir.
Öte yandan, OS de derleyicilerin çalışmasını etkileyebilir. Örneğin, OS’nin bellek yönetimi politikaları, derleyicilerin bellek kullanımını etkileyebilir. Ayrıca, OS’nin işlemci zamanlaması politikaları, derleyicilerin performansını da etkileyebilir.
Sonuç olarak, derleyiciler ve OS birbirleriyle sıkı bir şekilde ilişkilidir ve birbirlerinden etkilenirler. Bu nedenle, derleyicilerin OS ile uyumlu çalışması ve OS’nin sağladığı hizmetlerin en iyi şekilde kullanılması önemlidir.
Derleyicilerin Gömülü Sistemlerde Kullanımı
Derleyiciler, yazılım geliştirme sürecinde oldukça önemli bir araçtır. Gömülü sistemlerde kullanımı da oldukça yaygındır. Gömülü sistemler, genellikle sınırlı kaynaklara sahip olduğundan, en küçük ve en optimize edilmiş kodu çalıştırmak önemlidir. Bu nedenle, derleyicilerin gömülü sistemlerde kullanımı, yüksek performanslı ve optimize edilmiş kod üretmek için önemlidir.
Gömülü sistemlerde kullanılan birçok derleyici, C ve C++ gibi düşük seviye programlama dillerini destekler. Bu diller, bellek yönetimi ve düşük seviye donanım erişimi gibi gömülü sistemlerin gereksinim duyduğu özellikleri sağlayabilir. Derleyiciler, bu dillerde yazılmış kodları optimize ederek, kodun hızını artırabilir ve bellek kullanımını azaltabilir. Bu nedenle, gömülü sistemlerde, kodu en iyi şekilde optimize edebilen bir derleyici kullanmak önemlidir.
Gömülü sistemlerde kullanılan derleyiciler, sadece kodu derlemekle kalmaz, aynı zamanda hata ayıklama işlemlerini de gerçekleştirir. Derleyiciler, programcıların kodlarını analiz etmelerine ve hata ayıklama işlemlerini gerçekleştirmelerine olanak tanır. Böylece, gömülü sistemlerde hata ayıklama işlemleri daha kolay hale gelir.
Sonuç olarak, derleyiciler, gömülü sistemlerde yazılım geliştirme sürecinde önemli bir araçtır. Kodun optimize edilmesi ve bellek kullanımının azaltılması gibi önemli özellikleri sağlar. Ayrıca, hata ayıklama işlemlerini kolaylaştırır ve geliştirme sürecini hızlandırır.
Derleyicilerin Veri Yapıları ve Algoritmalarla İlişkisi
Derleyicilerin veri yapıları ve algoritmalarla ilişkisi oldukça yakındır. Derleyiciler, yazılım geliştirme sürecinde, programlama dillerinde yazılmış kodları alır ve derleyerek, makine dilinde çalıştırabilir hale getirir. Bu süreçte, derleyicilerin kullandığı algoritmalar ve veri yapıları oldukça önemlidir.
Öncelikle, derleyicilerin belirli veri yapılarını kullanarak kodu analiz etmesi gerekebilir. Örneğin, kodda kullanılan değişkenlerin ve fonksiyonların tanımları gibi bilgileri saklamak için sembol tabloları kullanılır. Bu sembol tabloları, genellikle veri yapıları olarak tanımlanır. Derleyiciler, sembol tablolarını oluşturmak, saklamak ve güncellemek için çeşitli veri yapıları kullanır.
Ayrıca, derleyicilerin kodu analiz etmek ve optimize etmek için kullandığı algoritmalar da önemlidir. Örneğin, derleyiciler, kodu parse etmek için ağaç veri yapıları kullanabilirler. Bu veri yapıları, kodu ayrıştırmak ve analiz etmek için kullanılır. Ayrıca, derleyiciler, kodu optimize etmek için farklı algoritmalar kullanır. Bu algoritmalar, genellikle kodu daha hızlı veya daha az bellek kullanarak çalışacak şekilde optimize eder.
Sonuç olarak, derleyicilerin veri yapıları ve algoritmalarla ilişkisi oldukça önemlidir. Derleyiciler, sembol tabloları gibi veri yapıları kullanarak kodu analiz ederler ve ağaç veri yapıları gibi veri yapıları kullanarak kodu parse ederler. Ayrıca, derleyicilerin kodu optimize etmek için kullandığı farklı algoritmalar da önemlidir. Derleyiciler, veri yapıları ve algoritmalar kullanarak yazılım geliştirme sürecinde önemli bir rol oynarlar.
Derleyicilerin Çeşitleri ve Özellikleri
Derleyiciler, yazılım geliştirme sürecinde kullanılan önemli araçlardan biridir ve farklı çeşitleri bulunmaktadır. İşte, derleyicilerin farklı çeşitleri ve özellikleri:
- C derleyicileri: C programlama dili için kullanılan derleyicilerdir. C, düşük seviyeli bir programlama dili olduğundan, gömülü sistemlerde sıklıkla kullanılır.
- C++ derleyicileri: C++ programlama dili için kullanılan derleyicilerdir. C++ dili, nesne yönelimli programlama yapısı sunar.
- Java derleyicileri: Java programlama dili için kullanılan derleyicilerdir. Java, taşınabilirlik ve güvenlik özellikleri nedeniyle sıklıkla kullanılır.
- Python derleyicileri: Python programlama dili için kullanılan derleyicilerdir. Python, yüksek seviyeli bir programlama dilidir ve hızlı bir şekilde kod yazılmasına izin verir.
- Ada derleyicileri: Ada programlama dili için kullanılan derleyicilerdir. Ada, yüksek güvenlik ve doğruluk özellikleri nedeniyle askeri, havacılık ve uzay endüstrisinde sıklıkla kullanılır.
- Fortran derleyicileri: Fortran programlama dili için kullanılan derleyicilerdir. Fortran, bilimsel hesaplama, mühendislik ve matematiksel problemleri çözmek için sıklıkla kullanılır.
Her derleyicinin kendine özgü özellikleri vardır. Örneğin, bazı derleyiciler, optimizasyon işlemleri için farklı algoritmalar kullanır. Diğer derleyiciler, hata ayıklama işlemleri için daha fazla seçenek sunabilir. Ayrıca, bazı derleyiciler, daha hızlı veya daha az bellek kullanarak çalışacak şekilde kodu optimize edebilir.
Sonuç olarak, derleyicilerin farklı çeşitleri ve özellikleri bulunmaktadır ve her derleyicinin kendine özgü avantajları vardır. Yazılım geliştirme sürecinde, uygun bir derleyici seçmek ve özelliklerini anlamak, kodun daha iyi optimize edilmesine ve hata ayıklama işlemlerinin daha kolay yapılmasına yardımcı olabilir.
Derleyiciler (Compiler) ile Yorumlayıcılar (Interpreter) Arasındaki Farklar
Derleyiciler (compiler) ve yorumlayıcılar (interpreter), programlama dilleri gibi yüksek düzeyli dillerin düşük seviyeli makine koduna dönüştürülmesi için kullanılan araçlardır. Bu işlem genellikle yazılımın çalıştırılması sırasında gerçekleştirilir.
Derleyiciler, kaynak kodunu bir seferde tümüyle derler ve makine kodunu oluştururlar. Bu makine kodu daha sonra doğrudan çalıştırılabilir. Derleyiciler, kodun daha hızlı çalışmasını sağlayabilir ve kodun hatalarını önceden tespit edebilirler. Ancak, derlenmiş kodun herhangi bir değişikliği için, kodun yeniden derlenmesi gereklidir.
Öte yandan, yorumlayıcılar, kaynak kodunu yorumlayarak, kodu çalıştırırlar. Her bir satır kod, yorumlayıcı tarafından yorumlanır ve doğrudan çalıştırılır. Yorumlayıcılar, kodun hızını düşürebilirler, ancak kodun daha dinamik olmasını sağlayabilirler. Yorumlanmış kod değiştirildiğinde, kod yeniden yorumlanır, ancak yeniden derlenmesi gerekmez.
Kısacası, derleyiciler, kodu daha hızlı çalıştırırken, yorumlayıcılar kodun daha esnek ve dinamik olmasını sağlarlar.
Tek Geçişli (One Pass) ve Çok Geçişli (Multi Pass) Derleyiciler
Tek geçişli (one pass) ve çok geçişli (multi pass) derleyiciler, derleme sürecinde farklı yaklaşımlar kullanır.
Tek geçişli derleyiciler, kaynak kodun tamamını yalnızca bir kez okur ve derler. Bu yaklaşım, bellek kullanımını düşük tutar ve derleme sürecini hızlandırır. Ancak, kaynak kodda kullanılan sembol ve fonksiyonların tanımlanma sırası önemlidir, çünkü bir sembol veya fonksiyon kullanılmadan önce tanımlanmış olması gerekir. Tek geçişli derleyiciler, bu nedenle sembol ve fonksiyon tanımlarının sıralamasına dikkat eder.
Çok geçişli derleyiciler ise kaynak kodunu birden fazla kez okuyup işlerler. İlk geçişte sembol ve fonksiyonların tanımlanmasını okur, daha sonra kodun geri kalanını okuyup işler. Bu yaklaşım, sembol ve fonksiyonların tanımlama sırasının önemini ortadan kaldırır. Ancak, bellek kullanımı daha yüksektir ve derleme süreci daha yavaştır.
Çok geçişli derleyicilerin avantajı, sembol ve fonksiyonların sıralaması konusunda daha esnek olmalarıdır. Bu nedenle, çok geçişli derleyiciler genellikle daha karmaşık dillerin derlenmesinde kullanılır. Ancak, bellek kullanımı ve derleme süresi daha uzun olduğu için, daha basit dillerde tek geçişli derleyiciler tercih edilebilir.
Çevirme (Assembly)
Çevirme (Assembly), bilgisayarın anlayabileceği dilde yazılmış yüksek seviyeli programlama dillerinden daha düşük seviyeli, makine diline yakın bir dildir. Çevirme, yüksek seviyeli bir dilde yazılmış programın makine diline dönüştürülmesini sağlar.
Assembly dili, herhangi bir yüksek seviyeli programlama dilinden daha az soyut bir yapıya sahiptir. Bu nedenle, Assembly dilinde programlama yapmak, yüksek seviyeli dillere göre daha zor olabilir. Ancak, makine diline yakın bir dil olduğu için, donanım düzeyinde daha fazla kontrol sağlamak ve daha yüksek performans elde etmek mümkündür.
Assembly dilinde yazılmış programlar, belirli bir işlemci mimarisine göre yazılır. Bu nedenle, farklı işlemci mimarileri için farklı Assembly dilleri vardır. Assembly dili, makine diline yakın olması nedeniyle, programların doğrudan işlemci tarafından çalıştırılabilmesine olanak tanır. Bu da Assembly dilinde yazılan programların, yüksek seviyeli dillere göre daha hızlı çalışmasını sağlar.
Assembly dilinde programlama, donanım kontrolü gerektiren uygulamalarda sıklıkla kullanılır. Örneğin, işletim sistemleri, sürücüler, gömülü sistemler ve cihaz sürücüleri gibi uygulamalar genellikle Assembly dilinde yazılır. Ancak, günümüzde yüksek seviyeli dillerin gelişimiyle birlikte, Assembly dilinin kullanımı azalmıştır ve genellikle yalnızca özel durumlarda kullanılır.
Bağlama (Linking)
Bağlama (Linking), programlama dillerinde yazılmış farklı kaynak dosyalarının (örneğin, C, C++, Assembly gibi) birleştirilerek tek bir çalıştırılabilir dosya haline getirilmesi işlemidir. Bu işlem, genellikle derleme aşamasından sonra gerçekleştirilir.
Bağlama, farklı kaynak dosyalarının içinde bulunan fonksiyonlar, değişkenler ve diğer kod bölümlerinin doğru şekilde bir araya getirilmesini sağlar. Bu sayede, farklı kaynak dosyalarından gelen kodlar birbirleriyle uyumlu hale gelir ve tek bir program olarak çalışabilir hale gelir.
Bağlama işlemi, genellikle iki aşamada gerçekleştirilir: statik bağlama ve dinamik bağlama.
Statik bağlama, kaynak dosyalarındaki kodların, derlenip derleyici tarafından makine diline dönüştürülmesinin ardından, birleştirilerek tek bir çalıştırılabilir dosya oluşturulması işlemidir. Bu işlem, programın çalıştırılacağı bilgisayarda, tüm kaynak kodlarının bir arada olması ve tamamen bağımsız bir program olarak çalışabilmesi anlamına gelir. Ancak, bu yöntemde tüm kaynak kodları, programın çalıştırılacağı bilgisayarda önceden yüklenir, bu da uygulamanın daha büyük boyutlu olmasına neden olabilir.
Dinamik bağlama ise, kaynak dosyalarındaki kodların derlenip derleyici tarafından makine diline dönüştürülmesinin ardından, programın çalışma zamanında, ihtiyaç duyulan fonksiyon ve diğer kod bölümlerinin diğer kaynak dosyalarından yüklendiği işlemdir. Bu yöntem, programın daha küçük boyutlu olmasına ve yalnızca ihtiyaç duyulduğunda kaynak kodlarının yüklenmesine olanak tanır. Ancak, dinamik bağlama, programın çalışacağı bilgisayarın, gerekli bağımlılıkların yüklü olduğu konusunda emin olunmasını gerektirir.