Mルーチンは名前を持ち、コードの行に続けて改ページが続きます。Mは、ルーチンの本体と行の終わり(end-of-line)を改行(line-feed)で区切った名前を区切ります。この形式は主に他のM実装との相互交換に使用され、%RI と %RO ユーティリティー・ルーチンによって読み書きできます。
GT.MはルーチンのソースをUNIXテキストファイルに保存します。
Mでは、ルーチンは、変数の管理には特に影響がなく、異なったのタイミングで呼び出されるコードが含まれ、論理的な積集合はありません。
Mコードの行は、次の順序で次の要素を構成します。
オプションのラベル
行開始デリミタ標準ではスペース(<SP>) 文字をラインスタートデリミタとして定義します。ルーチンの可読性を高めるために、GT.Mは、1個以上のタブ(<HT>)文字をラインスタートの区切り文字として認めることでMを拡張しています。
0個以上のピリオド ( . ) はレベルのインジケータです。レベルインジケータは、引数なしDOコマンドのネストのレベルを示しています:たくさんのピリオド ( . ) は深いネスティングを表しています。Mは、彼らが直接入れ子のマッチングレベルで引数なしのDOコマンドに従わない限り、レベルの指標を含む行を無視します。
DOコマンドの詳細は、 第6章:" コマンド " を参照してください。
ゼロ個以上のコマンドとその引数Mは、1行の上で複数のコマンドを認めます。1つのコマンドの引数は、1つ以上のスペース (<SP>) で構成され、コマンド開始の区切り文字でその次のコマンドから分離されます。
行末(end-of-line) 終端は、ラインフィード(<LF>)です。
Mの命名規則に従っているラベルに加えて、Mは数字のみから成るラベルを認めます。数字だけで成るラベルで、先行ゼロは相違とみなされます。例えば、ラベル1と01は異なっています。形式主義的には直ちにラベルに従うことができます。形式主義的には、括弧 () で囲まれた1つ以上の名前で構成されています。形式主義的には、Mの参照渡し(パラメータ パッシング)で値を渡す "receive:受信" というローカル変数を識別します。詳細は "パラメータ パッシング" を参照してください。
GT.Mでは、コロン(:) 区切り文字がラベルに付加され、ラベルが「ローカル」として扱われます。表示されるルーチン内では、末尾のコロンなしで正確に実行されますが、コンパイル中にのみ使用でき、他のルーチンや間接指定やXECUTEにはアクセスできません。ルーチン内の位置に先行するローカル・ラベルへの参照は実行時にLABELUNKNOWNエラーを生成するため、FISは labelrefs(ラベル参照) からローカル・ラベルへのルーチン名を省略することを推奨します。ローカルラベルを使用すると、間接指定とXECUTEを除くすべてのタイプの動的リンクのオブジェクトサイズとリンクオーバーヘッドが削減されます。ローカルラベルを使用すると、パフォーマンスが向上するか、またはパフォーマンスが低下する可能性があります; 典型的には大差ないです。実行時にコードブロック内ですべて使用される可能性が高いほど、改善の可能性が高くなります。つまり、ブロック内に現れるローカル変数への参照をすべて禁止する条件付きコードパスは、実際にはパフォーマンスを低下させる可能性があります。
Mの入口参照は、ルーチン内の行を参照するための一般的なターゲットを提供しています。入口参照は、ラベル、オフセット、ルーチン名(この順序で)のいくつかの組み合わせを含んでいるでしょう。オフセットはプラス記号(+)で区切られていて、ルーチン名は、キャレット記号(^)で区切られます。入口参照はラベルが含まれていない時は、Mは、オフセットがルーチンの先頭からあることを前提としています。入口参照がオフセットを含まれていない場合、Mは0(ゼロ)のオフセットを使用します。入口参照がルーチン名を含んでいない場合、Mは現在実行しているルーチンを想定しています。
Mは、入口参照のその部分の正規な発生を評価する要素に続く間接演算子のフォームを持っている入口参照内のすべての要素を許可します。
注意 | |
---|---|
入口参照を使用する多くのコマンドと関数は引数の間接指定を許可する一方で、Mは、ラベルとオフセット、または、オフセットとルーチン名の組み合わせを解決するその間接指定を受け付けません。 |
オフセットはデバッグに非常に有用なツールを提供します。しかしながら、それらはメンテナンスの問題が一般的に発生するので、プロダクション(本番用)のコードでそれらの使用を避けてください。