読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

AmeLisp開発日誌 2

リポジトリ

前回とその後の近況のあと、しばらく他のことやってた。

Little Smalltalkのソース読んでCの書き方が少しわかったので、4/8ぐらいにCでCopying GC周りを書いたけど、オブジェクトの型を持つタグ付きポインタを触るコードが面倒になったので放置。

その後4/18,19とちょっとアセンブリ版 v2を触ってたんだけど、「あっこれもう嫌だ」とビビっときたので、放置してたC版のソースを元に4/20,21,22と一気にVMを作った。

面倒だし利点もよくわからなくなったので、オブジェクトの型はポインタに持たせないことにして、FIXNUM/即値/ポインタのみの区別にした。

それで23,24(今日)とSchemeでAmeLisp -> SECDマシンコードのコンパイラを書いて、更にそれをAmeLispに移植してREPLが動くようになった。

f:id:phaendal:20160424060623p:plain

Cについて

VMのCコードは3000行ちょいになった。今まで書いたなかで一番長い。ポインタをいじり回さない限りは結構楽しいなと思う。

が、マクロ周りはやっぱS式で書きたい。現状、VMのopcode追加するときに変更すべき箇所多すぎて不便だ。

S式→CのトランスレータをAmeLispに乗せてしまうのが一番いいかな。AmeLisp上にSECDマシンや、v3以降の別VMのシミュレータを書くのが目的なので、opcodeリストなども一箇所にまとめられて便利そう。

Lispについて

S式とLexical Closureが本当に手に馴染んでいる。とりあえずそれらを振り回せばどうにかできる、という自己効力感ももたらしてくれる。

あんまりそれら自体にはワクワクしなくなったんだけど、それらを使って作れそうなものにワクワクし始めているので、まあいいかな。

今後やりたいこと

  • builtin.ameをもうちょっと整理する
  • 文字列、配列、バイト配列、ファイル入出力などのプリミティブ命令を付け加えていく
  • 前後してCトランスレータを書く
  • エディタを書く
  • Windowsに移植する
  • いい加減3impとか読んで、次のバージョンの選択肢を広げておく
広告を非表示にする