ドメイン固有言語
[Wikipedia|▼Menu]
DSLを採用するDSL には汎用プログラミング言語にはない次のような重要な設計目標がある:

DSL は包括的である必要はない。

DSL はその領域(ドメイン)をより表現しやすくなければならない。

DSL は冗長性を最小限にすべきである。具体的に言うなら、1つの事柄について変更したいだけなのに、記述の中の複数の箇所を一緒に必ず変更しなければならない、というような言語設計をしてはならない、ということである。当然ながらこれを怠った設計の場合、「一緒に変更するのを忘れた」というバグを作りこむ危険性のある言語、ということになる。


JCL

メインフレーム系システムのJob Control Language(JCL)も一種のDSLである。
シェルスクリプト

Unix系システムのUnixシェルのコマンドやシェルスクリプトは、コマンドに与えるファイルや入出力のデータを様々な形で操作できる。特にプロセス標準ストリームに対して、リダイレクトパイプにより、順番に接続したり、ファイルを入出力先に指定したりすることができる。

小さなタスクを行うプロセス群の実行と制御のための単純なインタフェースで構成される。それらのタスクは、テーブル、グラフ、チャートなど必要な形にデータを編成するイディオムを表している。各タスクは単純な制御フローと文字列操作機構から成り、ファイル内の文字列の検索や置換、文字列の出現回数のカウントといった多数の一般的作業をカバーしている。(注: これらは単にUnixに標準的に存在するユーティリティ群のことであり、シェルスクリプト自体の機能ではない)
ColdFusion Markup Language

データ駆動型ウェブサイトのためのDSLの例として、ColdFusionのスクリプト言語がある。ウェブサイト構築のために、Java、.NET、C++、SMS、電子メール、メールサーバ、HTTP、FTP、ディレクトリサービス、ファイルシステムなどと共に使われている。

ColdFusion Markup Language (CFML) には、ColdFusionのページでデータソースとのやりとりやデータ操作や表示出力に使用するタグ群が含まれている。CFMLのタグの構文はHTMLのそれによく似ている。
Erlang OTP

Erlang Open Telecom Platform は当初、エリクソンがDSLとして社内で使用するために設計した。有限オートマトン、汎用サーバ、イベントマネージャなどを素早く構築でき、特定分野ではCやC++といった汎用プログラミング言語を凌駕する生産性を示す。現在では公式にオープンソースとなっている。
FilterMeister

FilterMeister[7]はCをベースとするプログラミング言語のプログラミング環境で、Photoshop用画像処理フィルタ・プラグインの作成に特化している。FileMeister自体がPhotoshopのプラグインとして動作してスクリプトをロード・実行することもでき、コンパイルして独立したプラグインを生成することもできる。FilterMeisterの言語はC言語とそのライブラリの大部分を再現しているが、それはPhotoshopのプラグインで必要な部分に限られており、その領域でのみ有用な機能も追加している。
MediaWiki のテンプレート

MediaWikiのテンプレート機能は組み込み型DSLの一種であり、ページ内テンプレートの作成サポートとMediaWikiのページ間のトランスクルージョンを基本的目的としている。詳しくは、Help:テンプレートを参照。
ソフトウェア工学での応用

ドメイン固有言語は、生産性と品質を向上させるものとして、ソフトウェア工学の分野で注目されてきた。DSL が効率的ソフトウェア工学のためのツールの土台となる可能性を秘めている。そのようなツールは一部のシステムの開発で使われ始めている。

SCR(Software Cost Reduction)ツールキットはその一例である[8]。このツールキットには、要求仕様を作成するためのエディタ、変数の依存関係を表示するブラウザ、仕様内の論理式での不備をチェックする機構、仕様とアプリケーションを比較検証するモデル検査自動定理証明機構、仕様から自動的に不変式(invariants)を構築する機構などが含まれる。

比較的新しい分野として言語指向プログラミング(英語版)がある。これは、DSLの作成・最適化・利用を中心にすえた方法論である。
メタコンパイラ

言語指向プログラミングを含めあらゆる形態のDSLを補完するものとして、メタコンパイラ(英語版)と呼ばれるコンパイラ記述ツールがある。メタコンパイラはDSLの構文解析器コード生成器を生成するのに便利というだけでなく、それ自体がコンパイラ記述に特化したDSLでもある。一般的なパーサジェネレータにはないメタコンパイラ特有の特徴として、メタコンパイラは独自の言語で書かれており、メタコンパイラ自体を実行形式に変換することができる。自分自身を定義し変換できるという点で「メタ」なステップを構成しており、メタコンパイラと呼ばれる。

DSLの構文解析だけでなく、メタコンパイラは様々なソフトウェア工学と分析のツールを生成するのにも有効である。メタコンパイラの方式は、汎用ツール群構築の際のブートストラップのためにプログラム変換システム(英語版)でよく使われている。

計算機科学史上重要なメタコンパイラとして、Meta-II[9] とその後継である TREE-META[10] がある。
Unreal Engine などのゲーム向け言語

ゲームアプリケーション開発では一般的にPC向けやゲーム専用機向けを問わず独自の専用スクリプト言語を導入もしくは内製することが多い。例えばノベルゲームタイプの専用ゲームエンジンであるNScripter吉里吉里2ではゲームシナリオ進行記述やフラグ管理に特化した言語を実装している。UnrealUnreal TournamentUnrealScript という言語を公開している。@media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}それによって競合するQuakeに比べて素早い修正が可能となっている[要出典]。QuakeではC言語を使った Id Tech engine を採用しており、修正にはC言語の習得が必要だが、UnrealScriptは簡便さと効率を重視して設計されている。

しかし、後述するDSLの欠点を回避するなどの目的から、『Far Cry』や『小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル』などに代表されるように、汎用スクリプト言語であるLuaSquirrelを採用する作品も増えてきている。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:56 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef