本物のプログラマは (FPで) DSL を書く

by syoyo

最近 FP(functional programming)言語をやり始めたり、MUDA[1] DSL(オレ様言語)を書き始めていますが、
なんかタイトルのような気持ちがひしひしと感じてくる。

C/C++ 言語とかの既存言語でなんとかその言語の仕様に合わせてうまくコーディングしようと考えていては、
何時までたっても生産性が高まらない気がしています。
もっとより高いレベルで、アルゴリズムレベルで物事をスマートに考えて、
ゴールを達成するのに最も適したオレ様言語を書いて最短時間で実装を終えることができるようになるべき。
DSL コンパイラを FP で書くのは optional ですが、FP で書いたほうがきれいに効率的にコンパイラが書ける、
気がします.

そんなふうに思っている私も、でもまだ今の ocaml での MUDA 実装はこんな段階にやっときたレベル.

http://lucille.atso-net.jp/svn/angelina/ocaml/muda/


mbp: $ cat input.mu
// test code
f=a+1+2-3*4

こんなのが、


mbp: $ ./mudah input.mu
(= (IDENT f) (* (- (+ (+ (IDENT a) 1) 2) 3) 4))

こんなふうに AST になるだけ。
次なるステップは、MUDA はベクトル言語なので、


vec f = a + b + c
if ((f + d).x < 0.0) {
    ...
}

な式を C に落とすにはアセンブラ式みたいに


vec tmp0 = a + b
vec f = tmp0 + c
float tmp1 = (f + d).x
if (tmp1 < 0.0) {
    ...
}

なように個々の演算に対して一時変数を割り当てたりして SSA っぽくする処理を追加する。

[1] Load to MUDA. SIMD code generation, domain specific language, automatic optimization, functional programming, etc.
http://lucille.atso-net.jp/blog/?p=323

Advertisements