(57)【特許請求の範囲】
【請求項１】
コンピュータコードをコンパイルする方法であって、
コンピュータのプロセッサが、
抽象コンピュータ命令によるフローグラフを作成するステップであって、前記フローグラフに属する基本ブロックの中に、データオブジェクトを読み取りまたは書き込む命令が存在し、前記抽象命令はコンピュータコードから形成されるパーズ木から変換されるステップと、
前記複数の基本ブロックに深さ優先順序を割り当てるステップと、
前記複数の基本ブロック間の支配関係を決定するステップと、
前記フローグラフ内に任意のループが存在するかどうかを判定し、任意のループが存在する場合に前記ループを識別するステップと、
前記データオブジェクトを読み取りまたは書き込む命令を前記基本ブロックの中から検出するステップと、
前記検出された命令、識別済みのループ、支配関係、および前記複数の基本ブロックの深さ優先順序に従って、少なくとも１つのデータオブジェクトについて作成ポイント、および破壊ポイントを決定するステップと、
前記作成ポイントにおいて前記少なくとも１つのデータオブジェクトを作成し、前記破壊ポイントにおいて前記少なくとも１つのデータオブジェクトを破壊するために、前記コンピュータコード中に命令を挿入するステップと
を備え、作成ポイントを決定するステップは、
前記少なくとも１つのデータオブジェクトの最初の読み取りまたは書き込みを識別し、前記複数の基本ブロックから前記最初の読み取りまたは書き込みが行われる第１の基本ブロックを識別するステップであって、該第１の基本ブロックに、最初の作成ポイントが挿入されるステップと、
前記最初の読み取りまたは書き込みに続いて行われる前記少なくとも１つのデータオブジェクトの読み取りまたは書き込みを識別し、前記複数の基本ブロックから前記次の読み取りまたは書き込みが行われる第２の基本ブロックを識別するステップと、
前記第１の基本ブロックのプリドミネイタと前記第２の基本ブロックのプリドミネイタとの共通部分を計算するステップと、
前記共通部分が、前記第１の基本ブロックを含むかどうかを判定するステップと、
前記共通部分が前記第１の基本ブロックを含まない場合、前記共通部分から新しい作成ポイントを選択するステップと
をさらに含むことを特徴とする方法。
【請求項２】
前記共通部分から新しい作成ポイントを選択するステップは、前記新しい作成ポイントが最初の作成ポイントとは異なるループ内にあるかどうかを判定するステップと、異なるループ内にある場合には、最初の作成ポイントと前記新しい作成ポイントとの間のすべての内部ループをバイパスする新しい作成ポイントを選択するステップとを含むことを特徴とする請求項１に記載の方法。
【請求項３】
コンピュータコードをコンパイルする方法であって、
コンピュータのプロセッサが、
抽象コンピュータ命令によるフローグラフを作成するステップであって、前記フローグラフに属する基本ブロックの中に、データオブジェクトを読み取りまたは書き込む命令が存在し、前記抽象命令はコンピュータコードから形成されるパーズ木から変換されるステップと、
前記複数の基本ブロックに深さ優先順序を割り当てるステップと、
前記複数の基本ブロック間の支配関係を決定するステップと、
前記フローグラフ内に任意のループが存在するかどうかを判定し、任意のループが存在する場合に前記ループを識別するステップと、
前記データオブジェクトを読み取りまたは書き込む命令を前記基本ブロックの中から検出するステップと、
前記検出された命令、識別済みのループ、支配関係、および前記複数の基本ブロックの深さ優先順序に従って、少なくとも１つのデータオブジェクトについて作成ポイント、および破壊ポイントを決定するステップと、
前記作成ポイントにおいて前記少なくとも１つのデータオブジェクトを作成し、前記破壊ポイントにおいて前記少なくとも１つのデータオブジェクトを破壊するために、前記コンピュータコード中に命令を挿入するステップと
を備え、破壊ポイントを決定するステップは、
前記少なくとも１つのデータオブジェクトの最後の読み取りまたは書き込みを識別し、前記複数の基本ブロックから前記最後の読み取りまたは書き込みが行われる第１の基本ブロックを識別するステップであって、該第1の基本ブロックに最初の破壊ポイントが挿入されるステップと、
前記最後の読み取りまたは書き込みの以前の前記少なくとも１つのデータオブジェクトの読み取りまたは書き込みを識別し、前記複数の基本ブロックから前記以前の読み取りまたは書き込みが行われる第２の基本ブロックを識別するステップと、
前記第１の基本ブロックのポストドミネイタと前記第２の基本ブロックのポストドミネイタとの共通部分を計算するステップと、
前記共通部分が、前記第１の基本ブロックを含むかどうかを判定するステップと、
前記共通部分が前記第１の基本ブロックを含まない場合、前記共通部分から新しい破壊ポイントを選択するステップと
を含むことを特徴とする方法。
【請求項４】
前記共通部分から新しい破壊ポイントを選択するステップは、前記新しい破壊ポイントが最初の破壊ポイントとは異なるループ内にあるかどうかを判定するステップと、異なるループ内にある場合には、最初の破壊ポイントと前記新しい破壊ポイントとの間のすべての内部ループをバイパスする新しい破壊ポイントを選択するステップとを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記コンピュータコードは、ＸＬＡＮＧ／ｓであることを特徴とする請求項１に記載の方法。
【請求項６】
前記コンピュータコードは、ＸＬＡＮＧ／ｓであることを特徴とする請求項３に記載の方法。
【請求項７】
コンピュータコードをコンパイルするための方法をコンピュータに実行させるためのプログラムを記憶したコンピュータ読取り可能記憶媒体であって、前記方法は、
抽象コンピュータ命令によるフローグラフを作成するステップであって、前記フローグラフに属する基本ブロックの中に、データオブジェクトを読み取りまたは書き込む命令が存在し、前記抽象命令はコンピュータコードから形成されるパーズ木から変換されるステップと、
前記複数の基本ブロックに深さ優先順序を割り当てるステップと、
前記複数の基本ブロック間の支配関係を決定するステップと、
前記フローグラフ内に任意のループが存在するかどうかを判定し、任意のループが存在する場合に前記ループを識別するステップと、
前記データオブジェクトを読み取りまたは書き込む命令を前記基本ブロックの中から検出するステップと、
前記検出された命令、識別済みのループ、支配関係、および前記複数の基本ブロックの深さ優先順序に従って、少なくとも１つのデータオブジェクトについて作成ポイント、および破壊ポイントを決定するステップと、
前記作成ポイントにおいて前記少なくとも１つのデータオブジェクトを作成し、かつ前記破壊ポイントにおいて前記少なくとも１つのデータオブジェクトを破壊するために、前記コンピュータコード中に命令を挿入するステップと
を備え、作成ポイントを決定するステップは、
前記少なくとも１つのデータオブジェクトの最初の読み取りまたは書き込みを識別し、前記複数の基本ブロックから前記最初の読み取りまたは書き込みが行われる第１の基本ブロックを識別するステップであって、該第１の基本ブロックに、最初の作成ポイントが挿入されるステップと、
前記最初の読み取りまたは書き込みに続いて行われる前記少なくとも１つのデータオブジェクトの読み取りまたは書き込みを識別し、前記複数の基本ブロックから前記次の読み取りまたは書き込みが行われる第２の基本ブロックを識別するステップと、
前記第１の基本ブロックのプリドミネイタと前記第２の基本ブロックのプリドミネイタとの共通部分を計算するステップと、
前記共通部分が、前記第１の基本ブロックを含むかどうかを判定するステップと、
前記共通部分が前記第１の基本ブロックを含まない場合、前記共通部分から新しい作成ポイントを選択するステップと
をさらに含むことを特徴とするコンピュータ読取り可能記憶媒体。
【請求項８】
前記共通部分から新しい作成ポイントを選択するステップは、前記新しい作成ポイントが最初の作成ポイントとは異なるループ内にあるかどうかを判定するステップと、異なるループ内にある場合には、最初の作成ポイントと前記新しい作成ポイントの間のすべての内部ループをバイパスする新しい作成ポイントを選択するステップとを含むことを特徴とする請求項７に記載のコンピュータ読取り可能記憶媒体。
【請求項９】
コンピュータコードをコンパイルするための方法をコンピュータに実行させるためのプログラムを記憶したコンピュータ読取り可能記憶媒体であって、前記方法は、
抽象コンピュータ命令によるフローグラフを作成するステップであって、前記フローグラフに属する基本ブロックの中に、データオブジェクトを読み取りまたは書き込む命令が存在し、前記抽象命令はコンピュータコードから形成されるパーズ木から変換されるステップと、
前記複数の基本ブロックに深さ優先順序を割り当てるステップと、
前記複数の基本ブロック間の支配関係を決定するステップと、
前記フローグラフ内に任意のループが存在するかどうかを判定し、任意のループが存在する場合に前記ループを識別するステップと、
前記データオブジェクトを読み取りまたは書き込む命令を前記基本ブロックの中から検出するステップと、
前記検出された命令、識別済みのループ、支配関係、および前記複数の基本ブロックの深さ優先順序に従って、少なくとも１つのデータオブジェクトについて作成ポイント、および破壊ポイントを決定するステップと、
前記破壊ポイントにおいて前記少なくとも１つのデータオブジェクトを破壊するために、前記コンピュータコード中に命令を挿入するステップと
を備え、破壊ポイントを決定するステップは、
前記少なくとも１つのデータオブジェクトの最後の読み取りまたは書き込みを識別し、前記複数の基本ブロックから前記最後の読み取りまたは書き込みが行われる第１の基本ブロックを識別するステップであって、該第1の基本ブロックに最初の破壊ポイントが挿入されるステップと、
前記最後の読み取りまたは書き込みの以前の前記少なくとも１つのデータオブジェクトの読み取りまたは書き込みを識別し、前記複数の基本ブロックから前記以前の読み取りまたは書き込みが行われる第２の基本ブロックを識別するステップと、
前記第１の基本ブロックのポストドミネイタと前記第２の基本ブロックのポストドミネイタとの共通部分を計算するステップと、
前記共通部分が、前記第１の基本ブロックを含むかどうかを判定するステップと、
前記共通部分が前記第１の基本ブロックを含まない場合、前記共通部分から新しい破壊ポイントを選択するステップと
を含むことを特徴とするコンピュータ読取り可能記憶媒体。
【請求項１０】
前記共通部分から新しい破壊ポイントを選択するステップは、前記新しい破壊ポイントが最初の破壊ポイントとは異なるループ内にあるかどうかを判定するステップと、異なるループ内にある場合には、最初の破壊ポイントと前記新しい破壊ポイントとの間のすべての内部ループをバイパスする新しい破壊ポイントを選択するステップとを含むことを特徴とする請求項９に記載のコンピュータ読取り可能記憶媒体。
【請求項１１】
前記コンピュータコードは、ＸＬＡＮＧ／ｓであることを特徴とする請求項７に記載のコンピュータ読取り可能記憶媒体。
【請求項１２】
前記コンピュータコードは、ＸＬＡＮＧ／ｓであることを特徴とする請求項９に記載のコンピュータ読取り可能記憶媒体。
【請求項１３】
コンピュータのプロセッサが、
抽象コンピュータ命令による、複数の基本ブロックを有するフローグラフを作成するステップであって、前記基本ブロックの中に、データオブジェクトを読み取りまたは書き込む命令が存在するステップと、
前記複数の基本ブロックに深さ優先順序を割り当てるステップと、
前記複数の基本ブロック間の支配関係を決定するステップと、
前記複数の基本ブロックによって形成される任意のループを識別するステップと、
前記データオブジェクトを読み取りまたは書き込む命令を前記基本ブロックの中から検出するステップと、
前記検出された命令、識別済みのループ、支配関係、および前記複数の基本ブロックの深さ優先順序に従って、少なくとも１つのデータオブジェクトについて作成ポイント、および破壊ポイントを決定するステップと、
前記作成ポイントにおいて前記少なくとも１つのデータオブジェクトを作成し、前記破壊ポイントにおいて前記少なくとも１つのデータオブジェクトを破壊するために、前記コンピュータコード中に命令を挿入するステップと
を含み、作成ポイントを決定するステップは、
前記少なくとも１つのデータオブジェクトの最初の読み取りまたは書き込みを識別し、前記最初の読み取りまたは書き込みが行われる第１の基本ブロックを識別するステップであって、該第１の基本ブロックに、最初の作成ポイントが挿入されるステップと、
深さ優先順位が前記第１の基本ブロックよりも高い基本ブロックである第２の基本ブロック中の前記少なくとも１つのデータオブジェクトの２番目の読み取りまたは書き込みを識別するステップと、
前記第１の基本ブロックのプリドミネイタと前記第２の基本ブロックのプリドミネイタとの共通部分を計算するステップと、
前記共通部分が、前記第１の基本ブロックを含むかどうかを判定するステップと、
前記共通部分が前記第１の基本ブロックを含まない場合、前記共通部分に含まれる新しい作成ポイントを選択するステップと
をさらに含むことを特徴とする方法。
【請求項１４】
前記共通部分から新しい作成ポイントを選択するステップは、前記新しい作成ポイントが最初の作成ポイントとは異なるループ内にあるかどうかを判定するステップと、異なるループ内にある場合には、最初の作成ポイントと前記新しい作成ポイントの間のすべての内部ループをバイパスする新しい作成ポイントを選択するステップとを含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
コンピュータのプロセッサが、
抽象コンピュータ命令による、複数の基本ブロックを有するフローグラフを作成するステップであって、前記基本ブロックの中に、データオブジェクトを読み取りまたは書き込む命令が存在するステップと、
前記複数の基本ブロックに深さ優先順序を割り当てるステップと、
前記複数の基本ブロック間の支配関係を決定するステップと、
前記複数の基本ブロックによって形成される任意のループを識別するステップと、
前記データオブジェクトを読み取りまたは書き込む命令を前記基本ブロックの中から検出するステップと、
前記検出された命令、識別済みのループ、支配関係、および前記複数の基本ブロックの深さ優先順序に従って、少なくとも１つのデータオブジェクトについて作成ポイント、および破壊ポイントを決定するステップと、
前記作成ポイントにおいて前記少なくとも１つのデータオブジェクトを作成し、前記破壊ポイントにおいて前記少なくとも１つのデータオブジェクトを破壊するために、前記コンピュータコード中に命令を挿入するステップと
を含み、破壊ポイントを決定するステップは、
前記少なくとも１つのデータオブジェクトの最後の読み取りまたは書き込みを識別し、前記最後の読み取りまたは書き込みが行われる第１の基本ブロックを識別するステップであって、該第1の基本ブロックに最初の破壊ポイントが挿入されるステップと、
深さ優先順位が前記第１の基本ブロックよりも低い基本ブロックである第２の基本ブロック中の少なくとも１つのデータの読み取りまたは書き込みを識別するステップと、
前記第１の基本ブロックのポストドミネイタと前記第２の基本ブロックのポストドミネイタとの共通部分を計算するステップと、
前記共通部分が、前記第１の基本ブロックを含むかどうかを判定するステップと、
前記共通部分が前記第１の基本ブロックを含まない場合、前記共通部分に含まれる新しい破壊ポイントを選択するステップと
を含むことを特徴とする方法。
【請求項１６】
前記共通部分から新しい破壊ポイントを選択するステップは、前記新しい破壊ポイントが最初の破壊ポイントとは異なるループ内にあるかどうかを判定するステップと、異なるループ内にある場合には、最初の破壊ポイントと前記新しい破壊ポイントの間のすべての内部ループをバイパスする新しい破壊ポイントを選択するステップとを含むことを特徴とする請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータソフトウェアコンパイラに関する。より詳細には、本発明はコンパイル時にプログラムコードの静的なデータフロー解析を実施するＸＬＡＮＧ／ｓコンパイル方法に関する。さらにより詳細には、本発明は、かかる静的なデータフロー解析を介してコンパイル時にデータオブジェクトの作成ポイント（ｃｒｅａｔｅ  ｐｏｉｎｔ）、ロックポイント（ｌｏｃｋ  ｐｏｉｎｔ）、および破壊ポイント（ｄｅｓｔｒｏｙ  ｐｏｉｎｔ）を自動的に決定するような方法に関する。
【背景技術】
【０００２】
企業は、ウェブサービスを使用してインターネットやＷｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂなどの分散環境を経由して他のエンティティと対話することができる。かかる対話が首尾よく達成されるようにするために、当事者への、また当事者からのメッセージを伝えるために１つまたは複数のプロトコルを存在させる必要があり、特定のビジネスアプリケーションを各当事者の端末に存在させる必要もある。かかる対話は、メッセージ駆動型である。例えば、買い手は、購入指示書を売り手に送信する。次いで、売り手は、在庫を調べてその注文アイテムを提供できるかどうかを判断する。提供できる場合は、売り手は、価格を付けて確認応答を買い手に返信する。最終的に、買い手は、売り手の申し出を受け入れ、または拒否する（かつ／または、おそらく別の注文もする）。この例で明らかなように、各当事者のビジネスアプリケーションは、メッセージの受信に反応している。
【０００３】
ウェブサービスは、ソフトウェアコードに基づいたコンピュータプログラムを使用して前述のトランザクションなどメッセージベースのビジネストランザクションを実装する。かかるソフトウェアコードは、プログラミング言語で実装される。プログラミング言語により、一般にプログラマーは、プログラムの状態を保持する、変数などの１つまたは複数のデータオブジェクトを宣言できるようになる。
【０００４】
前述のビジネストランザクションを実装することが可能なメッセージ指向の言語では、データオブジェクトは、何らかの外部ソースからの入力として受信されるメッセージとすることができる。かかるメッセージは、かなり大きいことがあり、したがって複数のデータオブジェクトの記憶には、大量のメモリリソースを消費することがある。したがって、そのソフトウェアの適切な演算にそのデータオブジェクトがもはや必要でなくなった後には、データオブジェクトを、削除、すなわち「破壊」すべきである。従来技術では、１つまたは複数のデータオブジェクトを破壊すべきコード命令である破壊ポイントは、このソフトウェアコード中にプログラマによって手操作で挿入されている。プログラマは通常、破壊すべき特定のデータオブジェクト、およびかかる破壊を行うべきコード内のロケーションを選択することになる。一般に、プログラマは、このデータオブジェクトを最後に使用した直後にこの破壊ポイントを配置しようと試みるはずである。かかる方法では、データオブジェクトは、できるかぎり短い存続期間の間、メモリ内に保持される。
【０００５】
手動で実施する結果、データオブジェクトを破壊する、かかる従来技術の方法には、したがって破壊ポイントの配置、および削除すべきデータオブジェクトの選択において人為的なエラーが生じる可能性がある。追加の短所が、メッセージベースのトランザクションを実装するプログラムのコンテキストにおいて存在する。例えば、かかるプログラム中では、メッセージが中断されることもあり、あるいは他のエラーが発生することもあり、これらによって、メッセージを再送することができ、あるいは何らかの他の修正プロセスを試みることができ、またはエラーを補償できる特別の「補償」ソフトウェアコンポーネントが呼び出される。補償コンポーネントは、ソフトウェアコードをさらに複雑なものにし、それによって、破壊ポイントを配置すべきコード内の適切なロケーションを選択するプログラマのタスクをさらに難しくさえする。さらに、メッセージベースのトランザクション用のプログラムコードは、並列に処理する多数の演算を伴い、一部の演算が完了しないこともあり、または実行時に補償コンポーネントを呼び出し得るという可能性を伴って、特に複雑になることもある。したがって、処理中に取ることができる可能なあらゆるロジックパスを明らかにする必要があるので、かかる状況における破壊ポイントについてのロケーションを選択することは難しい。
【０００６】
破壊ポイントの従来技術による配置の短所についての前述の説明は、「作成」ポイントおよび「ロック」ポイント、ならびに他のどのようなタイプのデータオブジェクト処理演算にも同様に適用される。作成ポイントは、データオブジェクトが作成されるソフトウェアコード内のロケーションである。理想的には、作成ポイントをこのデータオブジェクトが最初に使用される直前に配置してこの場合にもメモリリソースの消費を低下させるべきである。ロックポイントは、現在のトランザクションに関与していないプログラムオブジェクトから、変数などの１組の共用オブジェクトをアクセス不可能にする、ソフトウェアコード内のロケーションである。このようにして、このトランザクション中には外部コンポーネントがこのデータオブジェクトに割り当てられる値を変更することができず、したがって、これによって処理中のエラーを回避することができる。作成ポイントと同様に、ロックポイントも、できる限りデータオブジェクトの使用の近くに配置して不必要に変数がロックしないようにすべきである。しかし、メッセージベースのトランザクションを実装するソフトウェアプログラムにおいては、メッセージエラーまたは別のタイプのエラーの場合に、ロックポイントの不適切な配置によって、このプログラムの故障または動作停止さえ引き起こされる可能性がある。複雑なソフトウェアでは、プログラマがすべての可能なロジックパスおよび付随する補償コンポーネントを追跡して最適なロケーションに、すなわちエラーが起こる場合、故障を引き起こし得るロケーションにならずにデータオブジェクトの使用にできるかぎり近くに、ロックポイントを配置することは、ますます難しくなっている。
【０００７】
当業者には知られているはずであるが、コンパイラは、プログラマが使用する高レベルコードを、実行時により高速に実行できる機械読取り可能言語に変換するものである。コンパイル時に、コンパイラは、プログラムが取ることができる異なる可能なロジックパスをマッピングしてかかるロジックパスのフローグラフ（ｆｌｏｗｇｒａｐｈ）を作成する。このフローグラフは、プログラムの正当性のセマンティックス解析のために、また最も効率のよいコードを生成するために使用される。
【０００８】
従来技術のコンパイラには、作成ポイント、ロックポイント、および／または破壊ポイントの最適な配置を決定できるようにして、プログラムを解析する機能および／またはフローグラフを生成する機能が欠如している。さらに、従来技術のコンパイラは、かかるポイントがプログラム中に挿入され、それによって、対応するデータオブジェクトが、実行時に適切なポイントで作成され、ロックされ、または破壊され、あるいはこれらが組み合わされて行われることになる機能が欠如している。
【０００９】
【非特許文献１】"XLANG/s Language Specification," Version 0.55, Copyright (C) Microsoft 1999-2000
【非特許文献２】Satish Thatte, ”XLANG Web Services For Business Process Design,” Copyright (C) Microsoft Corporation 2001
【非特許文献３】”XSLT”、[online]、平成１１年１１月１６日、W3C、[平成１６年９月１０日検索]、インターネット＜URL : http://www.w3.org/tr/xslt＞
【非特許文献４】”XPATH”、 [online]、平成１１年１１月１６日、W3C、[平成１６年９月１０日検索]、インターネット＜URL : http://www.w3.org/TR/xpath＞
【非特許文献５】”Web Services Description Language(WSDL)1.1,” W3C Note January 2001, by Microsoft and IBM Research, Copyright (C) 2000 Ariba, International Business Machines Corporation, Microsoft
【非特許文献６】Satish Thatte, "Business Process Execution Language for Web Services," Version 1.1, dated March 31, 2003, published by Microsoft, IBM and BEA for the definition of Business Process semantics
【非特許文献７】Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, ”Compilers: Principles, Techniques, and Tools,” Addison-Wesley Longman, 1985
【発明の開示】
【発明が解決しようとする課題】
【００１０】
したがって、必要になっているのは、データオブジェクト演算についての適切なポイントを決定することができるようにして、メッセージベースのトランザクションを実装することができる、ＸＬＡＮＧ／ｓなどのソフトウェアを解析する方法である。より詳細には、必要になっているのは、データオブジェクトのプログラムの処理の解析をサポートすることができるプログラムのフローグラフを作成する方法である。より詳細には、必要になっているのは、フローグラフを生成し、かかるフローグラフ上で静的なデータフロー解析を実施してこのプログラム中のデータオブジェクトについての適切な作成ポイント、ロックポイント、および破壊ポイントを決定することに関与するコンピュータコードをコンパイルする方法である。さらにより詳細には、必要になっているのは、かかるプログラムに関連するフローグラフの解析を実施し実行時にデータオブジェクトエラーが発生するかどうかを判定するコンパイラである。
【課題を解決するための手段】
【００１１】
前述の制限および欠点を考慮して、プログラムフローのデータフロー解析を使用して変数などのそのデータオブジェクトの寿命（ｌｉｆｅｔｉｍｅ）を決定するＸＬＡＮＧ／ｓコンパイル方法が提供される。本方法によれば、抽象的なコンピュータ命令に従ってフローグラフが作成され、フローグラフは、複数の基本ブロック、およびデータオブジェクトを有し、抽象命令は、コンピュータコードから形成されるパーズ木（ｐａｒｓｅ  ｔｒｅｅ）から変換される。深さ優先順が、基本ブロックに割り当てられ、基本ブロック間の支配関係が決定される。フローグラフ内に任意のループが存在するかどうかについて判定が行われ、存在する場合には、このループを識別する。データオブジェクトの使用についても判定が行われ、その使用に従って、識別済みのループ、支配関係および複数の基本ブロックの深さ優先順、データオブジェクトの作成ポイント、破壊ポイント、ならびにロックポイントを決定する。命令をコンピュータコード中に挿入して作成ポイントにおいてデータオブジェクトを作成し、破壊ポイントでデータオブジェクトを破壊し、ロックポイントでデータオブジェクトをロックする。
【００１２】
前述の概要、ならびに好ましい実施形態の以下の詳細な説明は、添付図面と併せ読むときにさらに良好に理解されよう。本発明を例証する目的で、図面には本発明の例示の実施形態を示しているが、しかし、本発明は、開示された特定の方法および手段だけには限定されない。
【発明を実施するための最良の形態】
【００１３】
概要
ＸＬＡＮＧ／ｓコードを構文解析してこのコードの論理演算を表す１つまたは複数のフローグラフにするＸＬＡＮＧ／ｓコンパイル方法が提供される。この方法は、例えばフローグラフ中の変数などのデータオブジェクトを識別し、かかるデータオブジェクトに実施される演算を追跡する。この方法ではまた、このオブジェクトの最初の使用に先立ってできる限り遅く、ＸＬＡＮＧ／ｓコード内の最適のロケーションに、かかるオブジェクトについての作成ポイントが配置される。さらに、この方法では、かかるオブジェクトの最後の使用後、できる限り早期にかかるデータオブジェクトについての破壊ポイントが配置される。この方法ではさらに、最適ロケーション、すなわちかかるオブジェクトの最初の使用に先立ってできる限り近接させながらデッドロックされたコードを回避するロケーションに共用データオブジェクトについてのロックポイントが配置される。
【００１４】
例示のコンピューティング環境
図１に、本発明を実装することができる適切な計算機システム環境１００の一例を示す。この計算機システム環境１００は、適切なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲について何ら限定を示唆するものではない。また、コンピューティング環境１００は、例示の動作環境１００に示されたコンポーネントの任意の１つまたは組合せに関連するどのような依存性または要件を有するとも解釈すべきではない。
【００１５】
本発明は、多数の他の汎用または専用の計算機システム環境または構成を用いて動作可能である。本発明での使用に適し得る周知の計算機システム、環境、および／または構成の例には、それだけには限定されないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド装置またはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な大衆消費電子製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、前述のシステムまたは装置のうちのどれでも含む分散コンピューティング環境などが含まれる。
【００１６】
本発明は、コンピュータによって実施される、プログラムモジュールなどコンピュータ実行可能命令の一般的なコンテキストで説明することができる。一般に、プログラムモジュールは、特定のタスクを実施し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含んでいる。本発明はまた、通信ネットワークまたは他のデータ伝送媒体を介してリンクされるリモート処理装置でタスクを実施する分散コンピューティング環境中でも実施することができる。分散コンピューティング環境中では、プログラムモジュールおよび他のデータは、メモリ記憶装置を含めてローカルコンピュータ記憶媒体にもリモートコンピュータ記憶媒体にも配置することができる。
【００１７】
図１を参照すると、本発明を実装する例示のシステムは、コンピュータ１１０の形式で汎用計算機装置を含んでいる。コンピュータ１１０のコンポーネントは、それだけには限定されないが、処理装置１２０，システムメモリ１３０、およびシステムメモリを含めて様々なシステムコンポーネントをこの処理装置１２０に結合するシステムバス１２１を含むことができる。このシステムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、および様々な任意のバスアーキテクチャを使用したローカルバスを含めて、いくつかの任意のタイプのバス構造とすることができる。例としては、限定するものではないが、かかるアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ産業標準アーキテクチャ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅマイクロチャネルアーキテクチャ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ拡張ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄ  Ａｓｓｏｃｉａｔｉｏｎビデオ電子装置規格化協会）ローカルバス、および（メザニンバスとしても知られている）ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ周辺装置相互接続）バスが含まれる。
【００１８】
コンピュータ１１０は、一般に様々なコンピュータ読取り可能媒体を含んでいる。コンピュータ読取り可能媒体は、コンピュータ１１０がアクセスすることができる使用可能な任意の媒体とすることができ、揮発性媒体も不揮発性媒体も、取り外し可能媒体も固定媒体も含んでいる。例として、限定するものではないが、コンピュータ読取り可能媒体は、コンピュータ記憶媒体も通信媒体も含むことができる。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータなど情報記憶のための任意の方法または技術の形で実装される、揮発性媒体も不揮発性媒体も、取り外し可能媒体も固定媒体も含んでいる。コンピュータ記憶媒体には、それだけには限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋデジタル多用途ディスク）または他の光ディスク記憶措置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、あるいは所望の情報を記憶するために使用することができ、コンピュータ１１０でアクセスすることができる他の任意の媒体が含まれる。通信媒体は、一般に搬送波や他の搬送メカニズムなど被変調データ信号の形でコンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータを実施し、任意の情報配信媒体を含んでいる。用語「被変調データ信号」は、信号中の情報を符号化するようにその１つまたは複数の特性が設定または変更された信号を意味する。例として、限定するものではないが、通信媒体には、有線ネットワークや直接有線接続などの有線媒体、音響、ＲＦ、赤外線、その他の無線媒体などの無線媒体が含まれる。前述の任意の組合せもまた、コンピュータ読取り可能媒体の範囲内に含まれるものとする。
【００１９】
システムメモリ１３０は、ＲＯＭ１３１やＲＡＭ１３２など揮発性メモリおよび／または不揮発性メモリの形式のコンピュータ記憶媒体を含んでいる。起動時などコンピュータ１１０内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）は、一般にＲＯＭ１３１に記憶される。ＲＡＭ１３２は、一般に処理装置１２０によって即時アクセス可能および／または現在動作中であるデータおよび／またはプログラムモジュールを含んでいる。例として、限定するものではないが、図１に、オペレーティングシステム１３４，アプリケーションプログラム１３５，他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００２０】
コンピュータ１１０はまた、他の取り外し可能／固定、揮発性／不揮発性のコンピュータ記憶媒体を含むこともできる。単なる例として、図１に固定の不揮発性磁気媒体から情報を読み取りそれに情報を書き込むハードディスクドライブ１４０、取り外し可能な不揮発性の磁気ディスク１５２から情報を読み取りそれに情報を書き込む磁気ディスクドライブ１５１、およびＣＤＲＯＭや他の光媒体など取り外し可能な不揮発性の光ディスク１５６から情報を読み取りそれに情報を書き込む光ディスクドライブ１５５を示す。例示の動作環境中で使用することができる他の取り外し可能／固定、揮発性／不揮発性のコンピュータ記憶媒体には、それだけには限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが含まれる。このハードディスクドライブ１４１は、一般にインターフェース１４０などの固定メモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、一般にインターフェース１５０などの取り外し可能なメモリインターフェースによってシステムバス１２１に接続される。
【００２１】
以上で論じ、図１に示したこれらのドライブおよびこれらに関連するコンピュータ記憶媒体は、コンピュータ１１０のためのコンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータの記憶域を提供する。図１において、例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶するものとして示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じにもまたは異なるものにもすることができる。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７には、少なくともこれらが異なるコピーであることを示すために、ここで異なる番号が付与されている。ユーザは、キーボード１６２や一般にマウス、トラックボール、またはタッチパッドとも呼ばれるポインティング装置１６１などの入力装置を介してコンピュータ１１０にコマンドおよび情報を入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが含まれる。これらおよび他の入力装置は、しばしばシステムバスに結合されるユーザ入力インターフェース１６０を介して処理装置１２０に接続されるが、パラレルポート、ゲームポート、またはＵＳＢ（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓユニバーサルシリアルバス）など他のインターフェースおよびバス構造によって接続することもできる。モニタ１９１または他のタイプのディスプレイ装置もまた、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。モニタに加えて、コンピュータは、スピーカ１９７やプリンタ１９６など他の周辺出力装置を含むこともでき、これらを、出力周辺インターフェース１９０を介して接続することができる。
【００２２】
コンピュータ１１０は、リモートコンピュータ１８０など１台または複数台のリモートコンピュータへの論理接続を使用してネットワーク環境中で動作することができる。このリモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の共通ネットワークノードとすることができ、一般にコンピュータ１１０に関連して以上で説明した要素のうちの多くまたはすべてを含むが、図１には、メモリ記憶装置１８１だけを示している。図に示す論理接続は、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋローカルエリアネットワーク）１７１およびＷＡＮ（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋワイドエリアネットワ−ク）１７３を含んでいるが、他のネットワ−クを含むこともできる。かかるネットワーク環境は、オフィス、企業規模コンピュータネットワーク、イントラネットおよびインターネットにおいては普通になっている。
【００２３】
ＬＡＮネットワーキング環境中で使用するとき、コンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーク環境中で使用するときには、コンピュータ１１０は一般に、インターネットなどＷＡＮ１７３上で通信を確立するためのモデム１７２または他の手段を含んでいる。ユーザ入力インターフェース１６０、または他の適切なメカニズムを介して、内蔵または外付けのこともあるモデム１７２をシステムバス１２１に接続することができる。ネットワ−ク環境では、コンピュータ１１０に関連して示したプログラムモジュール、またはその一部を、リモートメモリ記憶装置に記憶することもできる。例として、限定するものではないが、図１は、リモートアプリケーションプログラム１８５が、メモリ記憶装置１８１上に存在するものとして示している。図に示すネットワーク接続は例示的なものであり、コンピュータ間で通信リンクを確立する他の手段を使用することもできることが理解されよう。
【００２４】
例示の分散コンピューティングフレームワークまたはアーキテクチャ
パーソナルコンピューティングとインターネットの収束の観点から、様々な分散コンピューティングフレームワークが開発されてきており、開発されつつある。個人および企業ユーザには、アプリケーションおよび計算機装置用のシームレスに相互運用可能なウェブ使用可能なインターフェースが提供され、コンピューティング活動が、ますますブラウザ指向またはネットワーク指向になっている。
【００２５】
例えば、マイクロソフト（登録商標）のドットネットプラットフォーム（．ＮＥＴ  ｐｌａｔｆｏｒｍ）は、ウェブベースのデータ記憶やダウンロード可能なデバイスソフトウェアなど、サーバ、ビルディングブロックサービスを含んでいる。一般的に言えば、ドットネットプラットフォームは、（１）全範囲の計算機装置を一緒に動作させ、ユーザ情報をこれらすべての計算機装置上で更新し同期させる機能と、（２）ＨＴＭＬではなくＸＭＬをより多く使用することによって可能となるウェブサイトの増強された対話機能と、（３）例えば電子メールなどの様々なアプリケーション、またはオフィスドットネットなどのソフトウェアの管理について、中央の開始点からユーザへの製品およびサービスのカスタマイズされたアクセスおよび配信を特徴とするオンラインサービスと、（４）情報へのアクセスの効率および容易さ、ならびにユーザと装置の間の情報の同期化を向上させることになる中央集中化されたデータ記憶と、（５）電子メール、ファクシミリ、電話などの様々な通信メディアを統合する機能と、（６）開発業者にとっての再使用可能なモジュールを作成して、それによって生産性を向上しプログラミングエラーの数を減らす機能と、（７）同様に他の多くのクロスプラットフォームの統合機能とを提供する。
【００２６】
本明細書中の例示の実施形態を、計算機装置に存在するソフトウェアに関連して説明しているが、本発明の１つまたは複数の部分はまた、サービスがすべてのドットネットの言語およびサービスを介して、また同様に他の分散コンピューティングフレームワーク中で実施され、サポートされ、アクセスされるように、オペレーティングシステム、ＡＰＩ、またはコプロセッサと要求オブジェクトの間の「仲介（ｍｉｄｄｌｅ  ｍａｎ）」オブジェクトを介して実装することもできる。
【００２７】
例示の実施形態
ウェブサービスへの序
企業は、インターネットやＷｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂなど分散環境を介して、より頻繁に対話を行っている。例えば、消費者が、来るべき旅行のためのレンタカーの価格について知りたいと思うことがある。この消費者は、旅行ウェブサイトなどインターネット上で中間業者を介してこの価格について要求することができる。中間業者は、消費者の要求を受けると、様々なレンタカー会社に価格照会要求を送信する。レンタカー会社から応答を受信した後、次いで中間業者は、消費者にこの応答を送信する。次いで、消費者は、この中間業者を介して車を予約し、この予約のための支払いを行うことができる。上述のこのビジネスプロセスは、メッセージを使用して実施される。例えば、中間業者に対する消費者の要求は、中間業者に対する電子メッセージとして実施され、このメッセージは、提案される車のレンタルの細目、例えばレンタル日時、車の種類、所望の追加の保険、消費者の名前と住所、クレジットカード情報、および／または同様事項を含んでいる。この中間業者の価格照会要求は、別のメッセージであり、（レンタカー会社から中間業者へと中間業者から消費者へも共に）レンタカー会社からの応答および消費者が最終的に送信する予約も同様である。
【００２８】
かかるプロセスを実行するために使用されるビジネスプロセスおよびメッセージを自動化するように設計されたコンピュータ言語がＸＬＡＮＧ／ｓであり、これについて以下に詳細に説明する。理解されるように、ＸＬＡＮＧ／ｓを使用して実装されるプロセスが適切に、しかもエラーなしに実行されることが重要である。さらに、かかるプロセスは、通信リンク故障や同様なものなど外部エラーを補償するのに十分に頑丈であるべきである。ＸＬＡＮＧ／ｓコードをプログラムしコンパイルしてかかるプロセスを頑強でエラーがないように達成する方法を提供することが、本発明の一実施形態の一用途である。
【００２９】
ＸＬＡＮＧ／ｓの序論
ＸＬＡＮＧ／ｓは、様々な技術コンポーネントまたはサービスを使用して、ビジネスプロセスの論理シーケンス、ならびにビジネスプロセスの実装を記述する言語である。ＸＬＡＮＧ／ｓについては、非特許文献１、および非特許文献２が本明細書中に開示されるよりもさらに詳細に記述している。このＸＬＡＮＧ言語はＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ拡張マークアップ言語）で表現される。以前に指摘したように、ビジネスプロセスは、ソフトウェアコードを使用して実装することができる。このＸＬＡＮＧ／ｓ言語は、ビジネスプロセスおよびプロトコルを記述するために使用される現代的な、ドメイン特有の専用言語である。ＸＬＡＮＧ／ｓは、宣言言語でもあり、これは、ＸＬＡＮＧ／ｓが、ビジネスプロセス中のステップ、これらのステップ間の関係、ならびにこれらのセマンティックスおよび対話を記述し実装する明示的な命令セットを定義することを意味する。ＸＬＡＮＧ／ｓコードは、ただ記述的であるだけでなく、実行可能なようにも設計されている。ＸＬＡＮＧ／ｓの宣言的な性質およびその特定のセマンティックスのため、結果としての実行可能なコードは、決定論的であり、すなわち、ビジネスプロセスを実行する振舞いは、ＸＬＡＮＧ／ｓ命令の集合のセマンティックスによってよく定義される。したがって、ＸＬＡＮＧ／ｓコードを調べることにより、かかるコードによって実行されるビジネスプロセスを決定することができる。実行可能な形式のかかるビジネスプロセスの定義は、「オーケストレーション（ｏｒｃｈｅｓｔｒａｔｉｏｎ）」である。
【００３０】
ＸＬＡＮＧ／ｓは、多くのインターネット規格と互換性がある。ＸＬＡＮＧ／ｓは、非特許文献３、ＸＰＡＴＨ（非特許文献４）、ＸＳＤ（ＸＭＬ  Ｓｃｈｅｍａ  ＤｅｆｉｎｉｔｉｏｎＸＭＬスキーマ定義）、およびＷＳＤＬ（Ｗｅｂ  Ｓｅｒｖｉｃｅｓ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅウェブサービス記述言語）をサポート規格として使用するように設計され、ドットネットベースのオブジェクトおよびメッセージと共に動作するための埋め込まれたサポートを有する。ＷＳＤＬは、非特許文献５に記載されている。このＸＬＡＮＧ／ｓ言語は、構文上、Ｃ＃と同様であり、したがって、正確な構文を理解する助けとしてＣ＃仕様を参照することができる。ＸＬＡＮＧ／ｓで実施されるセマンティックスは、非特許文献６中に定義されるセマンティックスを反映したものである。ウェブサービス仕様のためのビジネスプロセス実行言語（Ｂｕｓｉｎｅｓｓ  Ｐｒｏｃｅｓｓ  Ｅｘｅｃｕｔｉｏｎ  Ｌａｎｇｕａｇｅ）は、一般に「ＢＰＥＬ４ＷＳ」仕様と呼ばれる。したがって、理解されるように、ＸＬＡＮＧ／ｓの使用は、ビジネスプロセスに適用するとき最も有利となる。
【００３１】
ＸＬＡＮＧ／ｓは、ビジネスプロセスを定義するために使用される豊富な１組の高レベル構成体を定義する。ＸＬＡＮＧ／ｓステートメントは、一般に２つのカテゴリ、すなわち受信または送信などそれ自体を行う簡単なステートメントと、簡単なステートメントおよび／または他の複雑なステートメントを含みまたはグループ化する複雑なステートメントとに分類される。ＸＬＡＮＧ／ｓはまた、例えばストリング（Ｓｔｒｉｎｇ）やＩｎｔ３２（整数）など低レベルのデータ型もサポートする。例えばメッセージ、ポート（メッセージを送信しおよび受信するロケーション）、相関、およびサービスリンクなど高レベルのデータ型もサポートされる。データ型を使用してビジネスプロセスに関連するセマンティックスを厳密に定義し、「ｗｈｉｌｅ」および「ｓｃｏｐｅ」などのプロセス制御ステートメントによって補完する。
【００３２】
以上で指摘したように、ＸＬＡＮＧ／ｓサービスは、メッセージの送信および／または受信を行うことによって外側の世界と情報をやりとりする。メッセージタイプは、かかるメッセージの構造定義である。メッセージは、オペレーション（例えば、受信、応答）によって実行され、オペレーションは、単一の非同期メッセージまたは要求−応答対のメッセージでもよい。オペレーションは、着信するものでも発信するものでもよい。例えば、売り手は、入力メッセージを介して（潜在的な買い手から）購入指示書を受け入れることによって対話が開始されるサービス／製品を提案することができる。次いで、この売り手は、その注文を履行することができる場合には買い手に対して肯定応答を返信する。売り手は、この買い手に追加のメッセージ（例えば、出荷通知、インボイス）を送ることもできる。一般にこれらの入力オペレーションおよび出力オペレーションは、サービスプロセスと呼ばれる、定義されたシーケンスに従って行われる。売り手のサービスは、各購入指示書の対話状態を他の同様な対話とは別に記憶している。これは、買い手が同じ売り手との間で多数の同時進行の購入プロセスを行っている可能性がある状況では、特に有利である。また、サービスプロセスの各インスタンスが、入力オペレーションの刺激なしにバックグラウンドでの活動（例えば、在庫の更新、勘定残高の更新）を実施することができる。
【００３３】
サービスプロセスは、いくつかのオペレーションを利用して対話を表すことができる。したがって、対話には、よく定義された始まりと終わりが存在する。この対話は、サービスのインスタンスと呼ばれる。インスタンスは、２つの方法のどちらかで開始することができる。サービスを、何らかの実装特有の機能を使用して明示的にインスタンス生成することもでき、またインスタンス生成オペレーションを意味するその振舞い中のオペレーションを用いて、暗黙的にインスタンス生成することもできる。サービスインスタンスは、その振舞いを定義するプロセスが終了するときに終了する。
【００３４】
サービスをインスタンス生成して拡張対話のヒストリ（ｈｉｓｔｏｒｙ）に従って動作させる。かかるサービスに送信されたメッセージは、正しい宛先ポートだけでなく、そのポートを定義するサービスの正しいインスタンスにも配信される。ポートは、メッセージが送信され、サービスが受信するエンドポイントである。このサービスをホスティングするインフラストラクチャは、この経路指定をサポートし、それによって、あらゆるサービスの実装に、インスタンスを経路指定するためのカスタムメカニズムを実装する必要性を負わせることを回避している。
【００３５】
次に、図２を参照すると、２つの企業体間の通信を可能にする簡略化されたコンピュータネットワークが示されている。例えば、図１に関連して前述したコンピュータ１１０、専用コンピュータなど任意タイプの計算機装置である第１のコンピュータ２２０が、通信リンク２２２を経由してネットワーク２１０に動作可能に接続されている。ネットワーク２１０は、複数の計算機装置を相互接続するどのようなタイプのネットワークでもよく、またイントラネット、インターネットなどでもよい。通信リンク２２２は、有線、無線、光学式などのどれでも任意のタイプの通信媒体を含むことができる。第１のコンピュータ２２０と同様に第２のコンピュータ２３０も、どのようなタイプの計算機装置でもよく、通信リンク２３２を経由してネットワーク２１０に動作可能に接続されている。通信リンク２２２と同様に、通信リンク２３２も、どのようなタイプの通信媒体であってもよい。一実施形態では、通信リンク２２２、２３２は、同じタイプの通信媒体であるが、別の実施形態では、各通信リンク２２２、２３２が使用する媒体は異なっている。任意選択で、追加のコンピュータ２２４、２２６を第１のコンピュータ２２０に動作可能に接続することができる。理解されるように、追加のコンピュータを同様に第２のコンピュータ２３０に動作可能に接続することもできる（図２には明示せず）。
【００３６】
例えば、買い手が売り手に購入指示書を送信する典型的なサプライチェーン状況について考察する。買い手は、例えば、第１のコンピュータ２２０から売り手の第２のコンピュータ２３０へとネットワーク２１０および通信リンク２２２、２３３を経由してメッセージを送信する。買い手と売り手には安定したビジネス関係があり、購入対話に関連するドキュメントを当該ポートに関連するＵＲＬに対して送信するように静的に構成されていると想定する。売り手が、この注文に対する肯定応答を返信するとき、この肯定応答は、コンピュータ２２０、あるいは任意選択で追加のコンピュータ２２４、２２６など別のコンピュータにある買い手の端末における正しいサービスインスタンスへと経路指定される。かかる経路指定を実装する一方法は、相関を取るために肯定応答中にコピーされる注文メッセージ中に埋込みトークン（例えば、クッキー）を伝えることである。このトークンは、ヘッダ中のメッセージエンベロプ（ｍｅｓｓａｇｅ  ｅｎｖｅｌｏｐｅ）中にあってもよいし、ビジネスドキュメント（購入指示書）それ自体の中にあってもよい。各メッセージ中のこのトークンの構造および位置をサービス記述の中で宣言的に表現することができる。この宣言情報により、ＸＬＡＮＧ／ｓ互換のインフラストラクチャは、トークンを使用してインスタンスの経路指定を自動的に提供することができるようになる。
【００３７】
その寿命の間に、サービスインスタンスは一般に、その対話に関与する他の当事者を表す他のサービスインスタンスとの間で１つまたは複数の対話を行うことができる。対話では、対話に関与するメッセージに相関のある高度な移送インフラストラクチャを使用し、メッセージを正しいサービスインスタンスに経路指定することができる。多くの場合、相互に関連する対話は、３パーティ以上に関与することもでき、交換されるビジネスドキュメントに直接に埋め込まれる相関トークンを有する軽量の移送インフラストラクチャを使用することができる。ＸＬＡＮＧ／ｓは、非常に一般的なメカニズムを提供してサービスインスタンス内の相関するオペレーショングループを指定することによって、相関シナリオに対処する。この相関グループ中のすべてのメッセージによって共有される１組の特性として１組の相関トークンを定義することができる。かかる１組の特性を相関セットと呼ぶ。
【００３８】
本発明の実施形態の説明
データ型、トークン、相関セットなどの特徴を、変数を使用してかかる機能を実行するのに必要な値を記憶することによって、ＸＬＡＮＧ／ｓコードで実装することができる。他の高レベルソフトウェア言語の場合と同様に、ＸＬＡＮＧ／ｓを実行時に先立ってコンパイラによってコンパイルする。コンパイルプロセスに関連する詳細は、当業者には知られているはずであり、したがって、本明細書中に詳細には説明しない。本発明の一実施形態は、コンパイルプロセスのいくつかのステップが完了した後に、ＸＬＡＮＧ／ｓコードのコンパイルプロセスの一部として実行される。例えばプログラマは、ビジネスプロセスのテキスト記述を書き終えており、テキスト記述は、例えばＸＬＡＮＧ／ｓなどのビジネスプロセス言語の文法および仕様に準拠しているものと本明細書中では想定している。さらに、テキストプログラムはパーサが読み取り、それによって、入力がよい形式、すなわちそのテキスト表現にテキストエラー、構文エラーがない形式にされており、次いで、このパーサがテキスト表現を標準的な高レベルパーズ木表現に変換することも本明細書中では想定している。最後に、高レベルパーズ木を解析して低レベル抽象命令シーケンスを生成することを本明細書中では想定している。適切なシーケンスで実行されるとき、これらの命令は、ビジネスプロセスの書き手がテキスト表現で表した動作を実施することになる。
【００３９】
以上で指摘したように、前述のコンパイルプロセスのステップの出力は、低レベルの抽象命令のシーケンスである。次いでこれらの命令は、本発明の一実施形態の入力として使用される。理解されるように、本発明の一実施形態を開始するのに先立ち、追加のステップまたはプロセスを行うことができ、同様に、以上のステップの一部または全部を統合することもできる。かかる状況はどれも、本発明の一実施形態と等しく互換性がある。一実施形態の入力をもたらす前述のプロセスの一例を、図３に関連して以下で論じる。理解されるように、本明細書中に開示した例は、分かりやすく示すために省略が施されており、ほとんどの状況では、より大量のテキストコード、したがって、より大規模なパーズ木およびより長い１組の結果命令を含んでいる。
【００４０】
第１に、ビジネスプロセスのテキスト記述が提供される。以上で指摘したように、この記述が例えばＸＬＡＮＧ／ｓなど利用されているビジネスプロセス言語の文法および仕様に準拠することが好ましい。この記述が、本発明の一実施形態による完全なコンパイルプロセスからもたらされるプログラムによって最終的に実行されることになるビジネスプロセスの態様を記述していることが理解されよう。ビジネスプロセスのテキスト記述のフラグメントの一例は、以下のようになる。
【００４１】
【表１】
0004728607.tif 000002
【００４２】
理解されるように、ビジネスプロセスのテキスト記述は、ビジネスソフトウェアによって実行できるかかるビジネスプロセスの任意の態様を記述することができるので、この前述のフラグメントは、単なる例示にすぎない。この特定のフラグメントは、口座から資金を引き出す要求を含むビジネスプロセスを記述している。詳細には、上述のテキスト記述を参照すると、メッセージは、ポートｍｙＰｏｒｔ上で受信される。このメッセージは、ｍｙＡｃｃｏｕｎｔとラベル付けされた口座からある金額を引き出す命令を含んでいる。引出し後の残高がゼロより小さくなる場合、結果メッセージには、値「ｏｖｅｒｄｒａｗｎ」が割り当てられて口座には十分な資金がないことを指し示す。そうでなければ、結果メッセージには、値「ｏｋａｙ」が割り当てられる。最後に、この結果メッセージは、最初のメッセージの送信者に応答として返信される。
【００４３】
第２に、以上で指摘したように、パーサは、以上に開示されたテキスト表現を読み取り、テキスト中に含まれる形式および構造を捕捉するパーズ木を構築する。次に図３を参照すると、以上のテキスト記述に基づいた例示のパーズ木３００が、提供されている。図３から分かるように、テキスト記述の論理構造はこのパーズ木３００のレイアウトから明らかになる。パーズ木３００は、図表で作成する必要はなく、実際には、本明細書中に開示の全コンパイルプロセスの一部として作成される短命の内部積とすることができることが理解されよう。
【００４４】
パーズ木３００は、このテキスト記述の論理構造を表すブロックを含んでいる。例えば、ブロック３０５は、ｒｅｃｅｉｖｅ（ｍｙＰｏｒｔ，  ｍｓｇＡｍｏｕｎｔ）ステートメントを表し、次いで、ブロック３０３へと進み、このブロックでは、ｔｈｅ  ｂａｌａｎｃｅ＝ｍｙＡｃｃｏｕｎｔ．Ｗｉｔｈｄｒａｗ（ｍｓｇＡｍｏｕｎｔ）ステートメントが表される。図３から分かるように、このｔｈｅ  ｂａｌａｎｃｅ＝ｍｙＡｃｃｏｕｎｔ．Ｗｉｔｈｄｒａｗ（ｍｓｇＡｍｏｕｎｔ）ステートメントは、前述の受信ステートメントに比べて論理的により複雑なステートメントであり、ブロック３０３の内部にさらなる論理表現を必要とする。ブロック３０５〜３１３は、このテキスト記述の命令に従ってｍｓｇＡｍｏｕｎｔを引き出した後に、ｍｙＡｃｃｏｕｎｔの残高を決定するのに関与する論理を表す。理解されるように、テキスト記述の論理構造を表すために使用される厳密な図表表現は、どのような規則にも準拠することができ、それは、本発明の一実施形態がかかる規則のどれとも等しく互換性があるのと同様である。
【００４５】
ブロック３１５は、ｉｆ（ｂａｌａｎｃｅ＜０）ステートメントの「ｉｆ」部分を表す。ブロック３１７は、ブロック３１９〜３２３と共に、上記のｉｆ（ｂａｌａｎｃｅ＜０）ステートメントに従ってｍｙＡｃｃｏｕｎｔの残高がゼロより小さいかどうかの判定に関与する論理を表している。ブロック３２５および３３３は、ブロック３１７に関連して行われる判定の結果に従ってメッセージを生成する論理を表す。例えば、ブロック３１７で決定された残高がゼロより小さかった場合、メッセージが、ブロック３２５および内部ブロック３２７〜３３１に従って生成される。理解されるように、ブロック３２５〜３３１は、上記テキスト記述のｍｓｇＲｅｓｕｌｔ＝“ｏｖｅｒｄｒａｗｎ”ステートメントを表す。ブロック３１７で決定される残高がゼロより大きい場合には、メッセージがブロック３３３および内部ブロック３３５〜３３９に従って生成される。理解されるように、ブロック３３３〜３３９は、ｍｓｇＲｅｓｕｌｔ＝“ｏｋａｙ”ステートメントを表す。最後に、ブロック３４１は、ｓｅｎｄ（ｍｙＰｏｒｔ，ｍｓｇＲｅｓｕｌｔ）ステートメントを表し、このステートメントは、ブロック３１７〜３２３の残高の判定に従って、ブロック３２５〜３３１またはブロック３３３〜３３９で生成されたメッセージを送信することを記述している。
【００４６】
次いで、このパーズ木は、実行されるときにこのビジネスプロセスを実施する抽象命令シーケンスに変換される。
【００４７】
【表２】
0004728607.tif 000003
【００４８】
理解されるように、実際の命令リストは任意の形式をとることができ、かかる形式はどれも本発明の一実施形態と同様に整合したものであるので、以上にリストアップされた命令は、命令リストを単に表すにすぎない。さらに、以上の番号付けされ括弧付けされた説明は、本発明の一実施形態と整合性があるが、本発明の一実施形態で使用される抽象命令中に存在する必要はない。以上で論じたように、これらの抽象命令は、（それらがどのような形式で提示されたとしても）次いで、本発明の一実施形態によって入力として使用される。
【００４９】
次に図４を参照すると、本発明の一実施形態による、ＸＬＡＮＧ／ｓコードをコンパイルする方法を示すフローチャートが示されている。図４から分かるように、方法４００は、ステップ４０５〜４４０を含むが、簡単に述べるように、必ずしもすべてのステップ４０５〜４４０が、本発明の一実施形態中に存在している必要はない。ステップ４０５で、例えば、図３に関連して以上で論じた抽象命令などの抽象命令を使用して、フローグラフが作成される。例示のフローグラフの作成に関する詳細は、図６Ａ〜図６Ｆに関連して以下で論じる。ステップ４１０で、ステップ４０５で作成されるフローグラフの基本ブロックが順序づけられ、ブロック４１５で、図７に関して以下で詳細に論じるように、各基本ブロックのドミネイタ（ｄｏｍｉｎａｔｏｒ）が見出される。ステップ４２０で、図８に関連して以下で詳細に論じるように、ループが見出される。ステップ４２５で、各基本ブロック内におけるデータオブジェクトの使用が解析される。前述したように、データオブジェクトは、変数、記号などとすることができる。ステップ４３０で、以下で詳細に論じるように、１つまたは複数の作成ポイントが図９の方法に従って決定される。ステップ４３５で、以下のように、１つまたは複数の破壊ポイントが図１０の方法に従って決定される。最後に、ステップ４４０で、以下で論じるように、図１１Ａ〜図１１Ｂの方法に従って、１つまたは複数のロックポイントが各共用データオブジェクトについて作成される。
【００５０】
フローグラフの構築
本発明の一実施形態では、フローグラフは、命令リストを基本ブロックに区分し、次いで各基本ブロックをその直後の基本ブロックおよび直前の基本ブロックに接続することによって構築する。基本ブロックは、制御フローが、ブロックの終わりを除いて停止することなく、どのように分岐する可能性もなく、最初のステートメントから入り、最後のステートメントを出て行く、一連の連続したプログラミングステートメント、または命令である。基本ブロックに関する追加の参考文献が、非特許文献７である。本発明の一実施形態と互換性のあるアルゴリズムの一例が、この参考文献のアルゴリズム９．１である。したがって、本発明の一実施形態は、例えば、前記文献のアルゴリズム９．１から抽象命令１〜７にも適用される。前述の例では、したがって基本ブロックは、｛１、２、３｝、｛４、５｝、｛６｝、および｛７｝となる。
【００５１】
後継基本ブロックと先行基本ブロックを見出すこと
この１組の抽象命令または「命令ストリーム」が基本ブロックへと区分された後に、これらブロックは双方向にその後継基本ブロック、または先行基本ブロックへと接続される。第１の基本ブロックの後継基本ブロックは、単にその最初の命令が第１の基本ブロック中の最後の命令から到達できる任意のブロックである。したがって、前述の例では、基本ブロック｛１、２、３｝中の最後の命令は、ＪｕｍｐＩｆＦａｌｓｅ命令である。この命令は、この条件が偽の場合に、別の命令へのジャンプを実施し、そうでない場合には、次の逐次命令を処理することになるように定義される。したがって、｛１、２、３｝の後継基本ブロックは、｛４、５｝および｛６｝である。先行基本ブロックは、その名前が暗示するように、後継基本ブロックの逆である。その結果、本例では、｛４、５｝の先行基本ブロックは、｛１、２、３｝である。
【００５２】
次に図５を参照すると、以上にリストアップした抽象命令の例示のフローグラフ５００が示されている。ブロック５０１は、基本ブロック｛１、２、３｝を表し、ブロック５０５は、基本ブロック｛４、５｝を表し、ブロック５０７は、基本ブロック｛６｝を表し、ブロック５０９は、基本ブロック｛７｝を表す。実線は、各基本ブロック間の後継関係を表し、破線は、先行関係を表す。例えば、ブロック５０５および５０７は、それぞれブロック５０９に実線で接続され、それによって、基本ブロック｛７｝が、基本ブロック｛４、５｝および｛６｝の後継ブロックであることが示される。同様にして、ブロック５０９は、ブロック５０５および５０７に破線で接続され、それによって、基本ブロック｛４、５｝および｛６｝は、基本ブロック｛７｝の先行ブロックであることが示される。
【００５３】
トランザクションのフローグラフ
ＸＬＡＮＧ／ｓ中のトランザクションは、トランザクショナル特性を示すサブプロセスをカプセル化する。したがって、ＸＬＡＮＧ／ｓトランザクション内に含まれるプロセスは、その全体が完了するか、あるいはその全体が失敗する。理解されるように、特定のＸＬＡＮＧ／ｓトランザクションの成功または失敗についての計画策定により、プログラマは、エラーを補償するのに十分に頑強なビジネスアプリケーションを作成することができるようになる。トランザクションは、例えば、アトミック（ａｔｏｍｉｃ）な、または長期間のものとなる。
【００５４】
アトミックＸＬＡＮＧ／ｓトランザクションは、トランザクションが正常に完了しない限り、何の動作も行われないし、プログラム状態が変化しないソフトウェアトランザクションである。アトミックＸＬＡＮＧ／ｓトランザクションは、正常に完了するか、それとも全く何もしない、つまり「コミット」しないという意味でアトミックである。長期間ＸＬＡＮＧ／ｓトランザクションは、名前が暗示するように、計算目的としてはかなり長い期間にわたって行われるソフトウェアトランザクションである。かかるトランザクションの処理中のどこかのポイントで、例外が起こり得る。長期間トランザクション中に、例外が起こると、または例外が投げられたら（ｔｈｒｏｗｎ  ｆｒｏｍ）、コンパイラには、たとえ有ってもトランザクション内の命令のうちのどれが正常に実行されているかについて確信できない。
【００５５】
そのタイプに関係なく、各トランザクションは、本体プロセス、０個以上の例外ハンドラプロセス、および任意選択の補償プロセスを含んでいる。理解されるように、アトミックトランザクションは、例外ハンドラをもたないが、再試行可能なことがある。例外ハンドラプロセスとは、トランザクション本体中の任意の命令が、ハンドラを設計する対象となる種類の例外を投げるときはいつでも、またはトランザクションが中断するときはいつでも実行されるサブプロセスである。補償プロセスとは、トランザクションが、トランザクション本体で実施された作業を「取り消す（ｕｎｄｏ）」ためにコミットをした後に、プログラムの構成に応じて実行されることがあるサブプロセスである。したがって、理解されるように、トランザクションがネストしうる一実施形態中で、内部のトランザクションはコミットするが外部トランザクションが中断する場合、外部トランザクションは、内部トランザクションの補償ハンドラを呼び出すことができる。
【００５６】
図６Ａ〜図６Ｆに関連して以下では、本発明の一実施形態によるトランザクションフローグラフについてさらに例証するためにいくつかのケース例を論じている。かかる議論に関連して、表記法Ｐｘが、サブプロセスを示すために使用される。この表記法では、添え字ｘは、サブプロセスＰの識別子である。分かりやすくするために、本明細書中では、図６Ａ〜図６Ｆに関連して、すべてのサブプロセスが、１つの基本ブロックから構成されることを想定しているが、本発明の一実施形態は、任意の複雑なサブプロセスを処理するように実装することができることが理解されよう。同様に、本発明の一実施形態に関連して使用されるコードは、どのような長さまたは複雑さであってもよいので、図６Ａ〜図６Ｆに関連して以下で使用するコード例は、単なる例にすぎないことも理解されよう。
【００５７】
長期間トランザクション
ＸＬＡＮＧ／ｓコードトランザクションの最も簡単な形式は、例外ハンドラも補償もない長期間トランザクションである。かかるトランザクションのテキスト記述は、例えば、以下の高レベルコードから構成される。
【００５８】
【表３】
0004728607.tif 000004
【００５９】
次に、これは、以下の抽象命令ストリームを生成する。
【００６０】
【表４】
0004728607.tif 000005
【００６１】
この場合にも以上で指摘したように、この抽象命令ストリームは、番号付けおよび括弧付きのコメントからなっており、これらは、説明を容易にするために本明細書中で挿入されている。したがって、かかる番号付けおよびコメントは、本発明の一実施形態と矛盾しないが、必要ではない。特別の抽象命令ＢｅｇｉｎＴｒａｎｓａｃｔｉｏｎは、その後継命令としてトランザクション本体プロセスＰｂｏｄｙ、および本例中に存在する場合には、すべての例外ハンドラプロセスを有する。特別な抽象命令ＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎは、その後継命令として次の逐次命令、および本例中に存在する場合には、トランザクションの補償プロセスを有する。
【００６２】
上記の２つの特別な抽象命令は一般に、別のコード区域の命令へのジャンプまたは分岐を引き起こすことによりこのプログラムの直線的な実行を中断するので、かかる抽象命令は、基本ブロックの終わりを特徴づけるものである。したがって、前述のフラグメントは、３つの基本ブロック、｛１、２｝、｛３、４｝、および｛５｝を有する。図６Ａを参照すると、前述の基本ブロックのフローグラフが示されている。ブロック６０１は、Ｐｓｔａｒｔ命令で示される抽象命令ＢｅｇｉｎＴｒａｎｓａｃｔｉｏｎを表し、ブロック６０３は、Ｐｂｏｄｙ命令で示される抽象命令ＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎを表し、ブロック６０５は、Ｐｅｎｄで示されるようにこのトランザクションの終了を表す。矢印は、プログラムフローを示し、ブロック６０１からブロック６０３を通ってブロック６０５に至っている。この簡単な例では、命令がどのような分岐も補償もなく順番に処理されるので、本発明の一実施形態では、フローグラフを３つのブロック６０１〜６０５に分割する必要がないことが理解されよう。
【００６３】
アトミックトランザクション
本例では、一実施形態が、長期間トランザクションとは違ってアトミックトランザクションをどのように処理することができるかについて示している。理解されるように、以下のテキスト記述は、図６Ａに関連した前述の長期間トランザクションのテキスト記述と同様である。
【００６４】
【表５】
0004728607.tif 000006
【００６５】
次に、これは、以下の抽象命令ストリームを生成し、このストリームはまた図６Ａに関連した前述の長期間トランザクションのテキスト記述にも対するものである。
【００６６】
【表６】
0004728607.tif 000007
【００６７】
このアトミックトランザクションの例では、ＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎは、図６Ａに関連した前述の命令とはやや異なる命令を含む。トランザクションが、コミットする場合には、制御フローは次の逐次命令へと進み、中断する場合には、制御フローは、このトランザクションの開始点にループバックする。したがって、理解されるように、アトミックトランザクションは、障害に際して再試行することができるので、暗黙的なループを形成する。次に図６Ｂを参照すると、前述のトランザクションのフローグラフが示されている。図６Ａのケースと同様に、ブロック６０１は、Ｐｓｔａｒｔ命令で示される抽象命令ＢｅｇｉｎＴｒａｎｓａｃｔｉｏｎを表し、ブロック６０３は、Ｐｂｏｄｙ命令で示される抽象命令ＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎを表し、ブロック６０５は、Ｐｅｎｄで示されるようにこのトランザクションの終了を表す。このラベル付けされていない矢印は、通常の障害のないプログラムフローを示し、ブロック６０１からブロック６０３を通ってブロック６０５に至っている。矢印Ａは、以上で説明したＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎ命令によって形成される暗黙的なループを示している。
【００６８】
理解されるように、ループが影響を与えるデータオブジェクトに関して破壊ポイントなどを決定する際に、破線矢印Ａで示される暗黙的なループを明らかにすることは、非常に重要である。例えば、データオブジェクトνの最後の字句使用がトランザクション本体Ｐｂｏｄｙ中で行われる場合、このトランザクションがコミットするまで、このデータオブジェクトνを破壊することができない。データオブジェクトνが、Ｐｂｏｄｙ中で破壊され、かつこのトランザクションが中断され再試行される場合、このプログラムオブジェクトνの値はこの再試行中に失われるはずである。したがって、この暗黙的なループの存在については、図１０に関連して以下で論ずるように、破壊ポイントの決定中に明らかにされる。本例では、本発明の一実施形態は、νの破壊を、Ｐｅｎｄを含む基本ブロック中に移動させるはずである。
【００６９】
例外ハンドラを伴う長期間トランザクション
本例では、長期間トランザクション中で実装されるＸＬＡＮＧ／ｓ例外ハンドラの処理について説明している。前述のように、アトミックトランザクションは、例外ハンドラをもたない。かかるトランザクションのテキスト記述は、例えば以下の高レベルコードから構成される。
【００７０】
【表７】
0004728607.tif 000008
【００７１】
次に図６Ｃを参照し、分かりやすくするためにこの例中の抽象命令ストリームを省略すると、前述のトランザクションのフローグラフが示されている。この場合にも、図６Ａおよび図６Ｂのケースと同様に、ブロック６０１は、Ｐｓｔａｒｔ命令で示される抽象命令ＢｅｇｉｎＴｒａｎｓａｃｔｉｏｎを表し、ブロック６０３は、Ｐｂｏｄｙ命令で示される抽象命令ＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎを表し、ブロック６０５は、Ｐｅｎｄで示されるようにこのトランザクションの終了を表す。さらに、ブロック６０７は、抽象命令Ｒｅｓｕｍｅを表し、この命令は、すぐに説明するように例外ハンドラに関連している。このラベル付けされていない矢印は、この場合も通常の障害のないプログラムフローを示し、ブロック６０１からブロック６０３を通ってブロック６０５に至っている。
【００７２】
このフローグラフは、このトランザクション本体が入力された直後に例外が起こり得ることを想定している。したがって、本体も例外ハンドラも共にＢｅｇｉｎＴｒａｎｓａｃｔｉｏｎ抽象命令を論理的にたどることができる。ブロック６０１に続く実線矢印は、通常のプログラムフローを示すが、破線矢印Ａは、例外の事象で取る論理パスを示している。ブロック６０７は、特別の抽象命令Ｒｅｓｕｍｅを含み、これは、このトランザクション後に次のステートメントにジャンプするように定義されている。したがって、ブロック６０７が表す例外ハンドラの処理を完了すると、破線矢印Ｂによって示される論理パスが取られ、ブロック６０５のＰｅｎｄへと至る。理解されるように、ブロック６０３の本体もブロック６０７の例外ハンドラも共に同じ後継ブロック、すなわちブロック６０５におけるＰｅｎｄへと流れる。
【００７３】
補償を伴う長期間トランザクション
この例は、ＸＬＡＮＧ／ｓ補償ハンドラの処理を、長期間トランザクションの形で実装されるように示している。前述のように、補償ハンドラは、エラーなどに起因して正常に完了しないトランザクションについて、取消しまたは「補償」を試みるＸＬＡＮＧ／ｓコードモジュールである。かかる補償ハンドラは、例えば失敗したトランザクションとは逆のファンクションの実施、失敗したトランザクションの効果を無効にするファンクションの実施など、プログラマが望むどのようなタスクでも実施することができる。かかるトランザクションのテキスト記述は、例えば、以下の高レベルコードから構成することができる。
【００７４】
【表８】
0004728607.tif 000009
【００７５】
次に図６Ｄを参照すると、前述のトランザクションのフローグラフが示されている。この場合にも、図６Ａ〜図６Ｃのケースのように、ブロック６０１は、Ｐｓｔａｒｔ命令で示される抽象命令ＢｅｇｉｎＴｒａｎｓａｃｔｉｏｎを表し、ブロック６０３は、Ｐｂｏｄｙ命令で示される抽象命令ＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎを表し、ブロック６０５は、Ｐｅｎｄで示されるようにこのトランザクションの終了を表す。ブロック６０９は、図６Ｃに関連した前述の補償プロセスおよび抽象命令Ｒｅｓｕｍｅを表す。ブロック６１１は、Ｐｘで示される、Ｐｂｏｄｙに続く任意の追加のプログラミングを表す。このラベル付けされていない矢印は、この場合にも通常の障害のないプログラムフローを示し、ブロック６０１からブロック６０３および６１１を通ってブロック６０５に至っている。
【００７６】
破線矢印Ａは、補償が望ましいプログラム状態の事象で取られる論理パスを表す。図６Ｄから分かるように、ブロック６０９は、Ｐｃｏｍｐで示される補償ハンドラを表す。図６Ｄのフローグラフ中にブロック６０９を配置することにより、このトランザクションが首尾よくコミットした後、補償ブロックのコードに到達できることが示され、ブロック６０５で表されるようにプログラムの終了まで到達可能に留まることが理解されよう。破線矢印Ａを経由して、ブロック６０９をブロック６０３のＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎ命令の可能な後継ブロックとすることにより、また破線矢印Ｂを経由して、プログラムの終了、すなわちブロック６０５をブロック６０９の後継ブロックとすることにより、かかるブロック６０９の使用可能性が図６Ｄのフローグラフ中で実現される。理解されるように、一実施形態では、ブロック６０９で表される補償機能がブロック６０９が流れていく先のポイントではもはや必要とされないという条件で、補償ブロック６０９は、プログラム中のブロック６０５より以前のポイントへと流れることができる。
【００７７】
補償を伴うアトミックトランザクション
理解されるように、補償を伴うアトミックトランザクションのフローグラフは、図６Ｂに関連した前述のアトミックトランザクションと、図６Ｄに関連した前述の補償を伴う長期間トランザクションとの組合せとして説明することができる。次に図６Ｅを参照すると、かかるフローグラフが示されている。ブロック６０１〜６１１の説明、ラベル付けされていない実線矢印、ならびに破線矢印ＡおよびＢは、図６Ｄに関連した前述の内容と整合している。理解されるように、破線矢印Ｃは、図６Ｂに関連した前述の破線矢印Ａと同等であり、これは、ＣｏｍｍｉｔＴｒａｎｓａｃｔｉｏｎ抽象命令の失敗に際して再試行することができる暗黙的なループを表す。
【００７８】
例外ハンドラおよび補償を伴う長期間トランザクション
理解されるように、例外ハンドラおよび補償を伴う長期間トランザクションのフローグラフは、図６Ｃに関連した前述の例外ハンドラを伴う長期間トランザクションと、図６Ｄに関連した前述の補償を伴う長期間トランザクションとの組合せとして説明することができる。次に、図６Ｆを参照すると、かかるフローグラフが示されている。ブロック６０１〜６１１の説明、およびラベル付けされていない実線矢印は、図６Ｅに関連した前述の内容と整合している。理解されるように、破線矢印ＡおよびＢは、図６Ｃに関連した前述の破線矢印ＡおよびＢと同等であり、これは、例外事象における制御フローを表し、それによって、制御フローが、破線矢印Ａを経由してブロック６０７の例外ハンドラに渡され、ブロック６１１のプログラムに戻される。さらに理解されるように、破線矢印ＣおよびＤは、図６Ｄに関連した前述の破線矢印ＡおよびＢと同等であり、これは、ブロック６０９の補償ハンドラが呼び出される事象における制御フローを表し、これは、破線矢印Ｃを経由して行われ、それによって、制御フローは、破線矢印Ｄを経由してブロック６０５におけるプログラムの終わりに戻っている。
【００７９】
フローグラフの準備
理解されるように、例えば、図６Ａ〜図６Ｆに関連した前述の１つまたは複数のフローグラフなどのフローグラフが作成された後に、次いで、本発明の一実施形態では、各基本ブロック上に情報を注釈付けすることができる。本発明の一実施形態によれば、深さ優先順探索を行ってこのフローグラフの深さ優先順に基本ブロックの位置を指し示す番号を割り当てる。さらに、一実施形態では、２つのドミネイタセットの決定が行われる。かかる決定において、１組のドミネイタが下から作成されるのと同様に、１組のドミネイタが上からも作成される。さらに、一実施形態では、もしあるなら、どのブロックが１つまたは複数のループに加わるかの判定も行われる。
【００８０】
さらに理解されるように、本発明の一実施形態では、図６Ａ〜図６Ｆに関連した前述のフローグラフなどのフローグラフをどのようなレベルの抽象命令の複雑さについても作成することができる。例えば、図６Ａ〜図６Ｂのフローグラフの任意数の任意の組合せを直列にまたは並列に行うことができる。かかる方法では、本発明の一実施形態は、どのような複雑さのコードを処理しコンパイルすることもできる。
【００８１】
深さ優先順
一実施形態によれば、深さ優先順探索が、このフローグラフに対して実施され、このフローグラフ内に含まれる各ブロックには、対応する深さ優先順番号が割り当てられる。理解されるように、フローグラフの深さ優先順位を見出すどのようなアルゴリズムも本発明の一実施形態に等しく整合している。例えば、かかるアルゴリズムの１つが、文献に記載されているアルゴリズム１０．１４である（非特許文献７参照。）。
【００８２】
深さ優先順探索の特性により、プログラムの終了に対応するプログラム中の最後の基本ブロックがいちばん小さな番号を受け取り、一方でプログラムの開始に対応するプログラム中の最初の基本ブロックがいちばん大きな番号を受け取ることが確実にできるようになることが理解されよう。次に図７を参照すると、深さ優先順の番号が各基本ブロックに割り当てられた例示のフローグラフが示されている。フローグラフ７００は、ブロック７０５〜７２０を含み、各ブロックには深さ優先順番号が割り当てられる。フローグラフ７００の最下部、ブロック７２０から出発して、ブロック７００が表すプログラムの最後にあるブロック７２０には番号０が割り当てられていることが分かる。フローグラフ７００の最後から２番目の２つのブロックとなるブロック７１０およびブロック７１５には、それぞれ番号１および番号２が割り当てられる。理解されるように、ブロック７１０とブロック７１５は、フローグラフ７００の最後から等距離にあるので、本発明の一実施形態との整合性を保持しながら、番号１と番号２の割当てを逆にすることができる。最後に、フローグラフ７００の最後から最も遠い所にあるブロック７０５には、番号３が割り当てられる。さらに理解されるように、深さ優先順位の使用により、例えば１つまたは複数のビットセットなど基本ブロック７０５〜７２０の効率的な識別が可能になる。
【００８３】
ドミネイタを見出すこと
ブロック７０５〜７２０の支配関係は、例えば文献（非特許文献７参照）に記載のアルゴリズム１０．１６を使用して双方向に決定される。以上で指摘したように基本ブロックのドミネイタを見出すためのアルゴリズムはどれも、本発明の一実施形態と等しく整合性がある。
【００８４】
１ブロックが別のブロックを前支配（ｐｒｅ−ｄｏｍｉｎａｔｅ）しているかどうかを判定することは、（制御フローの開始を表す）フローグラフ７００の最上部から出発し、特定のブロックに至るすべての論理パスが、第１に以前の１ブロックを通過している必要があるかどうかを判定することを伴う。例えば、フローグラフ７００中で、ブロック７２０のプリドミネイタ（ｐｒｅ−ｄｏｍｉｎａｔｏｒ）は、７２０および７０５である。ブロックがそれ自体を支配することは理解されよう。制御フローがブロック７２０に到達するに先立ってブロック７１０またはブロック７１５のどちらか一方は通過する必要はないので、ブロック７１０およびブロック７１５は、ブロック７２０を前支配していないことが理解されよう。例えば、制御フローは、ブロック７１５をバイパスしてブロック７０５からブロック７１０へ、次いで７２０へと通過することができる。同様に、制御フローはブロック７１０をバイパスしてブロック７０５からブロック７１５へ、次いで７２０へと通過することができる。
【００８５】
１ブロックが別のブロックを後支配（ｐｏｓｔ−ｄｏｍｉｎａｔｅ）しているかどうかを判定することは、（制御フローの終了を表す）フローグラフ７００の最下部から出発し、特定のブロックから由来するすべてのパスが最後に別のブロックを通過する必要があるかどうかを判定することを伴う。例えば、フローグラフ７００において、ブロック７０５のポストドミネイタ（ｐｏｓｔ−ｄｏｍｉｎａｔｏｒ）は、ブロック７０５およびブロック７２０である。
【００８６】
ループを見出すこと
次に図８を参照すると、本発明の一実施形態では、例えば文献（非特許文献７参照）に記載のアルゴリズム１０．１を使用することによりフローグラフ８００中のループを見出し識別している。図８から分かるように、フローグラフ８００は、二重にネストしたループである。以上で指摘したように、本発明の一実施形態は、任意の複雑さまたはループ数のフローグラフ８００と等しく整合している。番号付け規則を使用して例えば同じループに属するすべての基本ブロックに同じループ識別子が付与されるなど各ループを識別する。このループ識別子は、例えば内部ループが外部ループより大きな番号をもつ特性を伴う整数など任意のタイプの識別子とすることができる。図８で、ブロック８０５および８３５は、ループの一部ではなくしたがってループ識別子が付与されていないことが分かる。また、ブロック８２０とブロック８２５の間に形成されるループは、ブロック８１０、８１５および８３０によって形成されるループの内部でネストしていることも分かる。したがって、本発明の一実施形態によれば、ブロック８２０および８２５には、ループ識別子２が割り当てられてブロック８２０および８２５が２つのループに関与することが示され、ブロック８１０、８１５、および８３０には、ループ識別子１が割り当てられてブロック８１０、８１５、および８３０が１つのループに関与することが示される。
【００８７】
データオブジェクトの使用解析
したがって、図８に関連して以前に詳述した図４のステップ４２０の完了とともに本発明の一実施形態による方法は、各データオブジェクトの使用を解析するステップ４２５へと進む。前述したように、データオブジェクトは、例えば、変数、データオブジェクト、などとすることができる。例えば、図８のフローグラフ８００などのフローグラフが作成された後に、パスがフローグラフを介して作成される。このフローグラフの各基本ブロック内において、抽象命令を調べてどのプログラムオブジェクトが使用されており、どのようにかかるオブジェクトが使用されているかを判定する。したがって、各プログラムオブジェクトＳは、２つの組、すなわちかかるオブジェクトから読み取る、基本ブロックの組Ｓｒｅａｄと、このオブジェクトに書き込む、基本ブロックの組Ｓｗｒｉｔｅとを含む。理解されるように、オブジェクトを読み取り、またはオブジェクトから書き込む基本ブロックの組Ｓｕｓｅは、簡単にＳｒｅａｄ∪Ｓｗｒｉｔｅから形成される。
【００８８】
図４および図６Ａ〜図６Ｆに関連して前述したように、本発明の一実施形態が生成するフローグラフをＸＬＡＮＧ／ｓコンパイラで使用していくつかのタスクを実施する。例えば、作成ポイント、破壊ポイント、およびロックポイントの計算および挿入は、本発明の一実施形態で実施することができるタスクの一部であり、次に図９〜図１１Ｂに関連して以下で詳細に論じる。
【００８９】
オブジェクトについての作成ポイントの計算
次に図９を参照するとデータオブジェクトについて１つまたは複数の作成ポイントを計算する方法９００が示されている。ステップ９０５でデータオブジェクトから情報を読み取りまたはデータオブジェクトに書き込む基本ブロックの組Ｓｕｓｅが、収集される。理解されるようにこの組Ｓｕｓｅは、データオブジェクトから読み取る１組の基本ブロックＳｒｅａｄとデータオブジェクトに書き込む１組の基本ブロックＳｗｒｉｔｅの和に等しい。対象のデータオブジェクトがこの組Ｓｕｓｅ内のデータオブジェクトの最初の字句使用（ｌｅｘｉｃａｌ  ｕｓｅ）に際して作成されるという想定ができることが理解されよう。したがって、このデータオブジェクトの最初の字句使用を含む基本ブロックは、本明細書中ではＢｃｒｅａｔｅと呼ばれる。図７に関連して以上で指摘したように、深さ優先順位は、プログラムの開始に近い基本ブロックにより大きな番号を付与するので、例えば、これはこのデータオブジェクトを参照するいちばん大きな番号が付いた基本ブロックである。一実施形態中のＳｕｓｅ内のデータオブジェクトのあらゆる字句的に次に使用するものは、それぞれ次に番号が小さくなる基本ブロック、Ｂｎｅｘｔである。したがって、ステップ９０８で、このデータオブジェクトの最初の字句使用に基づいて最初の組Ｂｃｒｅａｔｅが計算される。
【００９０】
ステップ９１０において、本発明の一実施形態によるコンパイラは、ＢｃｒｅａｔｅのプリドミネイタとＢｎｅｘｔのプリドミネイタの共通部分（ｉｎｔｅｒｓｅｃｔｉｏｎ）Ｉを計算する。ステップ９１５で、この組Ｉが、Ｂｃｒｅａｔｅを含むかどうかについて判定が行われる。含む場合、ステップ９２０で、対象のデータオブジェクトの作成ポイントは、Ｂｃｒｅａｔｅのままとなる。含まない場合、ステップ９２５で、新しい作成ポイントＢｃｒｅａｔｅは、この新しい作成ポイントの深さ優先順番号が現在の作成ポイントの深さ優先順番号よりも大きい最小番号となるように、この組Ｉから選択される。したがって、その結果、このデータオブジェクトの作成ポイントが生じてから始めて、かかるデータオブジェクトを使用して、オブジェクトを参照し値をもたない場合にもたらされるはずのエラーが回避される。同様に、この作成ポイントは、このオブジェクトの最初に使用するできる限り近くで作成して不必要にメモリリソースに負担をかけないようにする。理解されるように、新しい作成ポイントが、以前の作成ポイントとは異なるループ内にある場合には、この組Ｉからの次により大きな、またより大きな番号の付いたブロックがすべての内部ループがバイパスされるまで選択される。
【００９１】
ステップ９３０で、この組Ｓｕｓｅ内のデータオブジェクトの別の使用が存在するかどうかについて判定が行われ、存在する場合には、方法９００は、かかる次の使用のためにステップ９１０へと戻る。このデータオブジェクトのすべての使用が明らかにされた後に、方法９００は、ステップ９３５へと進む。ステップ９３５で、データオブジェクトの作成と初期化を実施する命令が、どの内部ブロックの使用にも先立ち、ステップ９０５〜９３０で決定される基本ブロックＢｃｒｅａｔｅ内に挿入される。
【００９２】
オブジェクトについての破壊ポイントの計算
次に図１０を参照すると、１つまたは複数の破壊ポイントを計算する方法１０００が示されている。ステップ１００５で、前述の図９のステップ９０５のケースと同様に、データオブジェクトから情報を読み取りまたはデータオブジェクトに書き込む基本ブロックの組Ｓｕｓｅが収集される。理解されるようにこの組Ｓｕｓｅは、データオブジェクトから情報を読み取る１組の基本ブロックＳｒｅａｄとデータオブジェクトに書き込む１組の基本ブロックＳｗｒｉｔｅの和に等しい。一実施形態では、対象のデータオブジェクトが、この組Ｓｕｓｅ内のデータオブジェクトの最後の字句使用において破壊されるという想定が行われる。したがって、このデータオブジェクトの最後の字句使用を含む基本ブロックは、本明細書中ではＢｄｅｓｔｒｏｙと呼ばれる。例えば、これは、このデータオブジェクトを参照するいちばん小さな番号が付けられた基本ブロックである。一実施形態中ではこの組Ｓｕｓｅ内のデータオブジェクトのあらゆる字句的に以前に使用するものは、それぞれ、次に大きな番号が付けられた基本ブロックＢｐｒｅｖである。したがって、ステップ１００８で、最初の組Ｂｄｅｓｔｒｏｙが、データオブジェクトの最後の字句使用に基づいて計算される。
【００９３】
ステップ１０１０で、本発明の一実施形態によるコンパイラが、ＢｄｅｓｔｒｏｙのポストドミネイタとＢｐｒｅｖのポストドミネイタとの共通部分Ｉを計算する。ステップ１０１５で、この組ＩがＢｄｅｓｔｒｏｙを含むかどうかについての判定が行われる。それを含む場合には、ステップ１０２０で、対象のデータオブジェクトの破壊ポイントは、Ｂｄｅｓｔｒｏｙのままに留まる。それを含まない場合には、ステップ１０２５で、新しい破壊ポイントＢｄｅｓｔｒｏｙが、この新しい破壊ポイントの深さ優先順番号が現在の破壊ポイントの深さ優先順番号よりも小さい最大番号となるように、この組Ｉから選択される。したがって、その結果、不必要にメモリリソースに負担をかけないようにするためにかかるデータオブジェクトが最後に使用された後にこのデータオブジェクトの破壊ポイントが生じる。理解されるように、新しい破壊ポイントが以前の破壊ポイントとは異なるループ内にある場合には、この組Ｉからの次により小さな、またより小さな番号が付けられたブロックが、すべての内部のループがバイパスされるバイパスされるまで選択される。
【００９４】
ステップ１０３０で、この組Ｓｕｓｅ内のデータオブジェクトの別の使用が存在するかどうかについて判定が行われ、それが存在する場合には、方法１０００は、かかる次の使用のためにステップ１０１０へと戻る。このデータオブジェクトのすべての使用が明らかにされた後に、方法１０００は、ステップ１０３５へと進む。ステップ１０３５で、データオブジェクトの破壊とクリーンアップを実施する命令が、どの内部ブロックの使用の後でも、ステップ１００５〜１０３０で決定される基本ブロックＢｄｅｓｔｒｏｙ内に挿入される。
【００９５】
共用オブジェクトについてのロックポイントの計算
理解されるように、共用データオブジェクトの最初の使用に先立ってこれらのロックをできる限り遅く配置することが望ましいので、ロックポイントの計算は、作成ポイントの計算に類似して見える。しかし、共用オブジェクトについてのロックを個別に配置することはできない。以下の例示のＸＬＡＮＧ／ｓコードは、ロックポイントを計算する際に生じる複雑さの一例を提供している。
【００９６】
【表９】
0004728607.tif 000010
【００９７】
以上の例示のコードでは、各並列タスク中で、オブジェクトａおよびｂは、逆の順序でアクセスされる。不適切なロック配置の一例を以下のコード例中の太字テキストで提供している。
【００９８】
【表１０】
0004728607.tif 000011
【００９９】
以上のコードを中断やエラーなしに実行することができる場合、前述のロック配置を許容可能とすることができる。しかし、第１のタスクがａのロックを獲得するのに十分はるかに進み、次いで中断される場合、デッドロックしたプログラムがもたらされることがある。例えば、前述の中断の後、第２のタスクがｂのロックを獲得するために進む場合、第２のタスクは、ａのロックを獲得できないのでブロックされてしまうことになる。第１のタスクがその中断後に再開する場合、第１のタスクは、今やｂのロックを獲得できないので進むことができなくなってしまう。したがってこのプロセスはデッドロックされる。
【０１００】
本発明の一実施形態は、同期範囲内のすべての共用データオブジェクトの使用ポイントを考慮し、任意のオブジェクトの最初の使用に先立ってかかるすべてのオブジェクトについてロックを配置することによってこの問題を回避している。すべての同期範囲にわたって一貫した順序でロックを獲得することによってデッドロックが回避される。理解されるように、かかる順序が一貫している場合、任意のロック順序を使用することができる。
【０１０１】
以下で論じる図１１Ａ〜図１１Ｂの方法を使用して、太字テキストで示すような以下のロック配置が前述のコード例からもたらされるはずである。
【０１０２】
【表１１】
0004728607.tif 000012
【０１０３】
理解されるように、以上のロック配置は前述のデッドロック問題を解消する。以下の図１１Ａ〜図１１Ｂの説明から分かるように、一実施形態は、さらにこの共用データオブジェクトの読取りと書込みを区別している。したがって、共用オブジェクトが同期範囲内に決して書き込まれない場合には、一実施形態による方法は、読取りロックだけを獲得することになる。その結果、単一ライタ、複数リーダの同期が使用可能になる。
【０１０４】
次に図１１Ａを参照すると、本発明の一実施形態による、ロックポイントを配置する例示の方法１１００が提供されている。ステップ１１０５で、基本ブロックの組Ｖ、すなわち最初は空の組が作成される。ステップ１１１０で、ロッキングを必要とするすべての共用データオブジェクトの組Ｌが、収集される。ステップ１１１５で、このデータオブジェクトに書込みを行う基本ブロックの組Ｓｗｒｉｔｅが作成され、ステップ１１２０で同期範囲内に含まれないすべての基本ブロックが、Ｓｗｒｉｔｅから除去される。ステップ１１２５で、このデータオブジェクトから読取りを行う基本ブロックの組Ｓｒｅａｄが作成され、ステップ１１３０で、同期範囲内に含まれないすべての基本ブロックが、Ｓｒｅａｄから除去される。ステップ１１３５で、必要とされるロックのタイプについての判定が行われる。例えば、この組Ｓｗｒｉｔｅが空、すなわちこのデータオブジェクトに何も書き込まれないことを示す場合、このデータオブジェクトは、読取りロックを必要とするだけであり、そうでない場合には、このデータオブジェクトは、書込みロックを必要とする。
【０１０５】
ステップ１１４０で、これらの組ＳｗｒｉｔｅとＳｒｅａｄがＶに追加される。ステップ１１４５で、別のデータオブジェクトが、この組Ｌ内にあるかどうかについての判定が行われ、もしある場合、この方法１１００は、次のデータオブジェクトではステップ１１１５に戻る。そうでない場合はこの方法１１００は、以下の図１１Ｂのステップ１１５０へと進む。
【０１０６】
次に図１１Ｂを参照すると、本発明の一実施形態による、ロックポイントを配置する方法１１００の残りが示されている。すべてのロックが、この組Ｖ内の任意の共用オブジェクトの最初の字句使用において行われるという想定が行われることが理解されよう。したがって、この共用データオブジェクトの最初の字句使用を含む基本ブロックは、本明細書中では、Ｂｌｏｃｋと呼ばれる。これは、例えば、この組Ｖ中でいちばん大きな番号が付けられた基本ブロックである。一実施形態では、Ｖ内のデータオブジェクトのあらゆる字句的に次に使用するものは、それぞれ次により小さな番号が付けられた基本ブロックＢｎｅｘｔである。したがって、ステップ１１５０で、最初の組Ｂｌｏｃｋは、このデータオブジェクトの最初の字句使用に基づいて計算される。
【０１０７】
ステップ１１５５で、本発明の一実施形態によるコンパイラは、ＢｌｏｃｋのプリドミネイタとＢｎｅｘｔのプリドミネイタの共通部分Ｉを計算する。ステップ１１６０で、この組ＩがＢｌｏｃｋを含むかどうかについての判定が行われる。それを含む場合は、ステップ１１７０で、対象とするデータオブジェクトのロックポイントは、Ｂｌｏｃｋに留まる。含まなければ、ステップ１１６５で、新しいロックポイントの深さ優先順番号が、現在のロックポイントの深さ優先順番号よりも大きな最小の番号になるように、新しいロックポイントＢｃｒｅａｔｅをこの組Ｉから選択する。その結果、同時にトランザクションのデッドロックを回避するようにしてロックポイントを配置しながら、このオブジェクトの最初の使用のできる限り近くにロックポイントを作成してリソースの早期ロッキングを回避する。理解されるように、新しいロックポイントが以前のロックポイントとは異なるループ中にある場合、次のより大きな、またより大きな番号が付けられたブロックが、すべての内部ループがバイパスされるまで、この組Ｉから連続して選択される。
【０１０８】
ステップ１１７５で、別の字句的に続くブロックＢｎｅｘｔが、この組Ｖ内に存在するかどうかについて判定が行われ、存在する場合には、方法１１００は、かかる次のブロックについてステップ１１５５へと戻る。データオブジェクトのあらゆる使用が明らかにされた後、この方法１１００は、ステップ１１８０へと進む。ステップ１１８０で、（図１１Ａに関連して以上で決定される読取りブロックまたは書込みブロックとして）各共用オブジェクトをロックする命令が、どのような内部ブロックの使用にも先立って決定論的な順序で配置される。
【０１０９】
このようにして、静的なデータフロー解析を伴うＸＬＡＮＧ／ｓコードをコンパイルする方法およびシステムを提案してきた。様々な形態の例示の実施形態に関して本発明を説明してきたが、他の同様な実施形態を使用して、あるいは説明した実施形態に変更および追加を行って、本発明を逸脱することなく本発明と同じ機能を実施することができることを理解されたい。例えば、本出願に記載の本発明は、任意のタイプの応用環境における任意の構成のビジネス方法ソフトウェアに適用することができることが当業者には理解されよう。したがって、本発明は、どのような１つの実施形態にも限定すべきものではなく、添付の特許請求の範囲による広範さと範囲において解釈すべきものとする。
【図面の簡単な説明】
【０１１０】
【図１】本発明の態様を実装することができる例示のコンピューティング環境を示すブロック図である。
【図２】本発明の態様を実装することができる例示のネットワーク化コンピューティング環境を示すブロック図である。
【図３】本発明の一実施形態によるパーズの一例を示すブロック図である。
【図４】本発明の一実施形態による、ＸＬＡＮＧ／ｓコードをコンパイルする方法の一例を示すフローチャートである。
【図５】本発明の一実施形態によるフローグラフ抽象命令の一例を示すブロック図である。
【図６Ａ】本発明の一実施形態による、基本ブロックのフローグラフの一例を示すブロック図である。
【図６Ｂ】本発明の一実施形態による、基本ブロックのフローグラフの一例を示すブロック図である。
【図６Ｃ】本発明の一実施形態による、基本ブロックのフローグラフの一例を示すブロック図である。
【図６Ｄ】本発明の一実施形態による、基本ブロックのフローグラフの一例を示すブロック図である。
【図６Ｅ】本発明の一実施形態による、基本ブロックのフローグラフの一例を示すブロック図である。
【図６Ｆ】本発明の一実施形態による、基本ブロックのフローグラフの一例を示すブロック図である。
【図７】本発明の一実施形態による、各基本ブロックに深さ優先番号が割り当てられたフローグラフの一例を示すブロック図である。
【図８】本発明の一実施形態による、ループが割り当てられたフローグラフの一例を示すブロック図である。
【図９】本発明の一実施形態による、データオブジェクトについての１つまたは複数の作成ポイントを計算する方法の一例を示すフローチャートである。
【図１０】本発明の一実施形態による、データオブジェクトについての１つまたは複数の破壊ポイントを計算する方法の一例を示すフローチャートである。
【図１１Ａ】本発明の一実施形態による、データオブジェクトについてのロックポイントを配置する方法の一例を示すフローチャートである。
【図１１Ｂ】本発明の一実施形態による、データオブジェクトについてのロックポイントを配置する方法の一例を示すフローチャートである。
【符号の説明】
【０１１１】
１００  コンピューティング環境
１２０  処理装置
１２１  システムバス
１３０  システムメモリ
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１４０  固定不揮発性メモリインターフェース
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１５０  取り外し可能不揮発性メモリインターフェース
１６０  ユーザ入力インターフェース
１６１  ポインティングデバイス
１６２  キーボード
１７０  ネットワ−クインターフェース
１７１  ローカルエリアネットワーク
１７２  モデム
１７３  ワイドエリアネットワーク
１８０  リモートコンピュータ
１８２  グラフィックインターフェース
１８５  リモートアプリケーションプログラム
１８６  ビデオメモリ
１９０  ビデオインターフェース
１９１  モニタ
１９５  出力周辺インターフェース
１９６  プリンタ
１９７  スピーカ
【図１】
0004728607.tif 000013
【図２】
0004728607.tif 000014
【図３】
0004728607.tif 000015
【図４】
0004728607.tif 000016
【図５】
0004728607.tif 000017
【図６Ａ】
0004728607.tif 000018
【図６Ｂ】
0004728607.tif 000019
【図６Ｃ】
0004728607.tif 000020
【図６Ｄ】
0004728607.tif 000021
【図６Ｅ】
0004728607.tif 000022
【図６Ｆ】
0004728607.tif 000023
【図７】
0004728607.tif 000024
【図８】
0004728607.tif 000025
【図９】
0004728607.tif 000026
【図１０】
0004728607.tif 000027
【図１１Ａ】
0004728607.tif 000028
【図１１Ｂ】
0004728607.tif 000029