Yorumlayıcı (Interpreter) ve Derleyici (Compiler) Nedir?

Programlama konusundaki makalemizde, yazdığımız kaynak kodun makine diline çevrilmesinden bahsetmiştik. Okumadıysanız önce onu okumanızı öneririz: Programlama Nedir?

Genel olarak yüksek seviyeli bir dil kullanarak bilgisayar programı yazarız. Yüksek seviyeli bir dil, bizim tarafımızdan anlaşılır bir dildir. Programlama dillerinin çoğu İngilizce kelime ve kelime grupları içeren anahtar kelimeler kullanırlar. Fakat bilgisayarlar bu kelimeleri anlamazlar. Sadece makine kodu denilen 0’lar ve 1’lerle yazılmış olan programları anlarlar.

Yüksek seviyeli dil ile yazılmış olan programa kaynak kodu denir. Kaynak kodunun bilgisayarda çalıştırılabilmesi için makine koduna dönüştürülmesi gerekir. İşte bu iş ya Derleyici (Compiler) ya da Yorumlayıcı (Interpreter) tarafından gerçekleştirilir.

Derleyici (Compiler)

Derleyici (Compiler), girdi olarak yüksek seviyeli programlama diliyle yazılmış kaynak kodu alan, makinenin mimarisine göre makine dilinde çıktı üreten bir programdır. Çıktı olarak üretilen makine kodu sonradan herhangi bir zamanda farklı girdilerle tekrar tekrar çalıştırılabilir.

Örnek olarak; Java derleyicisi javac verilebilir. Javac, .java uzantılı kaynak dosyasını Java Sanal Makinesi (Java Virtual Machine)  olarak bilinen bir hayali makine için  makine dili olan Java bytecode ile yazılmış .class dosyasına dönüştürür.

Derleyici, kaynak kodu derlemeden önce kodları kontrol eder. Herhangi bir yazım hatası veya derleyicinin sevmediği durumlar var ise bu raporlanır. Bu da tam olarak çalışan program elde etmeden önce tüm kodlama hatalarını düzeltmemizi sağlar. Ancak bir programın başarılı olarak derlenmiş olması tam olarak hatasız olduğu ve istenileni yapacağı anlamına gelmez. Programımızı çeşitli verilerle test edip, mantıksal olarak da çalıştığından emin olmamız gerekir.

Eğer Linux işletim sistemi üzerinde derlenmiş olan bir C programımız var ise derlenmiş olan bu programı kopyalayıp Windows işletim sistemi üzerinde çalışmasını bekleyemeyiz. Windows üzerinde aynı C programımızı çalıştırmak istersek, Windows bilgisayarda bir C derleyicisi kullanarak programı yeniden derlememiz gerekecektir.

Yorumlayıcı (Interpreter)

Yorumlayıcı (Interpreter), girdi olarak program için olan verilerle birlikte kaynak kodu alan, ve kaynak programı satır satır yürüten bir programdır.

Örnek olarak Java yorumlayıcısı java verilebilir. Java .class uzantılı dosyayı üzerinde çalıştığı makinede çalıştırılabilecek olan doğal makine kodlarına çevirir.

Java’da derleyici ve yorumlayıcı beraber çalışır. Yani, önce oluşturulan kaynak koddan bir ara kod (bytecode) üretilmek için derlenir. Daha sonra bu derlenen bytecode Java Sanal Makinesi (JVM) üzerinde yorumlanarak yürütülür. Bu bazı avantajları da beraberinde getirir. En önemlisi platform bağımsızlığıdır. JVM çalışan her makinede bytecode’larımız sorunsuz çalışacaktır. İkinci avantajı ise Java bytecode’umuz bir sanal makine üzerinde çalıştığı için kötü amaçlı programlara karşı koruma sağlayan bir güvenlik katmanı ile korunmuş oluruz.

Java bytecode ve java yorumlayıcısı sadece Java dilinde kullanılmaz. Örnek olarak, Jython’u Python dilinden Java bytecode’una derlemek için kullanabiliriz ve daha sonra da yorumlamak için java‘yı kullanabiliriz. Ayrıca ML, Lisp ve Fortran derleyicileri de java bytecode’una derlerler.

Derleyici ve yorumlayıcı arasındaki farklar:

Yorumlayıcı Derleyici
Programı satır satır işler Tüm programı tarar ve bir bütün olarak makine koduna çevirir
Kaynak kodu analiz etmekle zaman harcamaz. Ancak genel yürütme süresi daha yavaştır. Kaynak kodun analizi için büyük zaman harcar. Ancak genel yürütme süresi daha hızlıdır.
Herhangi bir hata olana kadar programı çalıştırır. İlk hata gördüğü yerde durur. Bu nedenle hata ayıklama kolaydır. Tüm kaynak kodu taradıktan sonra hata mesajı üretir. Bu nedenle hata ayıklama nispeten zordur.
Python, Ruby, Java gibi diller yorumlayıcı kullanır. C, C++ gibi diller derleyici kullanır.

 

Bu makalemizde Derleyiciyi ve Yorumlayıcıyı anlatmaya çalıştık. Umarım faydalı olmuştur.

Görüşmek üzere…

 

Kaynaklar:

https://www.lifewire.com/compiled-language-2184210

https://www.programiz.com/article/difference-compiler-interpreter

https://introcs.cs.princeton.edu/java/82compiler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir