Definieer 'declaratief' dan maar eens. Er is namelijk maar 1 heersende opinie of de term declarativiteit en dat is dat het de meeste slecht gedefinieerde notie van de hele informatica is

.
Juist daarom ben ik heel voorzichtig met de term declaratief. Prolog noemde ik een logische programmeertaal (knappe vent die dat gaat tegenspreken

) en XSLT omschreef ik bewust als een
meer declaratieve taal in mijn post hierboven.
Ik heb even opgezocht hoe
declarative gedefinieerd is in mijn Engelse woordenboek:
[...]
Ik vind deze definitie echter uitermate slap en naief als je niet goed beseft waarover het eigenlijk gaat. De definitie die hier (en veel mensen zouden zich kunnen vinden in deze definitie) wordt namelijk nogal eens misbruikt om te beweren dat declaratieve talen (wat dat ook mogen zijn) geen programma verificatie nodig hebben. Een programma in zo'n taal beschrijf immers niet
hoe iets moet gebeuren maar
wat er moet gebeuren. Hoe kan een programma nu fout zijn als het alleen beschrijft
wat er moet gebeuren?
De fout zit hem in het niet maken van een onderscheid tussen de taal waarin een probleem
gespecificeerd is en de taal waarin een probleem
geimplementeerd wordt.
Als je een probleem specificeert in een functionele taal en daarna implementeert in een imperatieve taal, zal je een stap moeten maken van het functionele model naar het imperatieve model. Bij deze stap kan je fouten maken en daardoor zal het imperatieve programma geverifieerd moeten worden ten op zichte van zijn specificatie.
Als je een probleem specificeert in een functionele taal en daarna implementeert in een functionele taal, is de
specificatie gelijk ook de
implementatie. Het is dus niet nodig om de implementatie te vergelijken met de specificatie, omdat ze simpelweg hetzelfde zijn.
Als je een probleem specificeert in een imperatieve taal en daarna implementeert in een imperatieve taal, is de specificatie weer gelijk aan de implementatie. Hierdoor hoeft de implementatie dus ook nu niet geverifieerd te worden.
Nu terug naar het misbruik van de definitie van declarativiteit: ik kan zo het quicksort algoritme implementeren in een functionele taal. Waarom zou ik hierin geen fout kunnen maken?
Het punt zit hem in de aanname dat de specificatie van een probleem in dezelfde taal is geschreven als de implementatie: de implementatie is de specificatie en andersom. Op zich prima, als dit ook daadwerkelijk zo zou zijn. In het algemeen is het echter zo dat algorithmen of problemen niet gespecificeerd zijn in een functionele taal. Ze zijn gespecificeerd in een ander model: niet het functionele, niet het imperatieve (het model van de computer).
Er is verificatie nodig zodra een implementatie in een ander model valt de specificatie. Daarom is het onzinnig om te beweren dat een programma geschreven in declaratieve taal nooit geverifieerd zou moeten worden, wat helaas wel vaak gebeurd.
De term declaratief is tegenwoordig in feite een verzamelnaam voor alle talen die niet gebaseerd zijn op het model van de moderne computer: het imperatieve model. Als je declarativiteit zo bekijkt is dat prima, maar helaas worden er vaak meer consequenties verbonden aan het declaratief zijn van een taal.