dup命令の説明に書いてある通り、配列変数の拡張みたいなポインタの変動がクローン元の変数に起きると、dup命令で作ったクローン変数はクローン元の変数との同期を失います。
#module m_A 要素1, 要素2 #modinit 要素1 = 0 要素2 = "" return #modfunc add_elem1 要素1(100) = 100 return #modfunc dup_elem1 var clone dup clone, 要素1 return #global #module m_B 要素3, 要素4 #modinit var a 要素3 = a 要素4 = 0 return #modfunc add_elem3 add_elem1 要素3 return #modfunc dup_elem3 var clone dup_elem1 要素3, clone return #global //Step1:m_Aというクラス(=モジュール)の実体(=モジュール変数)aを作成 newmod a, m_A //Step2:前述のaを状態(=モジュール変数名)に持つm_Bクラスの実体bを作成 newmod b, m_B, a //Step3:bの状態のaの要素1を取得(現時点では『aの要素1』の配列長は1) dup_elem3 b, clone //Step4:bを介さずにaの要素1を変更(この操作で『aの要素1』の配列長が101に) add_elem1 a //Step5:bが保有するaの要素1を取得(取得した配列長は101) dup_elem3 b, clone2 stop
しかし、拡張された変数を状態(=モジュール変数名=内部変数=パラメータ)に有するモジュール変数(=実体=インスタンス=オブジェクト)は、モジュール命令を介さずに変更されたポインタさえ、上手く追跡して最新の状態を参照しているように見えます。
多分、モジュール変数は各状態のデータを持つ変数へのポインタのみを保持する仕組みなので傘下データのポインタの変動に強く、その結果としてこのような事になるのだと思います。
で、本題なのですが、以上よりモジュール変数の傘下の状態のポインタが様々な要因から変動しても、モジュール変数からの参照であれば問題無く最新の状態を取得できる、といえるかどうか教えてください。
言い方を変えると、格納域の増加、変数の型変更、変数の再初期化、しかポインタが変動する要因は無いのでしょうか。という事です。
そして、もしあるのなら、モジュール変数が追跡できないようなポインタの変動は存在するのか。という事です。
一文当たりの文字数が随分多くなってしまいましたが、回答してくださると幸いです。