近頃、Scheme(Gauche) で DSL を書くお仕事をしています。domain specific language のあれです。先日までは、Gauche で JSON を使って PostgreSQL とやり取りする CGI な API を書くお仕事をしていました。(主に設計面と進捗的なとこでボツりましたけどね。。面目なさ過ぎて涙目 orz)
現在お世話になっている会社にて、「言語は Scheme でも Common Lisp でも、他のなんでも好きなものを使って良いよ。」という素敵なお話で、Scheme を選びました。Lisp が好きな身としてはすごく幸せな環境です。(windows 環境であれば C# を選らんだと思いますが。)
ただ。私のような下級戦士にとっては仕事で Scheme を使うというのは、それが例え Gauche であっても茨の道だということを実感しました。春ですね。
というのは、Scheme や Lisp という言語がパワフルかどうかとは関係ないところで困るんです。ユーザーが少な過ぎるんだと思います(他国では違うのかも?TIOBE Software: Tiobe Index)。ユーザーが少ないということは、ググっても情報(ある意味"答え")が出てこないんです。「こういう方法で解決した」「こうやったら、こうなった」「これをこう使ったら、結果こうなった」というような情報もすごく少ないです。あっても「入れてみた」「使ってみた」「試してみた」がほとんどです。なので自ら、"考えること"、"試してみる必要のあること"が多くなります。結果的に他の言語でググったり、他の言語のドキュメントを読んだりしなければならなくなります。この状況にアンビバレントな感情を抱かざるを得ません。仕事では時間を無制限に使うわけにはいきませんよね。ググって「あーこれでできるんだ。(ちゃちゃっ!終)」とはなりません。
で、急に「ダイの大冒険」の話です。大魔王バーンが使う「光魔の杖」ってありましたよね。簡単に言えば「理力の杖」を超強力にしたもの、ってロン・ベルクが言ってたあれです。理力の杖は、魔力を打撃力に替えることで攻撃力が上がるんですが、これは誰が使ってもだいたい同じくらいの攻撃力になるわけです。光魔の杖は、その上限がなくて、魔力が強ければ強いほど攻撃力が無限に上がるんです。Lisp って、光魔の杖だと思うんですよね。既に高い技術を持ったプログラマが更なる自由とパワーを得ることができる言語。でも私が使ってもせいぜい理力の杖なんじゃないかと。
弱音でしょうか、いいえゆとりです。ただ、これってプログラミングとしてはすごく楽しいんですよね。Lisp は書くこと自体楽しいですし。その点は幸せです。
で、急に「ダイの大冒険」の話です。大魔王バーンが使う「光魔の杖」ってありましたよね。簡単に言えば「理力の杖」を超強力にしたもの、ってロン・ベルクが言ってたあれです。理力の杖は、魔力を打撃力に替えることで攻撃力が上がるんですが、これは誰が使ってもだいたい同じくらいの攻撃力になるわけです。光魔の杖は、その上限がなくて、魔力が強ければ強いほど攻撃力が無限に上がるんです。Lisp って、光魔の杖だと思うんですよね。既に高い技術を持ったプログラマが更なる自由とパワーを得ることができる言語。でも私が使ってもせいぜい理力の杖なんじゃないかと。
本題
今やってる DSL については、画像処理系の DSL です。「できたら、BSD ライセンスか何かで公開しちゃえば?」とのことなので、そういうこともあるかもです。
- DSL とはインターフェースである
- DSL とは極限まで抽象化した API である
- DSL のデザインとは、API のデザインである
こういうことを、見たり聞いたりしました。ホントそうだなと思います。API デザイン力(というか抽象化能力)が高くないと、いくらパワフルで DSL 定義が得意と言われてる言語(つまり Lisp のことですが)を使っても意味がないと感じています。当たり前っちゃ当たり前ですよね。
で、いろいろ読んだりするわけです。そのメモ。Martin Fowler 先生は DSL の本(Domain-Specific Languages (Addison-Wesley Signature Series (Fowler)))まで出してるんですね。確かにリファクタリング(リファクタリング―プログラムの体質改善テクニック (Object Technology Series))の一つの極地の様な気もします。
で、いろいろ読んだりするわけです。そのメモ。Martin Fowler 先生は DSL の本(Domain-Specific Languages (Addison-Wesley Signature Series (Fowler)))まで出してるんですね。確かにリファクタリング(リファクタリング―プログラムの体質改善テクニック (Object Technology Series))の一つの極地の様な気もします。
- Martin Fowler's Bliki in Japanese - ドメイン特化言語
- Martin Fowler's Bliki in Japanese - 言語ワークベンチ
- Martin Fowler's Bliki in Japanese - パーサー恐怖症
- DSL 概要 (モデリング言語)
- How to Model and Implement a Domain Specific Language (DSL) for Functional Test Automation — The Hitchhikers Guide to Test Automation
- InfoQ: CLR上でのドメイン特化言語の構築
他
- Domain-Specific Languagesにおける外部DSLの種類 - GOLEM-XIVの日記
- 適応モデルと意味モデル - GOLEM-XIVの日記
- DSL(Domain Specific Language)メモ - Resilient Mind
Scheme で DSL といえば
などを思い浮かべます。でもよく考えてみれば、On Lisp でも LOL(LET OVER LAMBDA Edition 1.0) でも PAIP(実用 Common Lisp (IT Architects’Archive CLASSIC MODER)) でもほとんどが DSL と呼べるようなものばかりだったじゃないですか。私は一体何を読んできたんだろう。。
あ、直接関係ないけど、見かけたのでメモ。Monads in Scheme の和訳みたいです。
そして、DSL といえば、リトル言語。リトル言語といえば UNIX 。UNIX に憧れを持ち始めたこの頃。
0 件のコメント:
コメントを投稿