Assembly dili her makinede çalışan yani makine bağımlı, doğrudan makine tarafından ve makine bağımsız yüksek seviyeli dil(high level language) tarafından anlaşılamayan talimatlar(instructions) içeren mnemoniklerdir. Aslında yazımı ‘mnemonic’ olan bu kelime anımsatıcı mânâsına gelir. Bilgisayar, talimatları makine kodunda (machine code) olursa anlar. Bir bilgisayar programını doğrudan makine koduyla yazmak pek mümkün olmayabilir. Programlar çoğunlukla yüksek seviyeli dillerde yazılır ve kaynak kodu (source code) olarak adlandırılır. Yüksek seviyeli dillere örnek olarak Java, C++, Python’u verebiliriz. Ayrıca bu kaynak kod doğrudan bilgisayar tarafından çalıştırılamaz. Çalıştırılabilmesi için makine diline dönüştürülmeye ihtiyaç duyar. Dolayısıyla dil dönüştürücü ya da dil işleyici kavramını tanımlamak istersek insan tarafından yazılan kaynak kodu, bilgisayarın anlayabileceği makine koduna ya da nesne koduna çeviren programdır. Ve bu çevirme tek aşamada olmayabilir. Bu yüzden birden fazla dil dönüştürücümüz var. Hadi daha ayrıntılı inceleyelim:
- Compiler (Derleyici):
Yüksek seviyeli dilde yazılmış kaynak programı okuyan ve makine dilinde eşdeğer bir programa çeviren bir dil işleyicidir.
Örnek: C, C++, C#, Java
Bir compiler’de eğer kaynak kodunda hata yoksa başarılı bir şekilde nesne koduna çevrilir. Compiler kaynak kodunda hatalar olduğunda derlemenin sonunda hangi satırda hangi hatanın olduğunu belirtir. Hatalar derleyicinin başarılı bir şekilde yeniden derleme yapabilmesi için kaldırılmalıdır.
- Assembler (Çevirici):
Assembler, assembly dilinde yazılan programı makine diline çevirmek için kullanılır. Kaynak program, assembly dilinde talimatlar içerir ve assembler’in girdisidir. Çıktı ise assembler tarafından bilgisayarın anlaması için oluşturulan nesne ya da makine kodudur.
- Interpreter (Yorumlayıcı):
Kaynak programın tek bir komutunun makine koduna çevirisini yapan dil işleyicisidir. Ve çevirdiği komutu bir sonraki satıra geçmeden çalıştıran şeye ‘interpreter’ diyoruz. Eğer komutta bir hata varsa interpreter çeviri sürecini durdurur ve bir hata mesajı gösterir. Bir interpreter, bir programlama veya scripting dilinde yazılmış komutları; öncesinde nesne veya makine koduna çevirmeden doğrudan çalıştırır.
Örnek: Perl, Python ve Matlab
Compiler ve Interpreter Arasındaki Farklar
Compiler
- Bir compiler, bir programlama dilinin bütün kaynak kodunu bir CPU (işlemci) için çalıştırılabilir
Interpreter
- Interpreter bir kaynak programı alır; kendisine gelen her satırı birer birer çevirir ve çalıştırır. makine koduna çeviren programdır.
- Compiler’in bütün kaynak kodu analiz etmesi büyük zaman alır. Ama toplam çalıştırma süresi nispeten daha kısadır.
- Interpreter’in analiz etmesi daha az vakit alır. Ama toplam çalıştırma süresi daha uzundur.
- Compiler hata mesajını sadece bütün programı taradıktan sonra oluşturur. Dolayısıyla hata programın her yerinde olabileceğinden debugging, (hata ayıklama) nispeten daha zordur.
- Debugging, program hata ile karşılaşıncaya kadar çevirmeye devam ettiğinden daha kolaydır.
- Ara seviye nesne kodu çıkarır.
- Aradaki seviye atlanır.
- Örnekler: C, C++, Java,C#
- Örnekler: Python, Perl
Çevirisini yaptığım sitenin bağlantısı:
https://www.geeksforgeeks.org/language-processors-assembler-compiler-and-interpreter/