iriya_ufo’s blog

Curiosity was simply the first derivative of knowledge.

History of T 第10,11,12,13,14,15パラグラフ

久しぶりに History of T の翻訳です。
(さっさと終わらせろよ、といった感じですね)

第10パラグラフ
(例として、MITの他のLisp実装に Zetalisp というのがある。
それは動的スコープを保持していたけれど、コンパイラにセマンティックスを
変更させるのを容認しており、その結果Schemeに対して返答することができた。
かなり不釣合いなspecial formとして静的クロージャーを混合させるっていうことを
やってたんだけどね。)


第11パラグラフ
(エディンバーグでMLのような体系で仕事をしていたヨーロッパ人は、おそらく
80年代初期のころのアメリカが経験していた、スラッシングやスコープに関する規律とか
ひどいくらいに増加する戦略的実装とかに気づいていたことだろう。
残念だけどそれはどうしようもないね。)


第12パラグラフ
Roger Schankに加えて、Tを開発するためにJonathanを雇った人物はもう一人いた。
Josh FisherがYaleで1983年から継続してきた商業VLIWアーキテクチャー開発会社である
Multiflowの社長である、John O'Donnellである。
私は本当のところはよく知らないんだが、Alan Perlisがその決定に深く関っていたと思う。
委員会はJonathanに、プロダクション品質を持つScheme実装を構築させることにチャレンジさせた。


第13パラグラフ
Jonathanはすばらしい実装の技術を持ってNILプロジェクトからYaleに戻ってきた。
基本データの表現は新時代のマシンアーキテクチャーにも対応するように
注意深く練られていた。データの下位ビットの中でタグビットを使用していた。
それはつまり例えば、fixnumタグの"000"を作ったらそれを加減させて新たなfixnumとして
タグハッキングのオーバーヘッドなしに単純な命令セットとして組み込むことができた。
また乗算は単純に前の方へシフトすることで、除算は後ろへシフトすることで実現できた。
これはMaclispが要求していたfixnumsのボックス化をはるかに越える改善であった。
またVaxがバイトアクセス可能であったために、単純にアドレッシングモードで決まった
オフセットを調整することによってconsセルのデータのタグの型をはずすことができた。
つまり、consセルをメモリー中の2つのワードの並び(car及びcdr)のアドレスでもって
表現することが可能となった。
2ワード並びのメモリーブロックが意味するところは、下位3ビットのアドレスは
常に0であるということだ。でもべつにそれは必要じゃなかった。だからアドレス中の
下位3ビットは常にタグ型として扱われていた。もし私たちが"010"というもので
タグ型を扱っていたらどうなっただろうね。単純な命令で r7 レジスタ中のペアのcdrをとって
r8 をロードして r7[4-2] 4(bytes)でもって1ワードをペアに取り出して -2 をタイプ型として
扱っただろうね。ややこしいよね。つまり"000"だとタグ型を0で実行時に覆い隠すことが
できるっていうナイスな実装があったんだよ。
そのクロージャーの表現方法とスタックフレームもかなり賢かったってわけさ。


第14パラグラフ
JonathanはNILプロジェクトの完全なる失敗で燃えつきてしまっていた。
だから彼は早すぎる最適化を避けることについてかなり注意するようになっていた。
まず簡単にさっと実装したプロトタイプを書きこんでとりあえず動かしてみたのだ。
(私は、Maclispで彼がそうやって実装したと思っている。彼がそれを"安上がりな物"と
呼んでいたからね)
その後、T における実装の全開発が終わった。T 2 も T 1 とともに実装された。


第15パラグラフ
T 2 の実装の出来はすばらしかった。上に書いた小技とか全部詰め込まれていたからね。
それは Vaxes や 68000 とかでも動作した。そしてそれはもうおもちゃとかじゃなくて
ちゃんと本物の顧客を扱う、リアル世界でも通用するシステムとなっていたんだ。


ミニあとがき
翻訳って気分がノッテルときにさっさと書いてしまう方がいいものができる、と思いました。
律義にきちんと訳すといいものができるってわけじゃないね。
そう、プロトタイプはちゃちゃっとあっさりと作ってしまう方がいいんだよ。