Rehber Compiler ve Interpreter

Katılım
3 Haziran 2019
Mesajlar
1.812
Makaleler
3
Çözümler
6
Merhabalar, bu konuda sizlere compiler ve interpreter kavramlarına değineceğim. Bir yanlışım veya eksiğim varsa lütfen yazın düzeltelim.😀

Konuya geçmeden önce kısaca bir şeye değinmek istiyorum: bilgisayar donanımları tamamen elektrik üzerine işlem yapmaktadır. Yani 1 ve 0 diye tabir edilen makine kodu aslında logic kavramından gelmektedir. Bu alana fazla değinmek istemiyorum ama bunu inceleyebilirsiniz:


Şimdi temelde donanımın kullandığı bu makine dili insanlar tarafından pek de okunabilir değil. Bu yüzden insanlar bu işi daha da kolaylaştırmak için programlama dilleri geliştirmeye başladı. (bknz: Assembly) Bu geliştirilen diller insanların daha iyi yazılan kodları anlayabilmesini ve yazabilmesini sağladı. Fakat bu durumda da anlamayan donanım oluyordu. Yani donanım canlı bir varlık olmadığı için sizin yazdığınız kodları anlamlandıramıyordu. Onun için anlamlı olan tek şey 1 ve 0 idi. Bu yüzden insanlar da yazılan bu kodları makine diline çevirmek için çeşitli çözümler üretti.

Bunlar:
  • Compiler (Derleyici)
  • Interpreter (Yorumlayıcı)

Compiler


Şimdi gelin ilk olarak compiler kavramından başlayalım. Bunun için örnek bir dil seçelim: C++.

C++:
#include <iostream>

int main() {
    std::cout << "Ben C++!";
    return 0;
}

Şimdi yukarıda konsola yazı yazdırmaya yarayan bir program yazılı. (Eminim bu 1 ve 0'a göre çok daha anlaşılabilir.) Bu C++ dili derlenen bir dil. Yani C++ ile yazdığınız kodu anlayan ve hataları bulan bir compiler var. Hadi gelin adım adım örnek üzerinden compiler ne yapıyor bakalım.

  1. Kodunuzu yazdınız ve compiler tarafından compile (anlamı: derlemek) etmesini söylediniz. Compiler bu yazdığınız kodda önce yazım hatası arar ve syntax check (söz dizimi kontrolü) yapar. Eğer hata varsa compile işlemi sonlandırılır.
  2. Eğer yazılan kodda syntax hatası yoksa derleyici yazılan kodu bir bütün halinde makine diline çevirir.
  3. Makine diline çevrilen kod çalıştırılabilmesi için işletim sisteminin anlaması için bir dosyaya aktarılır. (Örneğin .exe) Bu dosya işletim sistemi tarafından çalıştırılabilir ve donanıma iletilebilirdir.
Yani bir kere kodumuzu makine diline çevirdik ve artık bu yazılan kodları donanıma anlatabiliyoruz. Yani tekrar tekrar compiler tarafından derlenmesine gerek yok.

Interpreter​


Şimdi ise interpreter kavramına yani yorumlayıcıya geldik. Yine aynı şekilde bir örnek üzerinden gidelim. (Örnek dil: Javascript)

JavaScript:
console.log("Ben Javascript!");

Javascript dili yorumlanan bir dildir ve yorumlayıcı tarafından kodlar makine diline çevrilir. Hadi yine aşama aşama inceleyelim.


Kodumuzu yazdık ve yorumlayıcı tarafından yorumlanmasını istedik bu bağlamda:

Yazdığımız Javascript kodları bir yorumlayıcı tarafından satır satır okunup hem hata kontrolü yapılır hem de makine diline çevrilir. Yani iki iş aynı anda her satır için ayrı ayrı gerçekleşir.​
Yani siz programı çalıştırınca aynı anda makine diline çevrilme işlemi başlar. Peki bu ne demek oluyor, yani satır satır okumanın ne gibi bir farkı var?​
Mesela yazdığınız kodların sonlarına doğru hata yaptınız ve farkında değilsiniz. Programınız yorumlayıcı tarafından satır satır anlamlandırılarak çalışmaya başladı ve yorumlayıcı hata yaptığınız satıra gelince de programınız çöktü. Yani önceden toplu bir şekilde hata ayıklaması yapılmadığı için program çalıştıktan sonra hata meydana geldi.​
Bununla birlikte bir derleyici kodunuzu önceden tümüyle makine diline çevirmişti, yani sonradan 3. taraf bir programa ihtiyacınız kalmadı fakat derleyici de bu durum bu şekilde değil. çünkü satır satır okuma yapabilmesi için yazdığınız kodlarla beraber çalışacak bir yazılıma ihtiyaç var.​
Bunu şuna benzetebilirsiniz: elinizde İngilizce bir metin var ve cümle cümle çevirip okuyorsunuz. Aradan bir süre geçtıkten sonra belki de o cümleleri eskisi gibi hatırlayamayacaksınız. Fakat önceden o metni bütünüyle çevirseydiniz her zaman alıp okuyabilirdiniz. O yüzden yorumlanan diller çalıştırıldıklarında bir programa ihtiyaç duyar.​
Bununla birlikte önce derlenip sonra yorumlanan diller de var. (bknz: Java) O da başka bir rehberin konusu olsun veya sonradan buraya ekleme yaparım.

Şimdilik kendi bilgilerimi aktardım, bir yanlışım veya eksiğim varsa lütfen yazın düzeltelim. İyi günler dilerim.

Lütfen inceleyin:


 
Java icin ayri paratez acman guzel olmus.
.NET icin de benzer durum gecerli.
Byte koda compile edilen dillerde de belli operasyonlarda JIT sayesinde makine koduyla kiyaslanabilecek performanslar alinabiliyor ki JIT konusu basli basina bir arastirma sahasi.
Soyle paper'lar var hakkinda yazilmis:

Yine python gibi yavas diller icin de gelistirilen JIT ornekleri var => Numba: A High Performance Python Compiler
Kismi olarak python kodunu compile ediyor.
 
Küçük bir ekleme yapayım izninizle.
Kaynak kodu başka bir dosyaya çıktı verecek biçimde düzenleme yapan programlara çevirici program deniyor. Bu çıktı dosyası düşük seviyeli bir dil ise (Assembly dilleri) ya da saf makine dili ise Compiler denir. Uygulamada çıktı dosyası genelde saf makine dili olur. Ayrıca Assembly kodlarını saf makine koduna dönüştüren Compilerlere de Assembler denir.
 
Küçük bir yanlışlık var. Yazılan kodlar derleyiciye gitmeden önce önce önişlemciye gider. Makrolar, kütüphaneleri içe aktarma gibi işlemleri yapar, ardından yeni kodu derleyiciye gönderir. Elinize sağlık...
 
Küçük bir yanlışlık var. Yazılan kodlar derleyiciye gitmeden önce önce önişlemciye gider. Makrolar, kütüphaneleri içe aktarma gibi işlemleri yapar, ardından yeni kodu derleyiciye gönderir. Elinize sağlık...
Aslında o kısımlarda bir yanlışlık yok.
Yukarıda saydığın parçalar derleme yazılımının (derleyicinin) parçaları, saydığın aşamalar ise derleme işleminin aşamalarıdır.
Yani derleme işlemi bir bütün olarak ele alınır ve tüm parçaları bir araya getirip anlamlı bir bütün oluşturma işlemidir ve bağlamda da bu şekline dikkat çekilmiştir.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı