Programming Language
Hectopat
- 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:
www.technopat.net
Ş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:
Şimdi gelin ilk olarak compiler kavramından başlayalım. Bunun için örnek bir dil seçelim: C++.
Ş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.
Şimdi ise interpreter kavramına yani yorumlayıcıya geldik. Yine aynı şekilde bir örnek üzerinden gidelim. (Örnek dil: 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:
Ş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:
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:
Transistörler - Logic Gate: Binary toplama ve 4 Bit'lik Aritmetik Mantık Birimi (ALU)
Geçtiğimiz haftalarda, Transistörler - Logic Gate konusyla beraber birkaç konu sürecek bir yolculuğa başlamaıştık. O konuda genel olarak transistörlere, nasıl çalıştıklarına ve kullanım alanlarına değinmiştik. Konunun sonunda da, başlıkta bahsedilen ve bizim için asıl öneme sahip olan "Logic...
Ş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.
- 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.
- Eğer yazılan kodda syntax hatası yoksa derleyici yazılan kodu bir bütün halinde makine diline çevirir.
- 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.
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: