Bildirimsel programlama

Vikipedi, özgür ansiklopedi

Bilgisayar biliminde, bildirimsel programlama bir programlama paradigmasıdır. —bilgisayar programlarının yapısını ve öğelerini oluşturma stili— bir hesaplamanın mantığını kontrol akışını tanımlamadan ifade eder.[1]

Bu stili uygulayan birçok dil, programın nasıl gerçekleneceğini programlama dil ilkelerinin bir dizisi olarak tanımlamak yerine programın neyi başarması gerektiğini problem alanı açısından tanımlayarak yan etkileri en aza indirmeye veya tümüyle ortadan kaldırmaya çalışır.[2] (nasıl'ı temeliyle dilin gerçeklemesine bağlıdır). Bu, algoritmaları açık adımlarla uygulayan zorunlu programlamanın tersidir.[3]

Bildirimsel programlama, genellikle, programları biçimsel mantığın teorileri ve hesaplamalar —ki bunlar, bu mantık uzayındaki çıkarımlardır— olarak kabul eder. Bildirimsel programlama, paralel programlar yazmayı büyük ölçüde basitleştirebilir.[4]

Yaygın bildirimsel diller, veritabanı sorgulama dillerini (örneğin, SQL, XQuery), düzenli ifadeleri, mantıksal programlamayı, işlevsel programlamayı ve konfigürasyon yönetim sistemlerini içerir.

Tanım[değiştir | kaynağı değiştir]

Bildirime dayalı programlama, genellikle, zorunlu olmayan herhangi bir programlama stili olarak tanımlanır. Bir dizi diğer yaygın tanımlar, onu, zorunlu programlama ile basitçe karşılaştırarak tanımlamaya çalışır. Örneğin:

Bu tanımlar büyük ölçüde örtüşmektedir.

Bildirimsel programlama, programların gerçekleştirilmesi gereken komutları veya adımları açıkça listelemeden istenen sonuçları tanımladığı, zorunlu olmayan bir programlama stilidir. İşlevsel ve mantıksal programlama dilleri, bildirimsel bir programlama stili ile karakterize edilir. Mantıksal programlama dillerinde programlar mantıksal deyimlerden oluşur ve program deyimlerin kanıtlarını arayarak yürütülür.

Haskell gibi saf bir işlevsel dilde, tüm işlevler yan etkisizdir ve durum değişiklikleri yalnızca, programda açıkça birinci sınıf bir nesne olarak temsil edilen durumu dönüştüren işlevler olarak temsil edilir. Saf işlevsel diller zorunlu olmasa da, genellikle bir işlevin etkisini bir dizi adım olarak tanımlamak için bir olanak sağlarlar. Lisp, OCaml ve Erlang gibi diğer işlevsel diller, prosedürel ve işlevsel programlamanın bir karışımını destekler.

Prolog gibi bazı mantıksal programlama dilleri ve SQL gibi veritabanı sorgulama dilleri, prensipte bildirimsel olmakla birlikte, prosedürel bir programlama stilini de destekler.

Alt paradigmalar[değiştir | kaynağı değiştir]

Bildirimsel programlama, bir dizi daha iyi bilinen programlama paradigmasını içeren bir şemsiye terimdir.

Kısıt programlama[değiştir | kaynağı değiştir]

Kısıt programlama, değişkenler arasındaki ilişkileri hedef çözümün özelliklerini belirleyen kısıtlamalar biçiminde belirtir. Kısıtlar kümesi, çözümün maksimum kısıtlama sayısıyla tutarlı olması için her değişkene bir değer verilerek çözülür. Kısıtlı programlama genellikle diğer paradigmaları tamamlar: İşlevsel, mantıksal ve hatta zorunlu programlama.

Alana özgü diller[değiştir | kaynağı değiştir]

Bildirimsel etki alanına özgü dillerin (EAÖD'ler) iyi bilinen örnekleri arasında yacc ayrıştırıcı üreteci giriş dili, QML, Make derleme belirtim dili, Puppet'ın yapılandırma yönetim dili, normal ifadeler ve bir SQL alt kümesi (örneğin seçim—SELECT—sorguları) bulunur.). EAÖD'ler, Turing bütünlü olması gerekmese de faydalı olma avantajına sahiptir, bu da bir dilin tamamen bildirimsel olmasını kolaylaştırır.

HTML, MXML, XAML, XSLT veya diğer kullanıcı arayüzü biçimlendirme dilleri gibi birçok biçimlendirme dili genellikle bildirimseldir. Örneğin HTML, yalnızca bir web sayfasında neyin görünmesi gerektiğini tanımlar - ne bir sayfanın oluşturulması için kontrol akışını ne de sayfanın bir kullanıcıyla olası etkileşimlerini belirtir.

2013 itibarıyla, bazı yazılım sistemleri,[hangileri?] geleneksel kullanıcı arabirimi biçimlendirme dillerini (HTML gibi), arka uç sunucu sistemlerinin beyan edilen arabirimi desteklemek için ne (nasıl değil) yapması gerektiğini tanımlayan bildirime dayalı biçimlendirme ile birleştirir. Tipik olarak etki alanına özgü bir XML isimuzayı kullanan bu tür sistemler, SQL veritabanı sözdiziminin soyutlamalarını veya representational state transfer (REST) ve SOAP kullanan web hizmetlerine parametreli çağrıları içerebilir.[kaynak belirtilmeli]

Fonksiyonel programlama[değiştir | kaynağı değiştir]

Haskell, Scheme ve ML gibi fonksiyonel programlama dilleri, fonksiyon uygulaması aracılığıyla ifadeleri değerlendirir. İlgili ancak daha zorunlu olan Prosedürel programlama paradigmasının aksine, işlevsel programlama açık sıralamaya çok az önem verir. Örneğin, Scheme'de, birçok alt ifade türünün değerlendirme sırası tanımsızdır veya örtüktür.[6] Bunun yerine, hesaplamalar, G/Ç'ya açık referanslar ve az miktarda görünen veriler ve mümkün olan her yerde durum mutasyonundan kaçınılan veya kapsüllenen çeşitli özyinelemeli yüksek dereceli işlev uygulaması ve kompozisyonu ile karakterize edilir.

Hibrit diller[değiştir | kaynağı değiştir]

Örneğin, makefile'ler, bağımlılıkları bildirimsel bir tarzda belirtir, ancak yapılması gereken zorunlu bir eylem listesi de içerir. Benzer şekilde, YACC, bildirimsel olarak bağlamdan bağımsız bir dilbilgisi belirtir, ancak genellikle zorunlu olan (C gibi) bir ana bilgisayar dilinden kod parçacıkları içerir.

Mantık programlama[değiştir | kaynağı değiştir]

Mantık programlama dilleri, Prolog gibi, ilişkileri tanımlar ve sorgular. Bu sorguların nasıl yanıtlandığına ilişkin ayrıntılar, uygulamaya ve teorem ispatına bağlıdır, ancak tipik olarak bir tür birleştirme biçimini alır. İşlevsel programlama gibi, birçok mantık programlama dili yan etkilere izin verir ve sonuç olarak, kesin olarak bildirimsel değildir.

Modelleme[değiştir | kaynağı değiştir]

Fiziksel sistemlerin modelleri veya matematiksel temsilleri, bildirimsel olan bilgisayar kodunda uygulanabilir. Kod, davranışsal ilişkileri tanımlayan (bildirilen) zorunlu atamalar değil, bir dizi denklem içerir. Bu formalizmde bir model ifade edildiğinde, bir bilgisayar çözüm algoritmasını en iyi şekilde formüle etmek için cebirsel işlemleri gerçekleştirebilir. Matematiksel nedensellik tipik olarak fiziksel sistemin sınırlarına dayatılırken, sistemin davranışsal açıklaması bildirimsel veya nedenseldir. Bildirime dayalı modelleme dilleri ve ortamları arasında Analytica, Modelica ve Simile bulunur.[7]

Ayrıca bakınız[değiştir | kaynağı değiştir]

Kaynakça[değiştir | kaynağı değiştir]

  1. ^ Practical Advantages of Declarative Programming 
  2. ^ "declarative language". FOLDOC. 17 Mayıs 2004. 10 Ağustos 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Ocak 2020. 
  3. ^ Concepts of programming languages. Boston: Pearson. 2016. ISBN 978-0-13-394302-3. OCLC 896687896. 
  4. ^ "DAMP 2009: Workshop on Declarative Aspects of Multicore Programming". Cse.unsw.edu.au. 20 Ocak 2009. 23 Eylül 2008 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ağustos 2013. 
  5. ^ On the Massively Parallel Execution of Declarative Programs (Doctoral dissertation tez). Technical University of Berlin. 14 Şubat 1997. 23 Eylül 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Şubat 2015. In this context, the criterion for calling a programming language declarative is the existence of a clear, mathematically established correspondence between the language and mathematical logic such that a declarative semantics for the language can be based on the model or the proof theory (or both) of the logic. 
  6. ^ "Revised7 Report on the Algorithmic Language Scheme" (PDF). Scheme Working Group 1. 17 Nisan 2019 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 5 Aralık 2020. 
  7. ^ "Declarative modelling". Simulistics. 11 Ağustos 2003 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ağustos 2013.