Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2009-10-11

祝SBCL 10周年と受け継がれるコード

| 01:45 | 祝SBCL 10周年と受け継がれるコード - わだばLisperになる を含むブックマーク はてなブックマーク - 祝SBCL 10周年と受け継がれるコード - わだばLisperになる

SBCLのプロジェクトが開始されてから十周年だそうで、記念にワークショップが開かれるようです。

SBCLはCMUCLが元になっていることは良く知られていると思いますが、CMUCLも元を辿るとSpice Lispを起源としています。

そのSpice Lispは、元々1980年位にCMUのSpiceプロジェクトで開発されていたMacLISP系のLISPだったようですが、丁度、同じ頃Common Lispも策定が開始していて、CLtL1が出た(1984年3月)頃には、

マニュアルの中で

Spice Lisp is the implemantaion of the Common Lisp
for microcodable personal machine running CMU's
Spice computing environment.

と説明されていますので、いつの間にやらCLになっていたようです。

現在、Spice Lispのソースコードはネット上には見当たらないのですが、Spice Lispから枝分かれした、PDP-20上で動くRutgers Common Lispのソースは公開されています。

これを眺めていると気付くと思うのですが、現在のSBCLにも使われているコードが結構あります。

例えば、リスト系の関数定義、list.lispを眺めてみると(同じファイル名)

;; SBCL
(defun revappend (x y)
  #!+sb-doc
  "Return (append (reverse x) y)."
  (do ((top x (cdr top))
       (result y (cons (car top) result)))
      ((endp top) result)))

;; Spice Lisp (TOPS-20 Common Lisp)
(defun revappend (x y)
  "Returns (append (reverse x) y)"
  (do ((top x (cdr top))
       (result y (cons (car top) result)))
      ((atom top) result)))

のように、殆ど同じ定義だったりします。(リスト系の関数ということもあるのでしょうが…)

というわけで、SBCLは10周年ですが、Common Lispの歴史と同じか、それより古いコードが元になっていたりもするようです。

ちなみに、LispマシンがあったMITではLOOPマクロが好んで使われていたようなのですが、CMUではLOOPは使われていなかったらしく、このlist.lispでも嫌になる程DOが多用されています。

考えつく限りの方法でDOが使い倒されているので、Spice Lisp由来のコードはDO好きにはまさにバイブル的存在といえましょう…。