本色々

なんか、服を買おうかと思ってユニクロに行ってみるも、太ったせいか似合うと思える服がない。
う、これはやばいんじゃということで、服屋さんをうろついてみて、まずいと思った。
で、ストレス発散に色々本を買った。

1.やさしいコンパイラの作り方
この本は、VM上で動作するスタックマシンへのコンパイラの作り方が書いてある。
C++で作るらしい。たぶん、TinyCのスタックマシンへのコンパイラに近いと思う。
ビジターパターンを使ってなさそうなので、デザインパターン最高って人は合わないかも。
自分はパターンマッチ最高である。
そして、if文やタグチェックの汚い羅列もパターンマッチに見えるので美しく見えるのだ!!
ただ、書き換えていけばScalaに移植可能なのだ。
Lisperがカッコが見えなくなるというのはこういうことなんだろう。
phpの長ったらしい関数を何回も書いて、長くても気にならなくなった。
JavascriptPerl正規表現を使い馴れれば、Javaでも正規表現は余裕になる。そんなかんじだ。
そのうち参考にしてやさしいx86コンパイラの作り方みたいなものが書けたらいいなと思う。
でも、VM上で動くものなのでちょっと違うような気もしている。
でも、買っちゃった。

2.リンカの本
なんか難しそうである。即、積読状態である。いずれ使う時が来たら使う。
Cで書かれてるのが不満なので、とりあえずScalaに書き換えたい。

3.言語の作者のインタビューをまとめた本
APL,Python,Forthを読んだ。まだ色々な言語のことが書いてある。
Pythonはabcっていう言語を基に作られたそうで知らなかった。
これ読んでいると、面白くて、言語作りが進まなくなる。
うーん。


ということで、タイガーブックも読んでみてて意味解析のところは目を通した。
コンパイル時の環境は関数型スタイルと命令型スタイルがあり、複数種類用意したりする。
式や宣言等の型の検査が書いてあった。命令型言語の型検査は、まだよくわからない。
型推論は後の章にあるらしい。


tccを参考にしようか、otccを移植してみようか、cbcを移植しようか、coinsがいいか?
って悩んでいる。cbcオブジェクト指向によって処理が構文木の中に書いてありすぎて
Scalaのマッチングで書こうと思うと非常に大変だ。
tccはalohakunの日記読みつつ頑張れば何とかなるかもしれないけど、デカイ。
otccはtccを難読化して短いけどいちお、自分のソースを自分でコンパイル出来るという代物。
最適化とかはないかもしれないけど、ちょうどいいかもしれない。
javaのコードをscalaに移植めんどいのでjava2scalaっちう名前で検索すると、
それっぽいプロジェクトが見つかる。しかし、javaをパースしてjavaを出力することしか
まだ出来ないみたいだった。しかも、GPL…。うーむ。
これをjflexとscalajavaのコードにしたらGPLじゃないって言っていいのかなぁ?
ぜんぜん別物になると思うんだけど。等と思うだけ思っている。


何をするにしても大変だ。だから迷う。迷っていては先に進まないのは分かるのだけど、悩む。
いいから、タイガーブックを読んでしっかり理解しろっていうのが答えのように思う。
SMLもよくわかってないから、SMLをインストールしてロシア語を英語に書き変えつつ、
x86対応する。で、Scalaに書き換える。ということをすればいいんじゃないかと思う。
SML動かさなくてもだいたいこういうことだろ。で、移植しているという危うさ。
多分こうだろっていう。それでも、コンパイル通ればだいたい動いたりするsealed classの
網羅性チェックはやっぱすごいと思う。
でも、大変だよ。大変って思ってないでやれよ。疲れたよパトラッシュ。
って感じ。


やりたいことはたくさんある。でも、なかなか進まない。
人生の時間は限られている。才能も限られている。


アセンブラもいじりたい。rowlのソースも読みたい。うーん。しかし、出来てない。
Scalaアセンブラを作りたい。それも出来てない。うーん。

Scalaアセンブラを作る場合は、もちろん、Compactベース(C式ベース)で作りたい。

Scalaは数点の事柄を除けば本当に良い言語だ。
C言語風シンタックスでパターンマッチを扱える。関数型言語によるコンパイラ開発のノウハウを
C言語風言語でここまで綺麗に扱える言語は他にないのではないだろうか?
D言語は好きだけど、Scalaには敵わない。haXeコンパイラ作る上では機能がいまいち足りなかった。


ということで、今年中には、なにか出来上がるか、出来あがらないかだろう。

今年を振り返れば、低レベル層の言語にこそマクロが生きる。
したがって、やっぱりC言語の層で作るのが最も良いということを強く認識できた年だった。


おかげで、コンパイラの最適化を理解するというとんでもなく大変そうなことをし始めることになった年となった。
Onionの別シンタックスをC式ベースで作成。
MinCamlScalaに移植。TinyCをScalaに移植。TinyCにC式ベースのシンタックスを作成。
タイガーブックを地道に読み進める。

というのが今年の大きな成果だったと思う。
来年はScala上でタイガーが動かせたらいいな。あと、Scalaアセンブラを作れたらなお嬉しい。
でも、仕事しながらだし半年くらいでSML上でタイガーを理解して、Scalaに移植が来年中に出来れば
良くやったって感じになるのではないかと思う。
だれか、もっと早く分かりやすい解説をしてくれたらいいなぁっと。
タイガーを十分理解したらおそらく、C式ベースのシンタックスをかぶせて見るだろう。
で、納得いかないということでようやく、再来年あたりにオリジナルなコンパイラが作り始められたら
いいほうじゃないかなぁ。っと思う。そのころには、誰かが作ったScalaアセンブラがあると嬉しいんだけど。
誰か作ってくれないかなぁ。っと。
関数型言語で作るアセンブラはまた違った楽しみがありそうなんだけど。