web-dev-qa-db-ja.com

言語指向プログラミングは実用的ですか?

言語指向プログラミングについて この記事 を読みます。彼はプログラミングに対する現代の手続き型/ OOPアプローチのいくつかの弱点を指摘し、それらを解決する新しいプログラミングパラダイムを提案しています

私はすべて、小さな疎結合のプログラムパーツに向いています。ビットとピースのみを使用する2つの大きなものよりも、使用する小さなものをたくさん学ぶ方がはるかに優れています。

記事を読んで、著者は次の2つのいずれかを宣伝しているという印象を受けました。

  • 簡単に作成できる多数のスクリプト言語
  • プログラマーのニーズを満たすためにそれ自体を書き換えることができる単一の簡単に拡張可能な言語

彼が2番目を提案している場合は、「もう完了しました!」と返信します。例としてLISPを示します。 Paul Grahamが示唆しているように、 言語はとにかくこれに向かって絶えず移動しているようです

最初のものに関する限り、それらすべてを結びつける基礎となる言語がある場合、これは良い考えだと思います。それが言語のコミュニケーションの弱点だと私には思えます。手続きの概念である呼び出し、またはプロセス間通信を思い出させるメッセージパッシングである呼び出しを使用しますか?同時に使用するのが簡単であれば、小さなドメイン固有の言語で作業する機会を歓迎します。このアプローチ(LOP)は実用的でしょうか?

12
Michael K

私は長い間DSLを提唱してきましたが、グッドアイディアがバンドワゴンになるとどうなるか心配しています。良いアイデアを宣伝する製品が作られ、あなたがしなければならないすべてはget oneであり、あなたはグループに参加します。それが何を意味するかについて非常に慎重に考えること。

言語とは?意味が伝わる語彙や文法ですね。変数を宣言し、関数を記述し、クラスを定義するたびに、既存の言語に名詞と動詞を追加して、新しい言語を構築しています。今では、これまでできなかったことが言えます。

言語をドメイン固有にするのは、伝達されている精神的概念を自然に表現する程度であり、その単純な尺度があると思います。基本的に、プログラムに含めることができるかどうかに関係なく、単純で独立したスタンドアロン要件Xがある場合、その正しい実装には、コードの挿入、削除、および置換のセットYが必要です。単純な前後の差分で表示できます。 Y.そのような変更の数Nは、言語がドメイン固有である方法の尺度です。一般的な要件では、Nは小さいほど優れています。

派手な構文、制御構造、メッセージパッシング、または何を持っているかには必ずしも依存しません。それが依存するのは、要件をどの程度簡潔に実装するかです。多くのツールがこれを行うと主張しますが、主張は実際のものではありません。 realでなければなりません。

時には珍しい技術が必要ですこれが私のお気に入りの例です。 ある場合、それを理解するにはプログラマの努力が必要になる場合があるという点を示しています。したがって、ドメイン固有性(および保守性)はreadabilityとまったく同じではありません。

したがって、私は2番目のアプローチに同意します。良い言語とは、その上に必要な言語を簡単に構築できる言語であるということです。 (それがLISPについて私が気に入った点です。)しかし、さらに重要なのはプログラマーが自分が作業しているドメインに一致する言語を構築する方法を知る必要があることです。そのような言語の学習曲線に登る気がある。

私は本当にそのようなことが起こっているのを見ていません。代わりに、それらは「プログラム=アルゴリズム+データ構造」、または「名詞はクラスになり、動詞はメソッドになる」という行き届いた思考モードで立ち往生しています。彼らは思考領域を取り、最大の簡潔さのためにそれらを言語化する方法の点で働いていません。

8
Mike Dunlavey

これはまったくRubyのアプローチです。

  • コア言語をシンプルに保ち、gemで拡張する
  • モンキーパッチを使用して、特定のドメインのRubyの方言を作成します。例:Ruby on Rails。

これが良いかどうかはわかりませんが、非常に実用的だと思います。

4
Nerian

LOPアプローチは非常に実用的です。 「スクリプト言語」を必ずしも実装する必要はないことに注意してください。この方法論はeDSLにも適用可能であり、通常は効率的にコンパイルされます。文字通りすべての開発作業でこのアプローチを使用しています。

1
SK-logic

今後、ドメイン固有言語についてさらに詳しく見ていきます。現在、それらについて話している人々から判断すると、私は気づきました Martin Fowler それらについても多く話し、いくつかの興味深い記事 Lambda The Ultimate トピックについて。

これは、プログラミング言語の設計とプログラミングプラットフォームに関して、これが間違いなく風が吹いている方向であることを私に示唆しています。いくつかの点で、それはすでにしばらくの間あります-Ruby(すでにいくつか観察されたように)の利点の1つは、DSLを簡単に作成できることですが、実際にはDSLがたくさんありますすでに使用しているアプリケーションとプログラミングライブラリで。

1
glenatron

ソロをプログラミングするときはいつもLOPを使用しています。一部のプロジェクトでは、スケジュールを満たす他の方法がないことがわかりました。単純な寓話では、LOPを使用してツールを強化することと同じです。ワークショップで一人で作業している場合、手動で作業を行って期限を守ることはできません。あなたと一緒に他の人がいる場合、それらの電動工具の使用を調整することは、効率と安全のために不可欠です。
チームモードでは、LOPはバベルの塔の災害を回避するために組織の準備を必要とします。

0
Kakungulu