> でアクセス出来ている様に見えるのは
> 私の理解が足りていないのでしょうか。。
なんと、アクセスできていますね…。これ知らなかった。
同様の方法でラベルにもアクセスできたんですね。マニュアルの記載漏れまたは、ごめんなさい私のマニュアル見落としです。
> この書式の存在は、忘れてしまったほうがいいでしょう。
@を使ったモジュール内へのアクセス方法を指しています。
モジュール機能は、スクリプトを整理するためにも積極的な活用をおすすめします。
ただし@を使って変数やラベルにアクセスしていると、修正が困難な思わぬ不具合に遭遇する可能性があります。モジュールの管理も複雑化します。
モジュールの外と内とのやり取りは、必ず#deffuncや#defcfuncを使うことをおすすめします。
> 消さない場合は実行できるので、実際はmodule内のラベルにa@testとする事でアクセスは出来るのものの
> 最適化されてしまっているが為にアクセス出来ない、という事なのでしょうか。
「;」だけ消す事によって意図的に「*a」の行でエラーを発生させて、ここで動作を強制的に停止させています。
このようにすると、エラーメッセージに「*a」がモジュール外からどう見えているかを表示させることが出来ます。
エラーメッセージの最後の行にエラー行が表示されています。
--> *a@test error@test
スクリプトでは「*a error」ですが、ラベル「*a」と変数「error」の直後にそれぞれ「@test」がくっついています。
つまりモジュールの外からは、モジュール内のラベル「*a」は「*a@test」、変数「error」は「error@test」として見えているということです。
意図的にエラーを発生させて動作を止めているのは、「*a」はモジュール外からは「*a@test」に見えているということを確認することが目的です。
最適化の話はここでは関係ありません。
> 以前から最適化に苦しめられる場面が多く、最適化の仕様自体もマニュアル等には記載がなく
モジュールを使うにしても、普通に使ってれば影響を受けることはまずありません。影響ないのでマニュアルへの記載もないのだと思います。
推奨されない機能(@によるアクセス)を使うなら、影響を受けないような対策は自分で実施しなければいけません。
苦しめられるのを避けたかったら「推奨されない機能」を「使わない」ようにすることをおすすめします。
「最適化」の機能については、HSP3をずっと追いかけてる人じゃないと知る機会もないと思います。
マニュアルの記載を探してみましたが、これかな?さすがにこれで「記載あり」とは言えないですね。
history.txt
2006/03/09 3.1b2
不必要なモジュール、DLLインポート情報をオブジェクトファイルから破棄する最適化機能を追加。