Programlama dili teorisi

**Programlama dili teorisi** (**PDT**), programlama dilleri olarak bilinen biçimsel dillerin ve bunların bireysel özelliklerinin tasarımı, uygulanması, analizi, karakterizasyonu ve sınıflandırılması ile ilgilenen bir bilgisayar bilimleri dalıdır. Matematik, yazılım mühendisliği, dilbilim ve hatta bilişsel bilime bağlı ve onu etkileyen bilgisayar bilimi disiplinine girer. PDT'ye adanmış çok sayıda dergide ve genel bilgisayar bilimi ve mühendisliği yayınlarında yayınlanan sonuçlarla tanınmış bir bilgisayar bilimi dalı ve aktif bir araştırma alanı haline gelmiştir.

## Tarih
Bazı yönlerden, programlama dili teorisinin tarihi, programlama dillerinin kendilerinin gelişmesinden bile önce gelir. 1930'larda Alonzo Church ve Stephen Cole Kleene tarafından geliştirilen lambda hesabı, programcıların bir bilgisayar sistemine algoritmaları ''tanımlamaları'' için bir araç olmaktan ziyade hesaplamayı modellemek için tasarlanmış olmasına rağmen, bazıları tarafından dünyanın ilk programlama dili olarak kabul edilir. Birçok modern fonksiyonel programlama dili, lambda hesabı üzerinde "ince bir katman" sağladığı şeklinde tanımlanmıştır, ve birçoğu bu açıdan kolayca tarif edilmektedir.

İcat edilmiş ilk programlama dili 1940'larda Konrad Zuse tarafından tasarlanan, ancak 1972'ye kadar kamuya açıklanmayan (ve 1998'e kadar uygulanmayan) Plankalkül'dü. Yaygın olarak bilinen ve başarılı ilk üst düzey programlama dili, 1954'ten 1957'ye kadar John Backus liderliğindeki IBM araştırmacılarından oluşan bir ekip tarafından geliştirilen Fortran'dı. Fortran'ın başarısı, "evrensel" bir bilgisayar dili geliştirmek için bir bilim adamları komitesinin kurulmasına yol açtı; çabalarının sonucu ALGOL 58'di. Ayrı olarak, MIT'den MITJohn McCarthy'idi, kökleri akademiden başarılı ve kökleri  olan ilk dil olan Lisp'i geliştirdi. Bu ilk çabaların başarısı ile programlama dilleri 1960'larda ve sonrasında aktif bir araştırma konusu haline geldi.

Some other key events in the history of programming language theory since then:

### 1950'ler

* Noam Chomsky, programlama dili teorisini ve diğer bilgisayar bilimi dallarını doğrudan etkileyen bir keşif olan, dilbilim alanında Chomsky hiyerarşisini geliştirdi.

### 1960'lar

* Simula dili Ole-Johan Dahl ve Kristen Nygaard tarafından geliştirilmiştir; nesne yönelimli bir programlama dilinin ilk örneği olarak kabul edilir; Simula ayrıca ko-rutinler kavramını da tanıttı.
* 1964'te Peter Landin, Church'ün lambda hesaplamasının programlama dillerini modellemek için kullanılabileceğini fark eden ilk kişidir. Lambda ifadelerini "yorumlayan" SECD makinesini tanıtıyor.
* 1965'te Landin, esasen bir devamlılık biçimi olan J operatörünü tanıttı.
* 1966'da Landin, The Next 700 Programming Languages adlı makalesinde soyut bir bilgisayar programlama dili olan ISWIM'i tanıttı*.* Haskell programlama diline giden dillerin tasarımında etkilidir.
* 1966'da Corrado Böhm, CUCH (Köri Kilisesi) programlama dilini tanıttı.
* 1967'de Christopher Strachey, *[[Değer (bilgisayar bilimi)|R-değerleri]]*, *[[Değer (bilgisayar bilimi)|L-değerleri]]*, *[[parametrik polimorfizm]]* ve *[[Özel polimorfizm|ad-hoc polimorfizm]]* terminolojisini tanıtan, *[[Programlama Dillerinde Temel Kavramlar]]* ders notlarını yayınladı.
* 1969'da J. Roger Hindley, daha sonra *[[Hindley-Milner]]* tip çıkarım algoritmasına genelleştirilmiş, Birleştirici Mantıkta bir Nesnenin Temel Tip Şemasını yayınlar.
* 1969'da Tony Hoare, bir tür aksiyomatik anlambilim olan Hoare mantığını tanıtıyor.
* 1969'da William Alvin Howard, doğal tümdengelim olarak adlandırılan "üst düzey" bir ispat sisteminin, sezgisel versiyonunda lambda hesabı olarak bilinen hesaplama modelinin yazılı bir varyantı olarak doğrudan yorumlanabileceğini gözlemledi. Bu Curry-Howard yazışması olarak bilindi.

### 1970'ler

* 1970 yılında Dana Scott, ilk olarak gösterimsel anlambilim üzerine çalışmalarını yayınlar.
* 1972 yılında bilgisayar programlarının matematiksel mantık olarak ifade edilmesini sağlayacak şekilde mantık programlama ve Prolog geliştirilmiştir.
* Alan Kay liderliğindeki Xerox Parc'taki bir bilim adamları ekibi, yenilikçi geliştirme ortamıyla yaygın olarak bilinen nesne yönelimli bir dil olan Smalltalk'u geliştiriyor.
* 1974 yılında John C. Reynolds Sistem F'yi keşfeder. 1971'de matematiksel mantıkçı Jean-Yves Girard tarafından keşfedilmişti.
* 1975 yılından itibaren Gerald Jay Sussman ve Guy Steele, sözcüksel kapsamlamayı sözcüksel kapsamlamayı, birleşik bir ad alanını ve birinci sınıf süreklilikler de dahil olmak üzere aktör modelinden öğeleri içeren bir Lisp lehçesi olan Scheme programlama dilini geliştirir.
* Backus, 1977 Turing Ödülü dersinde, endüstriyel dillerin mevcut durumuna saldırdı ve şimdi işlev düzeyinde programlama dilleri olarak bilinen yeni bir programlama dilleri sınıfı önerdi.
* 1977'de Gordon Plotkin, soyut yazılan işlevsel bir dil olan Hesaplanabilir Fonksiyonların Programlanmasını tanıttı.
* 1978'de Robin Milner, ML için Hindley-Milner tip çıkarım algoritmasını tanıttı. Tip teorisi programlama dillerine bir disiplin olarak uygulanmaya başlandı, bu uygulama yıllar içinde tip teorisinde muazzam ilerlemelere yol açtı.

### 1980'ler

* 1981'de Gordon Plotkin, yapılandırılmış operasyonel anlambilim üzerine makalesini yayınladı.
* 1988'de Gilles Kahn doğal anlambilim üzerine makalesini yayınladı.
* Robin Milner'ın, İletişim Sistemleri Hesabı ve C.A.R. Hoare'un Sıralı İletişim Süreçler modeli gibi süreç hesapları ve Carl Hewitt'in aktör modeli gibi benzer eşzamanlılık modelleri ortaya çıktı.
* 1985 yılında, Miranda'nın piyasaya sürülmesi, tembel olarak değerlendirilen saf fonksiyonel programlama dillerine akademik bir ilgi uyandırdı. 
* 1990 yılında Haskell 1.0 standardının yayınlanmasıyla sonuçlanan açık bir standart tanımlamak için bir komite kuruldu.
* Bertrand Meyer, sözleşmeye göre tasarım metodolojisini yarattı ve bunu Eiffel programlama diline dahil etti.

### 1990'lar

* Gregor Kiczales, Jim Des Rivieres ve Daniel G. Bobrow, *The Art of the Metaobject Protocol* adlı kitabı yayınladılar.
* Eugenio Moggi ve Philip Wadler, fonksiyonel programlama dillerinde yazılmış programları yapılandırmak için Monad'leinr kullanımını tanıttı.

## Alt disiplinler ve ilgili alanlar
Programlama dili teorisi içinde yer alan veya üzerinde derin bir etkisi olan birkaç çalışma alanı vardır; bunların birçoğu önemli ölçüde örtüşmektedir. Ayrıca PDT, hesaplanabilirlik teorisi, kategori teorisi ve küme teorisi dahil olmak üzere matematiğin diğer birçok dalını kullanır.

### Biçimsel anlambilim
Biçimsel anlambilim, bilgisayar programlarının ve programlama dillerinin davranışının biçimsel özelliğidir. Bir bilgisayar programının şematiği veya "anlamını" tanımlamak için kullanılan üç yaygın yaklaşım, düz anlambilim, işlemsel anlambilim ve aksiyomatik anlambilimdir.

### Tip teorisi
Tip teorisi, tip sistemlerinin incelenmesidir; bunlar "ifadeleri hesapladıkları değer türlerine göre sınıflandırarak belirli program davranışlarının yokluğunu kanıtlamak için izlenebilir bir sözdizimsel bir yöntemdir". Birçok programlama dili, tür sistemlerinin özellikleriyle ayırt edilir.

### Program analizi ve dönüşümü
Program analizi, bir programı inceleme ve temel özellikleri belirleme (program hataları sınıflarının olmayışı gibi) genel sorunudur. Program dönüştürme, bir programı bir biçimden (dilden) başka bir biçime dönüştürme işlemidir.

### Karşılaştırmalı programlama dili analizi
Karşılaştırmalı programlama dili analizi, programlama dillerini özelliklerine göre farklı türlere ayırmayı amaçlar; programlama dillerinin geniş kategorileri genellikle programlama paradigmaları olarak bilinir.

### Genel ve metaprogramlama
Meta-programlama, yürütüldüğünde sonuç olarak programlar (muhtemelen farklı bir dilde veya orijinal dilin bir alt kümesinde) üreten daha yüksek dereceli programların üretilmesidir.

### Alana özgü diller
Etki alanına özgü diller, etki alanının belirli bir bölümünün sorunlarını verimli bir şekilde çözmek için oluşturulmuş dillerdir.

### Derleyici yapısı
Derleyici teorisi, *derleyiciler* (veya daha genel olarak *çevirmenler*) yazma teorisidir; Bir dilde yazılmış bir programı başka bir forma çeviren programlar. Bir derleyicinin eylemleri geleneksel olarak *sözdizim analizine* (tarama ve ayrıştırma), *semantik analize* (bir programın ne yapması gerektiğini belirleme), *[[Derleyici optimizasyonu|optimizasyona]]* (bir metrik tarafından belirtildiği gibi bir programın performansını iyileştirme; tipik olarak yürütme hızı) ve *[[Kod oluşturma (derleyici)|kod oluşturma olarak ayrılır]]* (bazı hedef dilde eşdeğer bir programın oluşturulması ve çıkışı; genellikle bir CPU'nun emir seti).

### Çalışma zamanı sistemleri
Çalışma zamanı sistemleri, sanal makineler, çöp toplama ve yabancı işlev arayüzleri dahil olmak üzere programlama dili çalışma zamanı ortamlarının ve bileşenlerinin geliştirilmesine atıfta bulunur.

## Dergiler, yayınlar ve konferanslar
Konferanslar, programlama dillerinde araştırmaları sunmak için birincil mekandır. En iyi bilinen konferanslar arasında *[[Programlama Dillerinin İlkeleri Sempozyumu|Programlama Dilleri İlkeleri Sempozyumu]]* (POPL), *[[Programlama Dili Tasarımı ve Uygulaması Konferansı|Programlama Dili Tasarımı ve Uygulaması]]* (PLDI), *[[Uluslararası Fonksiyonel Programlama Konferansı|Uluslararası İşlevsel Programlama Konferansı]]* (ICFP), *[[OOPSLA|Uluslararası Nesne Yönelimli Programlama, Sistemler, Diller ve Uygulamalar Konferansı]]* (OOPSLA) ve *[[Uluslararası Programlama Dilleri ve İşletim Sistemleri için Mimari Destek Konferansı]]* (ASPLOS) *.*

PLT araştırmasını yayınlayan önemli dergiler arasında *[[Programlama Dilleri ve Sistemlerinde ACM İşlemleri|ACM İşlemleri Programlama Dilleri ve Sistemleri]]* (TOPLAS), *[[Fonksiyonel Programlama Dergisi|Journal of Functional Programming]]* (JFP), *[[Fonksiyonel Programlama Dergisi|Journal of Functional and Logic Programming]]* ve *[[Yüksek Dereceli ve Sembolik Hesaplama|Higher-Sıradan ve Sembolik Hesaplama bulunmaktadır]].*

## Ayrıca bakınız

* SIGPLAN
* Programlama dillerinin zaman çizelgesi
* Çok üst düzey programlama dili

## Kaynakça

## Konuyla ilgili yayınlar

* Abadi, Martin ve Cardelli, Luca . *Bir Nesneler Teorisi* . Springer-Verlag.
* Michael JC Gordon . *Programlama Dili Teorisi ve Uygulaması* . Prentice Salonu.
* Gunter, Carl ve Mitchell, John C. (ed.). *Nesne Yönelimli Programlama Dillerinin Teorik Yönleri: Türler, Anlambilim ve Dil Tasarımı* . MİT Basın.
* Harper, Robert . *[https://web.archive.org/web/20070627041059/https://www.cs.cmu.edu/~rwh/plbook/book.pdf Programlama Dilleri için Pratik Temeller]* . Taslak sürüm.
* Knuth, Donald E. (2003). *[http://www-cs-faculty.stanford.edu/~uno/cl.html Bilgisayar Dilleri Üzerine Seçilmiş Bildiriler] * . Stanford, California: Dil ve Bilgi Çalışmaları Merkezi.
* Mitchell, John C. . *Programlama Dillerinin Temelleri* .
* Mitchell, John C. . *Programlama Dili Teorisine Giriş* .
* O'Hearn, Peter. W. ve Tennent, Robert. D. (1997). *[https://web.archive.org/web/20110719175135/http://www.eecs.qmul.ac.uk/~ohearn/Algol/algol.html Algol benzeri Diller]* . Teorik Bilgisayar Biliminde İlerleme. Birkhauser, Boston.
* Pierce, Benjamin C. (2002). *[http://www.cis.upenn.edu/~bcpierce/tapl/main.html Türler ve Programlama Dilleri] * . MİT Basın.
* Pierce, Benjamin C. *Türler ve Programlama Dillerinde İleri Konular* .
* Pierce, Benjamin C. *ve ark.* (2010). *[http://www.cis.upenn.edu/~bcpierce/sf/ Yazılım Temelleri] * .