Derleyici, kaynak kodları makine koduna derleme görevine hizmet eden yazılımların adıdır. Bir programlama dilinin derleyicisi, o programlama dili kullanılarak yazılmış olan kodu hedef işlemci mimarisine göre uygun şekilde makine koduna derler ve genellikle çıktı olarak yürütülebilir dosyasının (exeutable file) elde edilmesini sağlar. Bu eyleme derleme denir. Bir başka ifadeyle derleyici, bir tür yazı işleyicidir; girdi olarak yazı alır ve çıktı olarak yazı verir.
Bilgi işlemde yürütülebilir dosya doğrudan işlemci tarafından çalıştırılabilecek bir dosyayı ifade eder. Dosya makine kodu ile yazılmış komut seti talimatları bütününden oluşur.
Derleyiciler yürütülebilir dosyalar oluşturulmak amacıyla yaygın olarak kullanılır. Derleyiciler de çalışma prensiplerine göre kendi içlerinde ayrılır. Tipik bir derleyici, yorumlayıcı ve çeviricide olduğu gibi sözcüksel analiz (lexical anaysis) ve ayrıştırma (parsing) aşamalarını gerçekleştirir.
Derleyicilerin ürettiği yürütülebilir dosyalar her zaman platforma özel olarak derlenmiş makine kodlarından oluşmaz, bazen kaynak kod bir ara temsil diline (intermediate representation) derlenir ve bu dil genellikle bayt kodu (bytecode) olmaktadır.
Ara dillerin en popüler örnekleri Microsoft .NET, Java Sanal Makinesi (Java Virtual Machine - JVM) ve BEAM (Erlang Virtual Machine) şeklindedir. Bu platformlar kendilerine özgü bir ara dil kullanırlar. Bu ara dil türü örneklerin hepsinde bytecode şeklindedir. Örneğin JVM Java Bytecode olarak adlandırılan bir ara dil kullanmaktadır. Bu ara dilin çalışma zamanında yorumlanması ve ilgili platforma göre uyumlu makine kodunun oluşturulmasına daha önce değinilmişti (bkz. P-Code Machine). Bu şekilde derlenen diller zamanında (Just in Time – JIT) derleme tekniğini kullanır.
İki ana derleyici türü vardır, bunlar: yerel (native) ve çapraz (cross) derleyicilerdir. Yerel derleyiciler üzerinde çalıştığı platforma özgü derleme gerçekleştirirler. Dolayısıyla yerel bir derleyiciden elde edilecek çıktı yalnıza derleyicinin derleme zamanında yürütüldüğü sisteme yönelik olacaktır (Örn. Yerel bir derleyici ile C kodunun AMD64 mimarisini kullanan Linux çekirdeğinde çalışan bir makinede derlenmesi sonucu AMD64 ve Linux çekirdeğiyle uyumlu makine kodu elde edilmesi). Yerel derleyicilerin platform bağımsız düşünmeleri gerekmediğinden AOT derleme tekniği ile direkt olarak makine koduna derlenirler. Çapraz derleyiciler üzerinde çalıştıkları platformdan bağımsız bir şekilde destekledikleri tüm platformlara özel olarak makine kodu derlemeleri üretebilirler. Buna örnek olarak ARM64 üzerinde çalışan bir derleyicinin I386 için uyumlu makine kodu derlemesi gösterilebilir. Derleyici yalnızca kodu derlemekle ilgilenmez aynı zamanda derleme zamanında gerekli gördüğü yerlerde kodu optimize edebilir ve daha optimum bir makine kodu üretmek için çabalayabilir. Bunlara derleyici optimizasyonları denir.
Makine üzerinde bulunan işlemcinin komut setine uygun şekilde derlenen saf makine kodlarının işlemci tarafından doğrudan yürütülebilir olduğundan en saf çalışma performansı bu şekilde derlenen dillerden elde edilebilir. Bu diller zamanından önce (Ahead of Time - AOT) derleme tekniğini kullanır.
Genellikle yürütülebilir dosya elde edilmesi şeklinde tanımlanmasının nedeni ise bir derleyicinin her zaman tam anlamıyla yürütülebilir dosya oluşturmamasından kaynaklanmaktadır.
Derleyicinin kullanılmasındaki amaç genellikle çalışabilir bir yazılım elde etmektir. Kullanıcıların programları kullanırken kolaylık sağlamak amaçlı geliştirilmiştir... Örneğin, şu satırı bir programın kaynak kodunda (programın okunabilir hali) düşünelim:
Alttaki assembly'de yazılmış satırlar, aynı programın derlenmiş halidir:
LOAD A [0] ;; belleğin 0 adresindeki veriyi A siciline yükle
ADD A BX ;; A siciline BX sicilindeki adreste bulunan veriyi ekle
STOR A [100];; sonucu 100 adresine yaz
Bu örnekte çevirinin hedefi, programcının anladığı kaynak kodundan işlemcinin anladığı 0 ile 1 den oluşan makine dili kodunu üretmek (LOAD,ADD ve STOR komutları 0001, 0011 ve 0010 olarak yorumlanır)
0001 01 00 00000000 0011 01 10 00000010 0010 01 00 00000100 ---- -- -- --------- | | | |_________bellek adresi | | |____________işaret | |______________sicil |_________________komut
Bir programlama dili genellikle insan tarafından okunabilir yapılardır. Bilgisayarlar komut seti içerisinde yer alan talimatlar dışında herhangi bir komut yorumlama yeteneğine sahip değillerdir. İşlemcilerin mimarisine göre komut seti de farklılık göstermektedir, bu nedenle derleyicilerin desteklenen her farklı işlemci mimarisi için farklı derleme aşamalarını izlemesi ve farklı makine kodu sonuçları üretmesi gerekir.
Derleyici Yapısı
Bir derleyicinin yapısı hedef programlama diline göre değişiklik gösterse de genel olarak bir derleyicinin uygulanması (implementation) yaygın şekilde benzer aşamaları takip eder.
Ön Uç (Front end)
Bir derleyicinin ön ucu, kaynak kodun analiz edilerek daha kolay bir şekilde anlamlandırılması ve anlamlandırılmadan önce bir takım sözdizimi gibi hataların kontrol edildiği yerdir.
- Sözcüksel analiz: kaynak kodun incelenerek jeton (token) olarak temsil edilecek şekilde ayrıştırılmasıdır. Tanımlayıcılar, anahtar kelimeler, operatorler ve diğer kaynak kod ögeleri jetonlar haline getirilerek temsil edilir ve program içerisinde ögelerin anlamlandırılmasında kullanılır.
Arka Uç (Back end)
Bir derleyicinin arka ucu işlenmiş olan ara temsilden yararlanarak hedef derleme platformuna uygun bir şekilde makine kodu oluşturulduğu yerdir. Birden fazla işlemci mimarisini destekleyen derleyiciler her bir mimari için farklı sonuçlar üreten farklı arka uçlara sahip olabilirler.
- Kod oluşturma: platforma uygun şekilde makine kodunun oluşturulmasıdır. Makine kodu içerisinde programın algoritmasının gerçekleşmesi gerekli olan talimatların yanı sıra hata ayıklama ve çalışma zamanı için özel olarak ek kodlar bulunabilir.
- Platforma bağlı optimizasyonlar: derleyici kod ürettiği platforma özel olarak üretilen makine kodu üstünde optimizasyonlar uygulayabilir ve girdi olarak alınan kaynak kodun teorik olarak daha iyi çalışan bir sürümünü elde edebilir.
Ayrıca bakınız
Dış bağlantılar
Daha fazla bilgi için:
- Introduction and overview of compilation (9-2 and 9-7, 2004) 4 Aralık 2004 tarihinde Wayback Machine sitesinde .
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Derleyici kaynak kodlari makine koduna derleme gorevine hizmet eden yazilimlarin adidir Bir programlama dilinin derleyicisi o programlama dili kullanilarak yazilmis olan kodu hedef islemci mimarisine gore uygun sekilde makine koduna derler ve genellikle cikti olarak yurutulebilir dosyasinin exeutable file elde edilmesini saglar Bu eyleme derleme denir Bir baska ifadeyle derleyici bir tur yazi isleyicidir girdi olarak yazi alir ve cikti olarak yazi verir Cok dilli cok hedefli bir derleyici diyagrami Bilgi islemde yurutulebilir dosya dogrudan islemci tarafindan calistirilabilecek bir dosyayi ifade eder Dosya makine kodu ile yazilmis komut seti talimatlari butununden olusur Derleyiciler yurutulebilir dosyalar olusturulmak amaciyla yaygin olarak kullanilir Derleyiciler de calisma prensiplerine gore kendi iclerinde ayrilir Tipik bir derleyici yorumlayici ve ceviricide oldugu gibi sozcuksel analiz lexical anaysis ve ayristirma parsing asamalarini gerceklestirir Derleyicilerin urettigi yurutulebilir dosyalar her zaman platforma ozel olarak derlenmis makine kodlarindan olusmaz bazen kaynak kod bir ara temsil diline intermediate representation derlenir ve bu dil genellikle bayt kodu bytecode olmaktadir Ara dillerin en populer ornekleri Microsoft NET Java Sanal Makinesi Java Virtual Machine JVM ve BEAM Erlang Virtual Machine seklindedir Bu platformlar kendilerine ozgu bir ara dil kullanirlar Bu ara dil turu orneklerin hepsinde bytecode seklindedir Ornegin JVM Java Bytecode olarak adlandirilan bir ara dil kullanmaktadir Bu ara dilin calisma zamaninda yorumlanmasi ve ilgili platforma gore uyumlu makine kodunun olusturulmasina daha once deginilmisti bkz P Code Machine Bu sekilde derlenen diller zamaninda Just in Time JIT derleme teknigini kullanir Iki ana derleyici turu vardir bunlar yerel native ve capraz cross derleyicilerdir Yerel derleyiciler uzerinde calistigi platforma ozgu derleme gerceklestirirler Dolayisiyla yerel bir derleyiciden elde edilecek cikti yalniza derleyicinin derleme zamaninda yurutuldugu sisteme yonelik olacaktir Orn Yerel bir derleyici ile C kodunun AMD64 mimarisini kullanan Linux cekirdeginde calisan bir makinede derlenmesi sonucu AMD64 ve Linux cekirdegiyle uyumlu makine kodu elde edilmesi Yerel derleyicilerin platform bagimsiz dusunmeleri gerekmediginden AOT derleme teknigi ile direkt olarak makine koduna derlenirler Capraz derleyiciler uzerinde calistiklari platformdan bagimsiz bir sekilde destekledikleri tum platformlara ozel olarak makine kodu derlemeleri uretebilirler Buna ornek olarak ARM64 uzerinde calisan bir derleyicinin I386 icin uyumlu makine kodu derlemesi gosterilebilir Derleyici yalnizca kodu derlemekle ilgilenmez ayni zamanda derleme zamaninda gerekli gordugu yerlerde kodu optimize edebilir ve daha optimum bir makine kodu uretmek icin cabalayabilir Bunlara derleyici optimizasyonlari denir Makine uzerinde bulunan islemcinin komut setine uygun sekilde derlenen saf makine kodlarinin islemci tarafindan dogrudan yurutulebilir oldugundan en saf calisma performansi bu sekilde derlenen dillerden elde edilebilir Bu diller zamanindan once Ahead of Time AOT derleme teknigini kullanir Genellikle yurutulebilir dosya elde edilmesi seklinde tanimlanmasinin nedeni ise bir derleyicinin her zaman tam anlamiyla yurutulebilir dosya olusturmamasindan kaynaklanmaktadir Derleyicinin kullanilmasindaki amac genellikle calisabilir bir yazilim elde etmektir Kullanicilarin programlari kullanirken kolaylik saglamak amacli gelistirilmistir Ornegin su satiri bir programin kaynak kodunda programin okunabilir hali dusunelim X 2 Y displaystyle X 2 Y Alttaki assembly de yazilmis satirlar ayni programin derlenmis halidir LOAD A 0 bellegin 0 adresindeki veriyi A siciline yukle ADD A BX A siciline BX sicilindeki adreste bulunan veriyi ekle STOR A 100 sonucu 100 adresine yaz Bu ornekte cevirinin hedefi programcinin anladigi kaynak kodundan islemcinin anladigi 0 ile 1 den olusan makine dili kodunu uretmek LOAD ADD ve STOR komutlari 0001 0011 ve 0010 olarak yorumlanir 0001 01 00 00000000 0011 01 10 00000010 0010 01 00 00000100 bellek adresi isaret sicil komut Bir programlama dili genellikle insan tarafindan okunabilir yapilardir Bilgisayarlar komut seti icerisinde yer alan talimatlar disinda herhangi bir komut yorumlama yetenegine sahip degillerdir Islemcilerin mimarisine gore komut seti de farklilik gostermektedir bu nedenle derleyicilerin desteklenen her farkli islemci mimarisi icin farkli derleme asamalarini izlemesi ve farkli makine kodu sonuclari uretmesi gerekir Derleyici YapisiBir derleyicinin yapisi hedef programlama diline gore degisiklik gosterse de genel olarak bir derleyicinin uygulanmasi implementation yaygin sekilde benzer asamalari takip eder On Uc Front end Bir derleyicinin on ucu kaynak kodun analiz edilerek daha kolay bir sekilde anlamlandirilmasi ve anlamlandirilmadan once bir takim sozdizimi gibi hatalarin kontrol edildigi yerdir Sozcuksel analiz kaynak kodun incelenerek jeton token olarak temsil edilecek sekilde ayristirilmasidir Tanimlayicilar anahtar kelimeler operatorler ve diger kaynak kod ogeleri jetonlar haline getirilerek temsil edilir ve program icerisinde ogelerin anlamlandirilmasinda kullanilir Arka Uc Back end Bir derleyicinin arka ucu islenmis olan ara temsilden yararlanarak hedef derleme platformuna uygun bir sekilde makine kodu olusturuldugu yerdir Birden fazla islemci mimarisini destekleyen derleyiciler her bir mimari icin farkli sonuclar ureten farkli arka uclara sahip olabilirler Kod olusturma platforma uygun sekilde makine kodunun olusturulmasidir Makine kodu icerisinde programin algoritmasinin gerceklesmesi gerekli olan talimatlarin yani sira hata ayiklama ve calisma zamani icin ozel olarak ek kodlar bulunabilir Platforma bagli optimizasyonlar derleyici kod urettigi platforma ozel olarak uretilen makine kodu ustunde optimizasyonlar uygulayabilir ve girdi olarak alinan kaynak kodun teorik olarak daha iyi calisan bir surumunu elde edebilir Ayrica bakinizBaglayici Yorumlayici Sozcuksel analiz Bilgisayar Islemci Programlama dili Kaynak kod Makine kodu Komut setiDis baglantilarDaha fazla bilgi icin ISBN 0 201 10088 6 Introduction and overview of compilation 9 2 and 9 7 2004 4 Aralik 2004 tarihinde Wayback Machine sitesinde