Bilgisayar Bilimleri -18- Yüksek Seviye Programlama Dillerine Giriş - Lojik Prob
by Gökhan Dökmetaş · 09/07/2019
Programlama dilleri alt seviye ve üst seviye olmak üzere iki keskin çizgi ile birbirinden ayrılmaktadır. Bilgisayarlarda kullandığımız ama programlama dili olmayan diller de mevcuttur. Buna HTML, CSS gibi dilleri örnek verebiliriz. Bunlar işaretleme dili olarak programlar tarafından okunur ama yorumlanır. Bir dili programlama dili sayılması için öncelikle makine dilinde kod üretebilmesi şartı vardır. Yani bizim programlama dilinde yazdığımız komutlar seviyeye göre aşamalardan geçip eninde sonunda makine komutlarına dönüşür. Daha öncesinde biz Assembly dilinde program yazmanın temellerini görmüştük. Bizim yüksek seviye dillere geçmeden önce Assembly dilinden biraz daha bahsedelim.
Makine kodu kullanılan zamanlarda Assembly dili o dönem için büyük bir yenilik sayılabilirdi. O zamanlar için makine koduna göre oldukça üst seviye olan ve bir kısım donanım soyutlamasını üzerinde bulunduran bu dil program yazarken donanımla çok da fazla muhatap olmak zorunda bırakmıyordu. Donanımla muhatap olmak derken makine dili ile kıyasladığımızı unutmayalım. Sonuçta bir yerde 1 ve 0’ları sayarken öteki tarafta sembolize edilmiş değer ve komutları kullanmaktayız. Assembly dili ile başlangıçta kısa ama etkili kodlar yazılsa da bilgisayar programları uzadıkça Assembly dili ile program yazmak oldukça karmaşık halde olmaktadır. Özellikle etiketler makine dilinde program yazarken hayat kurtarıcı olsa da program karmaşıklaştıkça program akışında hata yapma ihtimalini artırmaktadır.
Çalışmanın başında programlama dillerinin tarihi anlatırken COBOL, FORTRAN gibi yüksek seviye dillerin oldukça erken dönemlerde çıktığından bahsetmiştik. Her ne kadar bu tarz diller oldukça erken dönemlerde çıksa da genel geçer bir kullanırlığa sahip değildi. Örneğin FORTRAN hesaplamalarda kullanılırken BASIC ise ev bilgisayarlarında ve basit programları yazmakta kullanılmaktaydı. Assembly dilinin uzun bir dönem başlıca dil olarak kullanılmasının bir sebebi de eski makinelerin oldukça kısıtlı özelliklere sahip olmalarıdır. Yüksek seviye diller bir derleme veya yorumlama işlemine tabi tutulduğundan makine kodu yine program tarafından üretilmektedir. Program tarafından üretilen makine kodu insanın yazdığı makine kodu kadar iyi olmamaktadır. Bu yüzden performans sorunu her zaman yaşanmaktadır. Eski sistemlerde programlar donanımın sınırlarını zorlaması gerektiği için mecburen Assembly dili ile yazılmak zorunda kalmıştır. Hatta 90’ların başlarında bile kişisel bilgisayarlarda C dili etkin olarak kullanılsa da donanımın yetersiz kaldığı durumlarda Assembly dili kullanılmak zorunda kalınmıştır. DOOM oyununu kaynak kodlarını incelediğinizde C dilinin yanı sıra Assembly dilinin kullanıldığını görürsünüz. Gömülü sistemlere baktığımızda ise Assembly dilinin kullanımı 2000’li yıllara kadar oldukça yaygındır. Bunun sebebi eskiden gömülü sistemlerin zaten kısıtlı olan bilgisayarlardan bile kısıtlı olmasıdır. 64KB belleğe sahip olan bir bilgisayarda bile program yazmak zorken 150-200 bayt RAM belleğe 1KB program hafızasına sahip olan bir sisteme program yazabilmenin tek yolu Assembly dilini kullanmaktır. Günümüzde gömülü sistemlerin kapasiteleri arttığı ve birim başına maliyetleri düştüğü için artık bunlar pek dert edilmemektedir. Hatta daha çok performans arandığı zaman bazı durumlarda Assembly yerine bir üst modeli tercih etmek paradan ve zamandan tasarruf bile sağlayabilir.
Günümüzde de sistemle alakalı önemli bilgilere ve donanıma erişmek için Assembly dili kullanılmaktadır. Örneğin bilgisayardaki işlemcinin sıcaklığını ölçmek gibi donanım ile alakalı işleri yapmak istiyorsak x86 Assembly dilini diğer yüksek seviye dillerle yazılan programlar içerisinde kullanabiliriz. Bir programın her zaman tek bir dille yazılma şartı yoktur. C dilinde program yazarken kod içerisinde Assembly dilini kullanabileceğimiz gibi Assembly dilinde yazılmış ayrı program dosyalarını kullanabiliriz. Bu işleme “Inlining” adı verilmektedir.
Yüksek bir seviye dil olan ve bilgisayar programcılığı tarihine damgasını buran C dili de Assembly dili ile Unix işletim sisteminin yazılmasının çok zor olmasından dolayı tasarlandığı rivayet edilmektedir.
Şimdi Assembly dilinin dezavantajlarını şöyle özetleyebiliriz;
Assembly dilinde program yazmak diğer dillerde program yazmaktan daha fazla zaman ve emek istemektedir.
Assembly dilinde yazılan programlarda oldukça sık hatalar yapılabilmektedir.
PUSH ve POP işlemleri için bir kontrol mekanizması yoktur. Bunu programcı denetlemek zorundadır.
Eğer programcı doğru bir şekilde programı yazmazsa güvenlik ve sağlamlık konusunda açıklar ortaya çıkabilir.
Assembly kodunda hata ayıklamak ve doğrulama yapmak daha zordur.
Assembly dili zor olduğu için üzerinde değişiklik yapmak ve düzenlemek daha zordur.
Assembly dilinde yazılan program taşınabilir değildir. Mimariye göre yazılır.
Günümüzde makine dili ile program yazan olmasa da Assembly programcıları halen mevcuttur ve buna bir ihtiyaç vardır. Assembly dilinde yazılan bir programın verimi makine dili ile yazılan bir program ile aynı olduğu için makine dilinde program yazmaya ihtiyaç bırakmamaktadır. Assembly dili eskisi gibi bütün programların yazıldığı dil olmaktan çıkıp ihtiyaç duyulduğunda başvurulacak seçkin bir noktaya gelmiştir. Eskiden olduğu gibi Assembly dili avantajı ve dezavantajı ile beraber kullanılan bir dil değil avantajı için kullanılan bir dil haline gelmiştir.
Yüksek seviye diller arasında pek çok dilden bahsedebilecek olsak da yüksek seviye diller arasında halen yaygın olarak kullanılan en eski dillerden biri olan C dilinden bahsetmeyi yeterli görüyorum. C dili günümüzde programlamaya giriş derslerinde öğrenilen ilk dil olarak karşımıza çıktığı gibi halen bilgisayar programları yazılabilmekte ve gömülü sistemlerde ise bir numaralı dil olarak kullanılmaktadır. C dili başarısını on yıllar boyu ispatlamış bir dil olduğu için bizim için ayrı bir yeri vardır. Bir sonraki yazıda C dilinden bahsederek Assembly ile C dili arasında bir kıyaslama yapacağız.
by Gökhan Dökmetaş · Published 10/07/2019
Next story Bilgisayar Bilimleri -19- Derleyici ve Yorumlayıcı Kullanan Diller
Previous story Bilgisayar Bilimleri -17- Assembly Dilinin Temelleri