PostScriptの配列が構築される様子

PostScriptの配列が構築される様子が面白い。
配列の先頭の'['はスタックにマークを作るためのオペレータです。
'['が実行されるとスタックにマークオブジェクトが作られます。
PostScriptの配列が構築される様子を見てみます。

GS>[                % マークオブジェクトが作られました。
GS<1>pstack
-mark-

GS<1>1 2 3          % 次にスタックに数字を積んでみます。
GS<4>pstack
3
2
1
-mark-
GS<4>]              % ] に出会うと配列としてまとまります。
GS<1>pstack
[1 2 3]
GS<1>

[/name [123 (abc)] 7.77]のように入れ子になったもう少し複雑な配列を作ってみます。

GS>[
GS<1>pstack
-mark-

GS<1>/name
GS<2>pstack
/name
-mark-

GS<2>[
GS<3>pstack
-mark-
/name
-mark-

GS<3>123 (abc)
GS<5>pstack
(abc)
123
-mark-
/name
-mark-

GS<5>]
GS<3>pstack
[123 (abc)]
/name
-mark-

GS<3>7.77
GS<4>pstack
7.77
[123 (abc)]
/name
-mark-

GS<4>]
GS<1>pstack
[/name [123 (abc)] 7.77]
GS<1>

作成された配列の実態はスタックにはない。PostScriptのシステムが管理する記憶領域にある。dup により配列を複製しても配列の実態が複製されるのではなくPostScriptが管理する記憶領域のどこにあるかの情報を複製しているだけである。