3 Ocak 2021 Pazar

C Efsane Programlama Dili

 1970’li yılların

başında Kenneth Thompson ve Dennis Ritchie,
Bell Laboratuvarları’ndaki bir DEC PDP-7 üzerinde
efsanevi işletim sistemi UNIX’i yaratmıştı. UNIX’in
başarısı üzerine AT&T hemen o dönemin en modern
donanımlarından olan bir DEC PDP-11 temin
etmiş ve Thompson ile Ritchie bu makine üzerinde
UNIX’in daha gelişmiş bir sürümünü gerçekleştirmek
için tüm güçleriyle çalışmaya başlamıştı.
UNIX, PDP-7’de B adlı bir programlama dilinin
yardımıyla geliştirilmişti. B ise, MIT’de (Massachusetts
Institute of Technology) görevli İngiliz bilim insanı
Martin Richards tarafından geliştirilen BCPL
(Basic Combined Programming Language) adlı programlama
dilinin örnek alınmasıyla Thompson tarafından
1970 yılında geliştirilmiş bir programlama diliydi.
Fakat B, aynı BCPL gibi donanıma hayli yakın
çalışan, düşük düzeyli bir sistem programlama dili
olmasına karşın PDP-11 üzerindeki yeni çalışmalar
sırasında giderek yetersiz kalmaya başladı. Kısa
bir süre sonra bunun başlıca sebeplerinden birinin
B‘nin yalnızca tek bir veri tipine sahip olması ve bu
nedenle PDP-7‘ye göre hayli modern bir donanım
olan PDP-11‘e tam olarak uyum sağlayamaması olduğu
anlaşıldı. Bunun üzerine B, UNIX‘i geliştirme
çalışmalarına paralel olarak, Ritchie‘nin öncülüğünde
yeniden gözden geçirilip geliştirilmeye başlandı.
Bu çalışmalar sırasında (1971-1973) B, sözdizim yapısı
korunarak, ancak farklı veri tiplerine ve birçok
başka yapısal değişikliğe izin verecek şekilde yeniden
tasarlandı. Rithcie tarafından ortaya çıkarılan bu
yeni programlama dilinin ilk sürümü ilk önce “New
B” daha sonra “C” olarak adlandırıldı ve 1973‘de tamamlanarak
o zamanki UNIX çekirdeğinin yeniden
programlanmasında kullanılmaya başlandı.

C’nin kökleri: BCPL ve B
Yukarıda da belirtildiği gibi C’nin kökleri
B’ye, B’nin kökleri ise BCPL adlı bir
programlama diline dayanır. Bu nedenle
günümüz C’sinde bile BCPL’in etkileri yer
yer görülür. BCPL, 1966 yılında İngiliz bilim
insanı Martin Richards (MIT) tarafından
geliştirilmiş ve daha sonra o dönemlerdeki
çeşitli projelerde başarıyla kullanılmıştı.
Büyük ölçüde Ken Thompson’ın,
kısmen de Dennies Ritchie’nin katkılarıyla
geliştirilen B ise sadece UNIX işletim
sisteminin ilk sürümünün geliştirilmesinde
kullanılmış ve 1973’te UNIX çekirdeğinin
C ile yeniden yazılmasından sonra
tahtını kesin olarak C’ye bırakmıştır.
C denilince akla gelen kitap:
The C Programming Language
C’yi tahtına doğru götüren yoldaki en
büyük destekçisinin incecik bir kitap olabileceği
hiç aklınıza gelir miydi? Bu gerçekten
de böyle olmuştur: 1978 yılında
Brian Kernighan ve Dennis Ritchie tarafından
yazılmış The C Programming Language
adlı kitap, C’yi ele alan belki de en
ince ama aynı zamanda en kapsamlı ve
etkili kitaptır. 1988 yılında ikinci baskısı
yapılan kitap bugün bile C’yi en baştan
öğrenmek isteyenlerin ve profesyonel
C programcılarının bir numaralı başvuru
kaynağı olarak güncelliğini koruyor.
ANSI-C’ye giden yol
Günümüz bilişim dünyasına hâkim
olan programlama dillerinin aksine C,
herhangi bir komite tarafından tasarlanıp
düzenlenmemiş, aksine yetenekleri C’yi
kullanan programcılar tarafından yapılan
eklentilerle zamanla adım adım geliştirilmiştir.
C, her ne kadar bu sayede kendi
kendine yürüyen bir dev haline gelmiş
ise de bu sürecin yan etkisi C’nin dünyanın
her yerinde farklı sürümlerinin doğması
olmuştur. Durumun gittikçe karmaşık
bir hal aldığını gören Amerikan Ulusal
Standartlar Enstitüsü (American National
Standards Institute-ANSI) 1983 yılında
C’nin standartlaşması için bir çalışma grubu
(X3J11) oluşturarak 1989’a kadar süren
çalışmalar sonucunda C’yi dünya çapında
standartlaştırır (ANSI X3.159-1989) ve
hatta bu arada dilin yapısına birkaç yenilik
getirerek çeşitli iyileştirmeler de yapar:
Dünyaca ünlü C-Standartı, ANSI-C artık
doğmuştur. ANSI-C yapılan bir kaç değişiklikten
sonra 1990 yılında ISO (International
Organization for Standardization)
tarafından da kabul edilir ve “C90” başlığı
altında yayımlanır. Daha sonraki yıllarda
(1995, 1999 ve 2011) yine ISO tarafından
“C90” standartına birtakım eklemeler
yapılması sonucu ortaya çıkan yeni standartlar
da sırasıyla “C95”, “C99” ve “C11”
başlıkları altında yayımlanır. “C11” olarak
bilinen ISO standartı aynı zamanda ANSI
tarafından da kabul edilen en güncel C
standartıdır.
Nesne yönelimli programlama
ve C++’ın doğuşu
Her ne kadar nesne yönelimli programlama
(Object Oriented Programming-
OOP) bilişim dünyasında ilk olarak 1990’lı
yıllarda ticari uygulamaların geliştirilmesinde
boy göstermeye başlamış olsa da, temeli
ilk olarak 1970’lerde atılmaya başlanmıştı
(1967 yılında Oslo Üniversitesi’nden
Ole-Johan Dahl ve Kristen Nygaard tarafından
geliştirilen Simula-67 ilk nesne yönelimli
programlama dilidir). 1972 yılında
Xerox PARC Laboratuvarları’nda Alan
Kay, Dan Ingalls ve Adele Goldberg yönetiminde
geliştirilen Smalltalk-80 adlı programlama
dili, Simula-67’den sonra ikinci
nesne yönelimli programlama diliydi.
1980’li yıllarda Apple tarafından başarılı
bir şekilde ticarileştirilmesiyle birlikte bilişim
dünyasında artık geri dönüşü olmayan
bir süreç başlamıştı.
Yazılım dünyasındaki tüm bu gelişmeleri
yakından takip eden Bell Laboratuvarları,
C’nin uygulama geliştirmelerinde büyük
ağırlığa sahip nesne yönelimli programlamada
yetersiz kalacağını öngörerek
daha 1979 yılında Bjarne Stroustrup adlı
Danimarkalı bir bilim adamının yönetiminde
C++ adlı yeni nesil bir programlama
dili için ilk çalışmaları başlatmıştı bile.
C’nin nesne yönelimli programlamanın bel
kemiğini oluşturan sınıfların ve olağandışı
durumların işlenmesine olanak tanımaması,
C++ projesinin başlatılmasında rol
oynayan en önemli faktördü. C++ prensip
olarak, yalnızca C’nin biraz daha gelişmiş
ve nesne yönelimli programlama için uyarlanmış
bir şekli olarak görülebilir. D adını
almamasının nedeni de budur (C++, C
jargonunda C’nin değerinin bir artırılması
anlamına gelir). Günümüzde C++, Microsoft
Windows gibi işletim sistemlerinin
geliştirilmesinden, yüksek performans gerektiren
uygulamaların geliştirilmesine kadar
birçok alanda kullanılıyor. Aynı C’nin
C++’ya ilham vermesi gibi, C++ da Java,
PHP ve C# gibi başka programla dillerinin
mimarilerini hayli etkilemiştir.
C# (C Sharp)
Microsoft tarafından 2001 yılında geliştirilen
C#’ın temeli C, C++ ve Java’ya dayanıyor.
Özellikle sözdizim yapısının C’den
büyük ölçüde etkilendiği söylenebilir. C#
kullanımı basit, genel amaçlı fakat hayli
başarılı bir nesne yönelimli programlama
dili ve günümüzde Microsoft.NET teknolojilerinin
ana programlama dilini temsil
ediyor. Her ne kadar C# ile geliştirilmiş
uygulamalar bellek ve işlemci gereksinimleri
açısından hayli tutumlu olmalarıyla bilinseler
de, performans açısından C programlama
dili ile programlanmış uygulamalarlala
rekabet edecek düzeye erişememişlerdir.
Günümüzde C
Java, C#, C++ gibi 3. nesil bir programlama dili
olan C de genel amaçlı programlama için geliştirilmiştir.
C, düşük düzeyli bir dil olduğu için bir
uygulama geliştirme dilinden çok ideal bir sistem
programlama dilidir ve günümüzde birçok derleyici
ve işletim sisteminin geliştirilmesinde kilit rol
oynamaktadır. Java Sanal Makinesi (Java Virtual
Machine), UNIX ve Linux’un hemen hemen tamamı,
Microsoft Windows’un özellikle ilk sürümlerinin
büyük bölümü yine C ile geliştirilmiştir.
Ayrıca C’nin başarıları sadece bunlarla kalmamış ve
C++ üzerinden günümüzün diğer ana programlama
dilleri Java, PHP ve C#’ın mimarilerine ilham vererek,
bu programlama dillerinin yapılarını da büyük
ölçüde etkilemiştir. C, hayli yüksek bir performansla
ve büyük bir güvenilirlikle her donanım üzerinde
çalışabilmektedir ki bu son özellik bilgisayar dünyasında
büyük bir devrimi de beraberinde getirmiştir
(1970’li yıllarda programcıların işi hayli zordu; bir
programı ya belirli bir donanım için geliştirmek zorundaydılar
ya da büyük çabalar ve zaman harcayarak
söz konusu yazılımı her bir donanım tipine ayrı
ayrı uyarlamak zorundaydılar.)

Gelecekte C
Yukarıda da belirtildiği gibi, her ne kadar C’den
daha sonra ve nesne yönelimli programlama ve olağandışı
durumların tanımlanabilmesi vb. gibi hususlar
da dikkate alınarak geliştirilmiş olsa da, C++ kesinlikle
C’nin halefi olarak görülemez. Çünkü C++
özellikle nesne yönelimli felsefeyle programlanacak
olan uygulamaların geliştirilmesi için tasarlanmış bir
programlama dilini temsil ederken, C donanıma çok
yakın düzeyde, olağanüstü bir performansla çalışan
bir sistem programlama dilidir. 
C’nin belki de en zayıf
yönlerinden biri derleyicisinin hata ayıklama süreçlerinde
programcıya yeterince “ipucu” verememesi
ve dolayısı ile programcıyı bazı durumlarda hataları
ile neredeyse “baş başa” bırakmasıdır. Bunun sebeplerinden
biri de C derleyicisinin doğrudan bellek
operasyonlarına izin vermesidir. Her ne kadar güvenilir
programlama dilleri kategorisinde bulunsa da,
C’nin bu tip özelliklerinden dolayı gerçek zamanlı sistemlerde
ve güvenliğin ön planda olduğu diğer alanlarda
(tıpta, havacılık ve uzay sanayilerinde vb.) uygulama
geliştirilmesinde kullanılması pek tavsiye edilmez.
Diğer taraftan C’nin gömülü sistemlerdeki başarısını
burada bir daha hatırlatmakta yarar var: Mikrodenetleyici
programlanması alanında C, hâlâ en çok
tercih programlama dili. İşletim sistemleri cephesinde
ise, her ne kadar Microsoft Windows’un geliştirilmesinde
C yerine artık C++ kullanmaya başlamış olsa
da, bilişim dünyasının iki kilit işletim sistemi olan
UNIX’in ve Linux’un geliştirilmesine -tıpkı geçmişte
olduğu gibi- yine C ile devam edileceği kesindir
(C doğal olarak, bu son iki işletim sisteminin sistem
programlama dili olarak kalmaya da devam edecektir).
Bütün bu nedenlerle, C’nin gelecek dönemlerde
de önemini kaybetmeyeceği, aksine UNIX, Linux gibi
işletim sistemlerinin kullanımının yaygınlaşmasıyla
daha da önem kazanacağı açıktır.


 


Hiç yorum yok:

Yorum Gönder

Her yorum bilgidir. Araştırmaya devam...