Pur essendo alquanto nuovo rispetto al concetto di programmazione della figliata (ed è quindi probabile che mi manchi completamente la barca), sembra che si allinei molto al concetto di DSL .
L'idea alla base di una DSL è quella di distillare un dominio di problemi in una semplice grammatica orientata alla lingua naturale che può essere utilizzata per costruire algoritmi per risolvere tali problemi.
Per me, la stessa idea, o almeno il fondamento di base, è la stessa o almeno strettamente connessa alla programmazione degli alfabeti.
Nel mondo groovy, ad esempio, c'è una strong spinta per usare le DSL più regolarmente e per creare nuove DSL per risolvere problemi comuni. Questa spinta arriva da entrambi gli strumenti all'interno del linguaggio (semplici builder), così come dalle librerie di base che supportano un'API basata su DSL.
Dato che la tendenza, almeno in quell'angolo del mondo, è verso 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 che personalmente lotto con alcuni dei concetti necessari di volta in volta. Può essere questa difficoltà che ha impedito a tali tecniche di ottenere un'adozione più ampia.
È il tuo caso classico quando utilizzare lo strumento è una cosa, ma la sua creazione è su un livello completamente diverso.
Per espandere un po 'il mio punto di vista, non è tanto che i DSL sono la stessa cosa della programmazione alfabetica, ma piuttosto che rendono la programmazione molto più possibile . In particolare quando sono DSL in linguaggio naturale .
Nella versione 1.8 di groovy, la capacità di DSL del linguaggio naturale era sostanzialmente migliorata con l'aggiunta di catene di comando più potenti.
Ad esempio, le seguenti righe di codice sono programming , 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 da Guillaume Il blog di Laforge
L'idea alla base della programmazione scritta è che il linguaggio naturale è più comprensibile per gli esseri umani e questo è ciò che conta. Le capacità di DSL del linguaggio naturale di Groovy rendono questa realtà molto più vicina, secondo me. Soprattutto quando questi DSL vengono utilizzati per creare regole di business 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 interspondere il linguaggio naturale con pezzi di codice è una forma bastardata di programmazione alfabetica. Anche se utile, credo che i DSL in linguaggio naturale che ti consentono di utilizzare il linguaggio naturale come il codice stesso sono un enorme balzo in avanti.
Espandere la capacità di programmare in generale è il prossimo passo nel 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 capacità è lì.
Per ulteriori esempi di questo in azione (in nessun ordine particolare):