(57)【要約】  一実施形態は、遅延状態の変更を提供する。クライアントアプリケーションの一部を実装する動作チェーンを定義する情報を受信する。受信した情報は、各動作チェーンに関連付けられたグローバル状態を変更するための明示的なコンピュータ実行可能命令を含む。コンピュータ実行可能命令は、各動作チェーンに対して自動的に生成され、各動作チェーンのグローバル状態のプライベートビューを作成する。各暗黙的なコンピュータ実行可能命令は、各明示的なコンピュータ実行可能命令に自動的に関連付けられる。暗黙的なコンピュータ実行可能命令は、クライアントアプリケーションの実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される。
2020535551.tif 000002
【特許請求の範囲】
【請求項１】
遅延状態の変更を提供するための方法を実行させるための命令を含む非一時的なプロセッサ可読記憶装置であって、前記方法は、
クライアントアプリケーションの一部を実装する動作チェーンを定義する情報を受信することを含み、前記受信した情報は、各動作チェーンに関連付けられたグローバル状態を変更するための明示的なコンピュータ実行可能命令を含み、
各動作チェーンに対して、各動作チェーンのグローバル状態のプライベートビューを作成するためのコンピュータ実行可能命令を自動的に生成することと、
各々の明示的なコンピュータ実行可能命令に各々の暗黙的なコンピュータ実行可能命令を自動的に関連付けることとを含み、前記暗黙的なコンピュータ実行可能命令は、前記クライアントアプリケーションの実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される、非一時的なプロセッサ可読記憶装置。
【請求項２】
前記方法は、実行時に、対応する明示的なコンピュータ実行可能命令の代わりに、暗黙的なコンピュータ実行可能命令を実行するようにクライアントアプリケーションを構成することをさらに含む、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項３】
前記方法は、
ユーザ要求を特定する信号に応答して、少なくとも１つの明示的なコンピュータ実行可能命令を表示することと、
前記少なくとも１つの明示的なコンピュータ実行可能命令に対応する暗黙的なコンピュータ実行可能命令を表示しないこととをさらに含む、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項４】
前記方法は、前記クライアントアプリケーションの実行時に、
前記クライアントアプリケーションと通信するクライアント装置のブラウザに、前記クライアントアプリケーションのウェブページを表示することと、
前記ウェブページに示されたユーザインターフェイスコントロールのユーザ選択の検出に応答してイベントを生成することと、
前記イベントに応答して、前記動作チェーンのうち特定の動作チェーンを開始することとをさらに含む、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項５】
前記方法は、
前記特定の動作チェーンの開始に応答して、前記特定の動作のグローバル変数のスナップショットを作成することを含み、前記スナップショットは、前記特定の動作チェーンのローカル変数を含み、
前記グローバル変数の値を前記ローカル変数に割り当てることを含み、各ローカル変数には、各グローバル変数の値が割り当てられる、請求項４に記載の非一時的なプロセッサ可読記憶装置。
【請求項６】
前記方法は、
各グローバル変数と各ローカル変数との間の関連付けを有するラッパーを作成することと、
前記関連付けに基づいて、前記グローバル変数の前記値を前記ローカル変数に割り当てることとをさらに含む、請求項５に記載の非一時的なプロセッサ可読記憶装置。
【請求項７】
前記方法は、前記動作チェーンの実行時に、対応するグローバル変数の代わりに、ローカル変数を変更することをさらに含む、請求項５に記載の非一時的なプロセッサ可読記憶装置。
【請求項８】
前記方法は、各動作チェーンおよび対応するローカル変数を各々の区画に隔離することをさらに含み、
各動作チェーンは、個別の区画に隔離される、請求項５に記載の非一時的なプロセッサ可読記憶装置。
【請求項９】
前記方法は、前記受信、前記自動生成および前記自動関連付けを実行した設計時ツールを用いて、前記クライアントアプリケーションを実行することをさらに含む、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項１０】
前記方法は、スマートラッパーを用いて、明示的なコンピュータ実行可能命令のグローバル変数が書き込まれているときにローカル変数を作成し、前記グローバル変数が読み取られているときにローカル変数を作成しないことをさらに含む、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項１１】
遅延状態の変更を提供するための方法であって、
クライアントアプリケーションの一部を実装する動作チェーンを定義する情報を受信することを含み、前記受信した情報は、各動作チェーンに関連付けられたグローバル状態を変更するための明示的なコンピュータ実行可能命令を含み、
各動作チェーンに対して、各動作チェーンのグローバル状態のプライベートビューを作成するためのコンピュータ実行可能命令を自動的に生成することと、
各々の明示的なコンピュータ実行可能命令に各々の暗黙的なコンピュータ実行可能命令を自動的に関連付けることとを含み、前記暗黙的なコンピュータ実行可能命令は、前記クライアントアプリケーションの実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される、方法。
【請求項１２】
前記方法は、実行時に、対応する明示的なコンピュータ実行可能命令の代わりに、暗黙的なコンピュータ実行可能命令を実行するようにクライアントアプリケーションを構成することをさらに含む、請求項１１記載の方法。
【請求項１３】
前記方法は、
ユーザ要求を特定する信号に応答して、少なくとも１つの明示的なコンピュータ実行可能命令を表示することと、
前記少なくとも１つの明示的なコンピュータ実行可能命令に対応する暗黙的なコンピュータ実行可能命令を表示しないこととをさらに含む、請求項１１に記載の方法。
【請求項１４】
前記方法は、前記クライアントアプリケーションの実行時に、
前記クライアントアプリケーションと通信するクライアント装置のブラウザに、前記クライアントアプリケーションのウェブページを表示することと、
前記ウェブページに示されたユーザインターフェイスコントロールのユーザ選択の検出に応答してイベントを生成することと、
前記イベントに応答して、前記動作チェーンのうち特定の動作チェーンを開始することとをさらに含む、請求項１１に記載の方法。
【請求項１５】
前記方法は、
前記特定の動作チェーンの開始に応答して、前記特定の動作のグローバル変数のスナップショットを作成することを含み、前記スナップショットは、前記特定の動作チェーンのローカル変数を含み、
前記グローバル変数の値を前記ローカル変数に割り当てることを含み、各ローカル変数には、各グローバル変数の値が割り当てられる、請求項１４に記載の方法。
【請求項１６】
前記方法は、
各グローバル変数と各ローカル変数との間の関連付けを有するラッパーを作成することと、
前記関連付けに基づいて、前記グローバル変数の前記値を前記ローカル変数に割り当てることとをさらに含む、請求項１５に記載の方法。
【請求項１７】
前記方法は、前記動作チェーンの実行時に、対応するグローバル変数の代わりに、ローカル変数を変更することをさらに含む、請求項１５に記載の方法。
【請求項１８】
前記方法は、各動作チェーンおよび対応するローカル変数を各々の区画に隔離することをさらに含み、
各動作チェーンは、個別の区画に隔離される、請求項１５に記載の方法。
【請求項１９】
前記方法は、スマートラッパーを用いて、明示的なコンピュータ実行可能命令のグローバル変数が書き込まれているときにローカル変数を作成し、前記グローバル変数が読み取られているときにローカル変数を作成しないことをさらに含む、請求項１１に記載の方法。
【請求項２０】
遅延状態の変更を提供するための設計時ツールであって、
１つ以上のプロセッサと、
命令を含む非一時的なプロセッサ可読記憶装置とを備え、前記命令は、
クライアントアプリケーションの一部を実装する動作チェーンを定義する情報を受信するための命令を含み、前記受信した情報は、各動作チェーンに関連付けられたグローバル状態を変更するための明示的なコンピュータ実行可能命令を含み、
各動作チェーンに対して、各動作チェーンのグローバル状態のプライベートビューを作成するためのコンピュータ実行可能命令を自動的に生成するための命令と、
各々の明示的なコンピュータ実行可能命令に各々の暗黙的なコンピュータ実行可能命令を自動的に関連付けるための命令とを含み、前記暗黙的なコンピュータ実行可能命令は、前記クライアントアプリケーションの実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される、設計時ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、２０１８年６月７日に提出され、「遅延状態の変更」と題された米国特許出願第１６／００３０１６号（ＯＲＡＣＰ０２０７／ＯＲＡＣＰ１８０２９９−ＵＳ−ＮＰ）、２０１７年９月２８日に提出され、「遅延状態の変更」と題された米国仮特許出願第６２／５６４９４３号（ＯＲＡＣＰ０２０７Ｐ−１／ＯＲＡＣＰ１８０２９９−ＵＳ−ＰＳＰ）、および２０１８年２月１２日に提出され、「遅延状態の変更」と題された米国特許仮出願第６２／６２９５２０号（ＯＲＡＣＰ０２０７Ｐ−２／ＯＲＡＣＰ１８０２９９−ＵＳ−ＰＳＰ−２）の優先権を主張し、これらの出願の内容の全体は、あらゆる目的のために参照によって本願に組み込まれる。
【背景技術】
【０００２】
背景
共有変数または他のデータを使用するコンピューティング環境にプロセスを実行しているときに、他のプロセスも共有データを使用する場合、適切な動作を保証することが困難である。他の１つ以上のプロセスと並行して当該プロセスが動作する場合または当該プロセスの連続実行を保証できない場合に、競合が発生する可能性がある。共有データの競合が発生する可能性がある１つの領域は、ウェブアプリケーションの開発である。ウェブアプリケーションの一例として、ＨＴＭＬ（HyperText Markup Language）、Ｊａｖａｓｃｒｉｐｔ（登録商標）などの言語を用いて、「ステートレス」実行方法を実装できるブラウザベースのアプリケーションが挙げられる。
【０００３】
様々なプロトコルおよび標準、例えばＳＯＡ（Service Oriented Architecture）およびＲＥＳＴ（Representational State Transfer）などをブラウザベースのアプリケーションに使用することによって、複雑なシステムをウェブアプリケーションに設計することができる。ウェブアプリケーションにより多くの特徴、機能および複雑性を導入する場合、データの競合問題が発生する可能性が高くなる。また、このような断続的なエラーを再現して修正することは、困難である。このことは、複数の異なる開発者がウェブアプリケーション開発段階で機能を個別に作成し、個別のユーザが実行段階でこの機能を整合または統合した体験として実行する場合に特によくある。機能の例として、例えば、商品またはサービスのオンライン購入が挙げられる。この場合、ユーザは、特定の機能の完了を待たずに、商品の閲覧、比較、購入、記録および他の機能をほぼ同時に実行することができる。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
一実施形態は、遅延状態の変更を提供する。クライアントアプリケーションの一部を実装する動作チェーンを定義する情報を受信する。受信した情報は、各動作チェーンに関連付けられたグローバル状態を変更するための明示的なコンピュータ実行可能命令を含む。コンピュータ実行可能命令は、各動作チェーンに対して自動的に生成され、各動作チェーンのグローバル状態のプライベートビューを作成する。各暗黙的なコンピュータ実行可能命令は、各明示的なコンピュータ実行可能命令に自動的に関連付けられる。暗黙的なコンピュータ実行可能命令は、クライアントアプリケーションの実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される。
【０００５】
一実施形態は、延状態の変更を提供するための方法を実行させるための命令を含む非一時的なプロセッサ可読記憶装置を提供する。この方法は、クライアントアプリケーションの一部を実装する動作チェーンを定義する情報を受信することを含み、受信した情報は、各動作チェーンに関連付けられたグローバル状態を変更するための明示的なコンピュータ実行可能命令を含み、各動作チェーンに対して、各動作チェーンのグローバル状態のプライベートビューを作成するためのコンピュータ実行可能命令を自動的に生成することと、各々の明示的なコンピュータ実行可能命令に各々の暗黙的なコンピュータ実行可能命令を自動的に関連付けることとを含み、暗黙的なコンピュータ実行可能命令は、クライアントアプリケーションの実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される。
【０００６】
本明細書に開示された特定の実施形態の本質および利点のさらなる理解は、以下の説明および添付の図面を参照することによって実現され得る。
【図面の簡単な説明】
【０００７】
【図１】一実施形態に従って、並列に実行されている動作チェーンを示す図である。
【図２】一実施形態に従って、システムを示すブロック図である。
【図３】一実施形態に従って、スナップショットの実装を示す図である。
【図４】一実施形態に従って、ユーザインターフェイスの一部であるボタンの動作チェーンを作成するページのスクリーンショットを示す図である。
【図５】一実施形態に従って、開発者が動作チェーンに必要な入力パラメータをマッピングするために使用できるウェブページを示す図である。
【図６】一実施形態に従って、未熟練開発者がＵＩコンポーネントをコンポーネントイベントに関連付けるために使用できるウェブページを示す図である。
【図７】一実施形態に従って、イベントリストを含むウェブページを示す図である。
【図８】一実施形態に従って、遅延状態の変更を提供するための方法を示すフローチャートである。
【図９】一実施形態に従って、システムを示す図である。
【図１０】本明細書の図面に示された実施形態を実施するために使用可能なシステムおよび関連するコンピューティング環境を示す概略ブロック図である。
【図１１】本明細書に記載された実施形態を実施するために使用可能なコンピューティング装置を示す概略ブロック図である。
【発明を実施するための形態】
【０００８】
実施形態の詳細な説明
高度並列化システムにおいて、複数のプロセスが共有状態を同時に更新する可能性があり、その結果潜在的な競合をもたらす。プロセスとは、所定の機能を行うために実行されるコードの一部である。ユーザがクライアントアプリケーションのユーザインターフェイスと対話するなど特定の機能を説明するが、本明細書に記載された機能は、必要に応じて他の機能と共に使用するように構成できることは明らかである。従来では、複数の並列プロセスが共有状態を同時に更新する問題は、まったく対処されなかった、またはロック、ミューテックスまたはクリティカルセクションなどの高度なプログラミングメカニズムを用いて対処された。このような高度なプログラミングメカニズムを使用するコードを作成することには、開発者が高度なプログラミングスキルを有する必要がある。様々な実施形態は、高度なプログラミングメカニズムを使用せず、未熟練開発者がコードを作成できるように、これらの問題に対処する。遅延状態の変更により、未熟練開発者は、潜在的な競合を回避すると共に、クライアントアプリケーション用のコンピュータ実行可能命令を作成することができる。これによって、各プロセスは、共有状態の矛盾のないビューを有し、対応するプロセスが完了したときに、共有状態を予測可能な方法で更新することができる。
【０００９】
イベント駆動型アプリケーションにおいて、プロセスは、イベントに応答して特定の動作を実行する。イベントが同時に発生する可能性があり、イベントの処理が非同期に行われる可能性があるため、イベントに応答して変更される可能性のある状態は、競合する可能性があり、通常は競合する。
【００１０】
イベントハンドラを設計および実装する場合、他の外部ハンドラが使用されている状態を同時に変更することを判断することは、非常に困難である。例えば、例示として以下の擬似コードを挙げる。
【００１１】
【表１】
2020535551.tif 000003
【００１２】
例えば、最初に状態Ａの値が３であり、状態Ｂの値が２であり、「set result=sum(A, B)」（以下、「設定」と略す）という命令を実行するときに、５という結果を与えると仮定する。設定した後で出力する前に、別のハンドラまたはプロセスが、例えば、状態Ａを３から２に変化または変更した場合、「print A, "+", B, "=", result」命令は、不正解「２＋２＝５」を出力してしまう。
【００１３】
上記は、簡単な例で、２つ以上のプロセスまたはハンドラが共有変数Ａを書き込む場合の問題を示している。第１の問題は、２つのプロセス（例えば、第１のプロセスがonAdditionButtonClickであり、第２のプロセスがＡの書き込みである）が非同期に実行されるため、Ａの現在値を判断することである。第２の問題は、プロセスが誤りを検出した場合、すなわち、「３＋２＝５」ではなく「２＋２＝５」を出力した場合、処理を既知の開始点にロールバックできるように、擬似コードの開始時にＡおよびＢの初期値を判断することである。
【００１４】
現在の開発環境において、非常に多くのプロセスが非同期に実行され、多くの共有変数にアクセスしている可能性がある。換言すれば、１つの変数が２つ以上のプロセスによって非同期に共有されている場合がある。したがって、デバッグという目的のために、変数が変更される前に、変数のスナップショットを作成する必要がある。一実施形態において、変更とは、読み取りではなく、書き込みを意味する。一実施形態において、変数のスナップショットは、元の共有変数の値を変更することなく、変数を変更しようとするプロセスのために、ローカルコピーを作成することによって達成できる。このように、元の共有変数の値を非同期に変更しようとする各プロセスに、ローカルコピーが作成される。デバッグを必要とする場合、プロセスのローカル変数を元の共有変数の値にロールバックすることができる。ある時点で、全てのローカルコピーは、最終値に決定され、この最終値は、元の共有変数の値を置換する。一実施形態において、ローカルコピーは、スマートラッパーによって作成される。スマートラッパーは、変数が読み取られているときにローカルコピーを作成せず、書き込まれているときのみローカルコピーを作成する。
【００１５】
一実施形態によれば、イベントハンドラを実行する前に、状態を取得する。その後、取得した状態を他のハンドラから隔離することができる。一実施形態によれば、隔離した状態は、そのハンドラのみによって自由に変更され、得られた変更は、当該ハンドラの将来の動作に利用される。ハンドラが完了すると、状態は、より大きなシステムに合併される。合併中に競合が発生する可能性があるが、これらの競合は、論理処理が終了した後に発生するため、より容易に追跡および管理することができる。
【００１６】
図１Ａは、一実施形態に従って、並列に実行されている動作チェーン１１０、１２０、１３０を示す。関数または動作チェーンが「並列」に実行すると記載されるが、よく知られているように、並列実行という概念は、一般的に、マイクロ実行レベルで一度に１つのみの動作チェーンを実行するシングルプロセッサを用いて実行したタイムスライス処理を記述するときに使用される。しかしながら、より高いマクロ実行レベル、例えばアプリケーション命令レベルにおいて、動作チェーンが同時にまたは並列に動作するとみなされる。一般的に、本明細書に記載された実施形態は、任意の実行スキーム、例えば、シングルまたはマルチプロセッサアーキテクチャ、マルチスレッド処理、マルチパイプライン処理、時分割処理、分散処理またはネットワーク（例えば、クラウド）処理に適用することができる。
【００１７】
動作チェーン１１０、１２０、１３０は、一連の動作１１１、１１２、１２１〜１２５、および１３１〜１３３を指す。ボックスは、動作１１１、１１２、１２１〜１２５および１３１〜１３３を表し、矢印は、各々の動作チェーンにおいて１つの動作から別の動作への制御の流れを表す。例えば、実行は、矢印の方向に沿って行われる。動作は、矢印で連結された第１のボックスおよび第２のボックスによって示されている動作チェーンにおいて、連続して実行することができる。第２の動作チェーン１２０の３つのボックス１２２〜１２４によって示されているように、動作は、並列に実行することもできる。より具体的には、第２のチェーン１２０の第１の動作１２１は、３つの並列動作１２２〜１２４に分岐して実行され、その後下位の動作１２５に結合されてもよい。代替的に、１つの動作チェーンを呼び出すときにチェーン内の全ての動作を実行しないように、条件付きで１つ以上の動作を実行することもできる。１つ以上の動作は、前の動作の子動作である。例えば、第２の動作チェーン１２０の第１の動作１２１は、親動作であり、そこから分岐した３つの動作１２２〜１２４は、子動作である。他の例において、動作１１１は、動作１１２の親動作であり、動作１３１は、動作１３３の親動作である。
【００１８】
動作は、様々な種類の処理を実行することができる。例えば、１つの動作は、変数から値を読み取ることができる。別の動作は、値を変数に書き込むことができる。別の例において、特定の閾値を下回るいくつかの株価を取得し、いずれかの株価が特定の閾値を下回る場合に警告を提供したい場合がある。この場合、動作は、いくつかの他の動作に分岐され、これらの動作の各々は、並列に株価を取得する。株価が取得されると、これらの動作は、１つの動作に結合され、閾値を下回る株価を決定し、その情報を警告として提供する。さらに別の例において、ユーザがリストとして表示された各々の歌の下方の「購入」ボタンを選択することによっていくつかの歌を購入できるように、ウェブページを設計することができる。「購入」ボタンを選択すると、動作を開始するイベントがトリガーされる。各動作は、購入を並列に処理することができる。
【００１９】
様々な実施形態によれば、各々の動作チェーンは、動作チェーンを隔離する線によって示されたように、区画１４１、１４２、１４３（「隔離」とも呼ばれる）によって互いに隔離される。換言すれば、各動作チェーンは、動作時の状態のプライベートビューを有する。例えば、Ｙは、グローバル状態を表す。例示として、状態は、変数およびデータ流を含む。各動作チェーンは、実行を開始するときに、グローバル状態の独自のプライベートビューを有する。例えば、Ｙ１は、Ｙの第１の動作チェーンのプライベートビューであり、Ｙ２は、Ｙの第２の動作チェーンのプライベートビューであり、Ｙ３は、Ｙの第３の動作チェーンのプライベートビューである。
【００２０】
一実施形態において、ビューＹ１、Ｙ２、Ｙ３は、３つの動作チェーン１１０、１２０、１３０の隔離１４１、１４２、１４３の各々のローカル変数を用いて実現することができる。したがって、各々の動作チェーン１１０、１２０、１３０は、グローバル状態Ｙを変更せず、各ローカル変数Ｙ１、Ｙ２、Ｙ３を変更することができる。事実上、作成されたグローバル状態Ｙのスナップショットは、Ｙ１、Ｙ２、Ｙ３の元の状態のスナップショットとなり、１つの動作チェーンにバグがある場合、デバッグのためにその動作チェーンの状態を開始状態に戻すことができる。ビューＹ１、Ｙ２、Ｙ３は、状態Ｙのバージョンを表し、各々の動作チェーンによって変更できるため、変更可能な状態の例である。動作チェーンは、プロセスの例である。Ｙ３は、Ｙ１およびＹ２とは別の時間に作成されている。したがって、第３の動作チェーン１０３の動作１３１において、Ｙのみが読み取られるため、グローバル変数Ｙの値が使用される。動作１３２において、グローバル変数Ｙを書き込む。グローバル変数Ｙを書き込む前に、ローカルコピーＹ３が作成されたため、ＹではなくＹ３が書き込まれる。したがって、一実施形態において、ローカル変数は、動的に作成される。一実施形態において、動作チェーンの終了１６０において、競合解決策１７０が実行され、Ｙ１、Ｙ２およびＹ３の最終値から、グローバル状態Ｙの新しい値を決定する。一実施形態において、最後に書き込まれた変数Ｙ１、Ｙ２またはＹ３は、グローバル状態Ｙの新しい値である。
【００２１】
一実施形態によれば、未熟練開発者は、設計時ビジュアル開発ツールのユーザインターフェイスを用いて、動作チェーンのビジュアル表現を作成することができる。例えば、ユーザインターフェイスは、ボックスおよび矢印のアイコンを表示することができる。開発者は、ボックスおよび矢印のアイコンをドラッグおよびドロップしてボックスを連結することによって、動作チェーンのビジュアル表現を作成することができる。このツールは、動作チェーンのビジュアル表現に基づいて、クライアントアプリケーションのコンピュータ実行可能命令を生成する。通常、生成されたコンピュータ実行可能命令は、クライアントアプリケーションのユーザインターフェイスを実装する。このような動作チェーンは、矢印およびボックスを用いてアトミックボックス（atomic box）を相互に連結することによって簡単な動作を実行するように作成されたため、「宣言型システム」とも呼ばれている。宣言型システムは、並列処理に関する複雑性を含むコンピュータ命令の多くの複雑性を開発者から隠すことができる。これらの開発者は、「宣言型開発者」または「宣言型プログラマ」と呼ばれる。宣言型開発者は、ロック、ミューテックス、パーティションまたは（「保護セクション」とも呼ばれる）クリティカルセクションなどの高度なプログラミング技術を使用できない。
【００２２】
様々な実施形態によれば、宣言型プログラマ（本明細書において、「未熟練開発者」および「未熟練人間開発者」とも呼ばれる）は、ツールを用いて動作チェーンを作成することによって、明示的なコンピュータ実行可能命令を指定する。しかしながら、様々な実施形態によれば、ツールは、少なくとも１つの暗黙的なコンピュータ実行可能命令を自動的に生成する。この少なくとも１つの暗黙的なコンピュータ実行可能命令は、実行時に実行され、設計時に指定された少なくとも１つの明示的なコンピュータ実行可能命令を置換する。例えば、共有状態Ｙに値を割り当てる明示的なコンピュータ実行可能命令を実行する代わりに、プライベートビューＹ１に同様の値を割り当てる暗黙的なコンピュータ実行可能命令が実行される。
【００２３】
暗黙的なコンピュータ実行可能命令は、宣言型プログラマから隠されている。例えば、暗黙的な命令の実行が明示的な命令の実行を置換するが、宣言型プログラマは、作成した動作チェーンを表示する場合、明示的なコンピュータ実行可能命令しか見えない。
【００２４】
ツールは、クライアントアプリケーションの命令を表示するように、異なるモードでクライアントアプリケーションの命令を構成することができる。例えば、第１のモードは、未熟練プログラマによって使用され、第２のモードは、高度なプログラマによって使用される。第１のモードは、未熟練プログラマに明示的な命令を表示するが、暗黙的な命令を隠す。第２のモードは、暗黙的な命令を含むクライアントアプリケーションの実際の命令を表示する。いずれかのモードを使用しても、クライアントアプリケーションのソースコード命令を表示することができ、デバッグの一部として実行されている命令を表示することができる。
【００２５】
説明のために、動作チェーンが１５０から開始するときに、Ｙの値が３であると仮定する場合、Ｙ１、Ｙ２およびＹ３の値は、３になる。第１の動作チェーンが、Ｙの値を４に変更すると仮定する。各々の動作チェーンは、変数Ｙを変更する明示的なコンピュータ実行可能命令を含む。この命令は、ツールによって、変数Ｙ１、Ｙ２およびＹ３を変更する各々の動作チェーンの暗黙的なコンピュータ実行可能命令に変更される。例えば、各動作チェーンの明示的な命令がＹを変更する場合、実際の暗黙的な命令は、Ｙではなく、Ｙ１、Ｙ２およびＹ３をそれぞれ変更する。別の例において、動作チェーンの開始時にＹの値が３であると仮定する。第１のチェーンの明示的なコンピュータ実行可能命令がＹの値を４から変更するときに、暗黙的なコンピュータ命令は、ＹではなくＹ１を４に変更し、Ｙの値を３に維持する。さらに、Ｙ２およびＹ３の値は、第１の動作チェーンから隔離されているため、３に維持される。
【００２６】
動作チェーンの実行が終了すると、Ｙ１、Ｙ２およびＹ３の値が決定（「合併」または「合理化」とも呼ばれる）される。一実施形態によれば、最後の動作チェーンの値が保存される。例えば、第３の動作チェーンが最後に終了した場合、Ｙ３の値をＹに割り当てる。通常、Ｙ１、Ｙ２およびＹ３の値は、これ以上状態Ｙに使用されないため、重要ではない。
【００２７】
「変更」（mutation）および「変化」（change）という用語は、互換的に使用することができる。例えば、状態の変更は、状態の変化を意味する。より具体的には、変数Ｙの値を３から４に変化することは、変数Ｙを変更または変化することの一例である。
【００２８】
隔離１４１〜１４３およびプライベートビューＹ１、Ｙ２、Ｙ３がない場合、１つの動作チェーン、例えば動作チェーン１１０の明示的なコンピュータ実行可能命令がＹの値を４に変更するときに、他の動作チェーン、例えば動作チェーン１２０、１３０も、Ｙにアクセスして４という値を取得する。したがって、プライベートビューを実装する隔離１４１〜１４３がない場合、１つの動作チェーンの操作は、予期しない方法で他の動作チェーンに影響を与える。問題をさらに複雑にすると、異なる開発者が異なる動作チェーンを作成する場合がある。したがって、各々の開発者は、グローバルビューを介して、他の動作チェーンによって実行されている操作を知ることができない。
【００２９】
簡略化のために、図１に示す動作チェーンは、同時に開始および終了するように見えるが、殆どの場合、これらの動作チェーンの開始時刻が異なり、実行時間も異なる。
【００３０】
一実施形態は、実行対象のデータ空間または実行環境の一部または全ての「スナップショット」を取得する（すなわち、状態を保存する）。ウェブアプリケーションに関連する実施形態において、実行対象は、「動作チェーン」と呼ばれ、順次、分岐、条件付きまたは他の命令実行シーケンスなどの論理的な流れを伴う一連のプログラム動作である。動作チェーンは、ユーザインターフェイス（ＵＩ）コントロール、ブラウザタブ、ブラウザページ、または他の必要なアイテム、オブジェクトまたはイベントに関連付けることができる。
【００３１】
一実施形態において、「遅延状態の変更」は、グローバル変数Ｙを変更する開発者指定コンピュータ実行可能命令、例えばＹ＝Ｙ＋１を、ローカル変数Ｙ１を変更するツール生成コンピュータ実行可能命令、例えばＹ１＝Ｙ１＋１に自動的に変更する手法である。したがって、グローバル変数の変更は、グローバル変数を変更する動作チェーン１１０、１２０、１３０が１７０で実行を終了するまで延期される。これによって、動作チェーンがグローバル変数を更新するときの競合が防止される。開発者指定コンピュータ実行可能命令は、本明細書において「明示的なコンピュータ実行可能命令」とも呼ばれ、ツール生成コンピュータ実行可能命令は、本明細書において「暗黙的なコンピュータ実行可能命令」とも呼ばれる。一実施形態によれば、開発者指定命令およびツール生成命令は、非一時的なプロセッサ可読記憶装置に記憶された非一時的なコンピュータ可読命令である。
【００３２】
一実施形態において、動作チェーンを実行する前に、共有データ（すなわち、グローバル変数）が他の動作チェーンによって変更または使用されるか否かを判断する。共有データが他の動作チェーンによって変更または使用された場合、変更された共有データを保存する。共有データを変更または使用する他の動作チェーンのスナップショットを取得する。競合を引き起こす可能性のある動作チェーンの実行が終了した後、共有データの更新に実際に使用される競合値を判断する。この判断は、最初の値の変更または最後の値の変更という単純な基準で行われる。代わりに、他の基準を使用してもよい。好ましい実施形態において、競合の解決は、環境コードまたは命令によって対処される。環境コードは、実行の制御を提供する。これによって、開発環境によって作成された暗黙的な命令は、未熟練人間開発者によって指定された明示的な命令に置換する。環境コードが未熟練人間開発者により指定したコードの実行を制御するため、未熟練人間開発者は、クライアントアプリケーションの対応部分を書くときに、データの競合を心配する必要がない。本明細書に記載されたように、環境コードを用いて、１７０で、ローカル変数Ｙ１、Ｙ２、Ｙ３の値を対応するグローバル変数Ｙに合併することができる。
【００３３】
図２は、一実施形態に従って、システム１００を示すブロック図である。
システム２００は、設計時ビジュアル開発ツール２１０、クライアントアプリケーション２５０、サーバアプリケーション２３０、２４０、およびネットワーク２２０を含む。ツール２１０、クライアントアプリケーション２５０、およびサーバアプリケーション２３０、２４０は、ネットワーク２３０を介して通信する。一実施形態によれば、クライアントアプリケーション２５０は、ツール２１０によって実行される。
【００３４】
ツール２１０は、未熟練開発者が動作チェーン２５１を作成するために使用できるユーザインターフェイス（ＵＩ）２１１を提供する。図１に示された動作チェーン１１０、１２０、１３０は、図２に示された動作チェーン２５１の例である。クライアントアプリケーション２５１は、ユーザインターフェイス２１１で作成された動作チェーン２５１によって実装されたユーザインターフェイス２５２を含む。ユーザインターフェイス２１１、２５２のウェブページは、ツール２１０およびクライアントアプリケーション２５０を実行するまたはそれらと通信する各々のコンピュータシステムに実行されているブラウザを介して表示することができる。動作チェーン２５１のコンピュータ命令は、１つ以上のサーバアプリケーション２３０、２４０から情報を要求および取得することができる。
【００３５】
動作チェーン２５１は、イベントに応答して実行される。一実施形態によれば、動作チェーンの実行を開始させるイベントは、ユーザがユーザインターフェイス２５２からユーザインターフェイスコントロールを選択した直接的または間接的な結果である。ユーザインターフェイスコントロールの例は、ボタン、タブ、データ入力フィールド、ラジオボタン、選択可能なリスト内のアイテムを含む。イベントの例は、ユーザがクライアントアプリケーションのユーザインターフェイスのユーザインターフェイスコントロールを選択したことの検出を含む。ユーザインターフェイスコントロールの選択に応答して発生するイベントの他の例は、データを要求したこと、データを受信したこと、操作の開始または完了、または操作の開始または完了を示すフェーズの検出を含む。イベントは、当技術分野でよく知られている。
【００３６】
さらに、動作チェーンを引き起こすイベントが、ユーザによるユーザインターフェイスコントロールの選択に応答してトリガーされるため、クライアントアプリケーション２５０および動作チェーンの命令は、動作チェーンを開始するタイミングを制御しない。
【００３７】
動作チェーンがイベント駆動型であるため、動作の直接的および間接的な結果の境界を明確に定義することができる。より具体的には、直接または間接的にイベントを処理するクライアントコンピュータ実行可能命令（「イベントハンドラ」とも呼ばれる）中の命令の境界は、決定可能である。開発者は、イベントハンドラをサブスクライブするコード（「サブスクライバー」とも呼ばれる）を作成することができる。動作の結果の境界が決定可能であり既知であるため、イベントチェーンによって直接的または間接的に使用されるグローバル変数を決定することもできる。
【００３８】
本明細書に記載されたように、境界およびプライベートビューは、イベントチェーン間の隔離を提供する。図１において、隔離１４１〜１４３は、イベントチェーン１１０、１２０、１３０の間の線として示されている。
【００３９】
動作チェーンの実行を開始するイベントは、ユーザによるユーザインターフェイスコントロールの選択によって直接的または間接的にトリガーされるため、動作チェーンの実行を開始するタイミングを予測することは不可能である。
【００４０】
様々な実施形態は、クラウド機能を提供する。例えば、開発者は、ツール２１０を使用して、クラウド上でクライアントアプリケーション２５０を作成することができる。より具体的には、クライアントアプリケーション２５０、サーバアプリケーション２３０、２４０、およびツール２１０は、ネットワーク２２０を介して通信するウェブアプリケーションである。
【００４１】
図３は、一実施形態に従って、スナップショットの実装を示す図である。
動作チェーンによって使用されるグローバル変数のスナップショットは、動作チェーンの実行を開始するときに取得される。図３は、図１に示された動作チェーン１１０、１２０、１３０の各々の３つのラッパー、すなわち、３０１、３０２および３０３ａ／３０３ｂの例を示す。グローバル変数がＸ、ＹおよびＺであると仮定する。この例において、動作チェーン１１０、１２０、１３０の各々の場合、ラッパーまたはプロキシーを用いて、グローバル変数Ｘ、ＹおよびＺとインターフェイスする。例えば、ラッパーまたはプロキシを用いて、グローバル状態Ｙから、３つの動作チェーンに対応するプライベートビューＹ１、Ｙ２、Ｙ３を隔離する。動作チェーン１３０の場合、ラッパー３０３ａは、グローバル変数Ｘのローカルコピー、すなわち、ローカルコピーＸ３を作成するが、この時点においてＹおよびＺが読み取り専用であるため、グローバル変数ＹおよびＺのコピーを作成しない。したがって、ラッパー３０３ａは、ＹおよびＺの値をパスする。その後、Ｙを書き込むときに、ラッパー３０３ｂ（この実施形態において、ラッパー３０３ａおよび３０３ｂは、異なる時点で実行された同様のラッパーコードである）ローカルコピーＹ３を作成する。動作チェーン１３０は、この時点（動作チェーン１３２）でＸのローカルコピーＸ３を使用するが、Ｚが読み取り専用であるため、Ｚをパスする。ラッパーまたはプロキシは、共有されている変数ＹとプライベートビューＹ１、Ｙ２、Ｙ３との間の関連関係を提供する。この関連関係に基づき、クライアントアプリケーション２５０に対応する動作チェーン２５１のランタイム実行時に、Ｙ１、Ｙ２およびＹ３を変更するための暗黙的なコンピュータ実行可能命令を用いて、Ｙを変更するための明示的なコンピュータ実行可能命令を置換することができる。
【００４２】
同様に、Ｘ１、Ｘ２およびＸ３は、各々の動作チェーンのプライベートビューをグローバル変数Ｘに提供する。Ｚ１およびＺ２は、各々の動作チェーンのプライベートビューをグローバル変数Ｚに提供する。
【００４３】
説明のために、図３は、３つのスナップショットに対して、３組の変数Ｘ、Ｙ、Ｚを示している。Ｘ、Ｙ、Ｚがクライアントアプリケーションのグローバル変数であるため、各組のＸは、同様の変数であり、各組のＹは、同様の変数であり、各組のＺは、同様の変数である。
【００４４】
スナップショットおよび関連するラッパーは、ネストすることができる。例えば、第１の動作チェーンが別の動作チェーンを開始する場合、２つのスナップショットが取得される。第１のスナップショットは、親動作チェーンのスナップショットであり、第２のスナップショットは、子動作チェーンのスナップショットである。第２のスナップショットは、第１のスナップショットにネストされる。一例として、動作チェーンが２つの他の動作チェーンを開始する場合、３つのスナップショットが取得される。
【００４５】
動作チェーンは、クライアントアプリケーションの開発者が指定した明示的なコンピュータ実行可能命令を介して、グローバル変数Ｘ、ＹおよびＺを読み書きすることができ、これらの操作を適切なプライベートビューにリダイレクトすることによって、適切な暗黙的なコンピュータ命令の実行を用いて、これらの明示的なコンピュータ命令の実行を置換することができる。例えば、ラッパーを作成し、ローカル保存されたプライベートビューＹ１を取得し、Ｙの値にＹ１を割り当て、Ｙ１＝Ｙ１＋１にすることによって、暗黙的なコンピュータ命令を用いて、明示的なコンピュータ実行可能命令Ｙ＝Ｙ＋１を置換することができる。
【００４６】
一実施形態によれば、変更される変数のみのスナップショットは、取得されるが、読み取り専用の変数のスナップショットは、取得されない。
【００４７】
一実施形態によれば、グローバル変数のプライベートビューは、グローバル変数が変更される直前に作成される。
【００４８】
一実施形態によれば、グローバル変数をラッパーにコピーすることによって、プライベートビューを作成する。変数の変更を追跡することによって、変更された変数の状態を判断することができる。プライベートビューは、対応するグローバル変数が読み取られるまでまたは別のプロセスによって変更されるまで、詳細に作成することができる。
【００４９】
図２を参照して、ツール２１０は、ビジュアルアプリケーション構築機能を提供することができ、開発者またはチームは、クラウドを介してビジュアルアプリケーション構築機能を用いて、クライアントアプリケーション２５０の一部を実装する動作チェーン２５１を構築することができる。ビジュアルビルダークラウドサービス（ＶＢＣＳ）を変更して、本明細書の実施形態に記載された様々なビジュアルアプリケーション構築機能を提供する。
【００５０】
ツール２１０のユーザインターフェイス２１１は、設計時に、クライアントアプリケーション２５０を構築するためのコンピュータ実行可能命令を生成する。本明細書に記載されたように、ツールのユーザインターフェイスにより、未熟練人間開発者は、クライアントアプリケーションのために、遅延状態の変更機能を備えた動作チェーンを作成することができる。開発者は、遅延状態の変更機能を備えた動作チェーン２５１を作成するように、ツール２１０に指示するオプションを選択することができる。代替的には、ツール２１０は、ツール２１０を使用して動作チェーン２５１を作成したことに応答して、遅延状態の変更機能を提供するコンピュータ実行可能命令を自動的に作成することができる。
【００５１】
一例において、開発者は、ツールのＵＩ２１１を用いて、クライアントアプリケーションのユーザインターフェイス２５２のページをカスタマイズまたは作成することができる。一例として、ボタンを作成した。図４は、一実施形態に従って、ＵＩ２５２の一部であるボタンの動作チェーンを作成するためのページ４００を示している。「私の動作チェーンの開始」タブ４８０を選択することによって、ページ４００を表示することができる。記述セクションを追加することができる。ＵＩ２１１のページ４００は、左側において、動作チェーン４４０に追加できる動作のパレット４１０を含む。ページ４００の中央セクション４２０は、動作チェーン４４０の１つ以上の動作シーケンスを表す流れ図を示している。菱形４４１は、動作チェーン４４０を実行するときに選択できる複数の代替経路を決定するための「ＩＦ」命令文または分岐条件を表す。
【００５２】
図４に示すように、パレット４１０は、「全般」、「ロジック」および「ナビゲーション」として標記された３つのセクション４５０、４６０、４７０を有する。各セクション４５０、４６０、４７０は、動作チェーン４４０を作成するために、中央セクション４２０にドラッグしてドロップすることができる動作を表すアイコンを含む。
【００５３】
全般セクション４５０は、３行のアイコンを有する。全般セクションの第１行の第１アイコン４５１は、変数の割り当てを表す。例えば、このアイコン４５１を使って、変数を異なる値に設定することできる。第１行の第２アイコン４５２は、動作チェーンの呼び出しを表す。開発者は、このアイコンを使って、当該動作から別の動作チェーンを呼び出すことができる。第１行の第３アイコン４５３は、コンポーネントメソッドの呼び出しを表す。開発者は、このアイコンを使って、ＵＩ２５２のために作成されるページ上で呼び出されるＵＩコンポーネント、例えばボタンを決定することができる。
【００５４】
全般セクションの第２行は、３つのアイコンを含む。第２行の第１アイコン４５４は、「モジュール関数の呼び出し」アイコンである。開発者は、このアイコンを使って、ＵＩ２５２のために作成されるページのＪａｖａＳｃｒｉｐｔで独自の関数を定義することができる。開発者は、「モジュール関数の呼び出し」アイコンを使って、これらの関数を呼び出すコードを作成することができる。第２行の第２アイコン４５５は、「ＲＥＳＴエンドポイントの呼び出し」アイコンである。開発者は、このアイコンを使って、データを更新するまたはデータを要求するためのＲＥＳＴエンドポイントを呼び出すコードを作成することができる。
【００５５】
全般セクション４５０の第３行は、２つのアイコンを含む。第３行の第１アイコン４５７は、「始動通知」アイコンである。このアイコンを使って、動作チェーンが実装に使用されているメッセージをページに表示することができる。第３行の第２アイコン４５８は、「変数のリセット」アイコンである。このアイコンを使って、状態の値をデフォルト値にリセットすることができる。
【００５６】
ロジックセクション４６０は、３つのアイコン４６１〜４６３を含む。このセクションを使って、動作チェーンにロジックフローを作成することができる。ロジックセクションの第１アイコン４６１は、「ＩＦ」条件付き動作を表す。ロジックセクションの第２アイコン４６２は、スイッチを表す。ロジックセクションの第３アイコン４６３は、リターンを表す。第３アイコン４６３は、動作チェーンの終了時に使用され、特定の結果または値を返すことができる。第３アイコン４６３は、１つの動作チェーンから別の動作チェーンを呼び出すときに有用である。
【００５７】
ナビゲーションセクション４７０は、３つのアイコン４７１〜４７３を含む。開発者は、ナビゲーションセクションの第１アイコン４７１を使って、過去ページにナビゲートするコードを作成することができる。この場合、過去ページは、クライアントコンピュータ２５０のブラウザ履歴における過去のページである。開発者は、ナビゲーションセクションの第２アイコン４７２を使って、実行時にクライアントアプリケーション２５０のページにナビゲートするコードを作成することができる。例えば、アイコン４７２を使って、クライアントアプリケーションのＵＩ２５２の経費報告ページからクライアントアプリケーションのＵＩ２５２の従業員ページにナビゲートするコンピュータ実行可能なコードを作成することができる。開発者は、ナビゲーションセクションの第３アイコン４７３を使って、現在実行中のクライアントアプリケーション２５０に存在しないＵＲＬにナビゲートするコードを作成することができる。
【００５８】
図５は、一実施形態に従って、開発者が動作チェーンに必要な入力パラメータをマッピングするために使用できるウェブページ５００を示す。例えば、開発者は、図５において、「私の動作チェーン」５０２の下方に示される「入力パラメータ」５０１をクリックして、入力パラメータをマッピングすることができる。
【００５９】
ページ５００を参照して、動作チェーンは、動作チェーンＩＤフィールド５０３で指定され得る識別子（ＩＤ）を有する。
【００６０】
図６は、一実施形態に従って、未熟練開発者がＵＩコンポーネントをコンポーネントイベントに関連付けるために使用できるウェブページ６００を示している。例えば、開発者は、左側のパレット６１０からＵＩコンポーネントを中央の区画６２０にドラッグすることができる。この例において、ドラッグされたＵＩコンポーネントは、ボタン６２１である。
【００６１】
図７は、一実施形態に従って、イベントリスト７１０を含むウェブページ７００を示す。開発者がページ６００に示されている動作タブ６３０を選択すると、図７に示されたようにイベントリスト７１０が表示される。開発者は、図７に表示されているイベントから１つのイベントを選択して、中央の区画６２０に表示されているＵＩコンポーネント、例えばボタン６２１に関連付けることができる。
【００６２】
また、開発者は、ＵＩコンポーネントの表現、例えばボタン６２１をクリックして、当該ＵＩコンポーネントの属性を表示することができる。
【００６３】
開発者が図６のページ６００の動作タブ７３０をクリックすると、それに応答して図７に示されているイベントリスト７１０が表示される。開発者は、表示されたリスト７１０から１つのイベントを選択して、ＵＩコンポーネントに関連付けることができる。図示において、このＵＩコンポーネントは、開発者が以前にウェブページ６００（図６）から選択したボタン６２１である。
【００６４】
イベントリスト７１０は、例えば、要素上で非主要ポインティング装置のボタンを押して離すときに発生する「クリック解除」イベント、要素にキーボードが集中しないときに発生する「ボケ」イベント、要素上で主要ポインティング装置のボタンを押して離すときに発生する「クリック」イベント、要素に関連するコンテキストメニューが呼び出されたときに発生する「コンテキストメニュー」イベント、要素上でポインティング装置のボタンを２回にクリックしときに発生する「ダブルクリック」（dbclick）イベント、要素またはテキスト選択を継続的にドラッグしている間に発生する「ドラッグ」イベント、（ポインティングボタンを離すことまたはドラッグ操作をキャンセルしたことによって）要素またはテキスト選択のドラッグが終了したときに発生する「ドラッグ終了」イベント、およびドラッグされた要素またはテキスト選択を有効なドロップターゲット上に移動したときに発生する「ドラッグ確定」イベントなどを含む。
【００６５】
図２を参照して、ツールのユーザインターフェイス２１１は、クライアントアプリケーション２５０のユーザインターフェイス２５２のボタンを作成すると図示されているが、実施形態は、ドロップダウンメニュー、タブ、メニュー、ラジオボタン、リストなどの他の種類のユーザインターフェイスのコントロールによく適している。本明細書に記載されたように、ユーザがユーザインターフェイスのコントロールと対話することによって、動作チェーンを直接にまたは間接にトリガーすることができる。
【００６６】
例示的な方法
図８は、一実施形態に従って、遅延状態の変更を提供するための方法８００を示すフローチャートである。
【００６７】
方法は、ステップ８１０から開始する。
一実施形態によれば、開発者は、図２に示されたツールのユーザインターフェイス２１１を介して、遅延状態の変更を有効にするか否かを選択することができる。別の実施形態によれば、遅延状態の変更は、開発者が指定する必要がなく、自動的に提供される。
【００６８】
ステップ８２０において、図１および２に示されたクライアントアプリケーション２５０の一部を実装する動作チェーン１１０、１２０、１３０、２５１を定義する情報を受信する。本明細書に記載されたように、動作チェーンを定義する情報は、設計時に受信される。例えば、本明細書に記載されたように、ツール２１０のユーザインターフェイス２１１（図２）のウェブページ４００（図４）に示されたアイコンをドラッグおよびドロップして、動作チェーン４４０（図４）の１つ以上の動作のシーケンスを表す流れ図を作成することができる。
【００６９】
受信した情報は、各動作チェーンに関連付けられたグローバル状態（「グローバル変数」とも呼ばれる）を変更するための明示的なコンピュータ実行可能命令を含む。明示的なコンピュータ実行可能命令の例として、Ｙ＝Ｙ＋１を挙げることができる。式中、Ｙは、グローバル変数である。開発者は、明示的なコンピュータ命令「Ｙ＝Ｙ＋１」を入力することによって、明示的なコンピュータ実行命令を指定でき、または他のメカニズムを用いて、例えばビジュアル表現および矢印をドラッグおよびドロップして、ビジュアル表現を連結することによってまたはテキストを入力することによって、明示的なコンピュータ命令に相当するロジックを指定することができる。
【００７０】
ツールのユーザインターフェイス２１１（図２）のウェブページ４００〜７００（図４〜７）は、本明細書に記載されたように、未熟練開発者が作成しているユーザインターフェイス２５２（図２）に遅延状態の変更機能を与えることを可能にする他の特徴を提供する。
【００７１】
ステップ８３０において、各動作チェーンに対して、各動作チェーンのグローバル状態のプライベートビューを作成するためのコンピュータ実行可能命令を自動的に生成する。例えば、図１〜３を参照して、グローバル変数Ｙ、Ｘ、Ｚの各々のプライベートビューＹ１〜Ｙ３、Ｘ１〜Ｘ３、Ｚ１およびＺ２を作成するためのコンピュータ実行可能命令が生成される。プライベートビューを作成するためのコンピュータ実行可能命令の例は、ラッパー３０１、３０２、３０３である。ラッパーがクライアントアプリケーション２５０の実行時に作成されるが、クライアントアプリケーションのユーザインターフェイス２５２のラッパーを作成する命令は、ツール２１０の一部であってもよく、設計時にツール２１０によって生成されてもよく、またはクライアントアプリケーション２５０の実行時にツール２１０からの指示に基づいて生成されてもよい。
【００７２】
ステップ８４０において、各々の明示的なコンピュータ実行可能命令に各々の暗黙的なコンピュータ実行可能命令を自動的に関連付ける。暗黙的なコンピュータ実行可能命令は、クライアントアプリケーションの実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される。暗黙的なコンピュータ実行可能命令は、設計時に生成され、対応する明示的なコンピュータ実行可能命令に関連付けられる。暗黙的なコンピュータ実行可能命令は、クライアントアプリケーション２５０（図２）の開発者によって指定された明示的なコンピュータ実行可能命令を置換するコンピュータ実行可能命令である。暗黙的なコンピュータ実行可能命令は、設計時ツール２１０（図２）によって提供されるロジック（「自動コンピュータ実行可能命令作成」とも呼ばれる）によって作成することができる。このロジックは、設計時または実行時に実行することができる。このロジックは、設計時ツール２１０（図２）、クライアントアプリケーション２５０（図２）、または設計時ツール２１０（図２）およびクライアントアプリケーション２５０（図２）によって利用されるライブラリに常駐することができる。
【００７３】
仮定として、ツールのＵＩ２１１（図２）を使用してクライアントアプリケーション２５０（図２）を作成する開発者が、１つの動作チェーン、例えば動作チェーン１１０に対して明示的なコンピュータ実行可能命令Ｙ＝Ｙ＋１（Ｙは、グローバル変数である）を指定し、別の動作チェーン、例えば動作チェーン１２０（図１）に対して明示的なコンピュータ実行可能命令Ｃ＝Ｙを指定する。また、この例において、仮定として、Ｃは、第２の動作チェーン１２０（図１）のローカル変数である。第１の動作チェーン１１０（図１）の明示的なコンピュータ実行可能命令は、暗黙的なコンピュータ命令Ｙ１＝Ｙ１＋１に置換され、第２の動作チェーン１２０（図１）の明示的なコンピュータ実行可能命令Ｃ＝Ｙは、暗黙的なコンピュータ命令Ｃ＝Ｙ２に置換される。別の実施形態において、明示的なコンピュータ実行可能命令は、ランタイム実行時に検出され、実行は、暗黙的なコンピュータ実行可能命令にリダイレクトされる。
【００７４】
さらに別の実施形態において、暗黙的なコンピュータ実行可能命令は、明示的なコンピュータ命令をテンプレートとして使用し、グローバル変数をローカル変数に置換することによって作成される。例えば、Ｙ＝Ｙ＋１の各グローバル変数Ｙは、ローカル変数Ｙ１に置換される。さらに、明示的なコンピュータ実行可能命令を解析して、グローバル変数を特定することができる。グローバル変数は、ラッパーに入れることができ、対応するプライベートビューを決定することができる。その後、グローバル変数の代わりにプライベートビューにアクセスすることができる。次に、暗黙的なコンピュータ実行可能命令は、クライアントアプリケーション２５０の実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される。
【００７５】
方法は、ステップ８５０で終了する。
一実施形態は、実行時に、対応する明示的なコンピュータ実行可能命令の代わりに、暗黙的なコンピュータ実行可能命令を実行するようにクライアントアプリケーションを構成する。例えば、図２を参照して、本明細書に記載されたように、ツール２１０は、明示的なコンピュータ実行可能命令の代わりに、暗黙的なコンピュータ実行可能命令を実行するようにクライアントアプリケーション２５０を構成する。
【００７６】
一実施形態は、ユーザ要求を特定する信号に応答して、少なくとも１つの明示的なコンピュータ実行可能命令を表示し、少なくとも１つの明示的なコンピュータ実行可能命令に対応する暗黙的なコンピュータ実行可能命令を表示しない。
【００７７】
一実施形態は、クライアントアプリケーションの実行時に、クライアントアプリケーションと通信するクライアント装置のブラウザに、クライアントアプリケーションのウェブページを表示し、ウェブページに示されたユーザインターフェイスコントロールのユーザ選択の検出に応答してイベントを生成し、イベントに応答して、動作チェーンのうち特定の動作チェーンを開始する。例えば、図２および１０を参照して、アプリケーションサーバ１０２０上で動作するクライアントアプリケーション２５０のユーザインターフェイス２５２のウェブページは、クライアントアプリケーション２５０と通信するクライアント装置１０８５、１０７０、１０７０、１０９０のブラウザに表示される。イベントは、ユーザインターフェイス２５２のウェブページに示されたユーザインターフェイスコントロールのユーザ選択の検出に応答して生成される。このイベントに応答して、動作チェーン２５１内の特定の動作チェーンは、開始される。
【００７８】
一実施形態は、特定の動作チェーンの開始に応答して、特定の動作のグローバル変数のスナップショットを作成し、スナップショットは、特定の動作チェーンのローカル変数を含み、グローバル変数の値をローカル変数に割り当てる。各ローカル変数には、各グローバル変数の値が割り当てられる。図３のスナップショットおよびラッパーの例示を参照して、ローカル変数は、Ｘ１−Ｘ３、Ｙ１−Ｙ３、Ｚ１およびＺ３であり、グローバル変数は、Ｘ、Ｙ、およびＺである。
【００７９】
一実施形態は、グ各グローバル変数と各ローカル変数との間の関連付けを有するラッパーを作成し、関連付けに基づいて、グローバル変数の値をローカル変数に割り当てる。図３は、グローバル変数およびローカル変数を有するラッパー３０１〜３０３を示し、特定のラッパーに対して、グローバル変数Ｘ、Ｙ、Ｚとローカル変数とは、１対１で対応している。より具体的には、ラッパー３０１の場合、グローバル変数Ｘは、ローカル変数Ｘ１のみにマッピングされ、グローバル変数Ｙは、ローカル変数Ｙ１のみにマッピングされ、グローバル変数Ｚは、Ｚ１のみにマッピングされる。したがって、動作チェーンの実行中の任意の時点で、グローバル変数は、当該動作チェーンの１つのローカル変数のみにマッピングされる。
【００８０】
一実施形態は、動作チェーンの実行時に、対応するグローバル変数の代わりに、ローカル変数を変更する。例えば、図１を参照して、動作チェーン１１０の実行時に、対応するグローバル変数Ｙの代わりに、ローカル変数Ｙ１が変更される。同様に、動作チェーン１２０の実行時に、対応するグローバル変数Ｙの代わりに、ローカル変数Ｙ２が変更される。
【００８１】
一実施形態は、各動作チェーンおよび対応するローカル変数を各々の区画に隔離する。各動作チェーンは、個別の区画に隔離される。例えば、図１は、各々の動作チェーン１１０、１２０、１３０および対応するローカル変数Ｙ１、Ｙ２、Ｙ３を隔離する区画１４１〜１４３を示している。
【００８２】
一実施形態は、受信、自動生成、および自動関連付けを実行した設計時ツールを用いて、クライアントアプリケーションを実行する。例えば、図２および８を参照して、設計時ツール２１０は、図８に示された受信８２０、自動生成８３０、および自動関連付け８４０を実行することができる。
【００８３】
一実施形態は、クライアントブラウザアプリケーションの一部を実装する複数の並列動作チェーン１１０、１２０、１３０（図１）を定義する情報を受信し、受信した情報は、１つ以上の動作チェーンに関連付けられたグローバル状態を変更するための明示的なコンピュータ実行可能命令を含み、グローバル状態の競合を解決するため、１つ以上の動作チェーンの各々のグローバル状態Ｘ、Ｙ、およびＺ（図１）に対応するプライベートビューＸ１〜Ｘ３、Ｙ１〜Ｙ３、Ｚ１およびＺ２（図１）を作成するように、開発フェーズで１つ以上の動作チェーン１１０、１２０、１３０、２５１（図１および２）の各々の１つ以上の環境命令を自動的に生成する。クライアントブラウザアプリケーションの一例は、クライアントアプリケーション２５０（図２）である。本明細書に記載されたように、クライアントアプリケーション２５０は、クライアント装置のブラウザに表示することができるウェブページのユーザインターフェイス２５２（図２）を提供するため、クライアントブラウザアプリケーションである。グローバル状態の競合を解決する例としては、ローカル変数を作成し、作成したローカル変数を各々の区画に隔離し、対応する動作チェーンの実行時に、グローバル変数の代わりに対応するローカル変数を変更することによって、競合を防止する。さらに、本明細書に記載されたように、ローカル変数の値を結合する（１７０）ことができる（図１）。
【００８４】
一実施形態は、スマートラッパーを用いて、明示的なコンピュータ実行可能命令のグローバル変数が書き込まれているときにローカル変数を作成し、グローバル変数が読み取られているときにローカル変数を作成しない。例えば、図３を参照して、未熟練人間開発者が明示的なコンピュータ実行可能命令を指定して、動作１３２でグローバル変数Ｙの値を変更するときに、動作１３２に関連付けられたスマートラッパー３０３ｂは、ローカル変数Ｙ３を作成する。動作１３１が対応するグローバル変数Ｙに値を割り当てないため、ラッパー３０３ａは、ローカル変数Ｙ３を作成しない。
【００８５】
例示的なシステム
図９は、一実施形態に従って、システム９００を示す。
【００８６】
ページライフサイクルマネージャ９０１は、ユーザが現在閲覧しているアプリケーションＵＩに応じて、状態の一部を初期化および破棄する。状態を破棄する場合、状態を永続性ストア（構成にあった場合）に保存することができ、状態を復元する場合、永続性ストア（persistence store）から状態をロードすることができる。
【００８７】
永続性ストア９０２は、ユーザによるアプリケーションの呼び出しの間にアプリケーションの状態を（ディスク上に）保存する場所である。
【００８８】
状態９０３は、アプリケーション（変数）によって利用されるアクティブ状態を提供する。
【００８９】
コンポーネント９０４は、ユーザによって利用されるボタン、テキスト、画像などを含むＵＩを提供する。
【００９０】
動作チェーン９０５は、アプリケーション（プロセス）を駆動するコアロジックのフローを提供する。
【００９１】
ＲＥＳＴサービス９０６は、外部のＲＥＳＴ  ＡＰＩを提供する。
コンピュータ／装置９０７は、ＵＩを制御するブラウザまたは装置を提供する。
【００９２】
以下、システム９００に含まれるエンティティ９０１〜９０７に関連する操作９１１〜９２１の流れを説明する。
【００９３】
操作９１１：永続性ストアは、ユーザがアプリケーションをアクティブに使用しているときの状態を初期化して、保存する。
【００９４】
操作９１２：状態の変更をコンポーネントに反映させる。例えば、一部の状態に関連付けられたテキストフィールド。
【００９５】
操作９１３：コンポーネントは、状態の変更をトリガーする。例えば、テキスト入力は、状態を直接に更新する。
【００９６】
操作９１４：ユーザは、自分の装置９０７からＵＩと対話する。
操作９１５：動作チェーンは、例えば、マップをズームするようにＵＩ上でメソッドを呼び出すことができる。
【００９７】
操作９１６：ＵＩは、ロジック（例えば、ボタンのクリック）を実行するように、動作チェーンを始動させることができる。
【００９８】
操作９１７：動作チェーンを用いて、ＲＥＳＴサービスを呼び出し、これらのサービスを介してデータをシステムに書き込むまたはシステムからデータを読み取る。
【００９９】
操作９１８：ユーザがアプリケーションおよび表示された異なるＵＩをにナビゲートするときに、ページライフサイクルマネージャは、状態を初期化して破棄する。
【０１００】
操作９１９：ページライフサイクルマネージャは、ナビゲーションに応答して動作チェーンを実行することができる。例えば、装置９０７と対話しているユーザは、ページを開始させることができ、これに応じて動作チェーンを実行することができる。
【０１０１】
操作９２０：動作チェーンは、ナビゲーション、例えば、ＵＩの様々な部分のアクティブ化を引き起こすことができる。
【０１０２】
操作９２１：動作チェーン９０５は、状態９０３と通信する。
一実施形態によれば、システム９００によって作成されたユーザインターフェイスは、クライアントコンピュータ／装置９０７のブラウザに実行することができる。作成されたユーザインターフェイスを実行するクライアントコンピュータ／装置は、当該ユーザインターフェイスを作成するときに使用されたクライアントコンピュータ／装置９０７と同様であってもよく、異なってもよい。作成されたユーザインターフェイスは、複数のクライアントコンピュータ／装置上で異なるタイミングで実行されてもよく、同時に実行されてもよい。
【０１０３】
本明細書に記載されたように、設計時ツールを使って、ユーザインターフェイスを作成する。一実施形態によれば、ＪＳＯＮファイルは、ユーザインターフェイスの一部として作成される。作成されたＪＳＯＮファイルは、よく知られた通信方法を介してクライアントコンピュータ／装置のブラウザに転送され、ランタイム実行によって解釈される。
【０１０４】
遅延状態の変更に関して、一実施形態によれば、実行の流れは、以下の通りである。
（通常、９１６によって）動作チェーンを呼び出す。動作チェーンは、９２１を介して状態をコピーする。動作チェーンが完了すると、９２１によって状態を合併する。
【０１０５】
例示的なコンピュータ環境
図１０は、本明細書の図面に示された実施形態を実施するために使用可能なシステム１０００および関連するコンピューティング環境を示す概略ブロック図である。例示的なシステム１０００は、図９を参照して説明した様々なハードウェアおよび／またはソフトウェアモジュールおよび関連する方法をサポートまたは実行することができる。なお、特定の実施形態は、１つ以上の（例えば、ユーザ装置に常駐する）スタンドアロンアプリケーションおよび／またはクライアント側コードとサーバ側コードの組み合わせを用いて実現された１つ以上のウェブベースアプリケーションを用いて、実装することができる。
【０１０６】
汎用システム１０００は、ユーザ装置１０６０〜１０９０、具体的には、デスクトップコンピュータ１０６０、ノートブックコンピュータ１０７０、スマートフォン１０８０、モバイルフォン１０８５、およびタブレット１０９０を含む。汎用システム１０００は、任意の種類のユーザ装置、例えば、シンクライアントコンピュータ、インターネット対応のモバイルフォン、インターネット接続モバイル装置、タブレット、電子書籍、またはウェブページ、他の種類の電子ドキュメントおよびＵＩを表示および閲覧できるおよび／またはアプリケーションを実行できるＰＤＡとインターフェイスで接続することができる。図示では、システム１０００は、５つのユーザ装置をサポートしているが、任意の数のユーザ装置をサポートすることができる。
【０１０７】
ウェブサーバ１０１０は、ウェブブラウザおよびスタンドアロンアプリケーションから、ウェブページ、電子文書、企業データまたは他のコンテンツ、およびユーザコンピュータからの他のデータを要求するリクエストを処理するために使用される。また、ウェブサーバ１０１０は、企業の運用に関連するデータのプッシュデータまたはシンジケートコンテンツ、例えばＲＳＳフィードを提供することができる。
【０１０８】
アプリケーションサーバ１０２０は、１つ以上のアプリケーションを作動させる。アプリケーションは、Ｊａｖａ（登録商標）、Ｃ、Ｃ＋＋、Ｃ＃などのプログラミング言語、またはＪａｖａＳｃｒｉｐｔ（登録商標）またはＥＣＭＡＳｃｒｉｐｔ（European Computer Manufacturers Association Script）、Ｐｅｒｌ、ＰＨＰ（Hypertext Preprocessor）、Ｐｙｔｈｏｎ、Ｒｕｂｙ、またはＴＣＬ（Tool Command Language）などのスクリプト言語で記述された１つ以上のスクリプトまたはプログラムとして実装することができる。アプリケーションは、Rails、Enterprise Java（登録商標）Beans、.NETなどのライブラリまたはアプリケーションフレームワークを使用して構築することができる。ウェブコンテンツは、ＨＴＭＬ（HyperText Markup Language）、ＣＳＳ（Cascading Style Sheets）、およびテンプレート言語およびパーサを含む他のウェブ技術を使用して作成することができる。
【０１０９】
アプリケーションサーバ１０２０上で動作するデータアプリケーションは、入力データおよびユーザコンピュータ要求を処理するように構成され、データ記憶装置またはデータベース１０３０からのデータを格納または取得することができる。データベース１０３０は、データアプリケーションによって作成および使用されるデータを格納する。一実施形態において、データベース１０３０は、ＳＱＬフォーマットコマンドまたは他のデータベースクエリ言語に応答して、データを格納、更新および取得するように構成された関係型データベースを含む。他の実施形態は、非構造化データ記憶アーキテクチャおよびＮｏＳＱＬ（Not Only SQL）データベースを使用することができる。
【０１１０】
一実施形態において、アプリケーションサーバ１０２０は、プログラムまたはスクリプトを実行することができる１つ以上の汎用コンピュータを含む。一実施形態において、ウェブサーバ１０１０は、１つ以上の汎用コンピュータ上で動作するアプリケーションとして実装される。ウェブサーバ１０１０およびアプリケーションサーバ１０２０は、合併されてもよく、同一のコンピュータ上で実行されてもよい。
【０１１１】
電子通信ネットワーク１０４０および１０５０は、ユーザコンピュータ１０６０〜１０９０、ウェブサーバ１０１０、アプリケーションサーバ１０２０、およびデータベース１０３０の間の通信を可能にする。一実施形態において、ネットワーク１０４０および１０５０は、任意の電気通信装置または光通信装置、例えば有線ネットワーク１０４０および無線ネットワーク１０５０を含む。ネットワーク１０４０および１０５０は、イーサネット（登録商標）ネットワークなどの１つ以上のローカルエリアネットワーク、インターネットなどのワイドエリアネットワーク、セルラーキャリアデータネットワーク、仮想プライベートネットワークなどの仮想ネットワークを含むことができる。
【０１１２】
システム１０００は、本発明の実施形態に従って、アプリケーションを実行するための一例である。別の実施形態において、ウェブサーバ１０１０、アプリケーションサーバ１０２０、および必要に応じてデータベース１０３０を単一のサーバコンピュータアプリケーションおよびシステムに組み合わせることができる。さらなる実施形態において、仮想化および仮想マシンアプリケーションを用いて、ウェブサーバ１０１０、アプリケーションサーバ１０２０およびデータベース１０３０のうち１つ以上を実装することができる。
【０１１３】
さらに別の実施形態において、ウェブおよびアプリケーションの機能の全部または一部は、各々のユーザコンピュータ上で動作するアプリケーションに統合することができる。例えば、ユーザコンピュータ上のＪａｖａＳｃｒｉｐｔアプリケーションを用いて、データを取得または分析し、アプリケーションの一部を表示することができる。
【０１１４】
特定の例示的な実施形態において、ユーザコンピューティング装置１０６０〜１０９０は、例えば、ユーザインターフェイスを表示するために使用されるブラウザを実行する。例えば、図１０に示されたデスクトップコンピュータ１０６０、ノートブックコンピュータ１０７０、スマートフォン１０８０、モバイルフォン１０８５およびタブレット１０９０などのクライアントコンピューティング装置および／または他のコンピューティング装置から、ユーザインターフェイスを見ることができる。
【０１１５】
特定の例示的な実施形態において、図１０のデスクトップコンピュータ１０６０、ノートブックコンピュータ１０７０、スマートフォン１０８０、モバイルフォン１０８５、タブレット１０９０のブラウザは、図１０に示された有線ネットワーク１０４０および／または無線ネットワーク１０５０によって表されたインターネットに接続して、図９のモジュールによって表された１つ以上のネットワーク接続サーバ、データベース、および／または関連するクラウドベース機能を利用する。例えば、１つ以上のエンティティ９０１、９０４、９０５および９０６は、アプリケーションサーバ１０２０に常駐することができる。クライアントコンピュータ／装置９０７は、１つ以上のユーザコンピューティング装置１０６０〜１０９０として実装することができる。図１０に示された１つ以上のデータベース１０３０を用いて、図９の永続性ストア９０２および状態９０３などのデータをホストすることができる。図９に使用されるネットワークは、ネットワーク１０４０として実装されてもよい。一実施形態において、ネットワーク１０４０を用いて、クライアントコンピュータ／装置９０７とコンポーネント９０４との間に通信することができる。
【０１１６】
図２のネットワーク２２０は、無線ネットワーク１０５０または有線ネットワーク１０４０またはその両方の一部を含むことができる。図２のクライアントアプリケーション２５０は、アプリケーションサーバ１０２０上に常駐し、ユーザコンピューティング装置１０６０〜１０９０からアクセスすることができる。ツール２１０およびサーバアプリケーション２３０、２４０は、サーバ１０１０または１０２０上に常駐することができる。ツールのユーザインターフェイス２１１およびクライアントアプリケーションのユーザインターフェイス２５２は、ユーザコンピューティング装置１０６０〜１０９０上に表示されてもよい。ユーザインターフェイス２１１、２５２は、ユーザコンピューティング装置１０６０〜１０９０上で動作するブラウザと共に表示されてもよい。
【０１１７】
一実施形態によれば、クライアントアプリケーション２５０は、ツール２１０によって実行される。この場合、クライアントアプリケーション２５０は、ツール２１０に常駐することができ、またはツール２１０によってアクセスされるメモリに常駐することができる。クライアントアプリケーション２５０は、１つ以上のユーザコンピューティング装置１０６０〜１０９０からアクセスされてもよく、ユーザインターフェイス２５２のページは、対応するユーザコンピューティング装置１３６０〜１３９０のブラウザ上に表示されてもよい。
【０１１８】
図１１は、本明細書に記載された実施形態を実施するために使用可能なコンピューティングシステム１１００を示す概略ブロック図である。図１１のコンピューティングシステム１１００は、本明細書に記載された実施形態の１つ以上のステップを実行するとして説明されているが、他の実施形態において、コンピューティング装置１１００の任意の適切なコンポーネントもしくはコンポーネントの組み合わせまたはシステム１１００に関連する任意の適切なプロセッサもしくプロセッサの組み合わせは、ステップの実行を促進することができる。
【０１１９】
図１１は、本明細書に記載された実施形態に使用され得る例示的なコンピューティングシステム１１００のブロック図を示す。例えば、コンピューティングシステム１１００を用いて、図１０のユーザ装置１０６０〜１０９０、およびサーバ装置１０１０、１０２０を実装することができ、本明細書に記載された方法を実施することができる。いくつかの実装形態において、コンピューティングシステム１１００は、プロセッサ１１０２、オペレーティングシステム１１０４、メモリ１１０６、および入出力（Ｉ／Ｏ）インターフェイス１１０８を含むことができる。様々な実装形態において、プロセッサ１１０２を用いて、本明細書に記載された様々な機能および特徴を実現することができ、本明細書に記載された方法を実施することができる。プロセッサ１１０２は、本明細書に記載された方法を実施すると説明されているが、システム１１００の任意の適切なコンポーネントもしくはコンポーネントの組み合わせまたはシステム１１００に関連する任意の適切なプロセッサもしくプロセッサの組み合わせまたは任意の適切なシステムは、本明細書に記載された方法を実施することができる。本明細書に記載された方法は、ユーザ装置、サーバ、または両方の組み合わせ上で実施されてもよい。
【０１２０】
また、コンピューティング装置１１００は、メモリ１１０６または任意の他の適切な記憶装置もしくはコンピュータ可読媒体に記憶され得るソフトウェアアプリケーション１１１０を含む。ソフトウェアアプリケーション１１１０は、プロセッサ１１０２に、本明細書に記載された機能および他の機能を実行させる命令を提供する。コンピューティングシステム１１００のコンポーネントは、１つ以上のプロセッサまたはハードウェア装置の任意の組み合わせ、およびハードウェア、ソフトウェア、ファームウェアなどの任意の組み合わせによって実装されてもよい。
【０１２１】
図示を簡単にするために、図１１は、ハードウェアプロセッサ１１０２、オペレーティングシステム１１０４、ハードウェアメモリ１１０６、Ｉ／Ｏインターフェイス１１０８、およびソフトウェアアプリケーション１１１０の各々を１つのブロックとして示している。これらのブロック１１０２、１１０４、１１０６、１１０８および１１１０は、複数のプロセッサ、複数のオペレーティングシステム、複数のメモリ、複数のＩ／Ｏインターフェイス、および複数のソフトウェアアプリケーションを表すことができる。様々な実装形態において、コンピューティングシステム１１００は、図示された全てのコンポーネントを含まなくてもよく、および／または図示されたコンポーネントの代わりにまたは追加的に他のコンポーネントを含んでもよい。
【０１２２】
コンピュータ可読媒体および装置
特に明記しない限り、本明細書に記載された１つ以上の実施形態は、例えば、コンピュータシステムまたは類似する装置の非一時的なプロセッサ可読記憶装置に常駐するプロセッサ可読命令を用いて実施することができる。非一時的なプロセッサ可読記憶装置は、命令を格納することができる任意の物理メモリであってもよい。非一時的なプロセッサ可読記憶装置の例は、ディスク、コンパクトディスク（ＣＤ）、デジタル多用途装置（ＤＶＤ）、読み取り専用メモリ（ＲＯＭ）、フラッシュなどを含むがこれらに限定されない。上述したように、本発明の様々な実施形態のプロセスおよび動作の一部は、一実施形態において、コンピュータシステムの非一時的なプロセッサ可読記憶装置に常駐する一連のプロセッサ可読命令（例えば、ソフトウェアプログラム）として実現され、コンピュータシステムの１つ以上のプロセッサによって実行される。実行されると、命令は、コンピュータシステムに本発明の様々な実施形態の機能を実施させる。例えば、プロセッサは、命令を実行することができる。プロセッサは、コンピュータシステムに関連する中央処理装置などのハードウェアプロセッサである。非一時的なプロセッサ可読記憶装置は、ハードウェアメモリであり、１つ以上のプロセッサは、ハードウェアプロセッサである。一実施形態によれば、非一時的なプロセッサ可読記憶装置は、有形の物理装置である。
【０１２３】
一実施形態は、遅延状態の変更を提供するための設計時ツールを提供する。設計時ツールは、１つ以上のプロセッサと、命令を含む非一時的なプロセッサ可読記憶装置とを備える。これらの命令は、クライアントアプリケーションの一部を実装する動作チェーンを定義する情報を受信するための命令を含み、受信した情報は、各動作チェーンに関連付けられたグローバル状態を変更するための明示的なコンピュータ実行可能命令を含み、各動作チェーンに対して、各動作チェーンのグローバル状態のプライベートビューを作成するためのコンピュータ実行可能命令を自動的に生成するための命令と、各々の明示的なコンピュータ実行可能命令に各々の暗黙的なコンピュータ実行可能命令を自動的に関連付けるための命令とを含み、暗黙的なコンピュータ実行可能命令は、クライアントアプリケーションの実行時に、対応する明示的なコンピュータ実行可能命令の代わりに実行される。
【０１２４】
結論
Ｃ、Ｃ＋＋、Ｊａｖａ、アセンブリ言語などを含む任意の適切なプログラミング言語を用いて、特定の実施形態のルーチンを実装することができる。異なるプログラミング技術、例えば手続き型またはオブジェクト指向型プログラミング技術を使用することができる。ルーチンは、単一の処理装置または複数のプロセッサ上で実行することができる。ステップ、動作または演算は、特定の順序で記載されているが、この順序は、異なる特定の実施形態では変更されてもよい。いくつかの特定の実施形態において、本明細書に記載された順次に実行される複数のステップは、同時に実行されてもよい。
【０１２５】
特定の実施形態は、命令実行システム、機械、システムまたは装置によってまたはそれに関連して使用されるコンピュータ可読記憶媒体に実装されてもよい。特定の実施形態は、ソフトウェアまたはハードウェアまたは両方の組み合わせによる制御ロジックの形で実装されてもよい。この制御ロジックは、１つ以上のプロセッサによって実行されると、特定の実施形態に記載されたものを実行するように動作可能である。例えば、ハードウェア記憶装置などの非一時的な媒体を用いて、実行可能命令を含むことができる制御ロジックを格納することができる。
【０１２６】
特定の実施形態は、プログラムされた汎用デジタルコンピュータ、特定用途向け集積回路、プログラマブルロジック装置、フィールドプログラマブルゲートアレイ、光学的システム、化学的システム、生物学的システム、量子的またはナノ工学的システムなどを用いて、実装されてもよい。他のコンポーネントおよび機構を使用することができる。一般に、特定の実施形態の機能は、当技術分野で知られている任意の手段によって達成することができる。分散型またはネットワーク化システム、コンポーネントおよび／または回路を使用することができる。クラウドコンピューティングまたはクラウドサービスを使用することができる。データは、有線、無線、または他の手段で送信または転送することができる。
【０１２７】
また、図面に示された１つ以上の要素は、より離れたまたは集中した方法で配置されてもよく、動作可能に限り、特定の需要に応じて外してもよい。このように、コンピュータが上記の方法のいずれかを実行することを可能にするプログラムまたはコードを機械可読媒体に格納する実装も、本発明の精神および範囲内に含まれる。
【０１２８】
「プロセッサ」は、データ、信号または他の情報を処理する任意の適切なハードウェアおよび／またはソフトウェアシステム、メカニズムまたはコンポーネントを含む。プロセッサには、汎用中央処理装置、複数の処理装置、機能を実現するための専用回路を備えたシステムまたは他のシステムを含むことができる。処理は、地理的な場所または時間に限定されない。例えば、プロセッサは、例えば、「リアルタイム」、「オフライン」または「バッチモード」で機能を実行することができる。処理の一部は、異なる（または同様の）処理システムによって、異なる時間に異なる場所で実行することができる。処理システムの例は、サーバ、クライアント、エンドユーザ装置、ルータ、スイッチ、ネットワーク化装置などを含む。コンピュータは、メモリと通信する任意のプロセッサである。メモリは、任意の適切なプロセッサ可読記憶媒体、例えば、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、磁気または光ディスク、またはプロセッサによって実行される命令を格納する適切な他の非一時的な媒体であり得る。
【０１２９】
本明細書の説明および特許請求の範囲に使用された場合、「a」、「an」および「the」は、文脈から明確に指示しない限り、複数を含む。また、本明細書の説明および特許請求の範囲に使用された場合、「in」は、文脈から明確に指示しない限り、「in」および「on」を意味する。
【０１３０】
したがって、本明細書において特定の実施形態を説明したが、任意の修正、様々な変更、および置換は、本開示に含まれる。場合によって、特定の実施形態において、本発明の精神および範囲から逸脱することなく、対応する他の特徴を使用せず、いくつかの特徴を使用することができる。したがって、特定の状況または材料を本質的な範囲および精神に適合するように、多くの変更を加えることができる。
【図１】
2020535551.tif 000004
【図２】
2020535551.tif 000005
【図３】
2020535551.tif 000006
【図４】
2020535551.tif 000007
【図５】
2020535551.tif 000008
【図６】
2020535551.tif 000009
【図７】
2020535551.tif 000010
【図８】
2020535551.tif 000011
【図９】
2020535551.tif 000012
【図１０】
2020535551.tif 000013
【図１１】
2020535551.tif 000014
【手続補正書】
【提出日】令和2年7月9日(2020.7.9)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2020535551.tif 000015
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図５
【補正方法】変更
【補正の内容】
【図５】
2020535551.tif 000016
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2020535551.tif 000017
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図７
【補正方法】変更
【補正の内容】
【図７】
2020535551.tif 000018
【国際調査報告】
2020535551.tif 000019
2020535551.tif 000020
2020535551.tif 000021