İçeriğe atla

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,[1] 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ı.[2]
  • 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".[3] 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

  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.

Konuyla ilgili yayınlar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Programlama dili</span>

Programlama dili, yazılımcının bir algoritmayı ifade etmek amacıyla, bir bilgisayara ne yapmasını istediğini anlatmasının tektipleştirilmiş yoludur. Programlama dilleri, yazılımcının bilgisayara hangi veri üzerinde işlem yapacağını, verinin nasıl depolanıp iletileceğini, hangi koşullarda hangi işlemlerin yapılacağını tam olarak anlatmasını sağlar.

<span class="mw-page-title-main">Elektronik mühendisliği</span>

Elektronik mühendisliği, zayıf elektrik akımlarının karakteristikleri, haberleşme teknolojileri, elektromanyetik ve sinyal işleme teknolojilerini inceleyen mühendislik dalıdır.

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">Pascal (programlama dili)</span> yüksek seviyeli programlama dili

Pascal bilgisayar programlama dili pek çok öğrenciye bilgisayar programlamayı öğreten ve çeşitli versiyonları bugün hâlâ yaygın olarak kullanılmaya devam eden en önemli programlama dillerinden biridir. İlk Macintosh işletim sisteminin çoğu ve TeX Pascal ile yazılmıştır.

<span class="mw-page-title-main">C♯</span> programlama dili

C#; Microsoft tarafından .NET Teknolojisi için geliştirilen modern bir programlama dilidir. Sözdizimi C-like bir deneyim sunar.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

<span class="mw-page-title-main">Yazılım</span> bilgisayarın somut olmayan çalıştırılabilir bileşeni

Yazılım, değişik ve çeşitli görevler yapma amaçlı tasarlanmış elektronik aygıtların birbirleriyle haberleşebilmesini ve uyumunu sağlayarak görevlerini ya da kullanılabilirliklerini geliştirmeye yarayan makine komutlarıdır.

Yapısal programlama, programlama dilleri kullanılarak yazılan, mantıksal bütünlük gösteren bloklara (bölümlere) bölünebilirler. Bu yolla uzun ve karmaşık programların, bloklara ayırarak daha kolay biçimde yazılabilmesi mümkün olmaktadır.

Objective-C, C'nin üzerine yazılmış, yansımalı, nesne yönelimli bir programlama dilidir. ObjC, Objective C ve Obj-C olarak da anılır.

<span class="mw-page-title-main">Nesne yönelimli programlama</span> nesne kavramına dayalı programlama paradigması

Nesne yönelimli programlama veya kısaca NYP, Her işlevin nesneler olarak soyutlandığı bir programlama yaklaşımıdır. NYP destekleyen programlama dilleri yüksek seviye diller olarak adlandırılır.

Nesne Yönelimli Çözümleme ve Tasarım, bir sistemin/sistem modülleri setinin/organizasyonun/işletme biriminin gereksinimlerinin çözümlenmesinde ve uygun bir çözümün tasarımında nesne ile modelleme tekniklerini kullanır. Modern nesne yönelimli çözümleme ve tasarım yöntemlerinin çoğu, gereksinim, tasarım, uygulama, test ve dağıtım süreçleri boyunca kullanım senaryoları üzerine kuruludur. Kullanım Senaryoları, nesne yönelimli programlama ile birlikte ortaya çıkmış olmasına rağmen yordamsal programlanan sistemlerde de işe yaramaktadır.

Bilgisayar bilimci, bilgisayar bilimi, bilgi ve hesaplamanın teorik temellerinin incelenmesi ve bunların uygulamaları hakkında uzmanlaşmış bir kişidir.

Programlama paradigmaları, programlama dillerini özelliklerine göre sınıflandırmanın bir yoludur. Diller birden fazla paradigma içinde sınıflandırılabilir.

Seed7 Thomas Mertes tarafından geliştirilmiş olan genişletilebilir ve genel amaçlı bir programlama dilidir. Sözdizim kuralları açısından C'ye ve Pascal'a çok benzer.

ML genel amaçlı bir işlevsel programlama dilidir. Lisp'ten esinlenmiş dilde ifadelerin veri tipini otomatik olarak atayan Hindley-Milner sistemi kullanılmıştır. Örüntü eşleme ve atık toplama teknolojilerini de bünyesinde barındıran ML birçok programlama dili araştırmasına kaynaklık etmiş; derleyici tasarımı, otomatik teorem kanıtlama ve program doğrulama uygulamalarında kullanılmıştır.

<span class="mw-page-title-main">Kristen Nygaard</span> Norveçli bilgisayar bilimcisi, programlama dili tasarımcısı ve siyasetçi

Kristen Nygaard Norveçli bir bilgisayar bilimcisi, programlama dili öncüsü ve politikacıydı. Uluslararası alanda Nygaard, 1960'larda Ole-Johan Dahl ile nesne yönelimli programlamanın ve Simula programlama dilinin ortak mucidi olarak kabul edilmektedir. Nygaard ve Dahl, bilgisayar bilimine yaptıkları katkılardan dolayı 2001 A. M. Turing Ödülü'nü, 2002 yılında IEEE John von Neumann Madalyası'nı kazanmıştır.

Programlama bilgisayarda, bir altyordam bir birim olarak paketlenmiş belirli bir görevi yerine getiren bir dizi program talimatıdır. Bu birim daha sonra söz konusu görevin yapılması gereken her yerde programlarda kullanılabilir.

<span class="mw-page-title-main">Craig Larman</span>

Craig Larman 1958 yılında Kanada doğan bir bilgisayar bilimcisi, yazar ve organizasyonel geliştirme danışmanıdır. Bas Vodde ile en iyi LeSS formülasyonu ve ürün ve yazılım geliştirme üzerine birkaç kitabı ile tanınmaktadır.

James E. Rumbaugh, Nesne Modelleme Tekniği ve Birleşik Modelleme Dilini (UML) oluşturmadaki çalışmaları ile tanınan Amerikalı bir bilgisayar bilimcisi ve nesne yönelimli metodologdur.

Bilgisayar biliminde zorunlu programlama ya da emperatif programlama, programın durumunu değiştiren ifadeler kullanan yazılımın programlama paradigması'dır. Doğal dillerdeki zorunlu kipin komutları ifade etmesi gibi, zorunlu program da bilgisayar'ın gerçekleştireceği komutlardan oluşur. Zorunlu programlama, beklenen sonuçlarının üst düzey tanımlarından ziyade programın nasıl adım adım çalıştığını açıklamaya odaklanır.