Пређи на садржај

Декларативно програмирање — разлика између измена

С Википедије, слободне енциклопедије
Садржај обрисан Садржај додат
Направљено превођењем странице „Declarative programming
(нема разлике)

Верзија на датум 18. новембар 2015. у 18:05

У информатици, декларативно програмирање је парадигма програмирања, стил изградње структура и елемената рачунарских програма, који изражавају логику рачунања без описивања њеног контролног тока.[1] Многи језици примењују овај покушај да се смање или елиминишу нежељени ефекти описујући шта програм треба да постигне у смислу домена проблема, пре него описује како остварује низ у програмском језику примитивног стила[2] (у колико се лево од реализације језика). Ово је у супротности са императивним програмирањем, у којој се алгоритми спроводе у смислу експлицитних корака.

Декларативно програмирање често сматра програме као теорија у формалне логике, и израчунавања као одбитке у том логичком простору. Декларативно програмирање може у великој мери поједноставити писање паралелних програма.[3]

Уобичајени декларативни језици укључују оне базе језика упита система (на пример, СКЛ, КСКуери), регуларни изрази, логика програмирања, функционално програмирање и управљање конфигурацијом система.

Дефиниција

Декларативно програмирање се често дефинише као било који стил програма који није императив.Известан број других заједничких дефиниција постоји да покуша да се тај термин осим једноставног контраста са императивним програмирањем дефинише. На пример:

Ове дефиниције се преклапају значајно.

Декларативно програмирање је у супротности са императивом и процесним програмирањем. Декларативно програмирање је не императив стила програмирања у коме програми описују своје жељене резултате без експлицитног листинга команди или корака који се морају обављати. Функционални и логички програмски језици се одликују у стилу декларативног програмирања. У логичким програмским језицима, програми се састоје од логичких исказа, а програм извршава тражећи доказе о изјавама.

У чистом функционалном језику, као што је Хаскелл, све функције су без нежељених ефеката, и промене стања су само представљени као функције које трансформишу државу, која је експлицитно представљена као прва класа објекта у програму. Иако чисти функционални језици су не императив, они често дају објекат за описивање ефекта функције као низ корака. Остали функционални језици, као што су Лисп, ОЦамл и Ерланг, подржавају мешавину процесног и функционалног програмирања.

Неки логички програмски језици, као што је Пролог, и језици упита базе, као што је СКЛ, док је декларативан у принципу, такође подржавају процедурални стил програмирања.

Субпарадигмс

Декларативно програмирање је кишобран термин који укључује велики број познатијих парадигми програмирања.

Ограничено програмирање

У ограниченом програмирању, односи између варијабли су наведени у виду ограничења, наводећи да се својства решење могу наћи. Скуп ограничења је тада решен давањем вредности сваке варијабле, тако да је решење у складу са максималним бројем ограничења.

Ограничење програмирања се често користи као додатак другим парадигмама: Функционално, логичко или чак императивно програмирање.

Домен специфичних језика

Неки познати примери декларативног домена специфичних језика (ДСЛс) укључују Иацц парсер генератор уноса језика, Маке израде техничке карактеристике језика, Пуппет језик управља конфигурацијом, регуларни изрази, и подскуп СКЛ (СЕЛЕЦТ упите, на пример). ДСЛс има предност јер користи Тјурингову потпуност, што олакшава да језик буде чисто декларативан.

Многи језици означавања као што су ХТМЛ, МКСМЛ, КСАМЛ, КССЛТ или други кориснички интерфејс језици означавања су често декларативни. ХТМЛ, на пример, само описује шта треба да се појави на веб страници - прецизира Флов контролу нити доношења страна, нити њене могуће интеракције са корисником.

Од 2013. неки софтверски системи комбинују традиционалне корисничке интерфејс језике за означавање (као што су ХТМЛ) декларативних ознака да дефинишу шта (али не и како) Тхе Бацк-енд сервер системи треба да ураде да би помогли проглашен интерфејс. Такви системи, типично користећи домен-специфични КСМЛ намеспаце, може укључивати апстракције СКЛ базе података синтаксе или параметрирање позива на веб сервиса помоћуРепресентатионал Стате Трансфер (РЕСТ) и СОАП.

Функционално програмирање

Функционално програмирање, а посебно чисто функционално програмирање, покушава да минимизира или елиминише нежељене ефекте, па се стога сматра декларативним. Већина [[[уреди]]] функционалних језика, као што су ШЕМЕ, Цлојуре, Ерланг, Хаскелл, ОЦамл, Стандард МЛ и Унламбда, ће дозволити нежељене ефекте у пракси.

Док функционални језици обично избегавају да наводе "како", преводилац за чисте функционалне програмске језике је слободан да интензивно препише оперативно понашање функције, све док се исти резултат враћа за исти улаз. Ово се може искористити, на пример, да направи фукнцију са паралелним резултатом или да изведе значајне оптимизације (као са дефорестацијом) да компајлер можда не прихвати језик са супротним ефектима.

Хибридни језик

Макефиле, на пример, навести зависности у делкаративне методе,[5] али укључују императивни списак акција. Слично томе, иацц одређује контекст слободан граматици декларативности, али укључује Цоде Сниппетс од језика домаћина, који је обично императив (као што је С).

Логично програмирање

Логички програмски језици су на пример Пролог стања и упита односа. Специфичности како су ови упити одговорили да је реализација теорема провер, али обично узимају облик неке врсте уједињења. Као функционално програмирањe, многи логички програмски језици дозволи су нежељене ефекте, који као резултат нису стриктно декларативни.

Моделовање

Модели, или математичке репрезентације, физичких система могу бити имплементирани у компјутерском коду који је декларативан. Код садржи велики број једначина, а не императивне задатке, које описују ("прогласи") и понашања односа. Када је модел изражен у овом формализму, рачунар је у стању да обавља алгебарске манипулације најбоље формулисаних раствора алгоритма. Математичка каузалност се обично намеће на границама физичког система, док понашање описа самог система је декларативно или акаузално. Декларативни језици за моделовање и окружења укључују аналитику, моделовање и поређење.[6]

Види још

Референце

  1. ^ Lloyd, J.W., Practical Advantages of Declarative Programming 
  2. ^ Declarative language in The Free On-line Dictionary of Computing, Editor Denis Howe.
  3. ^ "DAMP 2009: Workshop on Declarative Aspects of Multicore Programming".
  4. ^ Chakravarty, Manuel M. T. (14 February 1997).
  5. ^ [1] Archived October 23, 2007 at the Wayback Machine
  6. ^ "Declarative modelling".

Спољашње везе