Anche se piuttosto nuovo nel concetto di programmazione dei rifiuti (ed è quindi probabile che mi manchi completamente la barca), sembra molto in linea con il concetto di DSL .
L'idea alla base di una DSL è quella di distillare un dominio di problemi in una grammatica semplice e orientata al linguaggio naturale che può essere utilizzata per creare algoritmi per risolvere tali problemi.
Per me, quella stessa idea, o almeno la sua base fondamentale, è la stessa o almeno strettamente correlata alla programmazione alfabetica.
Nel mondo groovy, ad esempio, c'è una forte spinta a utilizzare i DSL più regolarmente e a creare nuovi DSL per risolvere problemi comuni. Questa spinta proviene da entrambi gli strumenti all'interno del linguaggio (easy builders), nonché da librerie di base che supportano un'API basata su DSL.
Dato che la tendenza, almeno in quell'angolo del mondo, è verso la programmazione alfabetica, direi che è una buona metodologia per cui lottare.
Sfortunatamente, il livello di pensiero necessario per creare un buon DSL è spesso al di là della maggior parte dei programmatori, da quello che ho visto. So di lottare personalmente con alcuni dei concetti di volta in volta necessari. Potrebbe essere questa difficoltà che ha impedito a tali tecniche di ottenere un'adozione più ampia.
È il caso classico di quando si utilizza lo strumento è una cosa, ma crearlo è a un livello completamente diverso.
Per espandere un po 'dal mio punto di vista, non è molto che i DSL siano la stessa cosa della programmazione alfabetica, ma piuttosto che rendono molto più possibile la programmazione letterata . Soprattutto quando si tratta di DSL in linguaggio naturale .
Nella versione 1.8 di groovy, la funzionalità DSL in linguaggio naturale è stata sostanzialmente migliorata con l'aggiunta di catene di comando più potenti.
Ad esempio, le seguenti righe di codice stanno programmando , non solo pseudo-frasi:
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
Nota: l'esempio di codice proviene dal blog di Guillaume Laforge
L'idea alla base della programmazione letteraria è che il linguaggio naturale è più comprensibile per l'uomo e questo è ciò che conta. Le capacità DSL di Groovy in linguaggio naturale rendono questa realtà molto più vicina, secondo me. Soprattutto quando tali DSL vengono utilizzati per creare regole aziendali per un'applicazione.
Essere in grado di "codificare" i componenti critici di un sistema usando il linguaggio naturale è l'essenza stessa della programmazione alfabetica. Dover intercalare il linguaggio naturale con blocchi di codice è una forma bastardata di programmazione alfabetica. Sebbene utile, credo che i DSL in linguaggio naturale che ti consentono di usare il linguaggio naturale come il codice stesso siano un grande passo avanti.
Espandere la capacità di programmazione in generale è il passo successivo del processo, ma in larga misura gli strumenti per farlo sono già in atto. Sì, non esiste ancora un DSL "generale", ma per domini più piccoli, la funzionalità è disponibile.
Per ulteriori esempi di ciò in azione (in nessun ordine particolare):