JP5147626B2 - Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム - Google Patents
Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム Download PDFInfo
- Publication number
- JP5147626B2 JP5147626B2 JP2008253637A JP2008253637A JP5147626B2 JP 5147626 B2 JP5147626 B2 JP 5147626B2 JP 2008253637 A JP2008253637 A JP 2008253637A JP 2008253637 A JP2008253637 A JP 2008253637A JP 5147626 B2 JP5147626 B2 JP 5147626B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- variable
- instruction
- char array
- storing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Description
従来のトランスレータでは、小数点を含まない数値データはint型又はlong型に変換され、小数点を含む数値データはBigDecimal型に変換され、及び文字データはString型に変換されてきた。また、階層的な集団データ項目(group data item)は、階層ごとに内部又は外部クラスのオブジェクトとして定義されてきた。
このような実装の問題点は、それぞれのデータ項目が個別のJAVA(商標)のデータ型として表現されることである。String型及びBigDecimal型といった作成後にその状態を変えることのできないデータ型のオブジェクトが用いられた場合、変数の代入又は表示などが実行されるたびに、大量のオブジェクトが新たに生成され、大量のコピー操作が行われてしまう。このような非効率なオブジェクトの生成又はコピー操作は、COBOLコードから変換され実用化されているJAVA(商標)コードを実装している大規模商用アプリケーションにおいても頻繁に見られる。このことは、変換後のJAVA(商標)コードの性能が低い大きな原因となっている。
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有するJAVA(商標)コードを含むプログラムを保持する記憶部であって、上記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記記憶部と、
上記プログラムを上記記憶部からメモリ内に読み出し、該プログラムを実行するCPUと
を含む。
上記第2のデータを格納する第1のchar配列と、
上記第2のデータの文字数を格納する変数と、
上記第2のデータが格納される位置を表すオフセット値を格納する変数と
を含む。
上記第2のデータに対応する第3のデータを管理し、及び
上記第1のchar配列に対応する第2のchar配列と、
上記第3のデータの文字数を格納する上記変数に対応する第1の変数と、
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数と
を含む。
上記第3のデータを格納し、又は、
上記第1のオブジェクトの属する階層構造において上位階層にあり且つ上記ラッパークラスから生成されるところのオブジェクト(以下、第2のオブジェクト)に含まれる第3のchar配列についてのメモリ領域を共有し、
ここで、上記第2のオブジェクトは、上記第1のchar配列に対応する上記第3のchar配列を含み、及び上記第3のchar配列に対して上記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
上記第3のchar配列は、上記第3のデータが格納される上記メモリ領域を含む。
数値型データを格納する変数と、
上記数値型データと上記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクト変数と、
上記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含む。
上記第2のデータに対応する第3のデータを管理し、及び
上記第1のchar配列に対応する第2のchar配列と、
上記第3のデータの文字数を格納する上記変数に対応する第1の変数と、
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数と、
上記数値型データを格納する上記変数に対応する第3の変数と、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第1のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第2のフラグと
を含み、
上記ラッパークラスが上記相互変換を行うためのオブジェクトを含む場合、上記相互変換を行うためのオブジェクトに対応する第1の相互変換オブジェクトと
をさらに含む。
上記第1のオブジェクトが、上記第1のchar配列に対応する第2のchar配列及び上記共有する命令を含み、
上記第1のオブジェクトの共有する命令が、
上記第2のchar配列についてのメモリ領域を、上記ラッパークラスから生成され且つ上記第1のchar配列に対応する第4のchar配列を有するところの第3のオブジェクトに含まれる上記第4のchar配列についてのメモリ領域と共有する命令
を含む。
上記第1のオブジェクトの共有する命令が、上記第1のオブジェクトの生成において実行されるコンストラクタに含まれる。
上記CPUが下記命令をさらに実行し、該命令が、
上記第3のデータのセット又はゲットの命令を実行する命令と、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てる命令と、
上記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有する命令であって、
上記第4のオブジェクトが、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第5のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第4の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第5の変数と
を含む、上記共有する命令と、
上記第5の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定する命令と
を含む。
上記第5のchar配列に対してメモリ領域が割り当てられている場合に、上記第5のchar配列に格納された上記第4のデータを上記第2のchar配列にコピーする命令をさらに含む。
上記CPUが下記命令をさらに実行し、該命令が、
上記第3のデータのセット又はゲットの命令を実行する命令と、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てる命令と、
上記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有する命令であって、
上記第4のオブジェクトが、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第5のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第4の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第5の変数と、
上記数値型データを格納する上記変数に対応する第6の変数と、
上記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第3のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第4のフラグと
を含む、上記共有する命令と、
上記第5の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定する命令と
を含む。
上記第5のchar配列に対してメモリ領域が割り当てられている場合に、上記第5のchar配列に格納された上記第4のデータを上記第2のchar配列にコピーする命令をさらに含む。
上記第4のオブジェクトの有する上記第3のフラグを無効に設定する命令
をさらに含む。
セットされるデータとして数値型データが与えられた場合、上記CPUが下記命令をさらに実行し、該命令が、
上記第3の変数に上記数値型データをセットする命令と、
上記第2のフラグを無効に設定する命令と
を含む。
上記第1のフラグを有効に設定する命令
をさらに含む。
上記CPUが下記命令をさらに実行し、該命令が、
上記メモリ領域が共有された上記第5のchar配列から上記第4のデータを取り出す命令
を含む。
上記CPUが下記命令をさらに実行し、該命令が、
上記第4のフラグを取得し、該取得した第4のフラグが有効に設定されていることを確認する命令
を含む。
上記第3の変数から数値型データを取得する命令と、
上記第1の相互変換オブジェクトを用いて、上記取得したデータを文字型のデータに変換する命令と、
上記変換された文字型のデータを上記第2のchar配列に設定する命令と、
上記第2のフラグを有効に設定する命令と
を含む。
上記第2のchar配列から文字型のデータを取得する命令と、
上記第1の相互変換オブジェクトを用いて、上記取得した文字型のデータを数値型データに変換する命令と、
上記変換された数値型データを上記第3の変数に設定する命令と、
上記第1のフラグを有効に設定する命令と
を含む。
ゲットするデータとして数値型データを取得する場合、上記CPUが下記命令をさらに実行し、該命令が
上記第1のフラグが有効に設定されていることを確認する命令と、
上記第3の変数から上記数値型データを取得する命令と
を含む。
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有する上記プログラムを記憶部からメモリ内に読み出すステップであって、上記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記読み出すステップと、
上記読み出したプログラムを実行するステップと
を含む。
上記第2のデータを格納する第1のchar配列と、
上記第2のデータの文字数を格納する変数と、
上記第2のデータが格納される位置を表すオフセット値を格納する変数と
を含み、
上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記ラッパークラスから生成されるオブジェクト(第1のオブジェクト)が生成されることに応じて、下記を上記第1のオブジェクトに提供するステップを含む:
上記第1のchar配列に対応する第2のchar配列;
上記第3のデータの文字数を格納する上記変数に対応する第1の変数;及び
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数。
上記第3のデータを格納するステップ、又は、
上記第1のオブジェクトの属する階層構造において上位階層にあり且つ上記ラッパークラスから生成されるところのオブジェクト(第2のオブジェクト)に含まれる第3のchar配列についてのメモリ領域を共有するステップ
を含み、
ここで、上記第2のオブジェクトは、上記第1のchar配列に対応する上記第3のchar配列を含み、及び上記第3のchar配列に対して上記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
上記第3のchar配列は、上記第3のデータが格納される上記メモリ領域を含む。
数値型データを格納する変数と、
上記数値型データと上記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
上記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含み、
上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記ラッパークラスから生成されるオブジェクト(第1のオブジェクト)が生成されることに応じて、下記を上記第1のオブジェクトに提供するステップを含む:
上記第1のchar配列に対応する第2のchar配列;
上記第3のデータの文字数を格納する上記変数に対応する第1の変数;
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数;
上記数値型データを格納する上記変数に対応する第3の変数;
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第1のフラグ;及び
上記char配列表現の有効性を示す上記フラグに対応する第2のフラグ。
また、上記第1のオブジェクトに提供するステップは、
上記ラッパークラスが上記相互変換を行うためのオブジェクトを含む場合、
上記相互変換を行うためのオブジェクトに対応する第1の相互変換オブジェクトを上記第1のオブジェクトに提供するステップ
をさらに含む。
ここで、上記第1のオブジェクトは、上記第1のchar配列に対応する第2のchar配列及び上記共有する命令を含み、上記第1のオブジェクトの共有する命令は、上記第2のchar配列についてのメモリ領域を、上記ラッパークラスから生成され且つ上記第1のchar配列に対応する第4のchar配列を有するところの第3のオブジェクトに含まれる上記第4のchar配列についてのメモリ領域と共有する命令を含む。
上記第1のオブジェクトが生成されることに応じて、
上記第1のオブジェクトの共有する命令が、上記第1のオブジェクトの生成において実行されるコンストラクタに提供されるステップを含む。
上記第3のデータのセット又はゲットの命令を実行するステップと、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てるステップと、
上記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有するステップであって、
上記第4のオブジェクトが、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第5のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第4の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第5の変数と
を含む、上記共有するステップと、
上記第5の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
上記第5のchar配列に対してメモリ領域が割り当てられている場合に、上記第5のchar配列に格納された上記第4のデータを上記第2のchar配列にコピーするステップをさらに含む。
上記第3のデータのセット又はゲットの命令を実行するステップと、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てるステップと、
上記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有するステップであって、
上記第4のオブジェクトが、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第5のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第4の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第5の変数と、
上記数値型データを格納する上記変数に対応する第6の変数と、
上記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第3のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第4のフラグと
を含む、上記共有するステップと、
上記第5の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
上記第5のchar配列に対してメモリ領域が割り当てられている場合に、上記第5のchar配列に格納された上記第4のデータを上記第2のchar配列にコピーするステップをさらに含む。
上記第4のオブジェクトの有する上記第3のフラグを無効に設定するステップ
をさらに含む。
上記第3の変数に上記数値型データをセットするステップと、
上記第2のフラグを無効に設定するステップと
をさらに含む。
上記第1のフラグを有効に設定するステップ
をさらに含む。
上記メモリ領域が共有された上記第5のchar配列から上記第4のデータを取り出すステップ
をさらに含む。
上記第4のフラグを取得し、該取得した第4のフラグが有効に設定されていることを確認するステップ
をさらに含む。
上記第3の変数から数値型データを取得するステップと、
上記第1の相互変換オブジェクトを用いて、上記取得したデータを文字型のデータに変換するステップと、
上記変換された文字型のデータを上記第2のchar配列に設定するステップと、
上記第2のフラグを有効に設定するステップと
を含む。
上記第2のchar配列から文字型のデータを取得するステップと、
上記第1の相互変換オブジェクトを用いて、上記取得した文字型のデータを数値型データに変換するステップと、
上記変換された数値型データを上記第3の変数に設定するステップと、
上記第1のフラグを有効に設定するステップと
を含む。
ゲットするデータとして数値型データを取得する場合、
上記第1のフラグが有効に設定されていることを確認するステップと、
上記第3の変数から上記数値型データを取得するステップと
を含む。
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有するJAVA(商標)コードを含むプログラムを記憶部からメモリ内に読み出すステップであって、
上記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言であり、上記ラッパークラスは、COBOLコードにおいて宣言されているデータ項目のデータ(第1のデータ)に対応するデータ(第2のデータ)を管理する機能を有し、
上記ラッパークラスは、
上記第2のデータを格納する第1のchar配列と、
上記第2のデータの文字数を格納する変数と、
上記第2のデータが格納される位置を表すオフセット値を格納する変数と、
数値型データを格納する0又は1の変数と、
上記数値型データと上記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
上記数値型データを格納する変数の有効性を示す0又は1のフラグと、
char配列表現の有効性を示す0又は1のフラグと、
上記ラッパークラスから生成される0以上のオブジェクトの定義と
を含み、
上記ラッパークラスから生成されるオブジェクト(第1のオブジェクト)は、
上記第2のデータに対応する第3のデータを管理し、及び
上記第1のchar配列に対応する第2のchar配列と、
上記第3のデータの文字数を格納する上記変数に対応する第1の変数と、
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数と、
上記第1のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも1のオブジェクト(下位階層のオブジェクト:ここで、該下位階層のオブジェクトは上記第4のオブジェクトに対応する)と
を含み、
上記下位階層のオブジェクトは、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第3のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第3の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第4の変数と、
上記数値型データを格納する上記変数に対応する第5の変数と、
上記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第1のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第2のフラグと
を含む、
上記読み出すステップと、
上記第3のデータのセット又はゲットの命令を実行するステップと、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てるステップと、
上記下位階層のオブジェクトに含まれる第3のchar配列についてのメモリ領域を共有するステップと、
上記第4の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
COBOLコードからJAVA(商標)コードに変換するステップであって、該変換するステップは、
COBOLコードを保持する記憶部からCOBOLコードをメモリ内に読み出すステップと、
上記メモリ内に読み出したCOBOLコードにおいて、集団データ項目の宣言を、構造体についてのラッパークラスの宣言に置き換えるステップと、
上記集団データ項目の下位階層のデータ項目の宣言を、ラッパークラスの宣言に置き換えるステップと
を含む、上記変換するステップと、
上記変換されたJAVA(商標)コードを含むプログラムを記憶部からメモリ内に読み出すステップであって、上記プログラムはラッパークラスのオブジェクトの少なくとも1の宣言を有し、上記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記読み出すステップと、
上記読み出したプログラムを実行するステップと
を含む。
上記ラッパークラスは、文字データを格納するchar配列、データの文字数を格納する変数及び上記データが格納される位置を表すオフセット値を格納する変数をメンバ変数に持つ。これらのメンバ変数は、例えば共通の機能を提供するための共通クラスに定義される。ラッパークラスは、上記共通クラスを継承(extends)することで、上記メンバ変数を持つことができる。
上記ラッパークラスには、COBOLの文字列の定義に対応するラッパークラス、COBOLの小数点を含む数値の定義に対応するラッパークラス、COBOLの小数点を含まない数値の定義に対応するラッパークラス及びCOBOLの集団データ項目の定義に対応するラーパークラスがある。上記小数点を含む数値の定義に対応するラッパークラス及び小数点を含まない数値の定義に対応するラッパークラスは、数値型データを格納する変数、上記数値型データと上記char配列上のデータとの相互変換を行うためのオブジェクト、上記数値型データを格納する変数の有効性を示すフラグ及び上記char配列表現の有効性を示すフラグをメンバ変数に有する。また、COBOLのREDEFINES句で宣言されるデータ項目のデータをJAVA(商標)コード上で管理する機能を提供するラッパークラスは、上記char配列についてのメモリ領域を、上記ラッパークラスから生成される別のオブジェクトに含まれるchar配列についてのメモリ領域と共有するためのメソッドを有する。
上記ラッパークラスは、ライブラリとして提供されうる。
また、上記階層構造の階層は、2段以上49段以下にすることができる。例えば、上記オブジェクト2で管理されるデータが、さらに別のラッパークラスのオブジェクト(以下、オブジェクト3)で管理されるデータの一部分であってもよい。この場合、上記オブジェクト1〜3が、階層構造に属するオブジェクトである。そして、上記オブジェクト1は上記オブジェクト3からみて最も下位階層のオブジェクトであり、上記オブジェクト3は上記オブジェクト1からみて最も上位階層のオブジェクトである。
本発明の実施態様において、COBOLの小数点を含む数値の定義に対応するラッパークラスは、上記数値型データを格納する変数として上記値オブジェクトを有する。値オブジェクトは、例えば、BigDecimalオブジェクトである。また、COBOLの小数点を含まない数値の定義に対応するラッパークラスであって、数値に変換された場合、プリミティブ型のデータのレンジ内である数値の定義に対応するラッパークラスは、上記数値型のデータを格納する変数として上記プリミティブ型のデータを格納する変数を有する。なお、COBOLにおける小数点を含まない数値データであって、上記プリミティブ型の変数に格納されるとレンジあふれをしてしまうような桁数の多い上記数値データを管理するラッパークラスのオブジェクトは、上記プリミティブ型のデータを格納する変数を有しない。COBOLにおけるデータの文字数が、上記プリミティブ型のデータを格納する変数のレンジ内であることが保証される場合のみ、COBOLの小数点を含まない数値の定義に対応するラッパークラスは、上記プリミティブ型のデータを格納する変数を有する。ここで、上記プリミティブ型のデータを格納する変数は、int型またはlong型の変数である。なお、上記プリミティブ型の変数に格納されるとレンジあふれをしてしまうような桁数の多い上記数値データを管理するラッパークラスのオブジェクトは、COBOLの小数点を含む数値の定義に対応するラッパークラスと同様に、値オブジェクトを有する。該値オブジェクトは、例えば、BigIntegerオブジェクトである。
COBOLでは、プログラマーは、プログラムで使用するデータ項目を上記データ部にPICTURE句を使って宣言する。以下は、COBOL文(101)の2行目を例にした、COBOLにおける上記宣言の説明である。
COBOL文(101)の2行目1番目の項目(102)は、2行目で定義されるデータ項目の属する階層レベルが「02」であることを示す。該階層レベルについては後述する。
COBOL文(101)の2行目の2番目の項目(103)は、2行目で定義されるデータ項目の名前が「Name」であることを示す。
COBOL文(101)の2行目の3番目の項目(104)は、2行目で定義されるデータ項目が任意の10文字の文字列であることを示す。「PIC」は、PICTURE句を示す。PICに続く記述は、データ項目のデータ領域内のサイズ及びタイプを示す。Xは任意の文字列であり、Aはアルファベット文字であり、9は数値を示す。括弧内の記述は桁数を示す。また、Vは、小数点の位置を示す。例えば、該記述が999であるならば、データ項目は3桁の数値である。該記述がA(20)であるならば、データ項目は20文字のアルファベット文字である。該記述が9(10)V99であるならば、データ項目は、10桁で小数点以下2桁を含む数値である。
COBOL文(101)の2行目の4番目の項目(105)は、2行目で定義されるデータ項目に与えられた初期値がスペースであることを示す。「VALUE」は、VALUE句を示し初期値を表す。VALUE句は任意に指定可能である。上記指定がない場合は、文字データの場合はスペース、数値データの場合は0がセットされる。
上記集団データ項目の要素には、別の集団データ項目も含めることができる。例えば、COBOL文(101)において、2行目のデータ項目であるNameは、さらに、データ項目であるFamilyName及びPersonalNameを集めた集団データ項目に変更することができる。上記FamilyName及びPersonalNameは、階層レベルが「03」以上「49」以下のデータ項目として定義される。階層レベルの上限が「49」である理由は、COBOLにおいて、階層は最高49段まで重ねることができるからである。このように、階層的なデータ構造をなすデータ項目において、階層レベルの値が小さいデータ項目は上位階層のデータ項目となり、階層レベルの値が大きいデータ項目は下位階層のデータ項目となる。
COBOLにおいて、集団データ項目に対してのデータのセット及びゲットの操作は、集団データ項目の要素である全てのデータ項目に対して適用される。例えば、COBOL文(101)において、構造体配列StudentRecordのn要素目にデータ「ABCDEFGHIJ12345678901」がセットされたとする(MOVE DATA TO StudentRecord(n))。該セットの後に、構造体配列StudentRecordのn要素目のデータ項目MathScoreがゲットされた場合、得られるデータは「123」である。このように、COBOLでは、一括でセットされたデータの個々のデータ項目のデータが取得される。そして、該取得されたデータを使って処理が実行される。
また、上記構造体配列StudentRecordのn要素目のデータ項目MathScoreが「123」から「987」に変更されたとする。該変更の後に、構造体配列StudentRecordのn要素目がゲットされた場合、得られるデータは「ABCDEFGHIJ98745678901」である。このように、COBOLでは、個々のデータ項目に対してセットされたデータが、集団データ項目を使用してまとめて取得されうる。そして、該取得されたデータを使って、例えば、全体を集計する処理が実行される。
また、上記データのセット及びゲットの操作は、どの階層レベルのデータ項目に対しても実行できる。上記データのセット及びゲットの操作において、データのサイズが指定されている場合、サイズ分だけの操作が、データに適用される。
COBOL文(107)は、REDEFINES句の例を示す。COBOL文(107)の1行目は、36文字の文字列のデータ項目であるMonthDefを定義したものである。MonthDefに対するデータ領域には、初期値として「JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC」が設定されている。そして、上記MonthDefに対するデータ領域が、COBOL文(107)の2行目におけるREDEFINES句によって、MonthNameに対するデータ領域として共有されている。
COBOL文(107)の3行目は、MonthNameの下位階層に配列Monthを定義したものである。配列Monthは、3文字の文字列である。また、配列Monthの要素数は12である。ここで、MonthNameに対するデータ領域は、MonthDefに対するデータ領域と共有されている。そのため、MonthNameの下位階層のデータ項目である配列Monthに対するデータ領域もまた、MonthDefに対するデータ領域と共有されている。従って例えば、MonthNameの3番目の要素であるMonth(3)に対して“XXX”を代入し、データ項目であるMonthDefを表示する以下の命令、
MOVE “XXX” TO Month(3)
DISPLAY “MonthDef = ” MonthDef
が実行されると、表示されるMonthDefの値は、「JANFEBXXXAPRMAYJUNJULAUGSEPOCTNOVDEC」である。
public class COMMON_DATA {
private char [ ] _body; // 値のchar配列本体
private final int _length; // 文字数
private int _start; // char配列へのオフセット
}
共通クラスは、文字データを格納するchar配列(_body)、データの文字数を格納する変数(_length)及びデータが格納される位置を表すオフセット値を格納する変数(_start)をフィールドに有する。変数(_body)は、char配列へのポインタを格納するための領域である。変数(_length)は、データの文字数を格納するための領域である。変数(_start)は、char配列本体において、データが開始される位置を格納するための領域である。
ラッパークラスCHARSは、上記共通クラスを継承したクラスとして実装される。ラッパークラスCHARSのフィールドは、共通クラスのフィールドのみで構成される。ラッパークラスCHARSから生成されるオブジェクトは、JAVA(商標)において文字列を表すデータ型を操作するStringオブジェクトと同様に、データ本体として内部に文字データを格納するchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。
ラッパークラスDECIMALは、共通クラスを継承したものとして実装される。該継承により、ラッパークラスDECIMALから生成されるオブジェクトは、小数点を含む数値を文字列として格納するためのchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスDECIMALは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class DECIMAL extends COMMON_DATA {
private BigDecimal _value; // 値オブジェクト
private DecimalFormat _format; //フォーマット
private boolean _validValue; /値オブジェクトの有効性フラグ
private boolean _validChar; //値のchar配列表現の有効性フラグ
}
ラッパークラスDECIMALは、上記共通クラスが有する変数に加え、値オブジェクト(_value)、相互変換オブジェクト(_format)、値オブジェクトの有効性フラグ(_validValue)及び値のchar配列表現の有効性フラグ(_validChar)をフィールドに有する。値オブジェクト(_value)は、数値型でデータ本体を有するための、BigDecimal型オブジェクトである。なお、BigDecimalは、JAVA(商標)言語において任意精度の符号付き10進小数を表すデータ型を操作するためのクラスである。相互変換オブジェクト(_format)は、数値と文字列とを相互に変換する機能を有するDecimalFormat型オブジェクトである。相互変換オブジェクト(_format)は、数値のフォーマット毎にスレッド単位で同じインスタンスであることが実行効率の点から望まれる。値オブジェクトの有効性フラグ(_validValue)は、値オブジェクト(_value)の有するデータが、char配列に設定されているデータの更新により、最新の状態ではなくなったことを示すフラグである。値のchar配列表現の有効性フラグ(_validChar)はchar配列に設定されているデータが、値オブジェクト(_value)の有するデータの更新により、最新の状態ではなくなったことを示すフラグである。
ラッパークラスINTは、共通クラスを継承したものとして実装される。該継承により、ラッパークラスINTのオブジェクトは、小数点を含まない数値を文字列として格納するためのchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスINTは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class INT extends COMMON_DATA {
private int _value; // 値
private boolean _validValue; //値の有効性フラグ
private boolean _validChar; //値のchar配列表現の有効性フラグ
}
ラッパークラスINTは、上記共通クラスの有する変数に加え、値変数(_value)、値の有効性フラグ(_validValue)及び値のchar配列表現の有効性フラグ(_validChar)をフィールドに有する。値変数(_value)は、数値型でデータ本体を有するための、int型変数である。値の有効性フラグ(_validValue)は、値変数(_value)の有するデータが、char配列に設定されているデータの更新により、最新の状態ではなくなったことを示すフラグである。値のchar配列表現の有効性フラグ(_validChar)はchar配列に設定されているデータが、値変数(_value)の有するデータの更新により、最新の状態ではなくなったことを示すフラグである。
ラッパークラスSTRUCTは、上記共通クラスを継承した内部又は外部クラスとして実装される。ラッパークラスSTRUCTのオブジェクトは、下位の階層のデータを一括して表現するため、内部に文字データを格納するchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスSTRUCTは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class STRUCT extends COMMON_DATA {
private Object[] _fields; // 下位階層データオブジェクト
}
ラッパークラスSTRUCTは、上記共通クラスが有する変数に加え、下位階層データオブジェクト(_fields)をフィールドに有する。下位階層データオブジェクト(_fields)は、直属の下位階層のデータオブジェクトを配列として保持するものである。なお、本明細書においてラッパークラスSTRUCTは、階層クラスともいう。
また、DECIMALクラスに対してchar配列のセットが行われた場合、対応するBigDecimalオブジェクトにおいて、使用できないことを示すフラグがセットされる(_validValue = false)。該フラグは、値の有効性フラグである。数値のデータが必要になった場合、最新のchar配列にセットされている文字列とDecimalFormatオブジェクトから、新たに数値型でデータを格納するためのBigDecimalが生成される。
INTクラスに対してchar配列のセットが行われた場合、対応するINTオブジェクトにおいて、使用できないことを示すフラグがセットされる(_validValue = false)。該フラグは、値の有効性フラグである。数値のデータが必要になった場合、最新のchar配列にセットされている文字列から、JAVA(商標)の標準ライブラリ関数を使用して、新たにint型の数値データが生成される。
また逆に、DECIMALクラスの値オブジェクト又はINTクラスの値のデータ(_value)が更新された場合、対応するchar配列が無効であることを示すフラグがセットされる(_validChar = false)。該フラグは、値のchar配列表現の有効性フラグである。上位階層からデータが取得される際は、下位階層の全てのDECIMALオブジェクト及びINTオブジェクトのchar配列が有効であることが確認されなければならない。
該データがDECIMALクラスで扱われる数値データの場合、数値型のフォーマットのデータが値オブジェクト(_value)に格納される。また、数値データがchar配列で与えられた場合、相互変換オブジェクト(_format)によって文字列で与えられた数値データが数値型に変換され、値オブジェクト(_value)に格納されてもよい。
該データがINTクラスで扱われる数値データの場合、数値型のフォーマットのデータが値変数(_value)に格納される。また、数値データがchar配列で与えられた場合、JAVA(商標)の標準ライブラリ関数によって文字列で与えられた数値データが数値型に変換され、値変数(_value)に格納されてもよい。
なお、上記値オブジェクト(_value)又は上記値変数(_value)に新しくデータが格納された場合、数値型データを格納する変数の有効性フラグが有効に設定され、値のchar配列表現の有効性フラグが無効に設定される。
ゲットされるデータが数値データならば、変数の有効性フラグが無効に設定されていた場合、char配列データから数値データを生成し直し、値オブジェクト(_value)又は値変数(_value)にセットする必要がある。上記値オブジェクト(_value)又は値変数(_value)からデータが取得されるためには、数値型データを格納する変数の有効性フラグが有効に設定されている必要がある。
プログラム実行時において、階層を有する集団データ項目に対応するデータへのセットの命令が実行されると、該データを格納するためのchar配列がポイントされているかの判定が行われる(ステップ201)。
上記char配列がポイントされていない場合、上記char配列のメモリ領域は確保されていない。よって、上記データが格納される領域を確保するため、char配列本体が生成される(ステップ202)。ここで生成されるchar配列本体のサイズは、階層クラスの下位階層の全てのラッパークラスのオブジェクトの変数にセットされている文字数の合計サイズである。
次に、char配列本体に上記データがセットされる(ステップ203)。
次に、下位階層の全てのラッパークラスのオブジェクトについて、以下の処理が実行される(ステップ204)。
下位階層の全てのラッパークラスのオブジェクトのchar配列は、階層クラスのオブジェクトの上記char配列本体と共有される。まず、上記下位階層全てのラッパークラスのオブジェクトにおいて、上記char配列本体がポイントされる(ステップ205)。また、各項目の指定長だけ位置をずらしながらオフセット値がセットされる(ステップ206)。上記指定長は、例えば下位階層のオブジェクトの変数にセットされた文字数を順に加えていくことで求められる。
次に、下位階層ラッパークラスのオブジェクトのデータが数値型データの場合、数値型データを格納する変数の有効性フラグが無効に設定され、char配列表現の有効性フラグが有効に設定される(ステップ208)。なお上記2つのフラグは、ラッパークラスのオブジェクトにおいて、既に数値型でデータが保持されている場合に設定される。また、下位階層のラッパークラスのオブジェクトがSTRUCT型の場合は、上記の処理(ステップ205〜208)が再帰的に実行される。
下位階層の全てのラッパークラスのオブジェクトについて、上記ステップ205〜208が終了すると、階層クラスのオブジェクトにおけるセットの処理は終了する。
プログラム実行時において、階層を有する集団データ項目に対応するデータへのゲットの命令が実行されると、該データを取得するためのchar配列がポイントされているかの判定が行われる(ステップ221)。
上記char配列がポイントされている場合、上記char配列のメモリ領域は確保されている。よってchar配列本体からデータがゲットされ(ステップ228)、処理は終了する。なお、該取得において、下位階層の全ての数値型のラッパークラスのオブジェクトが有するchar配列表現の有効性フラグが確認されなければならない。該フラグが無効ならば、上記ラッパークラスのオブジェクトの有する数値型データを格納する変数からchar型の配列に変換し、有効とする必要がある。
上記char配列がポイントされていない場合、上記char配列のメモリ領域は確保されていない。よって、上記データが格納される領域を確保するため、char配列本体が生成される(ステップ222)。ここで生成されるchar配列本体のサイズは、階層クラスの下位階層の全てのラッパークラスのオブジェクトの変数にセットされている文字数の合計サイズである。
次に、下位階層の全てのラッパークラスのオブジェクトについて、以下の処理が実行される(ステップ223)。
下位階層の全てのラッパークラスのオブジェクトのchar配列は、階層クラスのオブジェクトの上記char配列本体と共有される。まず、上記下位階層全てのラッパークラスのオブジェクトにおいて、上記char配列本体がポイントされる(ステップ224)。また、各項目の指定長だけ位置をずらしながらオフセット値がセットされる(ステップ225)。上記指定長は、例えば下位階層のオブジェクトの変数にセットされた文字数を順に加えていくことで求められる。
さらに、下位階層のラッパークラスのオブジェクトにおいて、既にchar配列が生成されていた場合、ステップ222において生成されたchar配列本体に、下位階層のラッパークラスのオブジェクトが有するデータがコピーされる。(ステップ227)。ここで、該下位階層のラッパークラスのオブジェクトが数値型の場合、char配列表現の有効性フラグがチェックされる。該フラグが無効に設定されているならば、数値データから変換された文字データがコピーされる。また、char配列表現の有効性フラグが有効に設定される。なお、上記コピーされるデータのchar配列本体上での位置は、下位階層のラッパークラスのオブジェクトが有するオフセット値から求められる。また、上記数値データから文字データへの変換は、INTクラスのオブジェクトでは、JAVA(商標)の標準ライブラリ関数によって実現され、DECIMALクラスのオブジェクトでは、相互変換オブジェクトによって実現される。なお、下位階層のオブジェクトについてのchar配列本体は解放されてもよい。
下位階層の全てのラッパークラスのオブジェクトについて、上記ステップ224〜227が終了するとchar配列本体からデータがゲットされ(ステップ228)、階層クラスのオブジェクトにおけるゲットの処理は終了する。
COBOL文(図1、101)で表わされる構造体配列は、JAVA(商標)コード(231)で表わされる構造体配列に変換される。該構造体に対して、char配列が共有されると、内部的には、オブジェクト構造(232)に示す構造となる。オブジェクト構造(232)において、CHARS、INT及びDECIMALの各オブジェクトは、char配列へのポインタとオフセット値を用いて、各自の領域をポイントしている。char配列の共有は、上位階層クラスのオブジェクトStudentRecord[x]の単位でアクセスされたときに初めて行われる。よって、それ以前に下位階層のオブジェクトが直接更新されていた場合、図の点線で描かれた部分のように、以前のデータ領域は捨てられる。そして、新しくポインタがすげ替えられる。また、必要ならばデータのコピーが行なわれる。
REDEFINES句の例であるCOBOL文(図1、107)は、JAVA(商標)コード(241)に変換される。
データ領域が共有される側のオブジェクトであるmonthDefは、ラッパークラスCHARSのオブジェクトとして生成される。該オブジェクトの生成において、初期値が指定されている。よって、char配列もアロケートされ、データ「JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC」が設定される。
データ領域を共有する側のオブジェクトであるmonthNameは、ラッパークラスSTRUCTを継承するクラスであるMonthNameのオブジェクトとして生成される。該クラスの定義において、配列monthを格納するための配列は定義されるが、データは設定されない。代わりに、該オブジェクト生成時に実行されるコンストラクタにおいて、データ領域が共有される側のオブジェクトであるmonthDefがredefine()メソッドに渡される。上記メソッドによって、char配列が共有される。
オブジェクト構造(242)は、monthName及びmonthDefとchar配列との関係を示す。
monthDefは、char配列をポイントしている。
monthNameは、12のmonthで構成される。monthは、char配列の対応する個所をポイントしている。対応する個所とは、char配列の0番目の要素、3番目の要素、・・・33番目の要素である。これは、monthは、文字数が3の配列だからである。また、ポイントするとは、共通クラスのフィールドに含まれるchar配列へのポインタ及びオフセットを用いて、char配列の要素を指すことである。
上記COBOLコードにおいてデータ項目が定義される個所が、JAVA(商標)コードに変換されうる。以下に該変換の手順を示す。
まず、上記COBOLコードにおいて、データ項目が定義されるセクションである「WORKING-STORAGE SECTION.」が検索される(ステップ301)。上記「WORKING-STORAGESECTION.」が発見されると、上記COBOLコードは、1行ずつ精査される。該精査は、精査されている現在の行(以下、第1の行)の次の行(以下、第2の行)に、階層型データ構造の特徴である「階層レベル」が含まれなくなるまで行われる(ステップ302)。該精査において、まず、上記第1の行と上記第2の行の「階層レベル」の値が比較される。(ステップ303)。
・上記第1の行の「階層レベル」の値が、上記第2の行の「階層レベル」の値より小さい場合、上記第1の行で定義されたデータ項目は、集団データ項目である。よって、上記第1の行は、ラッパークラスSTRUCTのオブジェクトを定義する行に変換される(ステップ304)。該変換は、例えば、次のような変換である。
public class (データ項目の名前) extends STRUCT{
次に、上記第1の行に「REDEFINE」が含まれるかどうかが調べられる(ステップ305)。上記「REDEFINE」が含まれる場合、メソッドredefine()を出力するための情報がスタックに格納される(ステップ306)。該情報は、例えば、コンストラクタの部分を作成する為に必要な、データ項目の名前である。次に、構造体を閉じるために必要な情報が格納される(ステップ307)。該情報は、第1の行の階層レベル及びオブジェクトを定義し生成するために必要なデータ項目の名前である。また、データ項目が配列に対応するならば、配列の要素数も該情報に含まれる。
・上記第1の行の「階層レベル」の値が、上記第2の行の「階層レベル」の値以上の値である場合、上記第1の行で定義されたデータ項目は、下位階層のデータ項目を持たないデータ項目である。よって、上記第1の行は、データ項目のタイプに対応したラッパークラスのオブジェクトを定義し生成する行に変換される(ステップ308)。該変換は、例えば、次のような変換である。
private ラッパークラス(データ項目の名前)= new ラッパークラス(文字数);
ここで、COBOLのPICTURE句において、タイプとして「X」又は「A」が指定されたデータ項目に対応するオブジェクトは、ラッパークラスCHARSによって定義される。また、COBOLのPICTURE句において、タイプとして「9」が指定され「V」を含むデータ項目に対応するオブジェクトは、ラッパークラスDECIMALによって定義される。COBOLのPICTURE句において、タイプとして「9」が指定され且つ「V」を含まないデータ項目に対応するオブジェクトは、ラッパークラスINTによって定義される。
次に、構造体の後処理(ステップ309)が実行される。該後処理では、上記第1の行と上記第2の行の階層レベルと、スタックに格納されている構造体に変換された行の階層レベルが比較される。そして、
上記第2の階層レベル=<スタックに格納された階層レベル
の条件を満たす数分の閉じ括弧及び構造体オブジェクトの生成処理が出力される。また、メソッドredefine()を出力するための情報が格納されている場合は、該情報も出力される。
精査する行が残り1行になると、最後の1行を精査する処理(ステップ311)が実行される。該処理では、データ項目のタイプに対応したラッパークラスのオブジェクトを定義し生成する処理(ステップ308)及び構造体の後処理(ステップ309)が実行される。
COBOLプログラム(401)は、製品工場の製品番号ごとに製品を集計するプログラムである、該プログラムは、製品番号でソートされたデータをファイルから読み込んで、製品番号ごとの集計結果を出力する。
従来の方法とは、COBOLにおけるデータ型を対応するJAVA(商標)のデータ型に変換させる方法である。具体的には、PIC X(*)は、String型に変換する。PIC 9(*)は、BigDecimal型又はint型に変換する。また、階層構造は、独自に内部クラスを作成し、該内部クラスを用いて定義される構造体に変換される。該構造体に含まれるデータ領域は、構造体の外にも重複して定義される。なお、JAVA(商標)プログラム(402)においてgetdata()メソッドの行う処理である入力読み込み処理は、測定時においてインライン処理として実行されている。
検証者は、該検証に100,000件のレコードを使用し、ヒープメモリ使用量及び実行時間を計測した。また、該測定にIBM(商標)JAVA(商標)5.0が使用された。JITコンパイル時間及びGC(ガーベージコレクション)時間を排除するために、検証者は、main()メソッドに手を加え、JAVA(商標)プログラム(402、403)の実行において、初めにウォームアップランとして同じ入力サイズのレコードを使用してプログラムの実行を10回繰り返した。また、検証者は、上記繰り返しの後、ガーベージコレクションを実行する命令であるSystem.gc()を実施し、その後、上記計測を開始した。また、検証者は、JAVA(商標)の実行オプションに、-Xjit:optLevel=hot,count=3 -Xms512m -Xmx512mを指定した。また、検証者は、測定中にGCが発生していないことを確認した。
表(404)は、上記検証の結果を示す。
本発明の実施態様による変換コードを用いた場合、実行時間は218ミリ秒であり、ヒープメモリの使用量は131.3メガバイトであった。
従来の方法による変換コードを用いた場合、実行時間は282ミリ秒であり、ヒープメモリの使用量は192.2メガバイトであった。
上記結果より、本発明の実施態様による変換コードを用いた場合、従来の方法による変換コードを用いた場合と比べて、20%以上の実行時間が短縮され、且つ30%以上のヒープメモリ使用量が削減された。
コンピュータ・システム(501)は、CPU(502)及びメモリ(503)を含む。メモリ(503)は、プログラム(504)を保持する。プログラム(504)は、JAVA(商標)コードを含む。該JAVAコードはラッパークラスのオブジェクトに含まれるセット又はゲットの命令を含み、上記オブジェクトの扱うデータはCOBOL言語におけるデータ項目に対応する。
CPU(502)は、メモリ(503)に保持されたプログラム(504)を読み出して実行する。CPU(502)は、プログラム内のラッパークラスのオブジェクトを呼び出す。CPU(502)は、該オブジェクトのアクセスの対象であるchar配列の上位階層のchar配列が生成されている場合、上記上位階層のchar配列を指すポインタ、文字数及びオフセットを保持する。CPU(502)は、該オブジェクトのアクセスの対象であるchar配列の上位階層のchar配列が生成されていない場合、上記オブジェクトのアクセスの対象である上記char配列を生成する。さらにCPU(502)は、上記オブジェクトのアクセスの対象である上記char配列の下位階層のchar配列にアクセスするためのそれぞれのオブジェクトに、上記char配列を指すポインタ、文字数及びオフセットを保持させる。
図6Aは、COBOLコード、ラッパークラス及び第1〜4の各オブジェクトの関係を示す。
図6Bは、ラッパークラスと第1のオブジェクトとの関係を示す。請求項4及び9の各構成要素は、請求項3の各構成要素に対応する。請求項9の各構成要素はまた、請求項8の各構成要素に対応する。
図6Cは、ラッパークラスと第2のオブジェクトとの関係を示す。請求項5の各構成要素は、請求項3の各構成要素に対応する。
図6Dは、ラッパークラスと第3のオブジェクトとの関係を示す。請求項10及び11の各構成要素は、請求項3の構成要素に対応する。
図6Eは、ラッパークラスと第4のオブジェクトとの関係を示す。請求項12及び14の各構成要素は、請求項3の各構成要素に対応する。請求項14の各構成要素はまた、請求項8の各構成要素に対応する。
コンピュータ・システム(701)は、CPU(703)とメイン・メモリ(702)と含み、これらはバス(714)に接続されている。CPU(703)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のXeon(商標)シリーズ、Core(商標)シリーズ、Atom(商標)シリーズ、Pentium(商標)シリーズ、Celeron(商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ及びSempron(商標)などを使用することができる。バス(714)には、ディスプレイ・コントローラ(707)を介して、LCDモニタなどのディスプレイ(712)が接続される。ディスプレイ(712)は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス(714)にはまた、IDE又はSATAコントローラ(704)を介して、ハードディスク又はシリコン・ディスク(705)と、CD−ROM、DVDドライブ又はBDドライブ(706)が接続される。
Claims (22)
- COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行するコンピュータ・システムであって、
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有するJAVAコードを含むプログラムを保持する記憶部であって、前記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、前記記憶部と、
前記プログラムを前記記憶部からメモリ内に読み出し、該プログラムを実行するCPUと
を含み、
前記ラッパークラスが、COBOLコードにおいて宣言されているデータ項目のデータ(以下、第1のデータ)に対応するデータ(以下、第2のデータ)を管理する機能を有し、
前記ラッパークラスが、
前記第2のデータを格納する第1のchar配列と、
前記第2のデータの文字数を格納する変数と、
前記第2のデータが格納される位置を表すオフセット値を格納する変数と
を含み、
前記ラッパークラスが、
数値型データを格納する変数と、
前記数値型データと前記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
前記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含む、
前記コンピュータ・システム。 - 前記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)が、
前記第2のデータに対応する第3のデータを管理し、及び
前記第1のchar配列に対応する第2のchar配列と、
前記第3のデータの文字数を格納する前記変数に対応する第1の変数と、
前記第3のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第2の変数と
を含む、請求項1に記載のコンピュータ・システム。 - 前記第2のchar配列が、
前記第3のデータを格納し、又は、
前記第1のオブジェクトの属する階層構造において上位階層にあり且つ前記ラッパークラスから生成されるところのオブジェクト(以下、第2のオブジェクト)に含まれる第3のchar配列についてのメモリ領域を共有し、
ここで、前記第2のオブジェクトは、前記第1のchar配列に対応する前記第3のchar配列を含み、及び前記第3のchar配列に対して前記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
前記第3のchar配列は、前記第3のデータが格納される前記メモリ領域を含む、請求項2に記載のコンピュータ・システム。 - 前記第1の変数が、前記第3のデータの文字数を格納する、請求項3に記載のコンピュータ・システム。
- 前記第2の変数が、前記メモリ領域上で前記第3のデータが格納される位置を表すオフセット値を格納する、請求項3に記載のコンピュータ・システム。
- 前記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)が、
前記第2のデータに対応する第3のデータを管理し、及び
前記第1のchar配列に対応する第2のchar配列と、
前記第3のデータの文字数を格納する前記変数に対応する第1の変数と、
前記第3のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第2の変数と、
前記数値型データを格納する前記変数に対応する第3の変数と、
前記数値型データを格納する変数の有効性を示す前記フラグに対応する第1のフラグと、
前記char配列表現の有効性を示す前記フラグに対応する第2のフラグと
を含み、
前記ラッパークラスが前記相互変換を行うためのオブジェクトを含む場合、前記相互変換を行うためのオブジェクトに対応する第1の相互変換オブジェクトと
をさらに含む、請求項1に記載のコンピュータ・システム。 - 前記ラッパークラスが、前記第1のchar配列についてのメモリ領域を共有する命令をさらに含み、
前記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)が、前記第1のchar配列に対応する第2のchar配列及び前記共有する命令を含み、
前記第1のオブジェクトの共有する命令が、
前記第2のchar配列についてのメモリ領域を、前記ラッパークラスから生成され且つ前記第1のchar配列に対応する第4のchar配列を有するところの第3のオブジェクトに含まれる前記第4のchar配列についてのメモリ領域と共有する命令
を含む、請求項1に記載のコンピュータ・システム。 - 前記第2のデータが、COBOLのREDEFINES句で宣言される第1のデータに対応するデータであり、
前記第1のオブジェクトの共有する命令が、前記第1のオブジェクトの生成において実行されるコンストラクタに含まれる、請求項7に記載のコンピュータ・システム。 - 前記ラッパークラスが、前記第1のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも1のオブジェクト(以下、第4のオブジェクト)の定義をさらに含み、
前記CPUが下記命令をさらに実行し、該命令が、
前記第3のデータのセット又はゲットの命令を実行する命令と、
前記第2のchar配列についてのメモリ領域が割り当てられていない場合、
前記第2のchar配列に対してメモリ領域を割り当てる命令と、
前記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有する命令であって、
前記第4のオブジェクトが、
前記第2のデータに対応する第4のデータを管理し、及び
前記第1のchar配列に対応する前記第5のchar配列と、
前記第4のデータの文字数を格納する前記変数に対応する第4の変数と、
前記第4のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第5の変数と
を含む、前記共有する命令と、
前記第5の変数に対して、前記第4のデータの前記第2のchar配列についての前記メモリ領域における位置を設定する命令と
を含む、請求項2に記載のコンピュータ・システム。 - 前記共有する命令が、
前記第5のchar配列に対してメモリ領域が割り当てられている場合に、前記第5のchar配列に格納された前記第4のデータを前記第2のchar配列にコピーする命令をさらに含む、請求項9に記載のコンピュータ・システム。 - 前記ラッパークラスが、前記第1のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも1のオブジェクト(以下、第4のオブジェクト)の定義をさらに含み、
前記CPUが下記命令をさらに実行し、該命令が、
前記第3のデータのセット又はゲットの命令を実行する命令と、
前記第2のchar配列についてのメモリ領域が割り当てられていない場合、
前記第2のchar配列に対してメモリ領域を割り当てる命令と、
前記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有する命令であって、
前記第4のオブジェクトが、
前記第2のデータに対応する第4のデータを管理し、及び
前記第1のchar配列に対応する前記第5のchar配列と、
前記第4のデータの文字数を格納する前記変数に対応する第4の変数と、
前記第4のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第5の変数と、
前記数値型データを格納する前記変数に対応する第6の変数と、
前記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
前記数値型データを格納する変数の有効性を示す前記フラグに対応する第3のフラグと、
前記char配列表現の有効性を示す前記フラグに対応する第4のフラグと
を含む、前記共有する命令と、
前記第5の変数に対して、前記第4のデータの前記第2のchar配列についての前記メモリ領域における位置を設定する命令と
を含む、請求項6に記載のコンピュータ・システム。 - 前記共有する命令が、
前記第5のchar配列に対してメモリ領域が割り当てられている場合に、前記第5のchar配列に格納された前記第4のデータを前記第2のchar配列にコピーする命令をさらに含む、請求項11に記載のコンピュータ・システム。 - 前記コピーする命令が、
前記第4のオブジェクトの有する前記第3のフラグを無効に設定する命令
をさらに含む、請求項12に記載のコンピュータ・システム。 - セットされるデータとして数値型データが与えられた場合、前記CPUが下記命令をさらに実行し、該命令が、
前記第3の変数に前記数値型データをセットする命令と、
前記第2のフラグを無効に設定する命令と
を含む、請求項6に記載のコンピュータ・システム。 - 前記第3の変数に前記数値型データをセットする命令が、
前記第1のフラグを有効に設定する命令
をさらに含む、請求項14に記載のコンピュータ・システム。 - 前記命令の実行がゲットの命令であり、
前記CPUが下記命令をさらに実行し、該命令が、
前記メモリ領域が共有された前記第5のchar配列から前記第4のデータを取り出す命令
を含む、請求項11に記載のコンピュータ・システム。 - 前記命令の実行がゲットの命令であり、
前記CPUが下記命令をさらに実行し、該命令が、
前記第4のフラグを取得し、該取得した第4のフラグが有効に設定されていることを確認する命令
を含む、請求項16に記載のコンピュータ・システム。 - 前記CPUが下記命令をさらに実行し、該命令が、
前記第3の変数から数値型データを取得する命令と、
前記第1の相互変換オブジェクトを用いて、前記取得したデータを文字型のデータに変換する命令と、
前記変換された文字型のデータを前記第2のchar配列に設定する命令と、
前記第2のフラグを有効に設定する命令と
を含む、請求項6に記載のコンピュータ・システム。 - 前記CPUが下記命令をさらに実行し、該命令が、
前記第2のchar配列から文字型のデータを取得する命令と、
前記第1の相互変換オブジェクトを用いて、前記取得した文字型のデータを数値型データに変換する命令と、
前記変換された数値型データを前記第3の変数に設定する命令と、
前記第1のフラグを有効に設定する命令と
を含む、請求項6に記載のコンピュータ・システム。 - COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行する方法において、コンピュータ・システムに下記ステップを実行させる方法であって、
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有する前記プログラムを記憶部からメモリ内に読み出すステップであって、前記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、前記読み出すステップと、
前記読み出したプログラムを実行するステップと
を含み、
前記ラッパークラスが、COBOLコードにおいて宣言されているデータ項目のデータ(以下、第1のデータ)に対応するデータ(以下、第2のデータ)を管理する機能を有し、
前記ラッパークラスが、
前記第2のデータを格納する第1のchar配列と、
前記第2のデータの文字数を格納する変数と、
前記第2のデータが格納される位置を表すオフセット値を格納する変数と
を含み、
前記ラッパークラスが、
数値型データを格納する変数と、
前記数値型データと前記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
前記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含む、
前記方法。 - COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行する方法において、コンピュータ・システムに下記ステップを実行させる方法であって、
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有するJAVAコードを含むプログラムを記憶部からメモリ内に読み出すステップであって、
前記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言であり、前記ラッパークラスは、COBOLコードにおいて宣言されているデータ項目のデータ(以下、第1のデータ)に対応するデータ(以下、第2のデータ)を管理する機能を有し、
前記ラッパークラスは、
前記第2のデータを格納する第1のchar配列と、
前記第2のデータの文字数を格納する変数と、
前記第2のデータが格納される位置を表すオフセット値を格納する変数と、
数値型データを格納する0又は1の変数と、
前記数値型データと前記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
前記数値型データを格納する変数の有効性を示す0又は1のフラグと、
char配列表現の有効性を示す0又は1のフラグと、
前記ラッパークラスから生成される0以上のオブジェクトの定義と
を含み、
前記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)は、
前記第2のデータに対応する第3のデータを管理し、及び
前記第1のchar配列に対応する第2のchar配列と、
前記第3のデータの文字数を格納する前記変数に対応する第1の変数と、
前記第3のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第2の変数と、
前記第1のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも1のオブジェクト(以下、下位階層のオブジェクト)と
を含み、
前記下位階層のオブジェクトは、
前記第2のデータに対応する第4のデータを管理し、及び
前記第1のchar配列に対応する前記第3のchar配列と、
前記第4のデータの文字数を格納する前記変数に対応する第3の変数と、
前記第4のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第4の変数と、
前記数値型データを格納する前記変数に対応する第5の変数と、
前記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
前記数値型データを格納する変数の有効性を示す前記フラグに対応する第1のフラグと、
前記char配列表現の有効性を示す前記フラグに対応する第2のフラグと
を含む、
前記読み出すステップと、
前記第3のデータのセット又はゲットの命令を実行するステップと、
前記第2のchar配列についてのメモリ領域が割り当てられていない場合、
前記第2のchar配列に対してメモリ領域を割り当てるステップと、
前記下位階層のオブジェクトに含まれる第3のchar配列についてのメモリ領域を共有するステップと、
前記第4の変数に対して、前記第4のデータの前記第2のchar配列についての前記メモリ領域における位置を設定するステップと
を含む、前記方法。 - コンピュータに、請求項20又は21に記載の方法の各ステップを実行させるコンピュータ・プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008253637A JP5147626B2 (ja) | 2008-09-30 | 2008-09-30 | Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008253637A JP5147626B2 (ja) | 2008-09-30 | 2008-09-30 | Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2010086218A JP2010086218A (ja) | 2010-04-15 |
JP5147626B2 true JP5147626B2 (ja) | 2013-02-20 |
Family
ID=42250130
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008253637A Expired - Fee Related JP5147626B2 (ja) | 2008-09-30 | 2008-09-30 | Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5147626B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5464673B2 (ja) * | 2011-08-23 | 2014-04-09 | Necシステムテクノロジー株式会社 | コンパイル支援装置、コンパイル支援方法、及びプログラム |
JP6251158B2 (ja) * | 2014-12-12 | 2017-12-20 | Tis株式会社 | プログラム変換システム |
JP6458196B1 (ja) * | 2018-09-27 | 2019-01-23 | Tis株式会社 | プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 |
JP6475888B1 (ja) * | 2018-10-05 | 2019-02-27 | Tis株式会社 | プログラム変換システム |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4724387B2 (ja) * | 2004-06-24 | 2011-07-13 | 富士通株式会社 | プログラム変換プログラム、プログラム変換装置およびプログラム変換方法 |
US7386840B1 (en) * | 2004-09-09 | 2008-06-10 | Lockheed Martin Corporation | Method, apparatus, and program for source code translation from COBOL to object-oriented code |
JP5007060B2 (ja) * | 2006-03-28 | 2012-08-22 | 株式会社野村総合研究所 | ジョブ管理装置およびジョブ管理方法 |
-
2008
- 2008-09-30 JP JP2008253637A patent/JP5147626B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2010086218A (ja) | 2010-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gremme et al. | GenomeTools: a comprehensive software library for efficient processing of structured genome annotations | |
Miller et al. | An overview of the CellML API and its implementation | |
JP5851396B2 (ja) | 処理方法 | |
Treichler et al. | Language support for dynamic, hierarchical data partitioning | |
JP6427592B2 (ja) | データ型に関連するデータプロファイリング操作の管理 | |
US8225276B1 (en) | Shared code management | |
US10275226B2 (en) | Structural representation of generic type variable in a nominally typed virtual machine | |
JPH0836494A (ja) | 動的拡張可能オブジェクト用のタイプ・セーフ・フレームワークのための方法及び装置 | |
Verwaest et al. | Flexible object layouts: enabling lightweight language extensions by intercepting slot access | |
US9910591B2 (en) | Visualizations of memory layouts in software programs | |
Murray et al. | Accessible data curation and analytics for international-scale citizen science datasets | |
JP5147626B2 (ja) | Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム | |
CN114930297A (zh) | 单位值集的无锁读取 | |
Braibant et al. | Implementing and reasoning about hash-consed data structures in Coq | |
CN114830099A (zh) | 集成引用和次对象的标记 | |
JP4754004B2 (ja) | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム | |
Li | Java: data structures and programming | |
US20160124646A1 (en) | Building memory layouts in software programs | |
Zakowski et al. | Verifying a concurrent garbage collector using a rely-guarantee methodology | |
Bancila | Modern C++ Programming Cookbook: Master C++ core language and standard library features, with over 100 recipes, updated to C++ 20 | |
Dyer et al. | Boa: An enabling language and infrastructure for ultra-large-scale msr studies | |
Panyala et al. | On the use of term rewriting for performance optimization of legacy HPC applications | |
US10353793B2 (en) | Identifying improvements to memory usage of software programs | |
Bancila | Modern C++ Programming Cookbook | |
Levin et al. | owlcpp: a C++ library for working with OWL ontologies |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110816 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20121010 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20121011 Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20121011 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20121101 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20121101 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20121101 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20121127 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20151207 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |