La libreria d3.js è un "DSL incorporato" . È incorporato (utilizzando la sintassi della lingua host javascript), in contrasto con una "DSL indipendente" , che corrisponde a ciò che Eric Raymond sta parlando di "The Art of Unix Programming".
Ed è un DSL, perché implica uno stile di programmazione diverso. In d3.js descrivi la relazione tra i tuoi dati e la visualizzazione desiderata, invece di creare loop su loop che prescrivono cosa fare dopo.
Per citazione dalla pagina d3.js :
Modifying documents using the W3C DOM API is tedious: the method names are verbose, and the imperative approach requires manual iteration and bookkeeping of temporary state. For example, to change the text color of paragraph elements:
var paragraphs = document.getElementsByTagName("p");
for (var i = 0; i < paragraphs.length; i++) {
var paragraph = paragraphs.item(i);
paragraph.style.setProperty("color", "white", null);
}
D3 employs a declarative approach, operating on arbitrary sets of nodes called selections. For example, you can rewrite the above loop as:
d3.selectAll("p").style("color", "white");
Vedi questo esempio di d3.js in natura . con javascript procedurale creerai diversi loop e selezioni e sottoselezioni, invece di descrivere cosa fare con quale parte dei dati.
Un altro fantastico esempio di DSL incorporato è "ggplot" di Hadley Wickham, nel linguaggio di programmazione R.