>クローンが有効なのはクローン元の変数に代入が行なわれるまでの間だという点に注意してください。
とありますが、以下を書いて実行したところ、代入が行われてもクローンが有効なようです。
また、dup命令の説明には
a = 0 dup b,a mes "bを加算してaを表示" repeat 10 mes a b ++ loop mes "aを加算してbを表示" repeat 10 mes b a ++ loop
>クローン元の型が変更されたり、配列の拡張、または文字列バッファの拡張が行なわれた場合には、クローンとしての動作は行なわれなくなります。
とも書かれており、ここには、値の代入とは書かれていません。
ポインタやアドレスなどはよくわかりませんが、
dup命令は元の変数のアドレスと同じアドレスを持った変数を作る命令? とのことなので、
配列のサイズを増減したり、確保したバッファ以上の文字列を代入することによって、
元のアドレスの位置や保持していた配列の長さが変わってしまった場合、クローンとしての機能を失うということでしょうか。
上のスクリプトの場合は、変数aがint型で定義されており、始めから4バイト(だっけ?)のメモリアドレスが確保されているので、
dup命令によって作られたクローン変数bは、値の変更によってクローンとしての働きがなくなるということはないということでしょうか。
今まで、
>クローンが有効なのはクローン元の変数に代入が行なわれるまでの間だという点に注意してください。
という表記によって使うのをためらっていたdup命令ですが、
値の変更をしても使えるのならば、かなり便利な命令だと思います。(モジュール内から別モジュールへの配列の高速な参照などに使えるかと)
dup命令についてこのような認識で良いのかどうか。
詳しい方がいらしたら教えていただけないでしょうか。