Bien que relativement nouveau au concept de programmation littéraire moi-même (et il est donc probable que je manque complètement le bateau), il semble très bien s'aligner sur le concept d'une DSL .
L'idée derrière une DSL est de distiller un domaine de problèmes en une grammaire simple, orientée vers le langage naturel, qui peut être utilisée pour construire des algorithmes pour résoudre ces problèmes.
Pour moi, cette même idée, ou du moins son fondement, est la même ou du moins étroitement liée à la programmation alphabétisée.
Dans le monde groovy, par exemple, il y a une forte pression pour utiliser les DSL plus régulièrement et pour créer de nouveaux DSL pour résoudre les problèmes courants. Cette poussée provient à la fois des outils du langage (constructeurs faciles), ainsi que des bibliothèques principales prenant en charge une API basée sur DSL.
Étant donné que la tendance, au moins dans ce coin du monde, est vers la programmation alphabétisée, je dirais que c'est une bonne méthodologie à rechercher.
Malheureusement, le niveau de réflexion nécessaire pour créer un bon dsl dépasse souvent la plupart des programmeurs, d'après ce que j'ai vu. Je sais que je me bats personnellement avec certains des concepts nécessaires de temps en temps. C'est peut-être cette difficulté qui a empêché de telles techniques de gagner une adoption plus large.
C'est votre cas classique lorsque l'utilisation de l'outil est une chose, mais sa création est à un tout autre niveau.
Pour développer un peu mon point de vue, ce n'est pas beaucoup que les DSL sont la même chose que la programmation alphabétisée, mais plutôt qu'ils rendent la programmation alphabétisée beaucoup plus possible . Surtout quand ce sont des DSL en langage naturel .
Dans la version 1.8 de groovy, la capacité DSL en langage naturel a été considérablement améliorée avec l'ajout de chaînes de commande plus puissantes.
Par exemple, les lignes de code suivantes sont de la programmation , pas seulement des pseudo-phrases:
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"
Remarque: l'exemple de code provient du blog de Guillaume Laforge
L'idée centrale de la programmation alphabétisée est que le langage naturel est plus compréhensible pour les humains et c'est ce qui compte. Les capacités DSL en langage naturel de Groovy en font une réalité beaucoup plus proche, à mon avis. Surtout lorsque ces DSL sont utilisées pour créer des règles métier pour une application.
Être capable de «coder» les composants critiques d'un système en utilisant le langage naturel est l'essence même de la programmation alphabétisée. Devoir entremêler le langage naturel avec des morceaux de code est une forme bâtarde de programmation lettrée. Bien qu'utile, je pense que les DSL en langage naturel qui vous permettent d'utiliser le langage naturel comme code lui - même sont un énorme bond en avant.
L'élargissement de la capacité de programmation en général est la prochaine étape du processus, mais dans une large mesure, les outils pour le faire sont déjà en place. Oui, il n'y a pas encore de DSL "générale", mais pour les petits domaines, la capacité est là.
Pour plus d'exemples de ceci en action (sans ordre particulier):