Bilgisayar Bilimleri -19- Derleyici ve Yorumlayıcı Kullanan Diller

Öncelikle yüksek seviye veya alt seviye derken donanıma yakınlık veya soyutlama seviyesi olduğunu unutmamak gerekir. Alt seviye programlama dillerinde halen donanıma dair unsurlar yer almakta ve makine kodlarını kullanarak programlama yapmaktayız. Yüksek seviye dillerde ise yüksek seviyede donanım soyutlaması mevcuttur. Yani yüksek seviye dil üzerinde çalışırken makine komutlarını hiç görmediğimiz gibi adres değerlerini de çoğunlukla görmeyiz. Daha yüksek seviye dillerde adres değerleri ile hiç ilgilenemesek de o kadar da yüksek seviye olmayan C, C++ gibi dillerde işaretçiler vasıtasıyla bellek adreslerine erişim şansımız mevcuttur.

Önceki yazıda söylediğimiz gibi donanım soyutlaması hem bir avantaj hem de bir dezavantajdır. Donanım soyutlaması yüksek olunca programcılık kolay ve etkili olsa da donanımdan uzak kalmamız sebebiyle donanımsal fonksiyonları kullanma imkanımız kısıtlanır. Aynı zamanda donanımdan ne kadar uzak olursak performanstan da o kadar uzak oluruz. Bazen yüksek seviye programlama dilleri ile yapılan işler alt seviye işlemlerin dahil edilmesiyle oldukça etkili bir hale gelebilir.

Daha öncesinden Assembly dilini makine diline çevirmek için çevirici program (Assembler) kullanıldığından bahsetmiştik. Yüksek seviye dillerde ise derleyici veya yorumlayıcı adı verilen ve çok daha karmaşık bir program kullanılmaktadır. Bu program aynı Türkçe dersinde kelimeyi eklere cümleyi ögelere ayırdığımız gibi yazdığımız kodu parça parça yorumlar ve bunu Assembly diline çevirir ve sonrasında ise makine koduna dönüştürülür. Eğer BASIC veya Python gibi yorumlayıcı (interpreter) kullanılan bir dil kullanıyorsak yorumlayıcı program sıra halinde bizim yazdığımız komutları metin olarak ele alır ve buna göre makine kodunu üretir. Yorumlayıcı programlar yazılı programı bir bütün halinde ele almayıp sırayla okuma ve çalıştırma halinde işlem yaptığı için derleyicilere göre oldukça yavaştır. Programlama dillerini yorumlayıcı veya derleyicilere bağlamamak gereklidir. Örneğin BASIC dili yorumlayıcı ile çalışan bir dil olarak bilinse de PICBasic dilinde derleyici kullanılmaktadır. Aynı şekilde C dili için yorumlayıcı yazılımların olduğunu görebiliriz.

Programlama dillerinin tarihine baktığımızda yorumlayıcı kullanılan dillerin her zaman daha az kullanıldığını görebiliriz. Yalnız tarihte bu seyri değiştirecek Java dilinin ortaya çıkmasıyla yorumlayıcı diller de Java dili ve son yıllarda Python olarak iyi bir noktada seyretmektedir. Java dili yorumlayıcı diller arasında ilginç bir noktadadır. Öncelikle Java dili her ne kadar yorumlansa da bu yorumlanma seviyesi üst seviyede değil alt seviyede olmaktadır. Aynı C, C++ dillerinde olduğu gibi yazdığımız program derlenir fakat makine diline dönüştürülmek yerine sanal makine diline dönüştürülür. Bu sanal makine dilinin en büyük özelliği makine diline oldukça yakın olmasıdır. Bu sayede yüksek seviye dilde yazılan bir kodu makine diline çevirecek yorumlayıcı program yerine makine dilini makine diline çevirecek bir programa ihtiyaç duyulur. Bu da performans konusunda oldukça olumlu olmaktadır. Java Sanal Makinesi (JVM) adı verilen çevirici programın görevi Bytecode adı verilen derlenmiş sanal makine dilini hızlıca makine diline çevirip programı çalıştırmaktır. Bu sanal makine dili platformlar arası çalışabilir ve donanımdan bağımsızdır. Bunu çeşitli donanımlara uydurmak her bir donanım için ayrı sürümü olan sanal makinenin görevidir. Bu sayede Java kodu istenilen her donanımda sorunsuz olarak çalışabilmektedir.

Javanın bu esnekliği sayesinde Mac, Linux, Windows fark etmeksizin aynı program çalışabilmekte ve aynı zamanda bilgisayarlardan hariç olarak gömülü sistemlerde de bu Java kodları çalışma fırsatı bulabilmektedir. Bu yüzden uzun bir süre Java cep telefonu gibi ileri seviye gömülü sistemlerde kullanılmaktadır. Günümüzde Android üzerinde uygulama yazmak istediğimizde neden Java dilini kullanmamız gerektiğini buradan anlayabilirsiniz. Onlarca farklı işlemciyi kullanan yüzlerce farklı Android cihazda tek bir programı çalıştırabilmenin tek yolu Java kullanmaktır.

Java dilinin performans ve RAM tüketimi konusunda sorunları olduğunu söyleyebiliriz. Öncelikle kullandığımız Android telefonun ne kadar RAM tükettiğini ve sürekli RAM temizliği yapmak zorunda kaldığımızı hepimiz müşahede ediyoruz. Java ile yazılan Minecraft oyunu C++ ile yazılan Crysis oyunundan daha fazla RAM tüketebilmektedir. Üstelik 16×16 çözünürlüğe sahip küplerden oluşan oldukça ilkel görünümlü bir oyun olmasına rağmen pek çok bilgisayarda performans sorunu yaşatmaktadır. Hatta Crysis oyununu oynatan makinelerde Minecraft oyunu sorun çıkarabilmektedir.

Resim: Minecraft oyunu. Eğer bu oyun zamanında C++ ile yazılsaydı en basit sistemde bile sıkıntısız çalışabilecekti.

Elbette burada hangi dili nerede kullanacağınız çok büyük önem teşkil ediyor. Siz masaüstü bilgisayarlar için bir oyun yapacaksanız C++ gibi yüksek performanslı dilleri tercih etmeniz yanında yüksek optimizasyon yöntemlerini bilmeniz gerekir. Günümüzdeki oyunlarda bu yönde kaliteyi eski oyunlarda olduğu gibi görememekteyiz.

Günümüzde yorumlayıcı kullanan dillerden biri de Python dilidir. Bu dil soyutlama bakımından oldukça yüksek seviyede yer almakta ve pek çok zengin paket içeriğine sahip olmaktadır. Buna karşın performans konusunda programlama dilleri arasında en yavaş dildir. Sizin bu dil ile donanımın sınırlarını zorlamanız veya yüksek verimliliğe sahip bir uygulama yapmanız beklenemez. Bunun için on yıllardır C ve C++ dilleri kullanılmaktadır. Bu dil ile performans ve verimlilikten bilerek feragat edip kolay ve etkili programlar yazmanız beklenir. O yüzden Python günümüzde programların ana iskeletini oluşturmaktan ziyade program içinde zor görevleri kolaylıkla yerine getirebilen yardımcı program yazımında daha çok kullanılmaktadır. Genel kurala göre bir programlama dili ile yapılabilen bütün diğer programlama dilleri ile de yapılabilse de önemli olan nokta iş için uygun programlama dilini seçebilmektir.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

 

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.