SigScheme開発録 (6) - 0.0.0公開 -

この辺りでとりあえず公開します。肉の日に出そうと思ってたんですけど、gcのバグが取れんかった。makeファイルもまだべた書きです。SIODとの違いとしては、tagged pointerを使っている点とR5RS互換(にしようとしている)点かな。後はincremental Mark&Sweepを実装したい。
 

$ make
$ ./sscm <filename>

でそれっぽい出力が出ます。まだまだ出力がデバッグ用ですけど、勘弁して下さい。

ubuntu% cat a.scm 
(define count
  (let ((n 0))
    (lambda ()
      (set! n (+ n 1)))))

(count)
(count)

ubuntu% ./sscm a.scm 
[ gc start ]
scm[0] corrected = 33
str[0] corrected = 0
[ gc start ]
scm[0] corrected = 0
str[0] corrected = 0
str[1] corrected = 20
[ gc start ]
scm[0] corrected = 0
scm[1] corrected = 65
str[0] corrected = 0
str[1] corrected = 0
[ gc start ]
scm[0] corrected = 0
scm[1] corrected = 0
str[0] corrected = 0
str[1] corrected = 0
str[2] corrected = 11
----------------------------------------
sym = count
----------------------------------------
----------------------------------------
[ Int ]
        value = 1
----------------------------------------
----------------------------------------
[ Int ]
        value = 2
----------------------------------------

gcも一応動いているっぽいですね。文字列処理、do文case文、port回りを次に実装予定。charとかvectorとかマクロとか多値とかcontinuationはサポート出来るんだろうか...もう型が余ってないのだけれども...現在約4000行。