08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

Seviye<br />

Bir programlama dilinin seviyesi (level) o programlama dilinin insan algısına ya da<br />

makineye yakınlığının ölçüsüdür. Bir programlama dili insan algılasına ne kadar yakınsa<br />

o kadar yüksek seviyeli (high level) demektir. Yine bir programlama dili bilgisayarın<br />

elektronik yapısına ve çalışma biçimine ne kadar yakınsa o kadar düşük seviyeli (low<br />

level) demektir.<br />

Bilgisayarın işlemcisinin anladığı bir "komut takımı" (instruction set) vardır. İşlemci<br />

yalnızca kendi komut takımı içinde yer alan komutları çalıştırabilir. Programlama dilinde<br />

yazılan metin, bazı süreçler sonunda bilgisayarın işlemcisinin komut takımında yer alan<br />

komutlara dönüştürülür.<br />

Yüksek seviyeli dillerle çalışmak programcı açısından kolaydır, iyi bir algoritma bilgisi<br />

gerektirmez. Bu dillerde yalnızca nelerin yapılacağı programa bildirilir ama nasıl<br />

yapılacağı bildirilmez. Genel olarak programlama dilinin düzeyi yükseldikçe, o dilin<br />

öğrenilmesi ve o dilde program yazılması kolaylaşır.<br />

Makine dili bilgisayarın doğal dilidir, bilgisayarın donanımsal tasarımına bağlıdır.<br />

Bilgisayarların geliştirilmesiyle birlikte onlara iş yaptırmak için kullanılan ilk diller, makine<br />

dilleri olmuştur. Bu yüzden makine dillerine birinci kuşak diller de denir.<br />

Makine dilinin programlarda kullanılmasında karşılaşılan iki temel sorun vardır. Makine<br />

dilinde yazılan kodlar doğrudan makinenin işlemcisine, donanım parçalarına verilen<br />

komutlardır. Değişik bir CPU kullanıldığında ya da bellek düzenlemesi farklı bir şekilde<br />

yapıldığında artık program çalışmaz, programın yeniden yazılması gerekir. Çünkü makine<br />

dili yalnızca belirli bir CPU ya da CPU serisine uygulanabilir. Makine dili taşınabilir<br />

(portable) değildir. Diğer önemli bir sorun ise, makine dilinde kod yazmanın çok zahmetli<br />

olmasıdır. Yazmanın çok zaman alıcı ve uğraştırıcı olmasının yanı sıra yazılan programı<br />

okumak ya da algılamak da o denli zordur. Özellikle program boyutu büyüdüğünde artık<br />

makine dilinde yazılan programları geliştirmek, büyütmek, iyice karmaşık bir hale gelir.<br />

Başlangıçta yalnızca makine dili vardı. Bu yüzden makine dilleri 1. kuşak diller olarak da<br />

isimlendirilir. Yazılımın ve donanımın tarihsel gelişimi içinde makine dilinden, insan<br />

algılamasına çok yakın yüksek seviyeli dillere (4. kuşak diller) kadar uzanan bir süreç söz<br />

konusudur.<br />

1950'li yılların hemen başlarında makine dili kullanımının getirdiği sorunları ortadan<br />

kaldırmaya yönelik çalışmalar yoğunlaştı. Bu yıllarda makine dillerinde yazılan programlar<br />

bilgisayarın çok sınırlı olan belleğine yükleniyor, böyle çalıştırılıyordu. İlk önce makine<br />

dilinin algılanma ve anlaşılma zorluğunu kısmen de olsa ortadan kaldıran bir adım atıldı.<br />

Simgesel makine dilleri geliştirildi. Simgesel makine dilleri (Assembly Languages) makine<br />

komutlarından birkaç tanesini paketleyen bazı kısaltma sözcüklerden, komutlardan<br />

oluşuyordu. Simgesel makine dillerinin kullanımı kısa sürede yaygınlaştı. Ancak simgesel<br />

makine dillerinin makine dillerine göre çok önemli bir dezavantajı söz konusuydu. Bu<br />

dillerde yazılan programlar makine dilinde yazılan programlar gibi bilgisayarın belleğine<br />

yükleniyor ancak programın çalıştırılma aşamasında yorumlayıcı (interpreter) bir<br />

program yardımıyla simgesel dilin komutları, bilgisayar tarafından komut komut makine<br />

diline çevriliyor ve oluşan makine kodu çalıştırılıyordu. Yani bilgisayar, programı çalışma<br />

aşamasında önce yorumlayarak makine diline çeviriyor, daha sonra makine diline<br />

çevrilmiş komutları yürütüyordu. Programlar bu şekilde çalıştırıldığında neredeyse 30 kat<br />

yavaşlıyordu.<br />

Bu dönemde özellikle iki yorumlayıcı program öne çıkmıştı: John Mauchly'nin UNIVAC 1<br />

için yazdığı yorumlayıcı (1950) ve John Backus tarafından 1953 yılında IBM 701 için<br />

yazılan "Speedcoding" yorumlama sistemi. Bu tür yorumlayıcılar, makine koduna göre<br />

çok yavaş çalışsalar da programcıların verimlerini artırıyorlardı. Ama özellikle eski makine<br />

dili programcıları, yorumlayıcıların çok yavaş olduklarını, yalnızca makine dilinde yazılan<br />

programlara gerçek program denebileceğini söylüyorlardı.<br />

Bu sorunun da üstesinden gelindi. O zamanlar için çok parlak kabul edilebilecek fikir<br />

şuydu: Kodun her çalıştırılmasında yazılan kod makine diline çevrileceğine, geliştirilecek<br />

bir başka program simgesel dilde yazılan kodu bir kez makine diline çevirsin ve artık<br />

program ne zaman çalıştırılmak istense, bilgisayar, yorumlama olmaksızın yalnızca<br />

makine kodunu çalıştırsın. Bu fikri Grace Hopper geliştirmişti. Grace Hopper'ın buluşuna<br />

4/529

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!