Rekursivは、1980年代半ばにHiFi機器メーカーLinn Productsの一部門でDavid M. Harlandによって設計されたコンピュータプロセッサです。オブジェクト指向の概念をハードウェアに直接実装することを目的とした数少ないコンピュータアーキテクチャの一つであり、高級言語を用いたコンピュータアーキテクチャの一種でした。Rekursivは、ビット、ニブル、バイト、ワードではなく、オブジェクトを直接操作しました。仮想メモリは永続的なオブジェクトストアとして使用され、プロセッサの命令セットは再帰をサポートしていたという点で異例でした(これがRekursivの名前の由来です)。
プロジェクトが最初の実装を完了した頃には、Sun SPARCやIntel 486などの新しいプロセッサがそのパフォーマンスを上回っていたため、1988 年に開発は中止されました。
Rekursivプロジェクトは、スコットランドのグラスゴーにあるリンの工場の組立ライン制御を改善する取り組みとして始まりました。当時、ラインはVAX-11システム群を用いて自動化されていましたが、動作が遅く、リンの創業者であるアイヴァー・ティーフェンブルンが望むような柔軟性を備えたプログラミングは非常に困難でした。1980年代初頭までに、ティーフェンブルンはオブジェクト指向プログラミングがこれらの問題の解決策になると確信していました。[ 1 ]
1981年、ティーフェンブルンは数人のプログラマーを雇い、 ALGOLから一部の構文を借用したVAXシステム向けSmalltalk言語のバージョンを開発させた。LINGOとして知られるこのシステムはVAXプラットフォーム上では動作したが、非常に低速であった。ティーフェンブルンは、パフォーマンス問題の解決策はVAX上の言語を改良することではなく、オブジェクトプログラムの実行に特化した全く新しいCPUを開発することだと結論付けた。[ 1 ]
1984年、ティーフェンブルンはストラスクライド大学のデイビッド・ハーランド教授の指揮の下、全額出資子会社のリン・スマート・コンピューティングを設立し、Rekursivプロジェクトが誕生した。システムの最初のバージョンは1988年に登場した。[ 1 ] 4つのチップと80MBのRAMを搭載した、 Hadesと呼ばれる少数のプロトタイプVMEバスボードが製造された。これらはSun-3ワークステーションなどのホストシステムにインストールすることを目的としていた。Rekursivは完全には開発されず、商業的にも成功しなかったが、いくつかのHadesボードは英国の学術研究プロジェクトで使用された。Rekursivコンピュータの最後の既知のコピーは、グラスゴーのフォース・アンド・クライド運河の底に沈んだ。[ 2 ]
ストラスクライド大学の研究者の投稿によると、Rekursivシステムの開発中に、当時登場したSun SPARCシステム向けにLINGO言語の新バージョンが作成された。このシステムはRekursivのハードウェアの2倍の速度で動作したため、Rekursivの開発は無駄になったという。 [ 3 ]その後しばらくして、同社は閉鎖された。[ a ]
Rekursivプラットフォームの基本的なコンセプトは、ハードウェア支援による永続オブジェクトストアを提供することでした。オペレーティングシステムやユーザープログラムの介入なしに、メモリ状態を継続的に、かつ目に見えない形でディスクに書き込むことができます。あるレビュアーはこれを「永続オブジェクトを作成および管理するためのオブジェクトデータベースエンジン」と表現しました。[ 5 ]
このようなシステムを複雑なプログラムを実行しながらも適切なパフォーマンスで動作させるため、Rekursivはプログラマが使用する言語専用の命令セットアーキテクチャ(ISA)を独自に作成できるように設計されました。マイクロコード命令セットはスタティックRAMに格納されていました。[ 6 ]デフォルトのISAは存在しませんでしたが、LinnはC言語のプログラムを実行するためのISAを提供していました。[ 7 ]
システムは、その上で実行されるプログラムにメモリアドレスに相当するものを提供しなかった。代わりに、オブジェクトには 40 ビットの識別子が与えられ、Objekt チップはそれをハッシュ化し、物理メモリへのポインタとして使用した。[ 8 ] Objekt は、オブジェクトメモリをハードディスクにマッピングして永続的に保存する処理も行い、仮想メモリシステムを実装した。ガベージコレクションを処理するために、Objekt は提供されたダイナミック RAM (メインメモリ) を 2 つに分割し、一方を新しいオブジェクトの作成に使用し、もう一方を未使用のままにした。新しいオブジェクトが、使用済み部分の空き容量よりも多くのメモリを必要とする場合、Objekt はシステムを一時停止し、有効なポインタを持つオブジェクトを未使用のメモリの半分にコピーし、その後、以前未使用だった半分をアクティブな部分に切り替えた。メモリが極端に制限されている場合、Objekt はまずいくつかのオブジェクトをディスクにスプールしようとし、十分なスペースを解放できない場合は、メモリの両方の半分を使用した。[ 9 ]
オブジェクトは複数の値を持つ複合構造であり、ほとんどのシステムでは、値を保持するメモリ位置への一連のポインタとして実装されています。Rekursivでは、これらのアドレスはObjektによって割り当てられたメモリ領域を指す40ビットのオブジェクトIDに置き換えられます。40ビットポインタの最上位ビット(MSB)は、値がオブジェクト識別子の場合は1に、型指定のないバイナリ値の場合は0に設定されます。後者は、デジタル画像のデータのような大きなフォーマットされていないデータを格納するために使用され、オブジェクト内でのみ使用できました。[ 9 ]
フルオブジェクトの場合、さらに簡略化され、短いフィールドをポインタ自体に値として格納することが可能でした。これは、2番目のMSBも0に設定することで示されました。この場合、後続の5ビットは、プログラムのISAによって定義された型を示し、これは「整数」または「文字列フラグメント」のいずれかです。この「コンパクトオブジェクト」の実際の値は、ポインタの下位32ビットに格納されました。これにより、このような単純な値は、物理的な位置へのポインタをたどることなく、プロセッサに即座に提示することができ、メモリを節約し、パフォーマンスを向上させました。[ 9 ] [ b ]
40ビットのポインタの上位2ビットはステータスフラグに使用されていたため、Objektは合計238個のオブジェクトしか識別できませんでした。オブジェクトは常にガベージコレクションの対象になっていたため、これらの値の多くは存在しないオブジェクトを指している可能性があり、システムの実用上は識別子が不足する可能性があります。この問題に対処するため、システムイメージ全体が定期的にディスクに書き込まれ、その際にすべてのポインタの番号が連続するように再設定されていました。[ 9 ]
プロセッサの命令セットは、「コントロールストア」と呼ばれる静的RAMの専用領域に格納されていました。この領域は専用の16ビットバスを介してアクセスされ、128ビットのワードが16,384ワード構成となっていました。SRAMの独立した「コントロールストアマップ」セクションには、マイクロコード化されたルーチンへのエントリポイントを示す番号付きテーブルが保持されており、10ビットのオペコードを2,048個のエンティティのいずれかにマッピングします。従来のプロセッサでは、このマップは通常、オペコードデコーダ内のハードワイヤードロジックで実装されていました。[ 10 ]
オペコードはオブジェクトの一部となり、Objektを使用する他のデータと同様に保存できます。パフォーマンス上の理由から、NAM(およびNAMARG)と呼ばれる独立したメモリバンクが、10ビットのオペコードと30ビットの引数を格納する524,288個の40ビットワードを確保していました。NAMは独自のバスを介してプロセッサに直接接続されるため、現代のアーキテクチャにおけるキャッシュのような動作をします。[ 10 ]
実際には、プログラミング言語の開発者はまず、最大2,048個の命令を持つ言語の基礎となる、目指すべきアセンブラ言語のアウトラインを作成します。次に、C言語のstdlibにあるようなよく使われるルーチンを、そのアセンブラ言語でコーディングし、NAMに書き込みます。シミュレーションによると、このスタイルで記述されたLispルーチンは、 Symbolics社のLispマシンよりも約20倍高速に動作することが示されました。同社はSmalltalkとProlog向けにも同様のマイクロコードシステムを開発しており、後者はPrologの複雑なユニフィケーション演算を単一のオペコードに簡素化しました。[ 10 ]
Rekursivプロセッサは、 Numerik(32ビットALU)、Logik(命令シーケンサ)、Objekt(オブジェクト指向メモリ管理ユニット)、Klock (プロセッサクロックおよびサポートロジック)という4つのゲートアレイチップで構成されていました。初期バージョンは10MHzで動作していました。[ 10 ]
Linn社はRekursivチップセットをベンダーに販売するとともに、それを搭載した自社ワークステーションも開発する予定でした。当初の唯一の製品は「HADES」(ダイナミック・エキスパート・システム用ハードウェア・アクセラレータ)で、 Sun-3またはSun-4ワークステーションに差し込めるVMEバスカードで構成されていました。HADESには、4つのメインチップ、2MBの45ナノ秒(22MHz)SRAM、5MBの100ナノ秒(10MHz)DRAMが含まれていました。ディスクアクセスは、基盤となるSunシステム上で動作するプログラムによって処理されていたため、パフォーマンスが著しく低下していました。[ 10 ]