自分自身でプログラミングを散らかすという概念は比較的新しいものです(そのため、ボートを完全に見逃している可能性があります)が、DSLの概念と一致しているようです。
DSLの背後にある考え方は、問題のドメインを単純な自然言語指向の文法に蒸留して、それらの問題を解決するためのアルゴリズムを構築するために使用できるようにすることです。
私にとって、その同じアイデア、または少なくともそのコアとなる基礎は、文芸的プログラミングと同じか、少なくとも密接に関連しています。
たとえば、グルーヴィーな世界では、DSLをより定期的に使用し、新しいDSLを作成して一般的な問題を解決することが強く求められています。このプッシュは、言語内の両方のツール(簡単なビルダー)と、DSLベースのAPIをサポートするコアライブラリから行われます。
トレンドは、少なくとも世界のあちこちで、文芸的なプログラミングに向かっているので、私はそれが努力するのに良い方法論だと思います。
残念ながら、優れた dsl を作成するために必要な考え方のレベルは、多くのプログラマーを超えていることがよくあります。私は時々必要とされるいくつかの概念に個人的に苦しんでいることを知っています。このような技術がこのような技術の普及を妨げてきたのは、この問題が原因かもしれません。
これは、ツールを使用することが典型的なケースですが、作成はまったく異なるレベルで行われます。
私の見解を少し広げると、DSLが文芸的プログラミングと同じであるということではなく、文芸的プログラミングをはるかに可能にするということです。特に、それらが自然言語DSLである場合。
Groovyのバージョン1.8では、より強力なコマンドチェーンが追加され、自然言語DSL機能が大幅に改善されました。
たとえば、次のコード行は、単なる擬似文ではなくプログラミングです。
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"
注:コードサンプルは、Guillaume Laforgeのブログから引用しています
文芸的プログラミングの背後にある核となる考えは、自然言語は人間にとってより理解しやすいということであり、それが重要なことです。私の意見では、Groovyの自然言語DSL機能は、これをはるかに近い現実にします。特に、これらのDSLがアプリケーションのビジネスルールの作成に使用される場合。
自然言語を使用してシステムの重要なコンポーネントを「エンコード」できることは、文芸的プログラミングの本質です。コードのチャンクで自然言語を散在させることは、文芸的プログラミングの粗末な形です。有用ではありますが、コード自体として自然言語を使用できる自然言語DSL は、飛躍的な進歩であると思います。
機能をプログラミングに拡張することは一般にプロセスの次のステップですが、大部分はそうするためのツールがすでに用意されています。はい、「一般的な」DSLはまだありませんが、小さいドメインの場合は機能はあります。
実際のこの他の例について(順不同):