Декларативно програмирање
У информатици, декларативно програмирање је парадигма програмирања, стил изградње структура и елемената рачунарских програма, који изражавају логику рачунања без описивања њеног контролног тока.[1] Многи језици примењују овај покушај да се смање или елиминишу нежељени ефекти описујући шта програм треба да постигне у смислу домена проблема, пре него описује како остварује низ у програмском језику примитивног стила[2] (у колико се лево од реализације језика). Ово је у супротности са императивним програмирањем, у којој се алгоритми спроводе у смислу експлицитних корака.
Декларативно програмирање често сматра програме као теорија у формалне логике, и израчунавања као одбитке у том логичком простору. Декларативно програмирање може у великој мери поједноставити писање паралелних програма.[3]
Уобичајени декларативни језици укључују оне базе језика упита система (на пример, SQL, XQuery), регуларни изрази, логичко програмирање, функционално програмирање и управљање конфигурацијом система.
Дефиниција
уредиДекларативно програмирање се често дефинише као било који стил програма који није императив. Известан број других заједничких дефиниција постоји да покуша да се тај термин осим једноставног контраста са императивним програмирањем дефинише. На пример:
- Програм који описује шта прорачун треба изводити, а не како да га израчуна
- Било који програмски језик који нема нуспојава (или прецизније, је референтно транспарентна)
- Језик за кореспонденцију са ставом за математичку логику.[4]
Ове дефиниције се преклапају значајно.
Декларативно програмирање је у супротности са императивом и процесним програмирањем. Декларативно програмирање је не императив стила програмирања у коме програми описују своје жељене резултате без експлицитног листинга команди или корака који се морају обављати. Функционални и логички програмски језици се одликују у стилу декларативног програмирања. У логичким програмским језицима, програми се састоје од логичких исказа, а програм извршава тражећи доказе о изјавама.
У чистом функционалном језику, као што је Haskell, све функције су без нежељених ефеката, и промене стања су само представљене као функције које трансформишу стања, која је експлицитно представљена као прва класа објекта у програму. Иако чисти функционални језици су не императив, они често дају објекат за описивање ефекта функције као низ корака. Остали функционални језици, као што су Lisp, OCaml и Ерланг, подржавају мешавину процесног и функционалног програмирања.
Неки логички програмски језици, као што је Пролог, и језици упита базе, као што је SQL, док је декларативан у принципу, такође подржавају процедурални стил програмирања.
Потпарадигме
уредиДекларативно програмирање је кишобран термин који укључује велики број познатијих парадигми програмирања.
Ограничено програмирање
уредиУ ограниченом програмирању, односи између варијабли су наведени у виду ограничења, наводећи да се својства решење могу наћи. Скуп ограничења је тада решен давањем вредности сваке варијабле, тако да је решење у складу са максималним бројем ограничења.
Ограничење програмирања се често користи као додатак другим парадигмама: Функционално, логичко или чак императивно програмирање.
Домен специфичних језика
уредиНеки познати примери декларативног домена специфичних језика (ДСЛс) укључују Yacc парсер генератор уноса језика, Маке израде техничке карактеристике језика, Пуппет језик управља конфигурацијом, регуларни изрази, и подскуп SQL (SELECT упите, на пример). ДСЛс има предност јер користи Тјурингову потпуност, што олакшава да језик буде чисто декларативан.
Многи језици означавања као што су HTML, MXML, XAML, XСЛТ или други кориснички интерфејс језици означавања су често декларативни. HTML, на пример, само описује шта треба да се појави на веб страници - прецизира контролу протока нити доношења страна, нити њене могуће интеракције са корисником.
Од 2013. неки софтверски системи комбинују традиционалне корисничке интерфејс језике за означавање (као што су HTML) декларативних ознака да дефинишу шта (али не и како) Тхе Бацк-енд сервер системи треба да ураде да би помогли проглашен интерфејс. Такви системи, типично користећи домен-специфични XML намеспаце, може укључивати апстракције SQL базе података синтаксе или параметрирање позива на веб сервиса помоћу Репресентатионал Стате Трансфер (РЕСТ) и SOAP.
Функционално програмирање
уредиФункционално програмирање, а посебно чисто функционално програмирање, покушава да минимизира или елиминише нежељене ефекте, па се стога сматра декларативним. Већина функционалних језика, као што су ШЕМЕ, Clojure, Ерланг, Haskell, OCaml, Стандард МЛ и Унламбда, ће дозволити нежељене ефекте у пракси.
Док функционални језици обично избегавају да наводе "како", преводилац за чисте функционалне програмске језике је слободан да интензивно препише оперативно понашање функције, све док се исти резултат враћа за исти улаз. Ово се може искористити, на пример, да направи фукнцију са паралелним резултатом или да изведе значајне оптимизације (као са дефорестацијом) да компајлер можда не прихвати језик са супротним ефектима.
Хибридни језик
уредиМакефиле, на пример, навести зависности у делкаративне методе,[5] али укључују императивни списак акција. Слично томе, Yacc одређује контекст слободан граматици декларативности, али укључује Цоде Сниппетс од језика домаћина, који је обично императив (као што је С).
Логично програмирање
уредиЛогички програмски језици су на пример Пролог стања и упита односа. Специфичности како су ови упити одговорили да је реализација теорема провер, али обично узимају облик неке врсте уједињења. Као функционално програмирање, многи логички програмски језици дозволи су нежељене ефекте, који као резултат нису стриктно декларативни.
Моделовање
уредиМодели, или математичке репрезентације, физичких система могу бити имплементирани у рачунарском коду који је декларативан. Код садржи велики број једначина, а не императивне задатке, које описују ("прогласи") и понашања односа. Када је модел изражен у овом формализму, рачунар је у стању да обавља алгебарске манипулације најбоље формулисаних раствора алгоритма. Математичка каузалност се обично намеће на границама физичког система, док понашање описа самог система је декларативно или акаузално. Декларативни језици за моделовање и окружења укључују аналитику, моделовање и поређење.[6]
Види још
уредиРеференце
уреди- ^ Lloyd, J.W., Practical Advantages of Declarative Programming
- ^ Declarative language in The Free On-line Dictionary of Computing, Editor Denis Howe.
- ^ „DAMP 2009: Workshop on Declarative Aspects of Multicore Programming”. Cse.unsw.edu.au. 20. 1. 2009. Приступљено 15. 8. 2013.
- ^ Chakravarty, Manuel M. T. (14. 2. 1997). On the Massively Parallel Execution of Declarative Programs (Doctoral dissertation). Technische Universität Berlin. Приступљено 26. 2. 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.”
- ^ „Архивирана копија”. Архивирано из оригинала 23. 10. 2007. г. Приступљено 18. 11. 2015.
- ^ „Declarative modelling”. Simulistics. Приступљено 15. 8. 2013.
Спољашње везе
уреди- Frans Coenen. Characteristics of declarative programming languages. 1999.
- Robert Harper.
- Olof Torgersson. A Note on Declarative Programming Paradigms and the Future of Definitional Programming. 1996.