C Diline Giriş ve C Dilinin Tarihi

Günümüzde programlama kavramı birçok alan için vazgeçilmez hale gelmiştir. Oyun programlama, bulut bilişim (cloud computing), medikal görüntüleme, elektronik haberleşme, robotlar ve yapay zeka gibi günümüzün önde gelen konularında programlama en ön planda yer almaktadır. Eskiden programlama işlemini delikli kartlar ile yaparlardı. Bunun çok sıkıntı bir durum olması ve programlama işleminin sanal hale getirilmesi için assembly dilleri geliştirildi. Peki bu diller ne amaçla ve hangi platformlara hizmet etmek için kullanılmaktaydı?

Programlama Dillerinin Gelişimi

Assembly dilini ilk duyduğum zamanlarda benim aklıma hep standart bir programlama dili gelirdi. 2000’li yıllardan sonra eline bilgisayar alan çoğu kişi Intel işlemcisine sahip bir bilgisayar kullanmıştır. AMD kullananlar olsa da onlar da alt tarafta Intel’in assembly dilini kullanmışlardır. Şimdi burada söylediğim "Intel’in assembly dili" tamlamasından anlayacağınız üzere assembly dilleri işlemci mimarisine özel dillerdir. ARM kendi mimarisini ve kendi assembly dilini kullanırken, Intel kendi assembly dilini kullanır. Siz bir Intel assembly dili ile yazılmış kodu ARM işlemciler üzerinde doğrudan derleyemezsiniz. Günümüz bilgisayar kullanıcıları Intel ve AMD işlemcilerini bilse de aslında işlemci piyasası bunlardan ibaret değildir. Çoğu elektronik cihazın sistemini oluşturan gömülü sistemler dediğimiz alan ARM, STM ve daha birçok firmanın işlemcisi ile çalışmalar yapmaktadır.

İlk Programlama Aracı Olan Delikli Kartlar
Figür 1: İlk Programlama Aracı Olan Delikli Kartlar[1]

Delikli kartlardan sonra bilişim dünyasında her mimariye özel assembly dilleri ortaya çıkmaya başlamıştır. Assembly dillerinde genellikle İngilizce kısaltmalar kullanılır ve bu kısaltmalar işlemcide kullanılacak olan işlem kodunun (opcode) 1 ve 0’lardan meydana gelen karşılıklarına dönüştürülerek kullanılırlar. Fakat buradaki problem, her mimariye özel olan assembly dilinin farklı bir söz dizimine ve farklı komutlara sahip olmasıdır. Bu noktadan sonra bir şekilde assembly dillerine çevrilebilecek ve anlaşılabilir bir söz dizimine (syntax) sahip olacak diller geliştirilmeye başlanmıştır. Geliştirilen bu dillere yüksek seviyeli diller (high-level languages) adı verilmiştir. İşte C dili yüksek seviyeli diller ailesindendir. Bazı kaynaklarda bu diller orta, yüksek ve çok yüksek olarak ayrılmıştır.

Yüksek Seviyeli Dillerin Düşük Seviyeli Dillere Çevrilmesi

Yüksek seviyeli dillerin okunabilirliği ve yazılabilirliği assembly dillerinden oldukça yüksektir. Peki bu diller assembly diline nasıl çevrilir? Aslında iki metot vardır. İlk metodda yazılan bütün kodlar doğrudan assembly diline veya makine koduna (saf 1 ve 0’lardan meydana gelen kodlar) çevrilir. Daha sonra parçalar birbirine bağlanarak en son çalıştırılabilir bir kod elde edilir. Bu yöntemde kullanılan programlar derleyicilerdir (compilers). Derleyiciler yazılan bütün kodu makine diline çeviren programlardır. Derleme sürecini şu figür ile özetleyebiliriz:

Derleme Süreci
Figür 2: Derleme Süreci[2]

Şimdi burada bir başka problem daha ortaya çıkmaktadır. Çok fazla kaynak koda (source code) sahip olan programların derlenmesi çok uzun sürebilir. Bu gibi durumlar için yorumlayıcı (interpreter) adı verilen programlar geliştirilmiştir. Yorumlayıcılar kaynak kodu derlemeden doğrudan çalıştırmayı sağlayan programlardır. Fakat bu yöntem ile çalıştırılan programlar derlenmiş programdan daha yavaş çalışırlar. Çünkü her kod parçasının zamanı geldiğinde yorumlanıp makine diline dönüştürülmesi gerekir. C dili derleme mekanizmasını kullanır. Yorumlama sürecinin özeti şu şekildedir:

Yorumlama Süreci
Figür 3: Yorumlama Süreci[3]

C Programlama Dili

Programlamanın geçmişinden, derleme ve yorumlama kavramlarında bahsettikten sonra biraz da C dilinden bahsedelim. C dili, BCPL ve B dillerinden türeyen bir dildir. Yani yüksek seviyeli dillerin ilki değildir. BCPL dili Martin Richards tarafından 1967 yılında işletim sistemlerini ve derleyicileri yazmak amacıyla geliştirilirken, B dili Ken Thompson tarafından 1970 yılında UNIX işletim sisteminin ilk sürümlerini yazmak için Bell Laboratuvarları’nda geliştirilmiştir. İşte B dilinden türetilen C dili ise Dennis Ritchie tarafından orijinal olarak 1972 yılında yine Bell Laboratuvarları’nda geliştirilmiştir.

C dili ilk başlarda UNIX işletim sistemini daha kolay bir şekilde geliştirmek için tasarlanmıştır. Şu anda çoğu işletim sistemi ve derleyici C ve onun devamı olan C++ dili ile yazılmıştır. C dilinin en büyük özelliği geniş donanım yelpazesini destekleyen derleyicilerinin varlığı ve standartlar ile taşınabilir bir dil olmasıdır. İşletim sistemleri, gömülü sistemler ve iletişim sistemleri günümüzde hala bu dili kullanmaktadır. Bu nedenle bu ve benzer alanlarda uğraşan kişilerin bu dili bilmesi gereklidir.

Dennis Ritchie
Figür 4: Dennis Ritchie[4]

C Standartları

Şimdi de bu dilin standartlarından bahsedelim. C dili ilk çıktığından standart bir halde değildi. 1978 yılında Brian Kernighan ve Dennis Ritchie “The C Programming Language” isimli bir kitap yayınlamışlardır. Bu kitabı yayınladıklarından itibaren kullanılan C dili K&R C olarak adlandırılmıştır. Bu isim kitap yazarlarının soyisimlerine nazaran konulmuştur. C dilinin bir kurum tarafından onaylanıp standartlaştırılması ise 1989 yılında olmuştur. American National Standards Institute (ANSI), C dilinin standartlaştırılmış halini içeren taslağı yayınlamış ve bu yıldan sonra kullanılan C dili ANSI C veya C89 olarak adlandırılmıştır. Aynı standartlar 1990 yılında ISO tarafından ISO/IEC 9899:1990 resmi adıyla kabul edilmiştir. Bu dil de ISO C veya C90 olarak adlandırılmıştır. ANSI ve ISO C bu nedenle aynı standartları belirtmektedir.

Brian Kernighan
Figür 5: Brian Kernighan[5]

Bu yıllardan sonra da C’nin gelişimi durmamıştır. 1999 yılında yine ISO tarafından resmi adı ISO/IEC 9899:1999 olan ve C99 olarak adlandırılan bir standart yayınlanmıştır. Bu standart ile birkaç yeni anahtar kelime dile eklenmiş ve dile bazı yeni özellikler getirilmiştir. C dilinin bundan sonraki standartları ise 2011 yılında yayınlanan C11, 2018 yılında yayınlanan C17 (veya C18) ve en son ise 2024 yılında yayınlanması planlanan C23 olmuştur. C dilinin Embedded C (Gömülü C) olarak adlandırılan başka standardı da bulunmaktadır.

C dili ile fonksiyonlardan meydana gelen modüler programlar yazılabilir. C dili nesne yönelimli bir dil değildir. Ondan sonra gelen C++ diline nesne yönelimli paradigma eklenmiştir (ancak o da tam olarak bir nesne yönelimli dil değildir). C dilinin yapısal paradigmada olması, yani fonksiyonlardan meydana gelmesi, yazdığınız kodun iç yapısının nasıl çalıştığını bilmek konusunda size bazı avantaj sağlayabilir. Fakat programı tasarlama, geliştirme ve hata ayıklama süreçlerinde size nesne yönelimli paradigmaya göre çeşitli dezavantajlar da getirir.

C dilini kullanırken bu dili yazan kişilerin oluşturmuş olduğu kütüphanelerden yararlanırsınız. C’nin standart olarak gelen bu kütüphaneler topluluğuna C Standard Library (C Standart Kütüphanesi) adı verilir. Bu kütüphanelerde kullanabileceğiniz birçok hazır fonksiyon bulunmaktadır. Bu kütüphaneler C dilinin taşınabilir (portable) olmasındaki en büyük etmenlerden birisidir. C dili genel amaçlı bir dil olduğundan C Standart Kütüphanesi’nde yer alan fonksiyonlar genel amaçlara hizmet etmek amacıyla yazılmışlardır. Kendi yazdığınız fonksiyonlar ile bu kütüphanede yer alan çeşitli fonksiyonları kullanıp kendi amacınıza uygun porgramlar yazabilirsiniz.

Bu bölümde C diline ve tarihine bir giriş yaptık. C dilini hangi ortamda yazıp derleyeceğiniz konusunu tamamen size bırakıyorum. Burada anlatarak tek bir sistemle ve tek bir derleyiciyle sizi kısıtlamak istemem. Bu konulara daha sonra makalelerimde yer verebilirim. Bundan sonra daha çok dile ve onun söz dizimine yoğunlaşmaya çalışacağım.

Referanslar

  1. Used Punchcard by Pete Birkinshaw
  2. Compiled Code Flow Diagram
  3. Interpreted Code Flow Diagram
  4. Dennis Ritchie
  5. Brian Kernighan
5 3 votes
Article Rating
Subscribe
Bildir
guest

4 Yorum
Eskiler
En Yeniler Beğenilenler
Metin Perdeci

hocam elinize sağlık. 3. paragrafın sondan ikinci cümlesinin son kelimesi hatalı yazılmış. saygılar hocam…

Berfin

merhaba hocam acaba pointer kavramına da değinecek misiniz