「言語指向プログラミング」は、現実世界のOOP/機能と比較してどのように比較されますか

StackOverflow https://stackoverflow.com/questions/1703869

  •  19-09-2019
  •  | 
  •  

質問

私は最近、「Real World Functional Programming」と「Expert F#」について、いくつかのF#関連文献を読み始めました。私はHaskellにある程度の背景があり、C#を知っているので、最初は簡単です。しかし、それが来たら」言語指向プログラミング「私はそれを理解していません。 - 私はいくつかの説明を読みました、そしてそれはすべての文でより抽象的で奇妙になるアカデミックペーパーを読むようなものです。

誰かがそのようなものの簡単な例を持っていますか、そしてそれが既存のパラダイムとどのように比較されますか?アカデミックファンタジーだけではありませんか? ;)

ありがとう、wishi

役に立ちましたか?

解決

F#には、「言語指向」と呼ばれるスタイルでプログラミングを行うためのいくつかのメカニズムがあります。

まず、構文の良さ(関数呼び出しは括弧を必要としない、独自のINFIX演算子を定義できます...)で、多くのユーザー定義のライブラリが埋め込まれたDSLの外観を持つようにします。

第二に、F# "Quotations"メカニズムにより、コードを引用して、代替セマンティクス/評価エンジンで実行できます。

第三に、F# "Computation Expressions"(別名ワークフロー、モナド、...)も、特定のコードブロックの種類の代替セマンティクスを提供する方法を提供します。

これらはすべて、EDSLカテゴリに分類されます。

他のヒント

言語指向プログラム(LOP)を使用して、以下のいずれかを説明できます。

外部言語の作成(DSL)

これはおそらくLOPの最も一般的な使用であり、特定のドメインがある場所です。これは、プログラムコード内のこれらすべてのドメイン固有のエンティティをエンコードしようとするのではなく、ルートを介したトランジットタイプなどを介したUPS配送パッケージなどです。むしろ、そのドメインだけで別のプログラミング言語を作成します。そのため、問題を別の外部言語でエンコードできます。

内部言語の作成

プログラムコードが「コード」のように見えなくなり、問題ドメインにより密接にマッピングすることを望む場合があります。つまり、コードを「自然に読む」ことを持っています。流fluentインターフェイスは、次の例です。 流fluentインターフェイス. 。また、F#には、これを非常によくサポートするアクティブなパターンがあります。

私が書いた ブログ投稿 しばらく前に、いくつかのコード例を提供します。

オブジェクト指向プログラミングでは、オブジェクトを使用して問題をモデル化しようとします。その後、これらのオブジェクトを一緒に接続して関数を実行できます...そして最終的には、元の問題を解決できます。

既存のオブジェクト指向または機能的なプログラミング言語を使用するのではなく、言語指向プログラミングでは、問題を効率的に解決するのに最適な新しいドメイン固有言語を設計します。

言語指向のプログラミングという用語は、異なる人々とは異なる意味を持つ可能性があるという点で過負荷になる場合があります。

しかし、私がそれをどのように使用したかという点では、それはあなたがDSLを作成することを意味します(http://en.wikipedia.org/wiki/domain_spific_language)あなたがあなたの問題を解決し始める前に。

DSLが作成されたら、DSLに関してプログラムを作成します。

DSLは、汎用言語がそうであるよりも問題を表現するのに適しているという考えです。

いくつかの例は、Rails ActivereCordクラスのMake File SyntaxまたはRubyです。

私はそうではありません 直接 現実世界の状況で使用される言語指向プログラミング(実際の言語の作成)ですが、より良いドメイン駆動型のオブジェクトについて考えて設計するのに役立ちます。

ある意味で、 どれか LISPまたはスキームの実際の開発は、アプリケーションとその抽象ツリーの「言語」をコードするときに開発しているため、「言語指向」と見なすことができます。 キュウリ 私が聞いたもう一つの実世界の例です。

実際の開発には、このアプローチ(およびドメイン駆動型アプローチ)にはいくつかの問題があることに注意してください。私が以前に扱った主要な問題の1つは、ドメインで理にかなっているロジックとソフトウェアで理にかなっているロジックの間の不一致です。ドメイン(ビジネス)ロジックは非常に複雑で無意味になり、ドメインモデルが分解されます。

言及されたドメイン固有の言語の簡単な例 ここ, 、SQLです。また、UNIXシェルスクリプト。

もちろん、あなたが多くの基本的なOPSを行っており、基礎となる言語と多くの重複を持っているなら、それはおそらくエンジニアリングです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top