21 Şubat 2011 Pazartesi

Derleyici(compiler) ?

     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.
-ALINTI-