ソースプログラムのコンパイル

もしGT.Mの環境以外でのプログラム開発に焦点を当てるならば、次のセクションをスキップし"シェルからのコンパイル "のセクションへ続いてください。

GT.MはMソースコードファイルをコンパイルし UNIX環境へ完全な統合のためにオブジェクトファイルを生成します 。特に指定しない限り、オブジェクトモジュールは .oファイルの拡張子を持つコンパイルされたMソースファイルと同じ名前です。オブジェクトファイルは機械語命令と他のルーチンを使用してルーチンを接続するために必要な情報を含み、そしてメモリにそれをマップします。作成または変更された後に、Mルーチンのソースファイルはコンパイルされる必要があります。明示的にZLINKコマンドを、または、暗黙的にauto-ZLINKで、コンパイルすることができます。シェルのコマンドラインでは、mumpsコマンドを発行してコンパイルします。

処理が完了すると、コンパイラは端末上でMコードの構文エラーをチェックしエラーメッセージを表示します。各エラーメッセージは、どこでエラーが発生しているかのライン上の位置を指しているインジケータで、エラーのソース行を提供します。リストとコンパイラのエラーメッセージの説明については、『GT.Mメッセージおよび回復手順リファレンスマニュアル』を参照してください。

ダイレクトモードでZLINKコマンドへの引数に修飾語句として -list修飾子を含めることによって、コンパイル結果を含むファイルリストを生成することができます。シェルからプログラムをコンパイルする時には、これは、mumpsコマンドへ >filename 2>&1 を追加でファイルへコンパイラのメッセージをリダイレクトによって行うことができます。-list を記述するMコマンドと、MとZLINKコマンド用の他の有効な修飾子の説明については “シェルからのコンパイル を参照してください。

コンパイラは、その行にエラーを検出した時に、ルーチン行の処理を停止します。ほとんどの条件の下で、コンパイラは残りのルーチン行の処理を続行します。これは、ルーチンのより詳細なエラー解析を生成するためにそしてコードを生成するために、有効な実行可能のパスを持つ可能性がある、コンパイラを許可します。コンパイラは同じ行に複数の構文エラーを報告しません。ソースファイル内で127を超えて構文エラーを検出すると、コンパイラはファイル処理を停止します。

GT.Mからコンパイル

ダイレクトモードでは、GT.Mは、イメージのために必要なルーチンを追加すると、ZLINKとZCOMPILEコマンドを介して明示的に、そして、ZLINK機能(auto-ZLINK)の自動呼び出しを介して暗黙的に、コンパイラへのアクセスを提供します。ZCOMPILEはGT.Mルーチンをコンパイルするコマンドですが、それはルーチンをコンパイルし新しいオブジェクトモジュールを作成します。ZLINKの主なタスクはメモリ内のオブジェクトコードを配置することと、他のルーチンをそれに"接続"することです。ただし、特定の状況下で、ZLINKは最初に新しいオブジェクトモジュールを作成するGT.Mコンパイラを使用することがあります。

ZCOMPILEとZLINKとの間の違いは、ZCOMPILEはコンパイル上で新しいオブジェクトモジュールが作成され、一方ZLINKコマンドは他のルーチンもオブジェクトモジュールをリンクしメモリ内にオブジェクトコードの位置付けます。

ZLINKはこのような状況の下でコンパイルされます:

  • ZLINKはオブジェクトモジュールのコピーを見つけることはできませんが、しかしソースモジュールのコピーは見つけることができます。

  • ZLINKは、オブジェクトおよびソースモジュールの両方を検索でき、オブジェクトモジュールはソースモジュールより古いことを見つけることができます。

  • ZLINK引数の一部分のファイル指定は明示的な .m 拡張子が含まれます。

Auto-ZLINKは最初の2つの状況下でコンパイルしますが、しかし最後の1つにも決して遭遇できません。

コマンドが現在のイメージの一部ではないMルーチンを参照する時には、GT.Mは自動的にZLINKを試行し、必要であれば、そのルーチンをコンパイルします。ダイレクトモードでは、auto-ZLINKを介してコンパイラを起動するための最も一般的な方法は GTM> プロンプトでDO ^routinename と入力します。現在のイメージがルーチンを含まない時、GT.Mは次のことをします:

  • ソースとオブジェクトの位置

  • 最後にコンパイルされたかどうかは、ソースが編集されているかどうかで決定します。

  • 必要に応じて、ルーチンをコンパイルする

  • イメージへオブジェクトを追加

DOコマンドを使用することで、暗黙的にGT.Mに指示しコンパイルしリンクしプログラムを実行します。このメソッドを使用すると、対話的にルーチンをテストすることができます。

ZLINKとauto-ZLINKの完全な説明については、 第6章:" コマンド " を参照してください。

例:

GTM>do ^payroll
GTM>do ^taxes

もしルーチンが新しいオブジェクトコードが必要ならば、これは GTM> プロンプトから暗黙的にGT.Mコンパイラを起動するにはM DOコマンドを使用します。コンパイラを実行するときに、、それは2つのオブジェクトモジュールファイル、payroll.oとtaxes.oを生成します。

もしコンパイルからのエラーメッセージを受信した場合、エディタに戻ってそしてソースを修正することによって、直ちにそれらを修正することがあります。デフォルトでは、ルーチンが構文エラーを含んでいたとしても、GT.Mコンパイラは "compile-as-written" モードで動作しオブジェクトコードを生成します。このコードは、正しいこと、そして、最大でエラーのエラー行の上のすべてのコマンドですべての行が含まれます。したがって、構文エラーを削除せずに、プログラムを実行して、デバッグのサイクルを調整することもできます。

注意 注意

もしイメージが既にDOの引数のルーチン名がマッチングしたルーチンを含むならば、DOコマンドは現在のイメージへ編集されたルーチンを追加しません。また、イメージがルーチンを含む時、GT.Mはモジュールのより最近のバージョンが存在するかどうか調査をせずルーチンを実行します。もしイメージ内にルーチンがあり、それを変更するには、明示的にそのルーチンをZLINKする必要があります。

例:

GTM>zlink "payroll"
GTM>zlink "taxes.m"

場合、もしpayrollを見つけることができず、また、payroll.mがpayroll.oより最近の日付/時刻タイムスタンプを持ってそれを見つけた場合は、最初のZLINKはpayroll.mをコンパイルします。2番目のZLINKは新しいtaxes.oを作成するためにtaxes.mをいつもコンパイルします。

GT.Mダイレクトモードでのデバッグの詳細については、 第4章: “ダイレクトモードでの操作とデバッグ を参照してください。

シェルからコンパイル

シェルプロンプトで mumps file-name と入力して、シェルからコンパイラを呼び出します。

例:

$ mumps payroll.m
$ mumps taxes.m

これはシェルプロンプトからGT.Mコンパイラを起動するためにmumpsコマンドを使用します、そして、これらのファイルの .o バージョンを作成します。

シェルプロンプトでは、mumpsコマンドを使用します:

  • 新しく入力したプログラムの構文をチェックします。

  • オプションで、プログラムのフォーマットリストを取得します。

  • リンクの前に、すべてのオブジェクトコードが最新の状態であることを確認します。

mumpsコマンドはMソースファイルをオブジェクトコードへ変換するためにコンパイラを呼び出します。

MUMPSコマンドのフォーマットは次のとおりです。

MUMPS [-修飾子[...]] パス名
  • ソースプログラムは .m 拡張子を持つ必要があります。

  • それぞれのパス名はコンパイルするためにMソースプログラムを識別します。

  • 修飾子はコンパイラ出力の特性を決定します。

  • 修飾子はコマンドの後ろに、しかし正しく適用されるためにはファイル名の前に、出現する必要があります。

  • GT.Mはファイル名に、UNIXの * および ?のワイルドカードが可能です。

  • MUMPSコマンドは、コンパイル時にエラーが発生した後に 1 のステータスを返します。

* ワイルドカードはワイルドカードを保つ位置で、いくつかのnullを含む数字と文字の正しい組み合わせを受け入れます。

? ワイルドカードは、その位置が正確に1つの有効な文字を受け入れます。

例えば、mumps *.m は .m 拡張子を持つ現在のデフォルトのディレクトリ内のすべてのファイルをコンパイルします。mumps *pay?.m は、payに続き任意の文字を含む1つの文字が続く名前で .mファイルをコンパイルします。ZLINKまたはZCOMPILEを使う時とは異なり、ファイル名がシェルからのコンパイルされる時に完全に指定される必要があります。

注意 注意

ルーチン名を作成するとき、コンパイラはオブジェクト・ファイル名を最大31文字に切り捨てます。たとえば、Adatabaseenginewithscalabilityproven.mというソースファイルの場合、コンパイラはAdatabaseenginewithscalabilityp.oというオブジェクトファイルを生成します。ソース・ファイル名の最初の31文字が一意であることを確認してください。

mumpsコマンド用の修飾子

mumpsコマンドは、カスタマイズされたタイプと、特定のプログラミングのニーズに対処するコンパイラ出力のフォームの、修飾子を可能にします。MUMPSコマンド修飾子もGT.M ZLINKとZCOMPILEコマンドへの引数に修飾子として表示される場合があります。続くセクションでは、mumpsコマンド修飾子について説明します。ファイル名の前に指定されコマンド自体が後である引数を確認してください。

-di[rect_mode]

すぐにダイレクトモードを開始する小さなGT.Mイメージを呼び出します。

-direct_modeはMコンパイラを起動しません。

-direct_mode 修飾子はファイル仕様および他のすべての修飾子と互換性はありません。

-dy[namic_literals]

ソース・コードで使用されるリテラルに関連付けられた特定のデータ構造を、オブジェクト・コードから動的(ダイナミック)にロードまたはアンロードされるようにコンパイルします。これらのデータ構造の動的ロードおよびアンロード:

  • -NOINLINE_LITERALS の指定を取り替えます。

  • 各プロセスが必要とするプライベート・メモリの量を削減し、同じメモリでより多くのプロセスを実行できるようにします。

  • 状況によっては、ファイル・システム・バッファーに使用可能なメモリを増やすことによって、アプリケーションのパフォーマンスを向上させることがあります。

  • ローカル変数の処理のCPUおよびスタック・コストを増加させます。

-DYNAMIC_LITERALS が指定されていない場合、ルーチンがリンクされて各プロセスのプライベート・メモリにとどまっても、これらのデータ構造は引き続き生成されます。-DYNAMIC_LITERALS を使用するとオブジェクト・コードのサイズが増大し、動的なロードとアンロードはオブジェクト・コードが共有ライブラリにあるときにのみメモリを節約するためで、FISでは、共有ライブラリにロードするオブジェクトコードをコンパイルするとき、または、自動再リンクが有効なディレクトリから実行するときにのみ、-DYNAMIC_LITERALS の使用を制限することを推奨しています。

-[no]embed_source

GT.Mにルーチンのソース・コードをオブジェクト・コードに埋め込むよう指示します。デフォルトは NOEMBED_SOURCEです。他のGT.Mコンパイル修飾子と同様に、この修飾子は $ZCOMPILE 組み込み特殊変数と gtmcompile 環境変数で指定できます。オリジナルのMソース・ファイルが編集または削除された場合でも、EMBED_SOURCE は正しいソースコードへの $TEXT および ZPRINTアクセスを提供します。ソース・コードがオブジェクト・コードに埋め込まれていない場合、GT.Mはソースコード・ファイルの検索を試みます。オブジェクト・コードと一致するソース・コードが見つからない場合、$TEXT() は null 文字列を返します。ZPRINT は、ソース・コードが見つかったものを印刷し、ダイレクト・モードで TXTSRCMATメッセージを出力します; ソース・ファイルが見つからない場合、ZPRINTはFILENOTFNDエラーを発行します。

-[no]i[gnore]

コンパイラがソースコード内のエラーを検出する(- noignore)時でさえも、オブジェクトファイルを生成するようにコンパイラに指示し、または、コンパイラがエラーに遭遇する(- noignore)時には、オブジェクトファイルを生成しません。

-noobject 修飾子が使用される時に、-ignore修飾子は効果ありません。

実行パスがいくつかのコンパイル時エラーを検出した時に、エラーを持ってコンパイルされるルーチンの実行は、run-time エラーを生成します。

このcompile-as-writtenモードは、デバッグするための柔軟なアプローチを容易にし、インタープリタな環境からGT.Mへの変換を促進します。インタープリタな環境からくる多くのMアプリケーションは異常な構文を含んでいます。コンパイルとその後のルーチンを実行するこの特徴は、インタープリタな環境での開発の感触を与えます。

デフォルトでは、ソースルーチンがエラーを含んでいたとしても、コンパイラは -ignore モードでオブジェクトモジュールを操作し生成します。

-le[ngth]=lines

リストファイルのページの長さをコントロールします。

Mコンパイラが -length修飾子を無視しない限り、-list修飾子が現れます。

デフォルトでは、リスティング(listing)は -length=66 です。

-[no]li[st][=filename]

ソースプログラムのリスティングファイル(listing file)を生成するためにコンパイラへ指示し、そしてオプションでリスティングファイル(listing file)の名前を指定します。リスティングファイルはソースプログラムのテキストの行番号が含まれます。ルーチンがエラーを発生する時に、リスティングファイルは、エラーカウント、ロケーションに関する情報、および、エラーの原因が含まれます。

リスティングファイルのファイル名を指定しない時には、コンパイラは .lis ファイル拡張子でソースファイルとして同じ名前のリスティングファイルを生成します。

-length と -space 修飾子はリスティングファイルのフォーマットと内容を変更します。Mコンパイラがこれらの修飾子を無視しない限り、コマンドは、-list修飾子を含みます。

デフォルトでは、コンパイラは、-nolistを操作し、そしてリスティングを生成しません。

-noin[line_literals]

イン・ライン・コードを生成する代わりにリテラルをロードしてルーチンのサイズを減らすために、ライブラリ・コードを使用するようにルーチンをコンパイルします。CPUのわずかな増加を犠牲にして、-NOINLINE_LITERALを使用すると、-DYNAMIC_LITERALS のためにオブジェクト・サイズが大きくなるのを防ぐことができます。

[重要] 重要

-DYNAMIC_LITERALS と -NOINLINE_LITERNALS の両方が、ソース・コードにリテラルが含まれているアプリケーションのパフォーマンスと仮想メモリ使用を最適化します。縮小されたプロセスごとのメモリ使用量からのスケーラビリティおよびパフォーマンスは、データ構造を動的にロードおよびアンロードするための増分コストを補ってもしなくてもよいので、かつ、インライン・コード 対 ルーチンのパフォーマンスは、キャッシュ内のルーチンの可用性によって影響される可能性があるので、FISは、各作業負荷に最適な修飾子の組み合わせを決定するためのベンチマークを提案しています。アプリケーションは、さまざまな修飾子の組み合わせでコンパイルされたルーチンを自由に混在させることができます。

-[no]o[bject][=filename]

出力オブジェクトファイルを生成し、そして、オプションの -filename引数を使用してオブジェクトファイルのための名前をオプションとして指定しコンパイラに指示します。

ファイル名を指定しない時には、コンパイラは、ソースファイルと .oファイル拡張子と同じファイル名を持つオブジェクトファイルを生成します。

ルーチン名を作成するとき、コンパイラはオブジェクト・ファイル名を最大31文字に切り捨てます。たとえば、Adatabaseenginewithscalabilityproven.mというソースファイルの場合、コンパイラはAdatabaseenginewithscalabilityp.oというオブジェクトファイルを生成します。ソース・ファイル名の最初の31文字が一意であることを確認してください。

-noobject 修飾子はオブジェクトファイルの生成が抑制され、そして、-list 修飾子でリスティングファイルのみ生成するために通常に使用されます。

デフォルトでは、コンパイラはオブジェクトモジュールを生成します。

-[no]w[arning]

エラー出力を抑制するようにコンパイラに指示します; デフォルトは -warning です。

-list 修飾子とともに使用すると、-nowarning 修飾子はリスト内のエラーに影響を与えません。

[注意] 注意

-noobject 修飾子と一緒に使用すると、-nowarning 修飾子は、事実または原因の指示のないオブジェクトを生成しないようにコンパイラに指示します。

-r[un]

自動起動モードでGT.Mを呼び出します。

次の引数は、Mの入り口参照とみなされます。そのルーチンは、ダイレクトモードをバイパスし、すぐに実行されます。シェルに応じて、二重引用符("")で入り口参照に配置する必要がありますこの修飾子はMコンパイラを起動されず、任意の他の修飾子と互換性がありません。

-s[pace]=lines

リスティングファイルの出力間隔を制御します。-space=nは、リスティングファイル内のすべてのソース行を分離するn-1個の空白行を指定します。もしn<1ならば、Mコマンドはリスティングに1つの間隔を使用します。

この修飾子は -list修飾子なしで現す場合は、Mコンパイラは-space修飾子を無視します。

デフォルトでは、リスティングは1つの間隔の出力(-space=1)を使用します。

MUMPSコマンド修飾子の概要

inserted by FC2 system