Posted 2015-05-03 09:38:21 GMT

Common Lispの仕様が練られていた1980年代初頭、Common Lispのように実用指向の処理系を作る動きがありました。その名はT。ベースとなるLispはSchemeでした。

製作者の一人であるJonathan Rees氏が、NILプロジェクトに参加していたのでNILの反対のTになったみたいですが、色々と興味深い処理系です。

大枠としては、RRRSからR3RSあたりのSchemeにモジュールの機能と、手続きを主体としたオブジェクト指向的な機能が特徴です。

このTですが、バージョン 3.1がCMUのAIリポジトリ等からダウンロードできるのですが、如何せんリリースされたのが、1990年辺りなので、動かすには当時の環境が必要になります。

入手できるT 3.1のバイナリの対応プラットフォームですが、

Dec 3100(PMAX)

SunOS 4(Sparc)

SunOS 3(m68k)

Encore

Hp

Apollo/Domain

Macintosh A/UX

Vax Ultrix

というもので、絶滅してしまったプラットフォームが殆どです。

このうち、Sparc版は、SparcのSolaris 10でそのまま動くことを確認しました。

また、m68k SunOS版は、SunOS 4.1.1 で動くことを確認。とはいえ、これは環境を用意するのが面倒です。

そんなこんなでしたが、最近Vax Ultrixがセットアップできることを知ったので、T 3.1を動かすためにSIMH上にUltrix 4.0環境を作ってみることにしました。

Ultrix 4.0 環境をSIMH上に構築

環境構築ですが、以外にも今時のOSのセットアップ位簡単でした。

本当にこの記事の通りに進めば完了です。

※テープのファイルは色々なところでミラーされているので適宜取得します。

等々

自分が利用しているsimh vaxの起動スクリプトはこんな感じです。

sudo setcap cap_net_raw=ep /usr/bin/vax /usr/bin/vax simhの設定ファイル

Tのプログラムをultrix に取り込む

さてUltrixは準備できましたが、Tのプログラムをどうやって取り込むかです。

一応ネットワークは使えて、外部からrshなども可能ですが、rcpすると処理系が落ちるという事態に遭遇。

この辺りは深追いできそうもないので、テープからの取り込みを試します。

tarのファイルは、そのままでは読めないので、こちらのブログで公開されている、 tapewrite というツールをありがたく使わせて頂きます。

$ cat vaxt.tar |./tapewrite >dat.tap

こんな感じで、 dat.tap を作成し、simhの設定ファイルで、

att tq0 dat.tap

としてアタッチします。

あとは、Ultrix上から展開するのみです。

$ tar xv ... ... ...

rsh できるようになっていれば、外のEmacsから run-scheme で実行できます。

( run-scheme "rsh ultrixのアドレス ~/bin/t" )

T 3.1 (5) VAX11/UNIX Copyright (C) 1988 Yale University T Top level >

define ( fib n ) if ( < n 2 ) n + ( fib ( -1+ n ) ) - n 2 fib #{Procedure 1 FIB} (compile 'fib) #{Procedure 1 FIB} (cl 'fib) (VARIABLES FREE (FIB) EARLY-BOUND () DEFINED () LSET () SET () ERROR () INTEGRATED () LOCAL () UNREFERENCED ()) (AS (IB 2) (SDF 1) (ALIGN 1) (MARK 1) (CLEAN 0) (DIRTY 0) (BYTES 28)) 0 D4: .template A D5: movl 2(p),a1 Procedure ^P_1 (lambda (K_0) ...) Return from procedure (K_0 0 FIB) E movl 2(a1),a1 12 mnegl s^$2,s3 15 movl (sp),tp 18 jmp (tp) label -> hash: ()

( time ( fib 20 ) ) virtual time = 0.96 seconds 6765

まとめ

手軽にTを動かしてみたいという場合でホストマシンを所有していない場合は、今回のUltrixを用意してしまう方法が一番手っ取り早いかなと思います。

興味があればお試しあれかし。

■

