普通のintやstr変数であれば問題は無いようですが、モジュール型変数だとその定義元モジュールが保存されている状態と違うとnullになります。
考えられる状況としては、古いバージョンで保存されている変数をモジュールの内容が変わった新しいバージョンでロードするときなどです。
existとvarsizeでサイズ比較して整合性チェックできるかと思ったのですが、変数サイズと保存されたファイルサイズでの関係性も分からず難しい状況です。
自分でmemcpyやbsave/bload等使って独自のフォーマットにする方がいいのでしょうか。
サンプル
// 初回:#if 1 にする // 初回実行後:#if 0 にする #if 1 // ************** // 仮想的に古いコード // ************** #module test_struct \ hoge, piyo #modinit hoge = 100 piyo = "HSP3" return #global newmod test_var, test_struct // 古いコードで変数を保存する vsave "var.dat" stop #else // ************** // 仮想的に新しいコード // ************** #module test_struct \ hoge, piyo, fuga #modinit hoge = 100 piyo = "HSP3" fuga = 0.5 return #global newmod test_var, test_struct // 新しいコードで古いコードでの変数を呼び出す vload "var.dat" // ここで test_var が null になる。 stop #endif