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


12

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

私は小さな、疎結合のプログラムパーツに賛成です:ほんの少しだけ使用するいくつかの大きなことより、使用するすべての小さなことを学ぶ方がはるかに優れています。

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

  • 簡単に作成できる多数のスクリプト言語
  • プログラマのニーズに合わせて自分自身を書き換えることができる、単一の簡単に拡張可能な言語

彼が2番目を提案している場合、私は「もうやった!」と答えます。そして、例としてLispを与えます。ポール・グラハムが示唆するように、言語はとにかくこれに向かって絶えず動いているようです

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


それは確かに大きな可能性を吹き込んでいます。

2
このパラダイムがどのような問題を解決するかは私には明らかではありません。ところで、LISPは成功した言語の例ではありません。
-mouviciel

7
@mouvicielそれはあなたが「成功した」という意味に正確に依存します。大多数のプログラマーによって使用されていますか?いいえ。長い間使用されていましたか?はい-50年とカウント。現代のほとんどの言語は、そこから便利な機能の山を盗まれていますか?はい。(言語はLisp言語からさらに盗むことができますか?はい!)
フランクシェラー

2
広く使用されている言語と便利な言語には違いがあります。一般に、新しい分野を探求する言語は使用されませんが、長期的にはすべてに貢献する可能性があります。一方、Javaはテーブルに新しいものを何ももたらさないため、役に立たない(すべてのアカウントで間違いなく成功した言語であるにもかかわらず)。
マチューM.

1
CobolをマスターするよりもLispをマスターする方が便利だと思います。
グレナトロン

回答:


8

私はDSLを長い間擁護してきましたが、DSLが時流になったときにGood Ideasがどうなるか心配です。The Good Ideaを宣伝する製品が構築されます。あなたがしなければならないのは、1つを取得することだけで、それが何を意味するかを非常に慎重に考えることなく、グループに参加できます。

言語とは何ですか?意味を伝えることができる語彙と構文ですよね?変数を宣言し、関数を作成し、クラスを定義するたびに、既存の言語に名詞と動詞を追加することにより、新しい言語を構築しています。これで、以前はできなかったことを言うことができます。

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

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

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

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

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


時流の部分で間違いなくあなたに同意します-「先のとがった髪のボスは、それがどの言語で書かれるべきかを知っています。[...] Java。」別の問題は、ジョエルが「建築宇宙飛行士」と呼ぶものです。また、DSLがお互いに広告を重ねるのを見ることができました(sp?)。プログラマー->ソフトウェアエンジニア->コンピューター科学者に帰着すると思います。
マイケルK

そして、理解するための努力を必要としない場合、それは本当にそれだけの価値がない可能性があります:)
マイケルK

4

それがまさにRubyのアプローチです。

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

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


7
RoRはRubyの方言ではありません。
back2dos

4
@ back2dos:メタプログラミングを考えていました。もちろん、RoRは別のプログラミング言語ではありません。方言で私が言いたいのは、Railsの下にあるものがすべてRubyであるとしても、開発者の観点から彼はRubyをより高い抽象度で使用しているということです。ドメイン。方言。彼はビュー、モデル、コントローラーを使用し、いわば方言である異なる言語に似た構文を使用してプログラミングしています。これは、Rubyほど強力なスクリプト言語の美しさです。
ネリアン

本当に違いを見ることは重要だと思います。AspectJはJavaの方言ですが、AspectRは単なるRubyライブラリです。違いは本当に言語です。Rubyは柔軟性と表現力を提供するように設計されていましたが、Javaはそうではありませんでした。どちらも汎用言語と見なすことができますが、違いは、Rubyは一般に、汎用の実際のDSLの必要性を排除するのに十分な表現力があるのに対し、Javaはそうではありませんが、たとえばビュー、モデル、コントローラーを一般的に使用していることです。
back2dos

1

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


私の無知を許してください-eDSLはan言語のプリプロセッサになり得ますよね?
マイケルK

@Michael、はい、この方法でeDSLを実装することは可能です、例えばCamlP4を見てください。しかし、多くの場合、eDSLは言語固有の機能(Lispマクロ、C ++テンプレートなど)に基づいて構築されます。
SKロジック

1

私たちはそれらについて話している人、私が気づいたNOW-によって判断すると、将来的にはより多くのドメイン特化言語について多くを見ることになるだろうMartin Fowler氏たくさんあまりにも彼らの話をしてて、いくつかの興味深い記事ラムダ究極の、話題にしますとりわけ。

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


Barrelfishマルチカーネル用のドライバーの開発に使用されているFoFを追加できます。DSLを開発するための言語:)
Matthieu M.

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.