DSL
Domain-Specific Language
ドメイン固有言語
識別子等はユビキタス言語に近い
汎用的すぎない適切な語彙を用いている
文法は既存言語のような複雑性は排除されている
理解可能な抽象度に合わせたセマンティクス
故に非エンジニアでも利用できる
Domain Modelに最も詳しい専門家など
本当に特殊な状況における処理しか書けない
その制限があることが良い
無駄なことを考えずに済む
問題解決に関係ない部分は知らなくて済む
変な書き方ができない
DSLには確実にペルソナが存在する
DSLの設計には良い抽象化が不可欠
処理系はホスト言語になる
ならないこともある
DSLの実行方法
直接実行型
よくわからんmrsekut.icon
フレームワークな立ち位置ってことか?
ホスト言語の上にAPIが用意されていてそれを使う的な
なので普通にホスト言語のシンタックスが使える(使えてしまう)
ex. awkコマンド, sedコマンド
バイトコード生成型
ex. JVM向けのバイトコードを生成する
ソースコード変換型
実行する前にコードの展開処理が入る
ex. メタプログラミング、Lispのmacroなど
DSLの実装方法
内部DSL
外部DSL
テキスト形式ではないDSL
ex
DSL Workbench
Intentional Software社
Meta Programming System
JetBrains製
『実践プログラミングDSL』.icon 9章
jupyterとか?スプレッドシートとか?
グラフィカルなものもある
DSLの短所
新たな構文の場合IDEサポートが渋くなる
パフォーマンスへの影響
簡単ではあるが、新しい言語を覚える感じになる
具体例
HTML, CSS
UI設計向け
機能の使い回しとかは出来ない
Elm
堅牢なフロントエンド開発向け
ゴリゴリのブラウザパフォチューとかはできない
SQL
DB操作向け
具体的にどうのようにデータを取得するかなどの指定はできない
Mathematica
数学者向け
VHDL
Very-high-speed integrated circuit Hardware Description Language
電子回路設計の自動化
Ant, Rake, Make
ビルド向け
yacc, Bison, ANTLR
パーサー生成
RSpec, Cucumber
RubyのTDD向け
Smopeck
例えば
グラフィックス
アニメーション
コンピュータ・ミュージック
信号処理
解析処理
印刷
財務関係
ロボット
など
DSLは問題領域を極限まで抽象化したものPaul Hudak.icon
この抽象化によって、それ以上でもそれ以下でもない、適切な量の情報を捕捉できる
本当にそうだなmrsekut.icon*2
参考
『実践プログラミングDSL』
/mrsekut-book-4297140101/272 (ドメイン特化言語(DSL))
/herp-technote/DSL
https://htmlpreview.github.io/?https://github.com/khibino/haskell-day-2018/blob/master/presentation.html
http://bliki-ja.github.io/LanguageWorkbench/
http://tanakakoichi9230.hatenablog.com/entry/3812712361
https://logmi.jp/tech/articles/306406