[Scala] 現在の進捗
とにもかくにも、言語を作り続けてます。
ここの所の作業は以下のようになってます。
- SML#へ移植してみる
- Scala版でopenglを動かす
- SML#バージョンでもopenglを動かす
- 型チェックを厳しく
- エラーが1行だけど、位置情報がそこそこ出るようにする
- switch文のバグ修正
- 2項演算子のemitterが長いので=>unitなlを作って、l{ asm("addq", "%rcx, %rax") }と書き換える。マクロの代わりに高階関数を使ったかんじ。
- プリプロセッサをちょっとだけ手を付ける。
- mqoのデータをScalaのパーサコンビネータで只の関数呼び出しの連続にコンバートする
- その関数を呼び出せばモデルが表示出来る。
- GLUTのゲームモードを使ってみたいので文字列リテラルを作る。
- ドキュメントを現状に合わせて書き直す。
実際にOpenGLが動くとモチベーション上がりますね!
うお、うごかねぇ。うお、使いにくい、っていうユーザー視点が得られました。
おかげで様々な改良が出来ました。
そして、やっぱり、クラス欲しいなって思って来た所です。
ここまで来る前は、クラスなんて無理無理って思ってたんですけど、
隠蔽化とか考えなければ結構行けるんじゃないかと思うんです。
ということで、次にやる事は以下のような感じです。
TODO:
- オブジェクト指向に取りかかる。
- Cでvtableを作ってみる。
- 無名構造体のstaticなリテラルを作る。
- class構文から変換するプログラムを作ってなんちゃってclassを作る。
- Cで継承を作ってみる。
- 継承対応の変換プログラムを作る。
- パターンマッチング構文を作るために、case classを作る。
- case classに対するパターンマッチを導入する。
- tupleはcase classの一種でしかなく、case class(_1:int,_2:int)のシンタックスシュガーとする。
- importかincludeかとにかく、他のプログラムの読み込みを出来るようにする
- Cのヘッダの読み込みを出来るようにする。
- 名前を考える。
既知のバグ:
- switchのdefaultでbreakしないとなんか死ぬ
- たぶん、構造体で自己参照すると無限ループになるはず
- 演算子順位法の優先順位の調整が甘いので、たぶんいろいろ、駄目だろう。
- たぶん、足りない演算子がある。
- 論理演算が遅延しないし、ちゃんと動かない可能性が高い。<テスト作れよって話。
ま、この辺のバグ潰しは、つまんないので地道に1個ずつ潰す。
バグはおいておいて、オブジェクト指向と、パターンマッチの導入をやっつけてしまい、
構文の調整を先にやるべきなのです。
とりあえず、ちゃんと動くオブジェクト指向な言語を作ってしまうのが次の目標で、
その次がパターンマッチと。あと、末尾再帰構文かな。