ドメイン固有言語はいつ使用する必要がありますか? [閉まっている]

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

  •  05-07-2019
  •  | 
  •  

質問

ドメイン固有言語をいつ使用するかについての実用的なガイダンスが必要です。長所と短所に関するリソースを見つけましたが、どのようなプロジェクトがその使用を保証しますか?

DSLを作成して維持するための時間に大きな投資があるように思えますが、時間の投資に対してどのアプリケーションスペースで生産性のリターンを得ることができますか?

編集: DSLの最も一般的な用途は、データ状態を保持するファイル形式のようですが、プログラムロジックと構造(おそらくコード生成)にDSLを使用するのはどうですか?これはいつ実現可能ですか?

編集#2 主に、いつ特定のDSLを作成する価値があるかについて質問しています。もちろん、時間を節約するために、既存のDSLを可能な限り使用する必要があります。

役に立ちましたか?

解決

さらに別のDSLを作成する理由はほとんどありません。世界は特別な目的の言語で太っています。

これらの行を考慮してください。

  1. Python、Java、C ++などの汎用言語を使用して問題を解決します。何でも。

  2. そのソリューションを最適化して、共通の機能を抽出し、非常に優れた、エレガントで、拡張性の高いクラスライブラリを構築します。

  3. そのクラスライブラリを最適化して、「直交性」を強調します。すべての機能が問題なく動作することを確認してください。

  4. 構文の簡素化のみが必要な場合は、素敵なクラスライブラリの周りにスクリプトラッパーを作成します。これがDSLです。 Pythonの場合、これは簡単です-すでに動的な言語です。 Javaには、活用できるものがあります。 C ++の場合、この柔軟なスクリプト環境を構築するのは少し手間がかかります。

  5. さらに最適化が必要な場合は、DSL用のコンパイラーの作成を検討してください。

他のヒント

ACM Computing Surveysの記事ドメイン固有言語を開発する時期と方法は、 Martin Fowlerの2010年の本ドメイン固有言語と同様、まさにこのトピックです。

まず、開発対象の問題ドメインが広く知られているドメインであり、そのドメインの一部のビジネスエキスパートが既に素晴らしい経験をしている場合、DSLを そのようなDSLを構築するために必要な長さを設定して、既にわかっているすべての問題を解決するために自分で長さを調べる必要がないようにします。

DSLを 作成 することを考えている場合、あなたのビジネスが非常に特定の地域で行われ、あなたがあなたの大半の特定の問題領域に集中する時間。複数の問題のあるドメインでアプリケーションを実行している場合、そのアプローチを取ることはお勧めしません。

たとえば、あなたのビジネスが税務アプリケーションの構築に専念している場合、税システムDSLを構築することをお勧めします。これにより、あなたの言語がさまざまな税務アプリケーションで使用できるようになるだけでなく、あなたが達成している同様のことをしたい業界の他のビジネスでも販売可能(使用可能)になります。

もちろん、既存の言語の上にフレームワークを配置するのと比べて、DSLを構築するコスト/メリットを重視する必要があります。

頭に浮かぶ1つの状況は、要件が非常に高いまたはありそうもないレベルのカスタマイズ/構成を必要とする場合です。したがって、代わりにDSLに対して一種のスクリプトモデルを提供します。

自動車の組み立て「腕」を取りますたとえば、さまざまな工場構成をサポートする構成モデルを提供することは不可能です。 (これを検出し、検出しないでください。これが発生した場合、これを行います...など)

しかし、顧客ごとに専用のロジックを使用して新しいアプリケーションをコンパイルするのは、おそらく良い方法ではありません。したがって、この場合、DSLの一種となる小さなフレームワークを作成し、販売するロボットアームごとに、DSLに小さなアプリを記述し、DSLをコンパイルして実行するコアソフトウェアと共に保存します。代わりにスクリプト。または、さらに良いことに、DSLをプログラミングするツールがロボットアームとともに含まれているため、顧客は「プログラミング」できます。作成したDSLのアーム自体。

頭に浮かぶ現実的な例の1つは、Yahoo Pipes(DSLと考えることもできます)や、自動Webクローラー用のrobots.txtディレクティブなどです。それらは本格的なDSLではないかもしれませんが、DSLが役に立つかもしれない場所を示しています。

まあ、誰かがそれを言わなければならないので、ここに行きます:

Lispは、 any ドメインのドメイン固有言語とみなされています。十分にサポートされ、非常に拡張可能なDSLです。

場合によっては、Lisp(またはHaskellなどの類似言語)からDSLを作成すると、実際には最小限の労力で多くのパワーを提供できるため、非常に価値があります。 DSLは常に大きなメンテナンス負担になる必要はありません。

最も明白なのは、言語が既に存在し、十分にサポートされている場合、それらを確実に使用する必要があるということです。この主な例は、MotifベースのGUI開発用のUILとソフトウェアビルド用です。

独自のドメインを作成する必要がある場合、ドメインを探すために、物事を適切に指定するだけで、コンパイラがほとんどのエラーを実際に見つけることはできませんが、ドメイン固有のコンパイラは。 GUIは素晴らしい例です。ほとんどの作業はレイアウトの設定にあり、一般的に、基になるGUIシステムにはまったく意味のない構文的に有効なC ++呼び出しを行う方法がたくさんあります(たとえば、ダイアログ全体を埋め込むボタン内のウィジェット)。

UILコンパイラーは、C ++コンパイラーにとって通常のコンパイル可能なコードのように見えるGUI仕様のエラーを見つけることができるため、UILはGUI開発にとって特に大きなメリットがあると思います。十分にサポートされているということは、プラットフォーム間、さらにはGUIビルダー間でもコードを簡単に移植できることを意味します。

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