M 言語の違い
MSM とネイティブ Caché モード間で異なる言語機能のみを以下に示します。
MSM では多数の言語機能のさまざまな省略形が許可されますが、Caché では、Caché ObjectScript リファレンス で記述される省略名のみが許可されます。
コマンド
Caché での機能 : CLOSE
目的 : デバイスを閉じます。
メモ : MSM のような数値デバイスに対して数値エイリアスを定義すると、Caché ではそのデバイスをサポートします。OPEN の説明を参照してください。
Caché での機能 : DO
目的 : ルーチンまたはコード・ブロックを実行します。
メモ : 角括弧 ( [] ) はルーチンではサポートされません。代わりに垂直バー ( || ) を使用してください。 また、MSM の UCI 値と VOL 値は、それぞれネームスペースとシステム値に変更する必要があります。または、ルーチンの拡張リファレンスを削除して、ネームスペース・ルーチン・マッピングを使用します (推奨)。
目的 : 新規のバックグラウンド・プロセスを生成します。
メモ : ジョブ起動プロセスの PID を返すには、MSM では $ZB を使用しますが、Caché では $ZCHILD を使用します。
新規のパーティション・サイズを指定するための JOB コマンド [JOB:(:PartitionSize)] は、UNIX® 用の Caché でのみ使用できます。Windows では、$ZF(-2) を使用して、新規のパーティションを持つ外部 Caché ジョブを生成します。例えば、次のコードは Windows NT 上で、%SYS ネームスペース内で 1024 KB のパーティション・サイズを持つ ^Test を実行します (デフォルトのインストール・ディレクトリを想定しています)。
Set x=$zf(-2, "c:\cachesys\bin\cache -s..\mgr -b 1024 -U %SYS ^^Test")
MSM ジョブと Caché ジョブの相違点は以下のとおりです。
-
Caché (または DSM-DDP システム) に対してジョブを起動する場合、パラメータを渡すことはできません。ネットワーク内で渡されるパラメータは、MSMV3 回線オプションのみです。渡される値をいずれかのシステムのグローバルに設定し、JOB されたプロセスでこれらの値を取得する必要があります。
-
MSM から Caché に対してジョブ起動する場合、既定のデータベースでのみジョブを開始できます。つまり、キャッシュでジョブを開始する MSM の JOB コマンドにネームスペースを指定できません。開始後、Caché システムのジョブは、具体的に (ZNAMESPACE を) マッピングを使用するネームスペースに変更する必要があります。
Caché での機能 : NEW
目的 : 1 つ以上のローカル変数をスタックします。
メモ : Caché では、NEW コマンドの引数として $TEST や $ZREFERENCE は許可していません。
Caché での機能 : OPEN
目的 : デバイスを開きます。
メモ : Caché でのデバイスは、そのデバイスのシステム構成ユーティリティで数値エイリアスが指定されていない限り、OS レベルのデバイス名 (/dev/tty3a など) に対応します。 MSM のデバイス構造をエミュレートするには、数値エイリアスを使用する必要があります。
Caché での機能 : 実装されていません。
目的 : 現在のトランザクションを再開します。
Caché での機能 : USE
目的 : デバイスを使用し、$IO をこの現在のデバイスに設定します。
メモ : MSM のような数値デバイスに対して数値エイリアスを定義すると、Caché ではそのデバイスをサポートします。OPEN の説明を参照してください。
Caché での機能 : VIEW
目的 : ディスク内のブロックの読み取りや書き込み、メモリ内に場所の書き込みを行います。
メモ : VIEW コマンドは Caché のディスク構造およびメモリ構造に従う必要があります。詳細は該当のドキュメントを参照してください。
Caché での機能 : $ZF
目的 : 外部プロシージャを呼び出します。
Caché での機能 : 実装されていません。
目的 : 内部ディスクのバッファ・キャッシュから、すべてのディスク・ブロックをフラッシュします。
Caché での機能 : 引数のない GOTO
目的 : BREAK コマンドの後で、プログラムの実行を再開します。
Caché での機能 : %SYSTEM.ProcessOpens in a new tab FixedDate()Opens in a new tab メソッド。
目的 : 現在のプロセスに日付と時刻を設定します。
メモ : Caché の FixedDate() メソッドは、時刻ではなく、新しい日付値のみを許可します。
Caché での機能 : 完全に対応するものはありません。
目的 : ルーチン内およびルーチン間での一連のプログラムの実行をトレースします。
メモ : Caché では、以下を実行してみてください。
For i=0:1:$stack(-1) Do
. Write !,"Context level:",i,?25,"Context type:",$stack(i)
. Write !,?5,"Current place:",$stack(i,"place")
. Write !,?5,"Current source:",$stack(i,"mcode")
Quit
Caché での機能 : 実装されていません。
目的 : NEW コマンドと似ていますが、明示的でも暗黙的でもサブルーチンが終了した後は変数が永続的になります。
Caché での機能 : SET
目的 : 変数にオブジェクト参照を割り当てます。
メモ : ObjectScript では、以下のようなネイティブ SET コマンドを使用します。
Set var=Car.Make
Caché での機能 : %Library.DeviceOpens in a new tab Broadcast()Opens in a new tab メソッドまたは %SYSTEM.ProcessOpens in a new tab Broadcast()Opens in a new tab メソッド。
目的 : すべてのデバイス (使用中の場合も含む) に対する書き込みアクセスを許可します。同報通信の説明を参照してください。
演算子
Caché での機能 : $ZHEX
目的 : 数値を 16 進数から 10 進数に変換します。
構造化システム変数
Caché での機能 : 実装されていません。
目的 : デバイスの存在、操作上の特性、および可用性に関する情報を提供します。
関数
Caché での機能 : $ORDER
目的 : 任意の変数で同じレベルにある次の添え字を返します。ローカル変数のリストのループもパーティション内で設定されます。
メモ : このループ機能は 2 つのプラットフォーム間で異なります。例えば、次のような変数セットがあると仮定します。
%=1, %USER="mikel", var=123.
MSM コード
Write $Order() ; this returns "%"
Write $Order(%) ; this returns "%USER"
Write $Order(%USER) ; this returns "var"
Caché コード
Write $Order(@("")) ; this returns "%"
Write $Order(%) ; this returns "%USER"
Write $Order(%USER) ; this returns "var"
Caché での機能 : $VIEW
目的 : メモリ位置のコンテンツを返します。
Caché での機能 : $ASCII
目的 : 指定された文字の Unicode 文字コードを返します。
Caché での機能 : ありません。
目的 : ルーチンまたはグローバルの開始のブロック番号を返すか、ディスク・ブロックの割り当てまたは割り当て解除を行います。
Caché での機能 : $ZBIT<name>
目的 : ビット文字列に対する論理演算の実行で使用する関数の集合。
Caché での機能 : $ZF
目的 : 外部プロシージャを呼び出し、値を返します。
メモ : Caché の $ZF では関数名を二重引用符で囲む必要がありますが (例 : [$ZF("MyFunction")])、MSM の $ZCALL ではその必要がありません (例 : [$ZCALL(MyFunction)])。
Caché での機能 : ありません。
目的 : Unicode 文字コードのリストに基づいて、文字列を返します。
Caché での機能 : $ZCRC
目的 : 計算されたチェックサムまたは冗長巡回検査を返します。
Caché での機能 : SET
目的 : 新規にインスタンス化されたオブジェクトへのオブジェクト参照を返します。
メモ : ObjectScript では、以下のようなネイティブ SET コマンドを使用します。
Set var=##class(Car).%New()
Caché での機能 : $ZDATE
目的 : $HOROLOG 日付に基づいて、外部の日付値を返します。
メモ : Caché では、0 未満および 2980013 を超える $H 値に対して <VALUE OUT OF RANGE> エラーが返されます。MSM では範囲外の日付に対して M エラーは生成されませんが、0 未満および 94598 を超える $H 値に対して日付が無効であることが報告されます。
Caché での機能 : 完全に対応するものはありません。
目的 : 内部デバイス ID に基づいて、実際のデバイス名が返されます。
メモ : ターミナル・デバイスでは、特殊変数 $ZIO に TELNET ポート番号とホスト IP アドレス、または LAT サーバ名とポート名が格納されます。ターミナル・デバイスの使用法の詳細は、"Caché 入出力デバイス・ガイド" で "入出力デバイスとコマンド" および "ターミナル入出力" の章を参照してください。
Caché での機能 : SET
目的 : データベース・オブジェクトを取得し、インスタンス化したそのオブジェクトへのオブジェクト参照を返します。
メモ : ObjectScript では、以下のようなネイティブ SET コマンドを使用します。
Set var=##class(Car).%Open(OREF)
Caché での機能 : $ZDATE、$ZTIME、$ZDATETIME
目的 : $HOROLOG 日付に基づいて、外部の日付値または時刻値を返します。
メモ : 日付の変換には $ZDATE、時刻の変換には $ZTIME を使用します。また、両方を変換するには $ZDATETIME を使用します。
Caché での機能 : ありません。
目的 : 式がオブジェクトを参照しているかどうか、および 2 つの式が同じオブジェクトを参照しているかどうかを識別します。
Caché での機能 : ありません。
目的 : 出力デバイスでフィールドに収めることができる文字列の位置の数を返します。
Caché での機能 : 完全に対応するものはありません。
目的 : UCI 内部番号または外部名を返します。
メモ : Caché で現在のネームスペースを返すには、$ZNSPACE または $NAMESPACE を使用します。
Caché での機能 : ありません。
目的 : データベースの論理構造にエラーがある場合は、そのエラー文字列を返します。
Caché での機能 : ありません。
目的 : 出力デバイスに文字列を表示したときにその文字列が占める幅を返します。
プリプロセッサ指示文
Caché での機能 : 完全に対応するものはありません。
目的 : 生成されたコードに対し、マクロを含む事前拡張コード行のコメントとしての挿入を有効にします。
メモ : Caché では、#show を使用すると、生成した .INT コードに .INC コードのコメントを挿入できるようになります。
Caché での機能 : ありません。
目的 : 配列の参照に使用されるマクロを定義します。
Caché での機能 : ありません。
目的 : 一意のローカル・ラベルまたはローカル変数を定義し、接頭語が直接使用されていない限り、ルーチン内で一意であるようにします。
Caché での機能 : #include
目的 : 任意のルーチン内にソース・コードをインクルードします。
メモ : Caché では、#include は .INC コードの参照にのみ使用できます。
Caché での機能 : ありません。
目的 : ライブラリ・ファイルへのパスを指定します。
Caché での機能 : ありません。
目的 : マクロ・ライブラリを生成します。
Caché での機能 : 完全に対応するものはありません。
目的 : 未処理のソース・コード行のコメントとしての挿入を停止します。
メモ : Caché では、#noshow を使用すると、生成した .INT コードから .INC コードのコメントを除外できます。
Caché での機能 : ありません。
目的 : M ルーチンが生成されないようにします。
Caché での機能 : ありません。
目的 : マクロ参照の識別に使用する接頭語を定義します。
Caché での機能 : ありません。
目的 : 生成されるルーチンの名前を指定します。
Caché での機能 : ありません。
目的 : マクロ・ライブラリを更新します。
Caché での機能 : ありません。
目的 : プリプロセス中に M コードを実行します。
特殊変数
Caché での機能 : $ECODE
目的 : アプリケーションで発生したエラーのリストを返します。
メモ : MSM と Caché の $ECODE は概念的には同じですが、Caché では、ZSYNTAX、ZNOROUTINE、ZDISKHARD などの Caché 固有のエラー文字列を使用します。
Caché での機能 : $IO
目的 : 現在アクティブなデバイスを含みます。
メモ : MSM では $IO で内部デバイス番号を表現しますが、Caché では、デバイスの種類を示すヘッダを伴った実際のデバイス名を $IO として使用します。例えば、Caché ではプリンタは以下のようになります。
|PRN|\\salesserver\printer1
MSM のようなデバイスでは、System Configuration ウィザードを使用して、デバイスの数値エイリアスを作成する必要があります。
Caché での機能 : $JOB
目的 : 現在のプロセスのジョブ番号を含みます。
メモ : Caché の $JOB 値は OS レベルでプロセスの PID (プロセス識別) 番号に対応するのに対し、MSM の $JOB 値は MSM 固有の番号になります。
Caché での機能 : $PRINCIPAL
目的 : ジョブの主デバイスを含みます。
メモ : MSM では $PRINCIPAL で内部デバイス番号を表現しますが、Caché では、デバイスの種類を示すヘッダを伴った実際のデバイス名を $PRINCIPAL として使用します。 例えば、Caché ではユーザ・ログインは以下のようになります。
|TNT|192.9.204.64:1097|316
この場合、|TNT| は TELNET デバイスを指定し、192.9.204.64 は TERMINAL サーバ IP、1097 は仮想ポート番号、316 は OS レベルのプロセス ID を表します。
Caché での機能 : 完全に対応するものはありません。
目的 : MSM では $SYSTEM を使用して、M ユーザ・グループ番号 (43)、MSM ライセンスのシリアル番号、および現在の M インスタンスの固有の番号を返します。
メモ : Caché のライセンス情報には、%SYSTEM.LicenseOpens in a new tab クラスのメソッドを通じてアクセスできます。
-
KeyMachineID()Opens in a new tab は有効キーの MachineID フィールドの内容を返します。
-
KeyOrderNumber()Opens in a new tab は有効キーの OrderNumber フィールドを返します。
-
KeyAuthorizationKey()Opens in a new tab は有効キーの AuthorizationKey フィールドを返します。
-
KeyCustomerName()Opens in a new tab は有効キーの CustomerName フィールドを返します。
これらのメソッドは、特殊な $SYSTEM オブジェクトに実装されており、$SYSTEM.License.Method() 構文を使用することによりアクセスできます。
Caché での機能 : 実装されていません。
目的 : トランザクション開始以降に発生したトランザクションの再開回数を示します。
Caché での機能 : $ZERROR
目的 : アプリケーションまたはプログラマによって最近生成されたエラー・メッセージのテキストを含みます。
メモ : Caché では、Caché 固有のエラー・テキストが報告されます。これには、MSM のエラー・テキストに対応するものとしないものがあります。