(Bu yazı BIL339 Programlama Dilleri dersi ödevi için hazırlanmıştır)
Programlama dillerinin tarihi seyri içerisinde binlerce dil tasarlanıp geliştirilmiştir. Bunlardan bir kısmı hiç yaygınlaşamadan unutulup giderken bir kısmı ise belli dönemlerde oldukça popüler hale gelmiştir. Ancak bilişim dünyasındaki gelişmeler doğrultusunda mevcut programlama dillerinin çözmek üzere tasarlanmamış olduğu yeni problemler ve yeni ihtiyaçlar çıkmıştır. Zaten bu kaçınılmazdır. Yeni ihtiyaçları karşılamak üzere hali hazırdaki diller kendilerini geliştirip değiştirmiş, bu da yeni dillerin doğuşuyla neticelenmiştir.
Tarihten günümüze geliştirilmiş olan ve günümüzde de gelişimine devam etmekte olan hemen tüm diller için ortak olarak gözetilen tasarım kıstasları ve kısıtları var olagelmiştir. Bir programlama dilinin insanın kullanacağı bir araç olması sebebiyle kaçınılmaz hale gelen bu kıstasların başında yazılabilirlik ve okunabilirlik gelir. Yazılım Mühendisliği disiplini bağlamında oturmuş birer terim olan bu iki kavramı sırasıyla “dilin söz diziminin kolay olması; ayrıca hedeflenen bir işi yapacak programın kolay yazılabilmesi” ve “başkası tarafından yazılmış bir programın kolayca okunup anlaşılabilir olması” şeklinde kısaca ve kabaca açıklayabiliriz.
Programlama dili tasarımındaki genel kıstaslara verdiğimiz örneklere güvenilirlik de eklenebilir. Dilin değişkenlere tür atama stratejisi (typing) bu kavram bağlamında söz konusu edilebilir. Bu işlemin dinamik (çalışma zamanında) ya da statik (derleme zamanında) yapılıyor olması bir yandan dilin esnekliğini artırabilirken diğer yandan güvenilirliğini düşürebilir.
Programlama dilleri, bir insanın yapması halinde çok daha uzun sürecek işleri bilgisayarlara hızlıca yaptırabilmek için makinelerle iletişim kurup anlaşmanın, ilgili işin nasıl yapılacağının belirtilmesinin bir yoludur. Yararlanılmak istenen bu hız faktörü, programlama dili tasarımında da kendisini gösterir. Bir programın hızlı çalışması, yüksek performanslı olması istenir.
Buraya kadar bahsi geçen okunabilirlik, güvenilirlik ve performans kıstasları, birbirlerini kısıtlayan etmenlerdir. Söz gelimi, tip kontrolünü çalışma zamanında yapan bir dilin güvenilirliği daha düşüktür. Çünkü örneğin karakter katarını sayı gibi kullanan dikkatsiz bir programcı, hatasını ancak çalışma zamanında anlayabilecektir. Fakat tip kontrolünün derleme zamanında yapılması da geliştirme süresini uzatacaktır. Bu yüzden okunabilirlik, güvenilirlik ve performans arasında bir denge sağlanmaya çalışılır.
Modern dillerin, artık dili daha etkin kullandırmayı amaçlayan özellikleri vardır. İlk tanıtılmaları diller teorisi açısından büyük birer adım olan bu özellikler, artık modern dillerin gerekli birer parçası halini almıştır. Örneğin çöp toplama özelliği, programcı tarafından boşaltılmayan ama artık kullanılmayacak olan bellek alanlarının zekice tespit edilip işletim sistemine sorunsuzca teslim edilmesini içerir. Çöp toplama mekanizmalarının en çok kullandığı yöntem referans saymadır. Dillerin özyineli alt programlara elverişliliği de ayrı bir noktadır. Bilgisayar bilimlerinde bunlar gibi yeni başyapıt özelliklerin tanıtılması yeni dillerin doğmasıyla neticelenebilir. Nitekim tanıttığı ya da geliştirdiği yeni bir kavramla şöhret bulan Assembly, C, SmallTalk, Java, LISP, Prolog gibi birçok dil örneği verilebilir.
Programlama dilleri genel amaçlı olarak geliştirilebildikleri gibi çoğunlukla özel amaç ve alanlara yönelik olarak (domain spesific languages) da geliştirilmişlerdir. Örneğin donanım benzetimlerini yapmak için Verilog, VHDL gibi diller mevcutken yoğun matematiksel işlemler için Mathematica, MATLAB, FORTRAN gibi diller geliştirilmiştir. Veri tabanı sistemlerinde bir sorgu dili olarak SQL oldukça yaygın bir kullanıma sahiptir. Derleyici tasarımında Lex, YACC, Antlr; betik (script) programlamada bash, batch; web programlamada PHP, ASP; işletim sistemi geliştirmede ise C, C++, Assembly yaygın olarak kullanılan alana özelleşmiş dillere örnek verilebilir. Bu noktada şunu söylemek sürpriz olmayacaktır: yeni alanların gelişmesi, yeni dillere ihtiyaç doğuracaktır. Nitekim mantıksal programlamada Prolog, işlevsel programlamada Scheme dilleri yeni ihtiyaç alanlarını temsil eden sadece birkaç örnektir.
İnsan ihtiyaçlarından doğup yine insan ihtiyaçlarına göre şekillenen programlama dilleri, doğal olarak ilk çıktıkları zamanki yapılarını korumaya devam etmezler, değişirler. Bu değişimler bazen devrim niteliğinde çok köklü değişiklikler olabilir. Örneğin Python dilinin bir yandan 2.7 numaralı sürümü geriye bağımlılık nedeniyle geliştirilmeye devam ederken, köklü geliştirmelere uğramış olan 3 numaralı sürümü ayrıca geliştirilmektedir. Benzer şekilde C’nin donanıma yakınlık gücüne nesne-yönelim paradigması katıldığında C++ doğmuştur. Geriye bağımlılık, harcanmış emeklerin çöpe gitmesini önlemek için gereklidir. Bu sayede mevcut bir program, dilin yeni sürümlerinde de tekrar kullanılabilir.
Taşınabilirlik, yazılmış bir programın tekrar kullanılabilirliğini artıran başka bir özelliktir. Donanıma daha yakın diller, üzerlerinde çalıştıkları makineye daha bağımlıdırlar. Donanımdan uzaklaştıkça soyutlama düzeyi artar, buna paralel olarak da diller platforma daha az bağımlı kalır. Assembly tamamen platforma bağımlı bir dil iken C dili platformdan (büyük ölçüde) bağımsızdır. Java, bu sorunu daha farklı bir yaklaşımla (JVM & bytecode) çözer. Python dili de platform bağımsız bir dildir. Bu sayede programcı, her ortamda aynı şekilde kod geliştirebilir.
C++’ın, C’ye nazaran güçlü yanlarından birisi de STL (Standard Template Library) adıyla anılan hazır kütüphaneleridir. Hazır kütüphaneler, dili daha rahat kullanılır ve hızlı bir geliştirme ortamı haline getirir. Kütüphaneler sayesinde programcı, tekerleği tekrar icat etmek zorunda kalmaz. Python da oldukça geniş bir hazır kütüphane desteği sunmaktadır. Kullanışlı bir dil, tek kullanımlık (throwaway) programları hızlıca yazabilmeye de imkân sağlar. Birçok büyük proje, küçük bir programcık olarak başlamıştır. Hazır kütüphane desteği, tek kullanımlık program yazmayı hızlandırır.
Kaynakça
1. Çakır, Burak (2008) .Python Programlama Dili ile Özgün Yazılım Geliştirme Modeli
2. Wasserman, Anthony I.(1975) .Issues in programming language design: An overview
3. Fromberger, Michael J. (2004) .A Gentle Introduction to Pyhton
4. “Computing paradigms”, Wikipedia Article, retrieved on Jan 14, 2011.
5. “Type system in Programming Languages”, Wikipedia Article, retrieved on Jan 14, 2011.
6. Chisnall, David (2006).What Makes a Good Programming Language, InformIT, retrieved on Jan 14, 2011
0 yorum:
Yorum Gönder