Le lingue dichiarative non sono necessariamente un livello di astrazione più alto. Non sono magici - non riescono a capire da soli come cucinare le uova se non lo dici come (a meno che non ci sia una libreria per questo, ma sarebbe l'imperativo per alcuni). Devi ancora fornire le stesse informazioni di cui avrebbe bisogno un programma imperativo. La differenza sta nel modo in cui l'informazione è espressa.
Imperativo: una sequenza di passaggi (eventualmente con rami, loop, ecc.).
"rompi le uova, mettile nel piatto, accendi il forno a 180 gradi, ecc.",
Dichiarativo: l'obiettivo finale, descritto in modo sufficientemente dettagliato:
"uova che sono state collocate (senza gusci) in un forno su un piatto a 180 gradi"
Un esempio più realistico sarebbe come disegnare una linea:
Imperativo:
graphics.setPen(Color.Red, Size.Big)
a = new Point(100,100);
b = new Point(200, 200);
graphics.drawLine(a, b);
dichiarativo:
Line:
start: Point(100,100)
end: Point(100,100)
color: Red
size: Big
Il livello di astrazione è più o meno lo stesso (i concetti - linea, punto, colori - sono gli stessi e viene fornita la stessa quantità di informazioni), ma l'imperativo è espresso come una sequenza di passaggi, mentre il dichiarativo esprimere l'obiettivo finale.
In pratica, tuttavia, le lingue dichiarative più conosciute sono linguaggi specifici di dominio di alto livello come SQL, CSS, HTML ecc. mentre i linguaggi di livello generale di livello inferiore come C, Java ecc. sono generalmente imperativi. Esso appare dichiarativo è più adatto al DSL di alto livello, mentre l'imperativo è più adatto alla programmazione generica.