rowlの開発を始めて1年が経ちました
1年前の今日、アセンブリで数十行のechoプログラムを作成しました。
それを徐々に育てて、今日ではソースコード行数がトータルで1万5千行を超えていました。
1年でたったこれだけかという気がしなくもないですが、趣味プログラムにしてはそれなりに進んだのかなと思います。
当初の計画通りアセンブリ言語以外の既存言語は実装に使用していません。
これまでの成果をまとめます。
- コンパイラの実装は第2世代まで終了し、現在第3世代の実装を開始しています。
- スタックマシン型のVMが動作しています。
- コピーGC(Mostly Copying-GC)が動作しています。
- (バイトコードの)JITアセンブラが動作しています。
- バイトコードのリンカを作成しました。分割コンパイルが可能です。
- バイトコードのディスアセンブラを作成しました。
- 第3世代rowl
来年の目標
高めに設定しておいて50%くらい達成できればよいかなぁと。
- 最適化の実装に取り組む
- コンパイラ最適化理論が私の専門なので力を入れたい所。
- 第3世代の実装を終了し、第4世代の実装を始める。レジスタマシン型VMにし、ネイティブJITで動かす。
- REPLを作る。
- メタプログラミング機能に取り組む
- 力を入れたい部分です。σ式を採用した目的は構文木を柔軟に取り扱い為。
- 現状では実行時に構文を定義する所までできます。
- アセンブラを自作する
- ビルドシステムを自作する
- 現在はmakeを使っているけど、せっかくなのでこれも自作する。
- 標準ライブラリの実装を開始する
- メタプログラミングライブラリの実装を開始する
- 実行時構文定義・実行時コード生成を使った面白いライブラリの開発に取り組みたいと思っている。今は以下の物に興味がある。
- lex/yacc。外部ツールとしてではなく、"import lex"といった感じでプログラム中でimportして使えるような物を作りたい。また、これは第4世代rowlの実装にも使いたい。
- ページ記述言語。とりあえずはPostScriptを生成できるようにしてみたい。構文木やフローグラフの図示などをしたい。あと、Project Eulerとかの説明で使う絵とかいろいろ使えれば面白い。
- グラフ記述言語。Graphvizのような物。
- コンピュータ代数。これは純粋に興味があるので作ってみたい。import algebraとか書いてREPLが数式処理システムに化けたら素敵ではないかという妄想。
- C言語等の他言語で書かれたコードの呼び出し。
- やっぱり既存資源の活用は大事だと思う。
- ただし、当初のポリシーを守るためrowl本体・標準ライブラリは他言語に依存しないものにする。
- rowl紹介用のWebページを作る。あとマニュアル。
- 勉強会かなんかでrowlを紹介する。せっかくなのでプレゼンテーションツールをrowlで実装する。