Das Konzept der Wurfprogrammierung selbst ist zwar ziemlich neu (und es ist daher wahrscheinlich, dass ich das Boot komplett vermisse), aber es scheint sehr gut mit dem Konzept eines DSL übereinzustimmen .
Die Idee hinter einem DSL ist es, einen Bereich von Problemen in eine einfache, auf natürliche Sprache ausgerichtete Grammatik zu zerlegen, mit der Algorithmen zur Lösung dieser Probleme erstellt werden können.
Für mich ist dieselbe Idee oder zumindest die Kerngrundlage dieselbe oder zumindest eng mit der Alphabetisierung verbunden.
In der groovigen Welt gibt es zum Beispiel einen starken Druck, DSLs regelmäßiger zu verwenden und neue DSLs zu erstellen, um häufig auftretende Probleme zu lösen. Dieser Push kommt sowohl von Tools innerhalb der Sprache (Easy Builder) als auch von Kernbibliotheken, die eine DSL-basierte API unterstützen.
Angesichts der Tatsache, dass der Trend zumindest in dieser Ecke der Welt zur Alphabetisierung der Programmierung geht, würde ich sagen, dass dies eine gute Methode ist, nach der man streben kann.
Leider ist das Niveau des Denkens, das zum Erstellen eines guten DSL erforderlich ist, nach dem, was ich gesehen habe, oft jenseits der meisten Programmierer. Ich weiß, dass ich persönlich mit einigen der Konzepte zu kämpfen habe, die von Zeit zu Zeit benötigt werden. Es kann diese Schwierigkeit sein, die verhindert hat, dass solche Techniken eine breitere Akzeptanz finden.
Es ist Ihr klassischer Fall, wenn Sie das Tool verwenden, ist eine Sache, aber das Erstellen ist auf einer ganz anderen Ebene.
Um meinen Standpunkt ein wenig zu erweitern, es ist nicht viel, dass DSLs dasselbe sind wie Alphabetisierungsprogrammierung, sondern dass sie Alphabetisierungsprogrammierung viel mehr ermöglichen . Besonders wenn es sich um DSLs in natürlicher Sprache handelt .
In Version 1.8 von groovy wurde die DSL-Fähigkeit in natürlicher Sprache durch das Hinzufügen leistungsfähigerer Befehlsketten erheblich verbessert .
Zum Beispiel programmieren die folgenden Codezeilen nicht nur Pseudosätze:
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"
Hinweis: Das Codebeispiel stammt aus dem Blog von Guillaume Laforge
Die Kernidee hinter der Lese- und Schreibprogrammierung ist, dass die natürliche Sprache für den Menschen verständlicher ist und darauf kommt es an. Die DSL-Funktionen in natürlicher Sprache von Groovy machen dies meiner Meinung nach zu einer viel engeren Realität. Insbesondere, wenn diese DSLs zum Erstellen von Geschäftsregeln für eine Anwendung verwendet werden.
Die Fähigkeit, die kritischen Komponenten eines Systems mit natürlicher Sprache zu "kodieren", ist das Wesentliche der literarischen Programmierung. Natürliche Sprache mit Codestücken zu vermischen, ist eine bastardisierte Form der Alphabetisierung. Obwohl nützlich, glaube ich, dass DSLs in natürlicher Sprache, mit denen Sie natürliche Sprache als Code selbst verwenden können, einen großen Sprung nach vorne darstellen.
Die Erweiterung der Programmierfähigkeit im Allgemeinen ist der nächste Schritt in diesem Prozess, aber die Tools dafür sind weitgehend bereits vorhanden. Ja, es gibt noch kein "allgemeines" DSL, aber für kleinere Domänen ist die Funktion vorhanden.
Weitere Beispiele hierfür in Aktion (in keiner bestimmten Reihenfolge):