es オペレーティングシステム

id:ranekovさんのhttp://d.hatena.ne.jp/ranekov/20061030から。
http://nes.sourceforge.jp/index.html

OSを作っている場合には、Squeakが動くかどうかというのは良いベンチマークになりますね。File IOやディスプレイやポインティングデバイスなどのドライバを書くたびに、ほんのちょっとしたsupport codeを書くだけで試験ができるようになりますから。

OOPSLA話

AlexやIanやAlanも新オフィスに揃って、OOPSLAの話。AlexはWadlerに個人的に質問しにいったのだが、けんもほろろにあしらわれたといっていたな。Class Expanderという今回テクニカルペーパーとして発表したやつを使うとWadlerが講演中に述べた問題の幾つかは解けると言いに行ったそうだが。Wadlerは学生のときにXerox PARCでインターンをしていたことがあるそうで、Alanはそのころから彼のことを知っているそうである。いろいろあるな。

Ianのやつ

Ianのやつを勉強中。Lispの世界とObjectの世界を行ったり来たりできるものの、数字も普通の数とタグつきのオブジェクトの世界で別だし、メッセージとして送るか式として評価するかによってシンタックスを変えなくてはいけないので、なかなか混乱します。mapを書くだけでも死ぬほど時間がかかって、ようやく

(define map
  (lambda (func list)
     (let ((s [list size])
           (ret [Array new: [list size]])
	   (idx '0)
	   (tmp 0))
	(while [idx < s]
	    (set tmp (func [list at: idx]))
	    [ret at: idx put: tmp]
	    (set idx [idx + '1]))
	ret)))

(define n '(1 2 3))
(define n (map (lambda (x) ['3 * x]) n))
[StdOut nextPutAll: [n printString]]

というものになりました。listは実はExpression型のオブジェクトで、Arrayのように振舞います。コンパイラの中間表現として使われているものです。