バロース B5000
本来、B5000のOSであるMCPはALGOLを拡張したESPOL(Executive Systems Programming Oriented Language)という言語で記述されていた。これは70年代後半にNEWPという言語に置き換えられた。NEWPの名称の由来は不明だが、一説にはNo Executive Washroom Privilegesではないかといわれている。NEWPもALGOLの拡張だが、ESPOLよりもセキュリティを強化している。危険のある構文要素はそれを使用するブロックに明示的に使用することを示さない限り使うことができない。これによって複数レベルの保護機構を提供する。
NEWPでは、危険な構文要素を持つプログラムは実行できない。システムのセキュリティ管理者がそのようなプログラムを実行可能に設定することができるが、他のユーザーは(どれだけ特権レベルが高くても)その設定を自分で行うことはできない。
A., Dent, Ben A. "Burroughs B6500/B7500 Stack Mechanism", SJCC (1968) pp. 245–251.
McKeeman, William M. "Language Directed Computer Design", Fall Joint Computer Conference, (1967) pp. 413–417.
Organick, Elliot I. "Computer System Organization The B5700/B6700 series", Academic Press (1973).
Waychoff, Richard, "Stories of the B5000 and People Who Were There", September 27, 1979.
Allweiss, Jack. "The Burroughs B5900 and E-Mode A bridge to 21st Century Computing", Revised 2010.
アクセスしたい変数が語彙レベル2のベースから6ワードの位置にあるとする。このアドレスは(2, 6)で表される。Dレジスタがない場合、D[5]フレームの最初にある制御ワードを見なければならない。それ(制御ワード)はひとつ前のフレームすなわちD[4]環境を含むフレームを指している。このようにフレームを逆に辿っていって目的の語彙レベルのフレームに到達する。これはプロシージャから制御を戻すときの経路とは異なることに注意が必要である。アーキテクチャ上データスタックもコールスタックも同じ構造になっているが、制御ワードによってそれらを見分けている。
これは変数へのアクセス方法としては非常に非効率的である。Dレジスタを使用すると、D[2]レジスタは語彙レベル2の環境のベースを指している。したがってある変数のアドレスを得るには、その変数を含む語彙レベルに対応するDレジスタの中身(ベースアドレス)にオフセットを加算すればよい。フレームのリンクを辿るLLLUという命令もあるが、Dレジスタを使用した方が高速である。Dレジスタを使用すれば外側のグローバルな環境にあるものにもローカル変数と同様にアクセスすることができる。
コルーチンやプロセスとして p を呼び出した場合、D[3]環境は別のD[3]をベースとするスタックとなる。この場合、別のプロセスがD[2]環境にアクセスし続けることが暗示されている。
DASDL (Data Access and Structure Definition Language) でデータベースを定義した後、そのスキーマをプリプロセッサで翻訳し、DMALGOLのアクセスルーチンが生成され、それをコンパイルする。したがって、他のDBMS実装とは異なり、実行時のデータベース固有の if/then/else の判断が不要となる。1970年代、この最適化はメモリ使用量と実行時間の削減に大いに威力を発揮した。その後、低レベルなメモリと速度のチューニングがあまり重要ではなくなってきたことと、プリプロセッシングを廃することでコードが単純化されより重要な最適化が可能になることから、このような技法は徐々に廃れた。
後にコンパイラのコードサイズがあまり問題にならなくなってくると、プリプロセッシングの構文要素の多くがユーザーレベルのALGOLの一部に編入された。DMALGOLに残されたのは、ユーザーレベルでは安全でないと考えられる要素と、データベース記述ファイルの直接処理機能だけとなった。