**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, *R-değerleri*, *L-değerleri*, *parametrik polimorfizm* ve *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), *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 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 Dilleri İlkeleri Sempozyumu* (POPL), *Programlama Dili Tasarımı ve Uygulaması* (PLDI), *Uluslararası İşlevsel Programlama Konferansı* (ICFP), *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 *ACM İşlemleri Programlama Dilleri ve Sistemleri* (TOPLAS), *Journal of Functional Programming* (JFP), *Journal of Functional and Logic Programming* ve *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. *Programlama Dilleri için Pratik Temeller*. Taslak sürüm.
* Knuth, Donald E. (2003). *Bilgisayar Dilleri Üzerine Seçilmiş Bildiriler 31 Mayıs 2017 tarihinde Wayback Machine sitesinde arşivlendi.*. 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). *Algol benzeri Diller*. Teorik Bilgisayar Biliminde İlerleme. Birkhauser, Boston.
* Pierce, Benjamin C. (2002). *Türler ve Programlama Dilleri 4 Kasım 2021 tarihinde Wayback Machine sitesinde arşivlendi.*. MİT Basın.
* Pierce, Benjamin C. *Türler ve Programlama Dillerinde İleri Konular* .
* Pierce, Benjamin C. *ve ark.* (2010). *Yazılım Temelleri 9 Kasım 2013 tarihinde Wayback Machine sitesinde arşivlendi.* .

1. ↑  "Arşivlenmiş kopya". 9 Temmuz 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Kasım 2021.
2. ↑  C. Böhm and W. Gross (1996). Introduction to the CUCH. In E. R. Caianiello (ed.), *Automata Theory*, p. 35-64/
3. ↑  Benjamin C. Pierce. 2002. Types and Programming Languages 4 Kasım 2021 tarihinde Wayback Machine sitesinde arşivlendi.. MIT Press, Cambridge, Massachusetts, USA.