Deklarativ programmering - Declarative programming

Inden for datalogi er deklarativ programmering et programmeringsparadigme - en måde at opbygge strukturen og elementerne i computerprogrammer på - der udtrykker logikken i en beregning uden at beskrive dens kontrolforløb .

Mange sprog, der anvender denne stil, forsøger at minimere eller eliminere bivirkninger ved at beskrive, hvad programmet skal udrette med hensyn til problemdomænet , frem for at beskrive, hvordan det skal udføres som en sekvens af programmeringssprogets primitiver ( hvordan det overlades til sprogets implementering ). Dette står i kontrast til tvingende programmering , som implementerer algoritmer i eksplicitte trin.

Deklarativ programmering betragter ofte programmer som teorier om en formel logik og beregninger som fradrag i det logiske rum. Deklarativ programmering kan i høj grad forenkle skrivning af parallelle programmer .

Almindelige deklarative sprog omfatter databasespørgsmål (f.eks. SQL , XQuery ), regulære udtryk , logisk programmering , funktionel programmering og konfigurationsstyringssystemer .

Definition

Deklarativ programmering defineres ofte som enhver programmeringsstil, der ikke er nødvendig . En række andre almindelige definitioner forsøger at definere det ved blot at kontrastere det med tvingende programmering. For eksempel:

Disse definitioner overlapper væsentligt.

Deklarativ programmering er en ikke-imperativ programmeringsstil, hvor programmer beskriver deres ønskede resultater uden eksplicit at angive kommandoer eller trin, der skal udføres. Funktionelle og logiske programmeringssprog er kendetegnet ved en deklarativ programmeringsstil. I logiske programmeringssprog består programmer af logiske udsagn, og programmet udføres ved at søge efter beviser for udsagnene.

I et rent funktionelt sprog , såsom Haskell , er alle funktioner uden bivirkninger , og tilstandsændringer er kun repræsenteret som funktioner, der transformerer staten, som eksplicit er repræsenteret som et førsteklasses objekt i programmet. Selvom rene funktionssprog ikke er tvingende nødvendige, giver de ofte en mulighed for at beskrive effekten af ​​en funktion som en række trin. Andre funktionelle sprog, såsom Lisp , OCaml og Erlang , understøtter en blanding af proceduremæssig og funktionel programmering.

Nogle logiske programmeringssprog, f.eks. Prolog og databasespørgsmål, f.eks. SQL, mens deklarative i princippet understøtter også en proceduremæssig programmeringsstil.

Underparadigmer

Deklarativ programmering er et paraplybegreb, der indeholder en række bedre kendte programmeringsparadigmer .

Begrænsningsprogrammering

Begrænsningsprogrammering angiver forholdet mellem variabler i form af begrænsninger, der angiver egenskaberne for målløsningen. Sættet med begrænsninger løses ved at give en værdi til hver variabel, så løsningen er i overensstemmelse med det maksimale antal begrænsninger. Begrænsningsprogrammering supplerer ofte andre paradigmer: funktionel, logisk eller endda tvingende programmering.

Domænespecifikke sprog

Kendte eksempler på deklarative domænespecifikke sprog (DSL'er) omfatter input-sprog yacc parser-generator, QML , Make build-specifikationssprog, Puppets konfigurationsstyringssprog, regulære udtryk og et undersæt af SQL (SELECT-forespørgsler, f.eks. ). DSL'er har fordelen ved at være nyttige, mens de ikke nødvendigvis behøver at være Turing-komplette , hvilket gør det lettere for et sprog at være rent deklarativt.

Mange markeringssprog, f.eks. HTML , MXML , XAML , XSLT eller andre markeringssprog til brugergrænseflader, er ofte deklarative. HTML beskriver f.eks. Kun, hvad der skal vises på en webside - det angiver hverken kontrolflow for gengivelse af en side eller sidens mulige interaktioner med en bruger.

Fra 2013 kombinerer nogle softwaresystemer traditionelle brugergrænseflademarkup-sprog (f.eks. HTML) med deklarativ markering, der definerer, hvad (men ikke hvordan) back-end-serversystemerne skal gøre for at understøtte den deklarerede grænseflade. Sådanne systemer, der typisk bruger et domænespecifikt XML-navnerum , kan omfatte abstraktioner af SQL-databasesyntaks eller parametriserede opkald til webtjenester ved hjælp af repræsentationstilstandsoverførsel (REST) ​​og SOAP .

Funktionel programmering

Funktionelle programmeringssprog som Haskell , Scheme og ML evaluerer udtryk via funktionsapplikation. I modsætning til det relaterede, men mere tvingende paradigme for procedureprogrammering , lægger funktionel programmering lidt vægt på eksplicit sekventering. F.eks. I Scheme er rækkefølgen af ​​evaluering af mange slags underudtryk udefineret eller implicit. I stedet er beregninger kendetegnet ved forskellige former for rekursiv funktionsapplikation og sammensætning af højere orden , hvor eksplicitte henvisninger til I/O og data fremstår sparsomt , og tilstandsmutation undgås eller indkapsles, hvor det er muligt.

Hybridsprog

Makefiles, for eksempel, angiver afhængigheder på en deklarativ måde, men inkluderer også en obligatorisk liste over handlinger, der skal udføres. På samme måde angiver yacc en kontekstfri grammatik deklarativt, men inkluderer kodestykker fra et værtsprog, hvilket normalt er bydende nødvendigt (f.eks. C ).

Logisk programmering

Logiske programmeringssprog såsom Prolog -tilstand og forespørgselsrelationer. Specifikationerne for, hvordan disse forespørgsler besvares, er op til implementeringen og dens sætningsprover, men tager typisk form af en slags forening . Ligesom funktionel programmering tillader mange logiske programmeringssprog bivirkninger, og er derfor ikke strengt deklarative.

Modellering

Modeller eller matematiske repræsentationer af fysiske systemer kan implementeres i computerkode, der er deklarativ. Koden indeholder et antal ligninger, ikke tvingende tildelinger, der beskriver ("deklarerer") de adfærdsmæssige forhold. Når en model udtrykkes i denne formalisme, er en computer i stand til at udføre algebraiske manipulationer for bedst at formulere løsningsalgoritmen. Den matematiske kausalitet er typisk pålagt grænserne for det fysiske system, mens den adfærdsmæssige beskrivelse af selve systemet er deklarativ eller akausal. Deklarative modelleringssprog og miljøer omfatter Analytica , Modelica og Simile .

Se også

Referencer

eksterne links