Derleyici (compiler)
Yazan: Şadi Evren ŞEKER
Basitçe bir dilde yazılmış olan kodu (kaynak kodu yada source code) istenilen başka bir kod haline dönüştüren programdır. Genelde üretilen bu kod ortama göre çalıştırılabilir kod (executable code) olarak üretilmektedir. Ancak bir derleyicinin daha doğru tanımı bir dildeki kodu başka dile çeviren program olarak yapılabilir. Örneğin C dilinde yazılan bir programı PASCAL diline çeviren programlara derleyici adı verilebilir.
Derleyicinin diğer bir tanımı ise daha üst seviye bir dilden daha alt seviyeli bir dile tercüme olarak kabul edilebilir. Buna göre örneğin C dilinden Assembly veya makine dili gibi daha alt dillere tercüme ile derleyici kavramı daha da sınırlandırılmış olarak kabul edilebilir.
Derleyiciler günümüzde daha çok bir dilde yazılmış koddan, işletim sistemi ve donanım bağımlı kodların üretilmesinde kulllanılmaktadırlar.
Bu üretim sırasında ya doğrudan işletim sisteminin anlayacağı ve çalıştıracağı kodları üretirler ya da işletim sisteminde bulunan veya yine dil bağımlı olarak çalışan bağlayıcı (linker) programların anlayacağı ara kodları üretirler.
Derleyiciler bu kod üretmesi sırasında, üretilen kodun en verimli şekilde üretilmesi için kod iyileştirmesi (optimisation) da yapmaktadırlar. Yani hedef dildeki çalışma süresi ve hafıza ihtiyacı en az olan kodu üretmek bir derleyicinin daha başarılı olma kriterlerinden birisidir.
Aynı zamanda kaynak kodda (source code) bulunan hataların yakalanması bu hataların programcıya bildirilmesi de derleyicilerin diğer görevlerinden birisidir.
Derleyiciler (compiler) ile Yorumlayıcılar (Interpreter) arasındaki farklar:
Basitçe, bir kaynak kodu hedef koda çevirdikten sonra çalıştıran ve dolayısıyla koddaki hataları yakalama işlemini ve kodun iyileştirilmesini daha kod çalıştırmadan yapan çeviricilere derleyici, kodu satır satır veya bloklar halinde çalıştırıp sırası gelmeyen satırları hiç çalıştırmayan bu satırlardaki hataları hiçbir zaman göremeyen ve kodun bütününe ait iyileştirmeleri yapamayan çeviricilere de yorumlayıcı (interpreter) adı verilmektedir.
Genel kanının tersine bir dilin derleyici veya yorumlayıcı özelliği yoktur. Yani C dili için sadece derleyicisi bulunan bir dildir demek yanlış olur. Bu durum bütün diller için geçerlidir. Her dil için bir derleyici veya yorumlayıcı tasarlanabilir. Ama daha genel bir bakışla, her dilin aslında yorumlayıcı (interpreter) yapısında bir çalışması olduğunu söylemek yanlış olmaz. Sonuçta bilgisayarın işlemcisinde anlık olarak tek bir işlem yapılabilmektedir ve çalışması istenen kod, işlemciye sırayla verilecek ve satır satır çalıştırılacaktır.
Genelde bir ortam yazılan dilin çalıştırılmasına kadar geçen sürede ya bir derleyici yada bir yorumlayıcı kullanılmaktadır. Gelişmekte olan teknolojiyle iki programı birden kullanan diller de türemiştir. Örneğin JAVA dilinde kod önce derlenerek byte code adı verilen ve sadece java sanal makinelarında (java virtual machine) çalıştırlabilen bir kod üretilmektedir. Bu üretilen ara kod daha sonra java sanal makinasında bir yorumlayıcı yapısına uygun olarak çalıştırılmaktadır.
Tek geçişli (one pass) ve çok geçişli (multi pass) derleyiciler:
Bu başlıkta geçiş ile kastedilen kavram, bir derleyicinin kaynak kodu baştan sona kadar okumasıdır. Yani tek geçişli derleyicilerde kaynak kod baştan başlanıp sona kadar bir kere okunmakta buna mukabil çok geçişli derleyicilerde (örneğin iki geçişli bir derleycide) birden çok kereler (örneğin iki kere) kaynak kod baştan sona kadar taranmaktadır.
Tek geçişli derleyiciler tahmin edileceği üzere çok geçişlilere göre çok daha hızlı çalışmaktadırlar. Ancak bazı durumlarda dilin tasarımı tek geçişli derleyicilere izin vermemektedir. Örneğin kodun sonlarına doğru kodun başında yapılan bir tanımı etkilyecek bir işlem yapıldığını düşünün bu durumda tek geçişle bu olayın algılanması ve kodun doğru şekilde derlenmesinin yapılması mümkün olamaz.
Tek geçişli derleyicilerin diğer bir eksik yanı ise kod iyileştirmesi sırasında kodun üzerinden sadece bir kere geçtiği için kodun önceki satırlarında bulunan ve daha sonradan anlaşılan iyileştirmelerin yapılamamasıdır.
Sık kullanılan bazı terimler:
kaynaktan kaynağa derleyici (source to source compiler): Bir dilden başka bir dile kod çeviren derleyicilerdir. Örneğin C++ dilinden JAVA diline çevirmek gibi.
çapraz derleyici (crosscompiler):Çalıştığı ortam dışında farklı bir ortam için kod üreten derleyicidir. Örneğin Linux işletim sisteminde, Windows işletim sistemi için kod üretmek gibi.
Tam zamanında derleyici (just in time compiler): Genelde ortam bağımsız ve ara seviye kodların kullanıldığı JAVA veya .NET gibi dil aileleri için kodun son çalıştırıldığı ortamda kodun iyileştirilmesini hedefleyen derleyici grubudur. Yani örneğin java kodu byte koda çevrildikten sonra sanal java makinesi bu kodu zamanında derleyici ile çalıştırarak zamanlamada iyileşmeyi hedeflemektedir.
« RDF (Resource Description Framework, Kaynak Tanım Çerçevesi) | Bağlayıcı (linker) »
Yorumlar
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Derleyici (compiler)' isimli yazı 03 Jan 2008 tarihinde, saat: 15:30 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 2233 defa okunmuştur.
Benzer yazıları Bilgisayar Kavramları, C/C++, Derleyiciler, JAVA, Programlama Dilleri, Sistem Programlama (System Programming) kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
C ve Komut Satırı (C Console Parameters)
Kuyruk Özyinelemesi (Tail Recursion, Birikimsel Tarz, Accumulation Style)
Tip İnkılabı (Tip Dönüştürme, Type Casting)
üst programlama yaklaşımı (metaprogramming)
İşlem Çatallanması (Process Forking)
İşlem Önceliği (Operator Precedence)
Tam sayı veri tipi (Integer variable type)
Devamsal Geçiş Tarzı (Continuation-passing style, CPS)
Hafıza Yönetimi (Memory Management)
Bağlantılar
[...] derleyici tarafından üretilmiş olan kodları bağlayarak işletim sisteminin çalıştırabileceği tek bir [...]
[...] bir fonksiyonun devamsal geçiş tarzına çevrilmesi otomatik olarak yapılabilmektedir. Bu sayede derleyiciler (compilers) bu özellikten faydalanarak iyileştirme (optimisation) yapabilmektedirler. İşin aslında bu [...]