2010-01-01から1ヶ月間の記事一覧

dlopen()の仕組み

rowl内でdlopen()相当の事を行う必要が出てきた。選択肢は2通り FFIを実装してglibcのdlopen()を呼ぶ。 dlopen()の仕組みを調べて,自分で書く FFIはいずれ実装しなきゃならないんだけど、ブートストラップで作るという目的上rowl自身の実装は後者で行きたい…

型推論の実装

現在Hindley-Milnerの型システムを実装している。 でも、rowl0の貧弱な機能だとなかなか実装が大変。変数がすべてx0,x1,...,p0,p1,...なのが一番つらい。 最低限の実装でさっさとrowl1を完成させたほうが良いかも。

rowl0: コード生成の実装

通常のコンパイラは大体こんな感じになっているが、 パース(構文木生成) → 型チェック等 → 中間言語化 → 最適化 → 低レベル中間言語化 → スケジューリング&レジスタ割り当て → コード生成rowl0はアセンブリ実装の為、簡略化して パース(コード生成)となって…

rowlのコメント構文

コメント構文を # ...から (% ... %)というものに変更した。一行コメントはないが入れ子可にすればあまり困らないはず。OCamlと同じく。実を言うと、rowlのコメントは将来的に文字列リテラルになる予定である。 つまり x = (% foo bar baz %)とか書けて、こ…

vimのsyntax・indentファイル追加

現状アセンブリでのrowl0実装は終了して、rowlでrowl自身のコンパイラを作る段階に入っている。 今日はautoindentがないのがつらいのでvim用のindent定義ファイルとついでにsyntax定義ファイルを作った。 またヒープメモリを叩く関数も作った。これによってv…

メモ: システムコールについて

システムコール番号 : %eax 引数 : %ebx %ecx %edx %esi %edi %ebp の順 mmap()はmmap2のラッパになっている。アセンブリではmmap2を呼ばないといけない。 エラーの場合の戻り値は-128〜-1。

rowl0:字句解析の実装

字句解析には状態遷移表に基づく方法(lexはこれ)と状態遷移図に基づく方法があります。 rowl0は後者を手作業で実装しました。1. トークンの定義 (token.s) 解析対象のトークンにIDを振ります。単一文字のトークンはそのascii番号をトークンIDとします。 した…

名前変更しました

"growl"という名前で言語作り始めましたが、Mac OS Xのアプリに同名の物があったのでいろいろ考えた末gを取って"rowl"に変えました。

rowl0 実装完了

ブートストラッピングの第1段階rowl0の実装が終わりました。 rowlのサブセット言語 GNU assemblerで書いてある こんな感じでrowlコードをアセンブリ言語にコンパイルできます。 % cat hoge.rl fib: (p0) { if (p0 hoge.rl > hoge.as % as hoge.as -o hoge.o…

ブログ開設しました。

2chスレ「ブートストラッピングでコンパイラを作ろう」で細々と始めたネタですが、結構楽しかったので真剣に取り組もうと思いブログ開設しました。 このブログのテーマ このブログは"rowl"という自作言語の開発日記です。 特徴は以下の様なブートストラッピ…