JP2006506757A - コード生成 - Google Patents

コード生成 Download PDF

Info

Publication number
JP2006506757A
JP2006506757A JP2005502080A JP2005502080A JP2006506757A JP 2006506757 A JP2006506757 A JP 2006506757A JP 2005502080 A JP2005502080 A JP 2005502080A JP 2005502080 A JP2005502080 A JP 2005502080A JP 2006506757 A JP2006506757 A JP 2006506757A
Authority
JP
Japan
Prior art keywords
component
agent
data
components
processing system
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.)
Pending
Application number
JP2005502080A
Other languages
English (en)
Inventor
ロビーサ,ノエル,ウィリアム
ローレイ,エリック,フィリップ
Original Assignee
コード バリー ピーティーワイ リィミティッド
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from AU2002952510A external-priority patent/AU2002952510A0/en
Priority claimed from AU2003901926A external-priority patent/AU2003901926A0/en
Application filed by コード バリー ピーティーワイ リィミティッド filed Critical コード バリー ピーティーワイ リィミティッド
Publication of JP2006506757A publication Critical patent/JP2006506757A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本発明は、構成要素を使用したコンピュータによる実行可能なコードの生成方法を提供する。各構成要素は、データ処理サービスに対応しており、代表的には、各エンティティによって実装される。この方法は、データ処理のシーケンスに対応する構成要素の組み合わせの定義を含む。構成要素の組み合わせの定義に従って、各エンティティからのサービスの提供の要求によって達成できるように、データ処理が実行される。このようにして、コンピュータにより実行可能なコードが生成される。

Description

(発明の背景)
本発明は、コンピュータによって実行可能なコードを生成する方法及び装置に関し、特に、データを処理する各サービスに対応する構成要素を使用して、コンピュータによって実行可能なコードの生成に関する。
(背景技術の説明)
本明細書におけるいずれの従来技術への参照も、従来技術が通常の一般知識の一環を成すことを認めるものではなく、又は示唆を形成するものでもない。また、そのように解釈されるべきではない。
ソフトウェアが競争の激しい環境で開発されることは明らかであるが、歴史的には、過去30年にわたって生産性曲線が横ばいであることを克明に示している。どのような向上も、同期間にわたって他産業において達成された向上と比較して微々たるものである。この格差はソフトウェア業界に固有のものであり、ソフトウェアがどのように構築されるかの直接的な結果である。
ほとんどのコンピュータソフトウェアは労力を要する手動プロセスを通して構築され、プログラマによって、各アプリケーションソフトウェアプロジェクトのコードを生成する。各ソフトウェアアプリケーションは一般に、1人又は複数のプログラマによって1件ずつ作成される。そして、コードは、ほとんど又は全く再使用されることはない。
この裏にある理由の一つは、通常、いずれのソフトウェアアプリケーションでも、開発に投資する者(エンティティ)の数は限られている(通常は1企業)ことである。その結果、一般に、投資者はソフトウェアコードの開発に必要以上の投資を望まない。これは、正常に機能するアプリケーションが一旦開発されれば、そのアプリケーションを形成するコードを最適化することに対して金銭及び努力がほとんど投資されないことを意味する。
他の理由としては以下のものが挙げられる。
・最初は、より困難な分散モデルよりも社内開発モデルのほうが好都合であること。このため、限られた資源の一般化が求められる。
・所定の機能を実行する標準ルーチンを確立したライブラリ/リンカの導入。このため、競争及び最適化が低下する。
・ソフトウェア生産の本質そのものについての一般的な見解。それは、プログラマによって課される限界を顧客が許容するように求める。
この結果、プログラマは、広範囲の機能を実行するソフトウェアをプログラム可能なゼネラリストになる必要がある。そして、現状では、市場で競い合うことができる。従って、現在のソフトウェアプログラミング環境には、プログラム全体を適宜コーディングすることができるジェネラリストが存在すれば、たった一つの非常にマイナーなプログラミングタスクだけに精通したプログラマに対する必要性がほとんどないことが理解できる。
この専門化の欠如はソフトウェア作成の分野に複数の問題を引き起こす。例えば、
・バグやミス − 高レベルのソフトウェア欠陥。
・ソフトウェアの肥大化 − 実行可能コードのサイズの大幅な増大。
・複雑性の限界 − 増し続けるソフトウェアの複雑性が、システムの能力を有効に安定状態に保つことを脅かす。
・低い参入障壁。
・予測不能性 − 開発コスト、スケジュール、パフォーマンス、又は資源使用が予測不能である。
・生産性 − 過去10年において開発者の生産性の向上はほとんど見られなかった。
バグ及びミスは、大体において、各プログラマが大量のコードを書かなければならないことによって発生する。これには、プログラマがコードを書くことに物理的に費やすことのできる時間量が限られること、及びプログラマが考慮しなければならない変数の数が多くなること等、複数の問題がある。バグは、現在のソフトウェアプログラミング技術における大きな問題である。この結果として、ウィルスに起因する破損等の他の後障害等を修正することのみならず、発生したバグ及びミスを、ソフトウェアパッチの使用又はアップグレードによって修正することにもさらなる時間が費やされてきた。
ソフトウェアの肥大化は、プログラミング分野内の専門化の欠如に関連する別の結果である。いずれのゼネラリストでも同様に、製品の改良は生産性を犠牲にしてなされる。具体的には、プログラマは、正常に機能するプログラムを比較的素早く構築することができるであろう。しかし、動作を改良しながら、コード量を最小限に抑えるようにコードを最適化することには、些細な改良であっても長い時間を必要とすることがある。プログラマの最適化スキルも一般に、個人の知識が多くの分野にまたがっている場合に不完全であり、同様に、コードの書き手は、製品を市場に出すことによって収入を得ている。結果として、現代のソフトウェアの不必要なサイズ及び複雑性を取り扱うためにより強力なマシンが必要になる。
複雑性の限界は、複雑性のレベルが上がるにつれて、1人の人間が特定のソフトウェア開発作業のすべての局面を理解することが不可能になることによって発生する。高度に専門化された大半の業界は大規模で複雑なプロジェクトに対処することができるが、ソフトウェア開発は、いずれの程度の専門化にも達しておらず、実現してもいない。
一般に、いずれの業界も、業界の成熟度に比例した参入障壁を有する。半導体の様な十分に発達した業界は、国でさえ取り組むことをためらう相当な障壁を有する。工業化の特徴は、事業の設立に大量の資本が必要なことである。しかし、手工業等のより原始的な産業の場合、献身的度力と少ない支出で誰でも業界に入ることができ、最適な業務を達成できる。これは、参入障壁が小さいことから、ソフトウェア業界が未発達であることを示す。
IT業界の複数の小さな特異事項もこの危機の一原因となっている。
・ソフトウェア開発者に対するIP保護が機能不全であること。
・優れた諸技術がある中でx86アーキテクチャの使用を継続していること。
・ソフトウェアエラー又は瑕疵を顧客が許容すること。
・ソフトウェア危機へ対応を試みる実装複雑性が増大すること(コードライブラリからのコードの再使用、古いオペレーティングシステムの不足分との互換を図ることを含む)。
こういった問題の影響はソフトウェア分野内に特有のものである。研究は、「6台の大規模ソフトウェアシステムが新たに稼働する毎に、他の二つのシステムが停止することを示している。実際に、このソフトウェア危機は、稼働している大規模システムの4分の3が動作不良であるほど深刻である。」、これらのシステムは、意図するように機能しないか、又はまったく使用されないことを示す。
50を越えるトッププログラマ、コンピュータ科学者及び業界指導者からなる委員会がまず、1968 NATO Science Meetingにおいてこの問題に取り組んだ。この委員会には、「ソフトウェア危機」から脱する方法を発見するという課題が与えられた。
諸問題を解決するために複数の以下の試みがなされた。
・プログラマをマシンコードから切り離すことを目指した、第3、第4及び第5世代言語の開発が、初期のいくらかの生産性における成功に貢献した。言語が今日まで、生産性向上を追求するにあたっての核心であり続けているほどに、初期の生産性増大は成功した。
・データを、そのデータの処理に使用されるコードと一緒にカプセル化する新しいタイプの抽象化であるオブジェクト指向プログラミングが、主に制御複雑性を通してある程度の成功を実現した。
・大きなソフトウェアの開発の複雑性の管理を支援することを目指したコンピュータ支援ソフトウェア工学(CASE)。
・以前の知的努力を再使用しようとする取り組みであるコード再使用。
・数学的証明を利用して正確性を検証するとともに、ソフトウェア開発に伴う多数の欠陥及びバグに鋭く取り組む、形式的方法。
・履歴コードから知的内容を抽出するデコンパイラ。
しかし、これらの構想にもかかわらず、ソフトウェア生産の向上においては、ほとんど進歩がない。
具体的には、業界内ではほとんど専門化がされていないままであり、ソフトウェアアプリケーションの大半は、限られた数のプログラマによって1件ずつ生成されている。従って、第3、第4、第5世代言語、OOP、CASE、形式的方法、デコンパイラのような方法及び数え切れないほどの他の方法は、問題ではなく症状に対処しているにすぎない。
従って、NATO会議後の30年間の進歩は、もしあったとしても小さいものに過ぎず、「コンピュータコードの大部分はなお、見積もることもできず、また安定して繰り返すこともできない技術を用いる職人によって生のプログラミング言語から手作業で作成されている。」
コードが再使用される状況では、一般に、コードを任意の動作環境において、また任意の状況において採用できるように、コードをコンテキストから独立させることによって、コードの再使用は実現される。これは相当数の問題に繋がり、具体的には、大半のケースでは冗長的な多数のコマンド及び演算がコードに必要になる。これに加えて、コンテキスト独立コードの形成は、コード生成器が適したIP保護を利用してそれぞれのコードを保護する能力を妨げるか、又は少なくとも実質的に邪魔する。
前述した問題を解決する既存のシステムの一例が、状態ベースのコンピュータプログラムを自動的に生成する方法、装置、及びコンピュータプログラムプロダクトを提供する米国特許第6,405,361号に記載されている。このシステムは、互いに通信して、シーケンス記述間の対話に基づいてプログラムを生成する複数の構成要素を利用することによって動作する。この例では、すべてのシーケンス記述が決定され、正規化され、構成要素の状態ベースの仕様を決定するために使用される。構成要素の状態ベースのプログラムは、生成されるプログラムに認められる仕様から決定される。
しかし、このシステムは、コンピュータプログラム生成の特定の一つのシナリオにしか対処せず、具体的には、状態ベースのシステムにしか関連しない。さらに、システムは、通信システムを記述する個々の状態図として把握される。そして、これら状態図をコードに変換して動作する。従って、この結果として、システムは図をコードに変換するように動作する。このシステムでは、汎用アプリケーションソフトウェアを開発することができず、コンテキスト独立コードを使用することから、先に概説した問題の多くに繋がる。
欧州特許第1,211,598号明細書には、高級コードを複数のターゲットプロセッサの一つに対する命令に変換することによって実行可能コードを生成する方法が記載されている。システムは、所望のプログラムの特徴に従って、一つ又は複数の予め定められたプログラムコードモジュールを複数の利用可能なモジュールから選択することによって動作する。次いで、高水準コードを命令に変換するプログラムコードが使用されて、プログラムコードが作られる。
従って、このシステムでは、多種多様なハードウェアプラットフォームに仮想Java(登録商標。以下同じ)を生成することが可能である。システムの中核は、利用可能なモジュールを単純に選択するモジュール選択器を使用することにあり、選択されたモジュールは次いで、通常のようにコンパイルされアセンブルされる前に組み合わせられる。
従って、この文献は、コードの部分を選択し、次いでこれらを組み合わせて結果コードを形成する方法に関する。従って、これには、通常のようにまずプログラマがコードを書く必要があり、次いで書かれたコードを共に切り貼りして最終コードを形成するだけである。従って、これは、特定の状況にしか関連性がなく、動作に先立って、適したソースコード部分を形成する必要がある。従って、これはコンテキスト独立コードに頼り、上で概説した欠点の多くを有している。
1999年に、クイーンズランド工科大学、ブリスベーン、オーストラリアの情報科学部のClemens Szyperski助教授が、コンピュータソフトウェアの工業化を実現するにあたって有用ないくつかの望ましい特徴を記した書籍「Component Software」を発行した。しかし、ここでは、上で概説した問題を克服する実施可能な解決策はいずれも提案されなかった。
(本発明の概要)
第1の広い形態において、本発明は、構成要素を使用してコードを生成する方法を提供し、各構成要素は各データ処理サービスに対応する。本方法は、
a)コードを定義する構成要素の組み合わせの決定し、及び、
b)定められたデータ処理シーケンスが実行される構成要素の組み合わせの実装。また、それによってコンピュータによって実行可能なコードの生成すること、を含む。
通常、構成要素の少なくともいくつかは、処理されるデータを受け取り及び/又は出力する一つ又は複数のポートを含む。
各ポートには、構成要素への、及び、構成要素からのデータの転送の制御が可能なエージェントが関連付けられていることが好ましい。
本方法は、
a)複数のデータ部分を含むデータを受け取り、
b)データを、
i)データ部分をシーケンスの所定の位置に追加し、
ii)データ部分をシーケンス中の第1の位置から第2の位置に移動し、
iii)シーケンスからデータ部分を除去し、及び、
iv)シーケンスにおいてデータ部分を変更すること、によって処理する、
構成要素を有することを含む。
通常、本方法の少なくとも一部は、記憶装置を備えた処理システムを使用して実行される。本方法は、データ部の一つ又は複数を記憶装置に記憶することを含む。
構成要素のいくつかは、複数の組み合わせられた下位構成要素から形成される。この下位構成要素もまた構成要素であってもよい。
サービスのうちの一つ又は複数は、
a)個人によるデータの手動処理、
b)処理システムにより実行され、それによってデータを自動的に処理するようになされたコンピュータにより実行可能なコード、及び、
c)下位構成要素の組み合わせ、のうちの少なくとも一つを使用して行われてもよい。
本方法は、一つ又は複数の処理システムを使用して行われることができる。
この場合、本方法は、第1の処理システムに、
a)ユーザから受け取った入力コマンドに応答して、複数の構成要素を選択し、
b)選択された構成要素を使用して構成要素の組み合わせを定義し、及び、
c)定義されたデータ処理シーケンスが行われるように、構成要素の組み合わせを実装させ、ることを含むことが好ましい。
構成要素の少なくともいくつかが一つ又は複数のポートを備える場合、本方法は、処理システムに、
a)選択された各構成要素のポートの指示をユーザに提供させ、及び、
b)ユーザからの入力コマンドに応答して、上記ポートの中から選択されたポートを相互接続し、それによって構成要素の組み合わせを定義すること、を含むことが好ましい。
通常、本方法は、第2の処理システムに、
a)複数の構成要素の詳細を決定させ、
b)第1の処理システムを介して、少なくとも詳細の指示をユーザに提供させること、を含む。
この場合、本方法は、処理システムに、
a)ユーザからの入力コマンドに応答して、上記構成要素の中から各構成要素を選択させ、及び、
b)第1の処理システムを介して、選択された構成要素の詳細をユーザに提供させること、を含むことができる。
詳細は通常、構成要素の仕様の形式であり、処理システムは、
a)構成要素の仕様を記憶する記憶装置であって、
構成要素仕様は、
i)処理サービスの指示、
ii)構成要素のグラフィック表現、及び、
iii)各ポートに関連するエージェントの動作を定義するポート仕様
のうちの少なくとも一つを含む記憶装置と、
b)プロセッサであって、本方法は通常、このプロセッサに、
i)記憶装置から一つ又は複数の構成要素仕様を取得させ、及び、
ii)第1の処理システムを介して、構成要素仕様をユーザに提供させることを含むプロセッサと、を含む。
本方法は、第1の処理システムに、
a)一つ又は複数の選択された構成要素のグラフィック表現を生成させ、及び、
b)ユーザから受け取った入力コマンドに応答して、グラフィック表現を処理させ、それによって構成要素の組み合わせを定義すること、を含んでもよい。
第1の処理システムは、通信ネットワークを介して一つ又は複数の構成要素処理システムに結合されることができ、
各構成要素処理システムは、一つ又は複数の各構成要素を実装するように成され、
この場合、本方法は、
a)構成要素の組み合わせ内の各構成要素に対するサービス要求を生成し、及び、
b)通信ネットワークを介して各エンティティにサービス要求を転送し、各エンティティは、サービス要求に応答して、各構成要素によって具現されるデータ処理を実装するように成されること、を含むことが好ましい。
通常、本方法は、
a)構成要素が必要とするあらゆるデータを決定し、及び、
b)このデータをサービス要求の際に提供すること、を含む。
各サービス要求は、各構成要素のポートのそれぞれの相互接続の指示を含んでもよい。
本方法は、各構成要素処理システムに、
a)受け取ったサービス要求に従って、一つ又は複数の各構成要素インスタンスを実装させ、及び、
b)各構成要素インスタンスに、
i)サービス要求中に定義された相互接続に従って他の構成要素と対話させ、及び、
ii)必要なあらゆるデータ処理を行わせること、を含むことができる。
本方法は、各構成要素処理システムに、
a)各ポートに関連する各エージェントを実装させ、及び、
b)定義された相互接続に従って各エージェントに別の構成要素のエージェントと協働させ、それによってポート間でデータを転送できるようにすること、を含んでもよい。
本方法は、第2の処理システムに、
a)パフォーマンス情報を決定させ、当該パフォーマンス情報は、構成要素の実装に関連する一つ又は複数の基準を表すこと、
b)パフォーマンス情報をユーザ対して提供させ、ユーザはこのパフォーマンス情報に従って構成要素を選択すること、を含むことが好ましい。
パフォーマンス情報は通常、
a)構成要素を実装するエンティティの指示、
b)エンティティの地理的場所の指示、
c)構成要素の実装期間の指示、
d)各構成要素を実装に関連する費用の指示、及び、
e)構成要素の出来のよさを示す格付け、のうちの少なくとも一つを含む。
本方法は、
a)同等のサービスを行う複数の異なる構成要素を提供し、これらの異なる構成要素は異なるエンティティによって提供されること、
b)エンティティを競争させ、それによって構成要素の改良を促すこと、を含むことが好ましい。
本方法は通常、各構成要素の使用に対して費用を課すことにより利益を生じることを含む。
通常、本方法は、
a)利益の少なくともいくらかを、構成要素を実装する各エンティティに提供し、及び、
b)第2の処理システムの運営者に、利益の少なくともいくらかを保持させること、を含む。
本方法は通常、生成されたコードをコンテキストに依存させることを含む。
この場合、通常、本方法は、構成要素の少なくともいくつかに、
a)実行可能コード及び処理システムのコンテキストを決定させ、及び、
b)当該決定されたコンテキストに従って、実行されるデータ処理がコンテキストに依存するようにデータ処理サービスを実行させること、を含む。
処理システムは通常、メモリ、スタック及びレジスタを少なくとも備える。コンテキストは、
a)レジスタ、スタック及びメモリのうちの少なくとも一つの状態、
b)定義された構成要素の組み合わせ内の他の構成要素、及び、
c)偶発的要因、のうちの少なくとも一つを含む。
通常、本方法は、
a)ディザリング、
b)メッシング、及び、
c)遮蔽、のうちの少なくとも一つを実行することによって、データ処理作をコンテキストに依存させることを含む。
第2の幅広い形態において、本発明は、構成要素を使用してコンピュータにより実行可能なコードを生成する装置を提供し、各構成要素は所定の様式でデータを処理する各サービスに対応する。本装置は、
a)データ処理シーケンスに対応する構成要素の組み合わせを定義し、及び、
b)コンピュータにより実行可能なコードが生成されるように、構成要素の組み合わせを実装し、それによって上記定義されたデータ処理シーケンスが行われる、ように成された一つ又は複数の処理システムを含む。
本装置は、
a)各構成要素を実装するようにそれぞれ成された一つ又は複数の構成要素処理システム、及び、
b)第1の処理システムであって、
i)ユーザから受け取った入力コマンドに従って、構成要素の組み合わせを定義し、
ii)各構成要素を実装する構成要素処理システムを決定し、及び、
iii)当該決定された構成要素処理システムのそれぞれにサービス要求を転送する、ように成された第1の処理システム、を備えることが好ましい。
構成要素処理システムは、
a)サービス要求を受け取り、
b)各構成要素インスタンスを生成し、及び、
c)各構成要素インスタンスを使用してサービスを実行する、ように成ることができる。
通常、本装置は、利用可能な構成要素の詳細を記憶するように成された第2の処理システムを備える。
この場合、第2の処理システムは、各構成要素処理システムから構成要素の詳細を得るように成されることができる。
第1の処理システムは、第2の処理システムと協働し、それによってユーザに、
a)利用可能な構成要素のうちの一つ又は複数を選択させ、及び、
b)構成要素の組み合わせを定義させ、るように成されてもよい。
本装置は、本発明の第1の幅広い形態のいずれか一つの方法を実行するように成されることが好ましい。
第3の幅広い形態において、本発明は、構成要素を使用してコンピュータにより実行可能なコードを生成するコンピュータプログラムプロダクトを提供する。各構成要素は、所定の様式でデータを処理する各サービスに対応する。本コンピュータプログラムプロダクトは、適切な処理システムで実行されると、当該処理システムに本発明の第1の幅広い形態の方法を実行させるコンピュータにより実行可能なコードを含む。
第4の幅広い形態において、本発明は、ユーザにデータを処理させる方法を提供する。本方法は、一つ又は複数の処理システムを使用して、
a)各エンティティによって実装される各データ処理サービスをそれぞれ表す複数の構成要素の詳細を記憶し、
b)選択された構成要素の詳細をユーザに提供し、それによってユーザに、データを処理するデータ処理サービスシーケンスを定義する構成要素の組み合わせを定義させること、を含む。
第5の幅広い形態において、本発明は、処理システムを使用してデータ処理サービスを実現する構成要素を提供する方法を提供する。本方法は、
a)実行されるデータ処理サービスを決定し、
b)当該データ処理サービスを行う方法を決定し、及び、
c)データ処理サービスを定義する構成要素仕様を生成し、当該構成要素仕様は、データの受け取り又は出力に使用されるポートを表すポート仕様を含むこと、を含む。
第6の幅広い形態において、本発明は、処理システムを使用して構成要素において実現されるサービスを提供する方法を提供する。本方法は、処理システムに、
a)サービス要求を受け取らせ、
b)当該受け取ったサービス要求に応答して、各構成要素インスタンスを生成させ、
c)処理するデータを受け取らせ、
d)各構成要素インスタンスを使用してデータを処理させ、及び、
e)当該処理されたデータを出力に供給させること、を含む。
第7の幅広い形態において、本発明は、定義された構成要素の組み合わせを実装することによってデータを処理する方法を提供し、各構成要素はデータを処理する各サービスに対応する。本方法は、
a)構成要素の組み合わせから、
i)実装する構成要素と、
ii)各構成要素のポート間の接続と、を決定し、
b)構成要素が必要とするあらゆるデータ、を決定し、
c)各構成要素ごとに、
d)各サービスの提供を要求するサービス要求を生成し、
e)サービス要求を、各構成要素を実装するエンティティに転送し、当該エンティティはサービス要求に応答して各サービスを行い、それによってデータ処理を行えるように転送すること、を含む。
第8の幅広い形態において、本発明は、処理システムを使用して構成要素の組み合わせを定義する方法を提供し、各構成要素はデータを処理する各サービスを表す。本方法は、
a)組み合わせる一つ又は複数の構成要素を選択し、
b)処理システムに、
i)選択された各構成要素のグラフィック表現をディスプレイ上に生成させ、及び、
ii)グラフィック表現を処理して、構成要素のポート間の接続を定義させること、を含む。
第9の幅広い形態において、本発明は、コンテキスト依存データ処理を行う方法を提供する。本方法は、
a)所望のデータ処理を行う複数の技法を決定し、
b)当該決定された技法のそれぞれを具現する構成要素を定義し、及び、
c)使用に際して、結果得られる処理済みデータがコンテキストに依存するように、コンテキストに従って上記技法のうちの選択された一つの技術を行うこと、を含む。
第10の幅広い形態において、本発明は、構成要素に基づいたデータ処理において使用するエージェントを実装する方法を提供する。本方法は、
a)エージェントの指示を受け取り、
b)エージェントを生成し、及び、
c)エージェントの指示に従って、エージェントに別のエージェントとの接続を確立させること、を含む。
第11の幅広い形態において、本発明は、データ処理サービスを提供する方法を提供する。本方法は、
a)実行されるサービスを決定し、
b)当該サービスを実行する少なくとも2つの方法を決定し、
c)受け取ったデータに従って方法の中から一つを選択する方法を決定し、及び、
d)データ処理サービスを実現する構成要素を定義する構成要素の仕様を生成すること、を含む。
第12の幅広い形態において、本発明は、処理システムを使用して動的な構成要素において具現されるサービスを提供する方法を提供する。本方法は、処理システムに、
a)サービス要求を受け取らせ、
b)当該受け取ったサービス要求に応答して、各構成要素インスタンスを生成させ、
c)処理するデータを受け取らせ、
d)当該受け取ったデータに従ってデータを処理する方法を選択させ、
e)各構成要素インスタンスを使用してデータを処理させ、及び、
f)当該処理されたデータを出力に供給させること、を含む。
第13の幅広い形態において、本発明は、構成要素に基づいたデータ処理スキームにおいて2つの構成要素間それぞれに複数のエージェントの接続を提供する方法を提供する。本方法は、
a)バンドリング下位構成要素を各構成要素に提供し、
b)接続を定義し、当該接続は、
i)バンドリング下位構成要素の第1のエージェント及び各構成要素の各エージェントと、
ii)各バンドリング下位構成要素の第2のエージェントとの間のものであること、を含む。
第14の幅広い形態において、本発明は、ルート処理システム及び複数の構成要素処理システムを使用してコードを構築する方法を提供する。各構成要素処理システムは、略図的に定義された各構成要素を実装するように成され、本方法は、
a)ルート処理システムに、ペイロードを含むエージェントを生成させ、
b)エージェントをシーケンス内の複数の構成要素に、最後の構成要素から最初の構成要素へと転送し、
c)最初の構成要素をエージェントと対話させ、それによってペイロードにデータを提供し、
d)エージェントを最初の構成要素から次の構成要素へ転送し、
e)次の構成要素をエージェントと対話させ、それによってペイロードにデータを提供し、
f)最後の構成要素がペイロードと対話するまで、ステップ(d)及び(e)を繰り返し、及び、
g)エージェントをルート処理システムに転送し、それによってコードを提供すること、を含む。
第15の幅広い形態において、本発明は、ユーザがデータを処理できるようにする方法を提供する。本方法は、
a)各エンティティによって実装される各データ処理サービスをそれぞれ表す複数の構成要素の詳細を提供し、
b)ユーザに、データ処理サービスシーケンスを定義する構成要素の組み合わせを定義させ、及び、
c)当該定義された組み合わせに従ってデータ処理サービスを行わせること、を含む。
本発明は、本発明の前記幅広い形態を実行する装置及びコンピュータプログラムプロダクトも提供する。
以下、添付図面を参照して本発明の例について説明する。
(好適な実施形態の詳細な説明)
バイトレベルでコードを構築することができ、形式化されたデータ処理サービスを接続するシステムの複数の例について説明する。
具体的には、システムは、特定の、かつ、究極的に高度に専門化されたデータ処理サービスであって、構成要素として具体化されるものを利用する。一般に、各構成要素は、一つ又は複数のポートのそれぞれを介してデータを受け取り、出力するようになされる。
これらの構成要素を適宜組み合わせると、その完了後に処理システムに使用されるコードを表すファイルにバイトを挿入することが可能になる。一般に、ファイルは、完成すると、実行可能コードを表すようなバイナリファイルになる。従って、結果として得られる実行可能コードはアプリケーションソフトウェア等を表すことができる。しかし、ソースコード、オブジェクトコード又はリンクされたコード等、他の形態のコードを生成することも可能である。これにより、Javaアプリケーション等のミドルウェアアプリケーションを生成することが可能になる。これにより、ソースコード、コンパイラ等を必要とすることなく、コンピュータによる実行可能なコードを形成することが可能になる。
これを実現する様式について、これよりさらに詳細に説明する。
コンピュータによる実行可能なコードを生産するプロセスの例について、これより図1を参照して概説する。
図に示すように、最初のステップは、ステップ100において、コンピュータによる実行可能なコードの作成要求があるかを決定する。これは、以下により詳細に説明するように、結果として得られるコンピュータによる実行可能なコードによって実装が必要な機能を考慮することによって実現する。
所望の機能が決定されると、適宜組み合わせられたときに、この機能を有する実行可能なコードを作成することができる複数の構成要素が選択される。この点において、各構成要素は各データ処理サービスを具体化するため、構成要素を適した順序で組み合わせることにより、コンピュータによる実行可能なコードを生成することができる。従って、例えば、サービスとしてはデータの変更、除去、移動、又は作成等のプロセスを挙げることができる。これにより、各構成要素はコンピュータによる実行可能なコードの形成に、なんらかの貢献をすることができる。サービスは、コンピュータによる実行可能なコード等の使用を通して自動的に行うことができる。また、サービスは、手動で行うこともでき、さらに、手動と自動の実装の組み合わせで行うこともできる。
構成要素サービスの複雑性レベルは、以下により詳細に説明するように様々である。従って、例えば、単純な構成要素がバイナリファイル中の一つ又は複数のバイトを組み立てるように動作する。そして、バイナリファイル中のバイトは、CPU命令の形成に使用される場合もあれば、より複雑な構成要素がいくつかのCPU命令を同時に組み立てるように動作する場合もある。
これを実現するために、各構成要素は、各入力として働く一つ又は複数のポートを介してデータを受け取り、次いで必要に応じてデータの処理を実行するようになされる。同様に、大半の構成要素は、処理済みのデータ又は他の情報を出力するように動作するようになされた一つ又は複数のポートも備える。説明を容易にするために、一般にポートを入力及び出力と呼ぶが、ポートは一般に双方向のものであり、別の構成要素の各ポートに対してデータを転送する、又は各ポートからデータを受け取るようになされることが理解できる。
使用の際に、構成要素は、データを転送することによって互いに対話する。従って、例えば、一つの構成要素の出力を別の構成要素の入力に接続して、二つのサービスを逐次実行することができる。より基礎的なレベルの適切な構成要素を階層構造に組み合わせることによって、より複雑なサービスをより基礎的なサービスの集まりとして実装することも可能である。
構成要素のいくつかの例について以下及び付録Aにおいて説明する。
その後、ステップ120において、選択された構成要素の、コンピュータによる実行可能なコードの作成が可能な組み合わせが定義される。具体的には、これは、構成要素によって提供されるサービスがステップ130において実装されたときに、対話によって所望のコンピュータによる実行可能なコードが生成されるように、ポートを介して構成要素をどのように相互接続すべきかを指定する。
この技術の実施は複数の方法で実現可能なことが理解されよう。しかし、最も広い形態では、このプロセスは、図2に例示する一つの処理システムを使用して実行することができる。
具体的には、一般に、処理システム10は、少なくとも、バス24を介して図に示すように共に接続されたプロセッサ20、メモリ21、キーボード等の入力装置22、ディスプレイ等の出力装置23を備える。処理システムをデータベース11等の記憶装置に接続するために、25に示す外部インタフェースも設けることができる。
使用の際に、処理システムは、利用可能な構成要素の詳細をデータベース11に記憶することができるようになされる。次いで、ユーザが、入力装置22及び出力装置23を使用して選択された構成要素の組み合わせを定義することができ、処理システム10がコンピュータによる実行可能なコードを生成できるようにする。これから、処理システム10がコンピュータ、ラップトップ、サーバ、専用ハードウェア等、いずれの形態の処理システムであってもよいことが理解されよう。
これより、処理システム10を使用してコンピュータによる実行可能なコードを生成する方法について図3A及び図3Bを参照して説明する。
具体的には、この例では、複数の自動化された構成要素がデータベース11に提供される状況について説明する。従って、構成要素は、必要なサービスを実行するために、手動によって介入することなく自動的に実装することができ、それによって、ユーザは、処理システム10だけを使用してコンピュータによる実行可能なコードを生成することができる。
これを実現するために、ステップ200において、ユーザは、作成するコンピュータによる実行可能なコードの要件を決定することができる。ステップ210において、ユーザは、構成要素要求を処理システム10に提供する。要求はいずれの形態であってもよく、通常、結果として、データベース11に記憶されている利用可能な構成要素の詳細がユーザに提供されることになる。
一例では、構成要素の詳細は、少なくとも、各構成要素によって具体化されるサービスを示す構成要素の仕様の形式で記憶される。構成要素の仕様は、ポートが受け取れる/提供できるようになされたデータのタイプ及び/又は形式の詳細を提供する入力仕様及び出力仕様も含むことができる。構成要素の仕様は、システムの実施態様に応じて複数の形態のいずれであってもよいため、画像による表現、テキストデータ、演算パラメータ等として提供することができ、又は少なくともこれらを含むことができる。
ステップ220において、処理システム10は、データベース11に記憶されている構成要素の仕様にアクセスし、ステップ230において、要求の性質に応じて、構成要素のうちの一つ又は複数の指示をユーザに提供する。従って、例えば、もし各タイプのサービスが提供されるならば、要求では構成要素の詳細のみの提供を指定することができる。従って、ユーザは、要求において、実行すべき一つ又は複数のサービスを指定することができる。処理システム10は、これに応答して、指定されたサービスのすべて又は一部を完了することができる構成要素の詳細を提供するのみである。指示は、実装に応じて複数の形式のいずれであってもよく、画像による表現又はテキスト表現等を含み得る。従って、指示は仕様自体のすべて又は一部であり得ることが理解できる。
ユーザは、ステップ240において、提供された命令を使用して、適切な構成要素を選択し、対応する構成要素の選択を処理システム10に提供し、それによって選択された一つ又は複数の構成要素を通知する。
ステップ250において、処理システム10は、この情報を使用して、構成要素指示を生成する。これはグラフィック形態であってもよく、又は選択された構成要素を指定するリストの形態であってもよく、オプションとして、ディスプレイ23等でユーザに提示することができる。
ステップ260において、ユーザは、選択された構成要素の中から接続する少なくとも二つの構成要素を決定する。接続するためには、接続すべき各構成要素によって取り扱われるデータの形式及び/又はタイプに互換性があることが重要なことが理解できる。
従って、例えば、第1の構成要素の出力が第2の構成要素の入力に接続される場合、第2の構成要素のサービスは、第1の構成要素によって出力されるデータを処理可能なことが重要である。この処理は、入力仕様及び出力仕様を見ることによって手動で行ってもよい。一方、より詳細に以下説明するように、エージェントの支援を受けて行ってもよい。
次いで、ステップ270において、ユーザは、所望の接続を表す接続指示を処理システム10に提供する。これは、接続する二つの異なる構成要素の入力及び出力のそれぞれの詳細を提供することによって実現することができる。また、画像による表現の処理等の仕組みを使用することもできる。
いずれの場合でも、ステップ280において、処理システム10は、接続指示に従って構成要素を相互接続するように動作する。
ステップ290において、ユーザは接続がさらに必要か否かを判定し、必要な場合はステップ270に戻り、さらなる接続を定義する。必要ない場合、プロセスはステップ300に進み、このポイントで、ユーザは、構成要素をさらに選択するか否かを決定する。選択する場合、プロセスはステップ210に戻り、ステップ210〜290を繰り返す。
その他の場合、ステップ310において、ユーザはオプションとして定義された構成要素の対話を検討して、実行可能なコードを構築すべきであるか否かを決定する。具体的には、これは一般に、コードの予想パフォーマンス、構築時間を評価して、指定された構成要素の組み合わせによって、コードを構築できるか否かを決定する等のために行われる。評価され得る他の要因としては、予想コストが挙げられる。これは、ユーザが各構成要素の実装に料金を支払う必要がある場合に関連する。
ステップ320において、指定された構成要素の対話が何らかの理由により許容可能なものではなく、コードを構築すべきではないと決定された場合、処理はステップ330において終了する。代替の選択肢として、ユーザは当該処理の中の以前の任意のステップに戻り、例えば、構成要素又は構成要素対話の除去、変更又は追加を通して、指定された構成要素の対話を変更することができることが理解できる。
その他の場合、ユーザは、ステップ340において、相互接続された構成要素によって定義されるサービスを実行させる。
構成要素によって具体化されるサービスの実装方法は、各構成要素の形態に応じて様々である。前述したように、この例では、各構成要素は記憶装置に記憶されているコンピュータによる実行可能なコードから形成される。従って、構成要素を実行すべきときに、処理システム10にコードのインスタンスをダウンロードし、通常通りに実行することができる。
従って、構成要素によって具体化される各サービスは、指定された相互接続に従って、メモリ21又はデータベース11に記憶されている、又は、別の構成要素から受け取ったデータを処理するように実装される。
従って、例えば、初期データを第1の構成要素の入力に供給し、次いで第1の構成要素が動作して、具体化されるサービスに従ってデータを処理することができる。これが完了すると、処理済みのデータが第1の構成要素の出力として提供される。次いで、データは第2の構成要素の入力に転送され、第2の構成要素によって定義されるサービスを行うことができる。
同様のプロセスが、複数の入力及び/又は出力を有する構成要素においても行われる。
前述した例では、各サービスは実行可能なコードを使用して実装される。これは、各「構成要素」がソースコード又はオブジェクトコードの断片である、いわゆる「構成要素」を利用する先の従来技術によるシステムと区別されるべきである。このようなシステムでは、ソースコードの断片が、コンパイル又はリンクされる前に組み合わせられる。これは、一例では実行可能なコードによって実装することができるデータ処理サービスが構成要素によって具体化される本システムと対照をなすと考えられる。
異なる実装によって実施態様を変形し得ることが理解できる。従って、例えば、構成要素のすべてが処理システム10自体に実装されるわけではなく、代わりに、さらなる例において以下説明するように、他の処理システム上で遠隔から実装することもできる。
同様に、構成要素はすべて自動的に実効されるわけではなく、ユーザが入力し、データを転送し、あるデータ処理を行う必要がある。これは、構成要素に関連するサービスが実装される形式の結果として計画的に発生し得る。一方、例えば、手動介入は、構成要素間で互換性のないデータ形式を転送する要件等、問題の解決にユーザの入力が必要な故障が、実装において発生した場合であり、予定外のものである。
本例では、各構成要素によって具体化されるサービスがすべて完了すると、コンピュータによる実行可能なコードはメモリ21に生成されている。コードは、生成されると、ユーザに出力することができ、コードを他の処理システム上で通常通りに実装できる。
これは、構成要素が階層的に縦横に対話することから実現可能なことが理解できる。従って、単純な構成要素を適宜組み合わせることによって複雑なサービスを容易に行うことができる。
従って、基本的な構成要素を作成し、次いで適宜組み合わせることを通して、複雑なデータ処理を行うことができる。同様に、複雑な機能を有するコンピュータによる実行可能なコードを開発することができることが理解できる。
処理システム10に関連して、前述した処理は、複数の異なるアーキテクチャを使用して実装し得ることが理解できる。従って、例えば、システムを、分散ウェブベースシステム等を使用して実装し、ユーザによるシステムへのアクセスを、インターネット又は別の通信ネットワークを介して、中央処理システム10によって提供することが可能である。
これより、この例について図4に関連してより詳細に説明する。
具体的には、この例では、一つ又は複数の中央処理システム10(この例では、明確化のみを目的として二つを示す)がベースステーション1に設けられ、ベースステーション1は、インターネット2及び/又は複数のローカルエリアネットワーク(LAN)4等の通信ネットワークを介して複数のエンドステーション3に接続される。
使用の際に、前述したように、構成要素は、処理システム10に設けられ、処理システム10によって実装することができる。一方、図に示すように、構成要素は、これもまたインターネット2及び/又はLAN4に接続された一つ又は複数の各エンティティステーション5をそれぞれ運用する一つ又は複数の各エンティティによって設けることもできる。この例では、各エンティティステーション5は、図に示すように、データベース16等の記憶装置に接続されたエンティティ処理システム15から形成される。
使用の際に、システムのユーザは、エンドステーション3を使用してベースステーション1と通信し、それによって適した構成要素によって具体化されるサービスの提供を得ることができる。
これは複数の様式で実現することができるが、この例では、例示のみを目的として、サービスへのアクセスはウェブページの使用を通して提供される。従って、これを実現するために、各エンドステーション3は必要に応じてウェブページにアクセスする。そして、データをエンドステーション3に転送するようになされた処理システムから構成される。
好適なエンドステーション3の例を図5に示す。図に示すように、エンドステーション3は、バス34を介して共に接続されたプロセッサ30、メモリ31、キーボード等の入力装置32、ディスプレイ等の出力装置33を備える。処理システムには、必要に応じてエンドステーション3をインターネット2又はLAN4に接続する外部インタフェース35も設けられる。
使用の際に、プロセッサ30は、ベースステーション1に設けられた処理システム10と通信ネットワーク2、4を介して通信して、処理システムのサービスにアクセスできるようにするようになされる。従って、エンドステーション3を、適宜プログラムされたPC、インターネット端末、ラップトップPC、ハンドヘルドPC等、任意の適した処理システムによって構成することができ、通常はデータ転送を処理するアプリケーションソフトウェアであることが理解できる。なお、場合によってはウェブ閲覧を可能にするアプリケーションソフトウェアでもよい。
構成要素は、構成要素及び構成要素において提供されるサービスの性質に応じて処理システム10自体に実装することもでき、又はエンティティ処理システム15の一つに実装することもできる。
従って、エンティティ処理システム15は、通信ネットワーク2、4を介して処理システム10と通信可能でなければならない。これを実現するために、エンティティ処理システム15は概して、図6に示す処理システムと同様である。
図に示すように、エンティティ処理システム15は、バス44を介して共に接続されたプロセッサ40、メモリ41、キーボード等の入力装置42、モニタ等の出力装置43を備える。処理システムには、必要に応じてエンティティステーション5をインターネット2又はLAN4、同様にデータベース16に接続する外部インタフェース45も設けられる。
使用の際に、プロセッサ40は、エンティティが各構成要素にカプセル化されたサービスを行えるようになされる。従って、エンティティステーション5を、適宜プログラムされたPC、インターネット端末、ラップトップPC、ハンドヘルドPC等の任意の適した処理システムから形成できることが理解できる。サービスはデータ集約的であるため、エンティティ処理システム15は多くの場合、サーバ等から形成される。
いずれの場合でも、エンドステーション3及びエンティティステーションは、共通の処理システムを使用して実装することができ、エンドステーション3とエンティティステーション5との区別は主に説明のみを目的としたものであることが理解できる。
エンドステーション3のユーザにベースステーション1を介して構成要素において提供されるサービスへのアクセスを依然として可能にしながら、構成要素をエンティティステーション5によって実装できるようにするためには、典型的には、構成要素の少なくともいくらかの詳細が構成要素の仕様の形態でデータベース11に記憶される。構成要素の仕様はいずれの形式であってもよく、画像による表現等を含むことができる。しかし、一般に、構成要素の仕様は、ユーザが各構成要素によって具体化されるサービスを決定するに十分な情報を含む。構成要素の仕様は、構成要素を選択し使用できるのに十分な情報を提供することに留意が必要である。従って、構成要素の仕様は、実行できるデータ処理の指示を含むが、これがどのように実現されるか。この重要性についてより詳細に以下強調する。
コンピュータによる実行可能なコードを作成することができる様式について、これより図7を参照して説明する。
具体的には、ステップ400において、エンティティが各サービスを提供する形式を決定する。これは複数の方法で実現することができ、各サービス及びエンティティがサービスを提供したい形式に依存する。
従って、例えば、エンティティは、すべてにおいてエンティティの制御下で、データをエンティティステーション5において受け取り、エンティティ処理システム15によってデータを変更し、次いで変更されたデータを処理システム10又はエンドステーション3に返信するように、手動でサービスを提供することができる。
一方、エンティティ処理システム15によって実行されるコンピュータによる実行可能なコードによっても、この方法を実行することもでき、この場合、エンティティはまず、必要な実行可能なコードを決定しなければならない。
手動プロセスと自動プロセスの組み合わせを使用することもできる。さらに、データを処理システム10又はエンドステーション3に返さず、代わりに、異なる構成要素によって具体化される別のサービスによって処理するために別のエンティティステーション5に転送することもできる。
さらなる選択肢として、エンティティは、サービスを複合的な構成要素の形式で提供することもできる。この場合、エンティティは、組み合わせられると必要なサービスを実行する構成要素を定義する、すでに存在する構成要素の組み合わせを効率的に定義する。この場合、エンティティステーション5は、必要に応じて、他のエンティティステーション5及び/又はベースステーション1等を通して、複合的構成要素内に含まれる構成要素の実装を他のエンティティに「受け渡す」ようになされている。
いずれの場合でも、ステップ410において、エンティティは、エンティティステーション5を使用して、サービスの提供をカプセル化した構成要素を定義する。これを実現するために、一般に、エンティティ処理システム15は、この処理において、エンティティを支援するアプリケーションソフトウェアを実行する。ソフトウェアは、各構成要素サービスによって提供される機能をエンドユーザが理解できるようにするために処理システム10が必要とする情報を、エンティティに提供するように促す。従って、例えば、エンティティには、ユーザが構成要素の動作を決定するために必要な情報のタイプを定義するフィールドを含むダイアログボックスを提示することができる。
一般に、必要な情報としては、少なくとも、構成要素の仕様、入力仕様及び出力仕様が含まれる。具体的には、構成要素の仕様は、構成要素の作成者、実装エンティティ等に関連する情報と共に、構成要素によって提供されるサービスに関する情報を提供するために使用される。構成要素の仕様は、処理システム10又はエンドステーション3が構成要素によって具体化されるサービスにアクセスできるように十分な情報を含む。
従って、構成要素の仕様は通常、少なくとも以下のものを含む。
・製造業者ID − サービスを提供するエンティティの識別に使用される
・構成要素ID − 各構成要素の識別に使用される
・ロケーション情報 − 構成要素が実装される場所の識別に使用される
・説明 − 構成要素によって提供されるサービスの指示
例えば、この情報は、図8に示す属性ダイアログボックスの使用を通して提供することができる。属性ダイアログボックスは、構成要素の名前、構成要素の説明、作成者、アドレス、報告番号等の情報を提供するように、エンティティを促す。この例では、図は、より詳細に以下に説明する設計者向けプログラム用のグラフィカルユーザインタフェース(GUI)を示す。この場合、設計者向けプログラムには「add_other」構成要素が編集のためにロードされている。GUIには3つの主なフィールドがある。
1.ツールバー − 構成要素の表示を編集できるようにする
2.構成要素の表示 − 公開されるとフォーラムにおいて利用可能になるもの
3.構成要素の詳細 − エンドユーザが必要とする、構成要素の表示と組み合わせられる追加情報
エンティティ処理システム15にインストールされているアプリケーションソフトウェアも、必要とされる任意の識別子の生成に使用することができる。具体的には、一般には、エンティティ及び構成要素の両方を一意に識別することができる識別子を生成することが必要である。
さらに、構成要素を実装して、具体化されるサービスを提供する際に、エンティティステーション5は、複数の異なるコード生成プロジェクトで同じ構成要素を同時に実装する場合がある。この場合、いくつかの異なる構成要素インスタンスが存在することになり、一つ又は複数の構成要素インスタンスが、実装に応じて各コード生成プロジェクトのそれぞれに適用される。従って、この場合、各識別子を生成して各構成要素インスタンスを一意に識別できるようにする必要がある。
構成要素の仕様はいずれの形式で提供されてもよいが、通常、これは所定のXMLスキーマに従って生成されるXMLファイルの形式で提供される。これは通常、エンドステーション3によって実装されるソフトウェアに、ダイアログボックスを使用して提供された情報をXMLファイルに変換することによって実現される。
これに加えて、入力仕様及び出力仕様が、データを構成要素間で転送できるようにするために必要な任意の情報を示すために使用され、従って、通常、これは各構成要素の性質に依存する。
例えば、構成要素は、各入力において、多種多様なデータを取り扱うようにすることができる。これには、例えば、異なるデータ形式及び/又は異なるデータタイプが含まれる。この場合、入力仕様及び出力仕様は、構成要素の入力が受け取ることのできるデータ又は構成要素の出力が供給することのできるデータのタイプ及び/又は形式の詳細を含む。しかし、構成要素が1形式又は1タイプのデータのみを受け取るようにのみされている場合、これは必要ない。入力及び出力を接続するためのアドレス情報も提供することができる。これにより、構成要素は、データをある構成要素の出力から次の構成要素の入力に転送することによって互いに通信可能になる。
一例では、この通信の制御は、各構成要素が実装される場所において実行されるソフトウェアアプリケーションであるエージェントを使用して実現される。エージェントの動作は、システムの実施態様、特に関わる構成要素の性質に依存する。
従って、異なるタイプのデータを取り扱うことのできる構成要素の場合、エージェントは、ネゴシエーションを行って利用可能なデータタイプ及び入力仕様及び出力仕様において指定される形式の中から選択するようになすことができる。また、各構成要素が直接通信できるようにする。一方、構成要素は、一つの形式のデータを受け取る又は出力のみをするようになすこともできる。その場合には、このようなネゴシエーションは必要ない。
エージェントは一般に、エンティティステーションによって実行されるソフトウェア構成物であり、構成要素インスタンスが他のコンテンツインスタンスと通信できるようにする。従って、入力仕様及び出力仕様は、各エージェントの動作様式についての詳細も含む。
いずれの場合でも、入力仕様及び出力仕様の詳細は、エンティティに、各入力及び/又は出力並びに関連するエージェントに関する詳細を促すダイアログボックスの使用を通して提供することができる。出力のダイアログボックスの例を図9に示す。
次いで、通常、入力仕様及び出力仕様は、構成要素の仕様に統合され、そして、各XMLファイルに組み込まれる。しかし、これは本質的なことではなく、各XMLファイルによって代替を定義することが可能である。
以下、エージェントの動作についてより詳細に説明する。しかし、エンティティは構成要素としてサービスをカプセル化する際にもエージェントを構築するように動作することが理解できる。
本発明の実施態様に応じて、エージェント以外の技術を用いてネゴシエーションを行うことも可能である。
いずれの場合でも、ステップ420において、エンティティ処理システム15は、生成された構成要素、入力仕様及び出力仕様並びにエージェントの詳細を、通常はデータベース16に記憶するように動作する。次いで、ステップ430において、エンティティステーション5を使用してベースステーション1にアクセスし、ステップ440において、構成要素、入力仕様及び出力仕様の詳細をベースステーション1に転送できるようにし、ステップ450においてデータベース11に記憶する。
構成要素が自己完結型である場合、構成要素全体をデータベース11にダウンロードして記憶することができ、この場合、いずれの情報もエンティティステーション5に記憶する必要がないことが理解できる。これは、例えば、図3A及び図3Bに関連して前述したように、処理システム10が構成要素サービスを自動的に実装できるようにする。一方、構成要素をエンドステーション3に転送して実装することもできる。一般に、このような技術はサービスの実装方法の公開に繋がる。
エンティティは普通、構成要素の動作に対して、少なくとも、ある形態の制御を保持したいと思うため、通常、構成要素サービスはエンティティステーション5に実装される。
これは、一般に、サービスの実装にエンティティからの手動入力が必要な場合に必要なことであるが、他の理由によっても望ましい場合がある。
従って、例えば、これによって、エンティティが、効率を向上させるように構成要素の動作を調整し、及び/又は、変更することを容易にする。これらのみならず、構成要素の使用及び動作を監視することが可能になる。さらに、これによって、サービスを供給するエンティティが、処理済みのデータ又は別の出力のみを提供することが可能になり、サービスの実装に使用される方法は公開されない。これによって、以下により詳細に説明するように、サービスを実装する技術を業務上の秘密又は専門知識等として保持することが可能になる。
さらに、システムが多数の構成要素を取り扱うようになされる場合、データベース11及び処理システム10が、すぐに過度に使用されることになり得ることから、一般に、これらをすべてベースステーション1に配置することは望ましくない。
従って、通常は、構成要素は、エンティティステーション5において実装され、仕様及びエージェントの詳細がベースステーション1に転送されて、エンドステーション3のユーザが使用する構成要素を選択できるようにする。具体的には、システムのユーザがこのように構成要素を選択する場合、構成要素自体が実際にベースステーション1に提供されるのか、それともエンティティステーション5に提供されるのかは、ユーザが意識しなくてもよい事項(トランスペアレント)である。これは、各サービスを提供するエンティティステーション5にアクセスする必要のあるすべての仕様及びエージェントの詳細がベースステーション1に記憶されるためである。
構成要素によって具体的なサービスがエンティティステーション5に実装される場合、典型的には、各サービスの実装形式の詳細を記した非公開構成要素の仕様をさらに生成する。これは、サービスを行う際にエンティティが使用する実行可能なコード及び/又は命令を含むことができる。一方、エンティティがデータ処理を他の構成要素を使用することによってのみ実装する場合、非公開仕様は、本明細書に記載の技術により構築され実装される構成要素概要(スケマティック)の形態となり得る。これから、エンティティがデータ処理サービスを特定の組み合わせで他のエンティティに外注することによって、サービスの実装を定義することができることが理解できる。
いずれの場合でも、非公開仕様が作成される場合、これは、ステップ460においてエンティティステーション5に記憶される。
非公開仕様は、前述した構成要素の仕様と対照的に、提供されるサービスのみを記述し、実装形式を記述しない。非公開仕様は、エンティティ外部の個人に決して提供されず、それにより、各サービスが実装される方法を秘密としてエンティティが保持できるようにする。従って、これは、エンティティが各自の方法に対する保護を維持するのに役立つことが当業者には理解できる。いずれの場合でも、実装されるサービスの定義のみを構成要素の仕様に提供することにより、構成要素の仕様をベースステーション1に記憶させることによって、構成要素の仕様を公開する際に危険がないことが理解できる。
ユーザがベースステーション1を使用してアプリケーションソフトウェアを生産する様式の詳細な例について、これより図10A〜図10Eに記したフローチャートに関連してより詳細に説明する。
図に示すように、図10Aのステップ500において、最初の段階は、ユーザが作成するコンピュータによる実行可能なコードの要件が決定される。次いでステップ510において、ユーザがエンドステーション3を使用してベースステーション1にアクセスする。
ステップ520において、ユーザはエンドステーション3を使用して構成要素探索を選択する。そして、ステップ530において、データベース11に記憶されている構成要素の仕様に基づいて利用可能な構成要素の詳細を、処理システム10に提供させる。具体的には、通常、処理システムはユーザが、異なる形態の機能を定義した構成要素の分類を通して探索できるようにする。これによって、ユーザは、必要なサービスを具体化する構成要素を速やかに見つけることができる。
ステップ540において、ユーザは構成要素の属性を検討し、一つ又は複数の構成要素を選択する。これは複数の方法で実現し得るが、通常、ユーザに、少なくとも構成要素のタイトル及び適した構成要素の手短な追加説明を提供する案内可能なリストが提示される。次いでユーザは、構成要素のそれぞれ一つを選択して、さらなる詳細を提供させることができ、最終的に選択することができる。
例えば、さらなる詳細は、例えば、図8に示すような属性ダイアログボックスの使用することによって提供することができる。この場合、詳細は、構成要素の名前、構成要素の説明、作成者、アドレス、報告番号等の情報を含み、データベース11に記憶されている構成要素の仕様から直接決定される。
ステップ550において、選択された構成要素の指示が記憶される。これは、実装に応じて複数の様式で実現し得る。例えば、エンドステーション3はユーザが選択した各構成要素を表す構成要素データを生成することができる。次いで、構成要素データはメモリ31に記憶される。一方、処理システム10は構成要素データを生成し、データベース11に記憶することができる。
ステップ560において、エンドステーション3(又は、代替えの処理システム10)は、選択された構成要素の表示を含む略図を生成する。略図は、より詳細に以下説明するように、ユーザに構成要素間の接続を定義させるために使用される。具体的には、これは、エンドステーション3のユーザが、構成要素及びコンピュータによる実行可能なコードを生産するために、これらを互いにどのように接続する必要があるかを視覚化できるようにする。
略図は選択された各構成要素の表示を含み、これは一般に、エンティティによって定義され、構成要素の仕様の一部としてベースステーション1に転送される。ユーザが各構成要素を選択すると、対応する構成要素の表示がベースステーション1からエンドステーション3に転送され、必要に応じて略図に追加される。
従って、エンドステーション3が記憶する構成要素の指示は構成要素の表示の形式であることが理解できる。さらに、構成要素の表示を単にドラッグして略図中にドロップすることだけで、構成要素を選択することができる。
略図の例を図11に示す。図に示すように、略図は略図ウィンドウ50に表示され、この例では、4つの構成要素の表示51、52、53、54を含む。各構成要素は、構成要素の表示中に51A、51B、51C等と一般的に示すように、複数の入力及び出力を有する。
ユーザが略図に示される各構成要素の一つを選択した場合、ユーザには一つの構成要素の表示が提示される。その例を図12に示す。具体的には、図12は、複数の入力表現及び出力表現52A、52B、・・・、52Gが提示された構成要素の表示52を含む構成要素表示画面60を示す。
構成要素表示画面は、示されている構成要素ウィンドウ60と、上に述べた略図ウィンドウ50と、自動選択ウィンドウとの間を、ユーザが行き来できるようにする複数のウィンドウ選択タブ61も含む。
エージェントウィンドウ62も提供される。エージェントウィンドウ62は、各入力仕様及び/又は出力仕様から得られる選択された入力エージェント又は出力エージェント(この例では、エージェント52G)の詳細を表示する。
使用の際に、ユーザは、構成要素の表示と略図との間を行き来して、構成要素に関する様々な情報を提供させることができる。従って、例えば、構成要素の表示52を選択することにより、例えば、図8に示すように、対応する構成要素の属性を表示させることができる。同様に、入力表現及び/又は出力表現のそれぞれ一つを選択することにより、各入力又は出力の詳細がエージェントウィンドウ62に表示される。通常、このような詳細は、図9に示すような入力又は出力ダイアログボックスを適宜表示することによって提供される。
いずれの場合でも、ユーザは提示された略図を検討し、ステップ570において、構成要素がさらに必要か否かを決定する。ステップ580において、構成要素がさらに必要であると決定された場合、処理はステップ520に戻り、ユーザが構成要素探索ツールに戻り、エンドステーション3を使用して構成要素をさらに選択できるようにする。次いで、これら構成要素の表示を、例えば、ドラッグ・アンド・ドロップ技術を利用して、必要に応じて略図に追加することができる。
対応する構成要素の表示を略図上に配置することによって、必要な構成要素(又は必要な構成要素の少なくともいくつか)が選択されると、ユーザは、ステップ590において、接続する構成要素の入力及び出力を決定する。
構成要素がうまく確実な対話をするために、ユーザは通常、ステップ600において、接続する入力及び出力に互換性があるかをここでチェックする。具体的には、ユーザは、入力及び出力がいずれかの共通データタイプ及び/又は形式を取り扱うことができるかをチェックする。この情報は、入力仕様及び出力仕様に含まれる入力及び出力の詳細を調べることによって決めることができる。通常、構成要素の最初に選択する際にもこの考慮事項に配慮することが理解できる。
ステップ610において、ユーザが、入力及び出力を接続することができないと決定した場合、処理はステップ520に戻り、一つ又は複数の代わりの構成要素を選択することができる。
その他の場合、ステップ620において、ユーザは接続ツールを選択して動作させ、略図上で各構成要素の表示の入力及び出力の間を接続する表示を生成する。この例を図13及び図14に示す。エンドステーション3は、接続の表示を入力及び出力の間の接続として解釈し、接続を表す接続データを生成する。
具体的には、図13は、図11に示す構成要素の表示の構成要素の表示51、52、53、54の略図を示し、一般に65に示す接続の表示を使用して、構成要素は互いに接続されている。具体的には、この例では、構成要素の表示52は、図に示すように複製された構成要素の表示51、BNEアドレス指定構成要素の表示53、及びビルド構成要素の表示54に接続される。
図14は、構成要素の表示52が複数の下位構成要素から形成された複合的な構成要素に対応することを示す。同様に、これら下位構成要素も、図に示すように、接続の表示65によって相互接続されたLDAA構成要素の表示70、DECA構成要素の表示71、STAA構成要素の表示72、及び二つのビルド構成要素の表示73、74として表される。
図13の略図に表される構成要素の組み合わせによって、減分カウンタを形成するコンピュータによる実行可能なコードを生成することができる。しかし、この例は、略図の動作を説明するために提供されたものであり、実装される実際の機能は重要ではないことが理解できる。以下に、さらなる例についてより詳細に説明する。
いずれの場合でも、ユーザは、略図上で入力及び出力のそれぞれを選択し、次いで、ステップ620において、入力と出力の間に接続する表示を描き、それによって入力と出力のそれぞれの間に接続を定義することができる。
この例では、エンドステーション3も処理システム10も接続の妥当性を調べるように動作せず、具体的には、データが第1の構成要素の出力から第2の構成要素の入力にうまく転送することができるかは決定されない。しかし、いくつかの実施態様では処理システムのいずかによるチェックが行われ得ることが理解できる。
いずれの場合でも、この例では、ステップ630において、エンドステーションは、作成された接続の指示を接続データの形態で記憶する。
次いでユーザは、ステップ640において、略図を検討し、接続がさらに必要であるか否かを決定する。ステップ650において接続がさらに必要であると決定された場合、プロセスはステップ590に戻り、接続を前述した様式でさらに定義することができる。
このようにして、ユーザは描画ツールを使用して、効率的に必要な接続をすべて略図において定義する。これには通常、各構成要素の入力及び出力のそれぞれを別の出力又は入力に接続する必要があるが、場合によっては適切な終端を提供することもできる。
ステップ650において、略図において構成要素にそれ以上の接続が必要ないと決定された場合、ユーザは、ステップ660において略図を検討し、さらに構成要素が必要かを決定する。これによって、ステップ670において、さらに構成要素が必要であると決定された場合、方法はステップ520に戻り、構成要素をさらに含めることができる。
このようにして、ユーザは、二つ以上の構成要素を効率的に選択することができる。また、構成要素をさらに選択しに戻る前に、これらを相互接続を処理することができる。
ステップ670において、それ以上の構成要素が必要ないと決定された場合、ステップ680において、ユーザはコンピュータによる実行可能なコードの構築を指示する。
前述したグラフィックベースのシステムの使用は一例であり、他の技術を利用して構成要素の組み合わせを定義することも可能であることが理解できる。例えば、構成要素は、適当なテキストベースの言語で表すこともできる。この場合、関数によって構成要素を表し、命令文(ステートメント)によって構成要素の組み合わせを表し、変数によってエージェントを表すことができる。
この点で、ユーザはオプションとして、例えば図3Bのステップ310〜340に関連して前述したように、略図を検討し、コンピュータによる実行可能なコードを生成すべきであるかを決定することができる。具体的には、一般に、全体のコスト、構築時間、資源使用量、結果として得られるパフォーマンス等の指示等、コード生成プロセス全体に関連する情報が、ユーザに提示される。
主として、これはエンドステーション3及びベースステーション処理システム10の協働によって関連情報を決めることによって生成される。従って、例えば、エンドステーション13は略図による指示を処理システムに転送して、関連する値を求ることができ、又は情報を構成要素の仕様の一部に含めることができる。処理システム10が略図構築プロセスのホストとなる場合、情報を定めることができる。また、単にエンドステーションでユーザに表示することができる。
いずれの場合でも、各略図によって定義される構築プロセスが条件を満たしていようとも、すなわち、コンピュータによる実行可能なコードの構築に進みたくても、ユーザがアクセスできるようにする。
略図で定義されたサービスの実装によるコンピュータによる実行可能なコードの構築は、ビルドプロセスとして知られている。一例では、これは、構成要素を対話させるように動作するエージェントを使用することによって、実装される。
この実現方法は実施態様に依存する。一例では、エージェントは、別の構成要素からデータを受け取らないようになされる。この場合、各構成要素上のエージェント間では一つのデータ転送が行われるため、この形態の通信は一つのイベントトランザクションと考えることができる。しかし、構成要素が異なるデータ形式を取り扱うようになされている場合は、共通のデータ形式を決定するためにネゴシーションが必要である。これは、多重イベントトランザクションとして知られている複数のメッセージをエージェント間の転送を行う必要がある。この例では、多段階トランザクションについて説明するが、一般技術が一つの段階のトランザクションにも同様に適用されることが理解できる。
ビルドプロセスは、それに代えて又はそれに加えて、各実装に応じて、処理システム10、一つ又は複数のエンティティステーション5、他の処理システム、又は上記の組み合わせによって行い得ることも理解できる。しかし、この例の残りの部分は、エンドステーション3によって行われるビルドプロセスを参照して説明する。
この例では、ステップ680においてビルドプロセスに進む命令を受け取ると、ステップ690において、エンドステーション3は構成要素データ及び接続データにアクセスする。ステップ700において、エンドステーションは構成要素データを使用して、コンピュータによる実行可能なコードを生成する際に使用すべき構成要素を決定する。
ステップ710において、エンドステーション3は、エンドステーション3によって実行されるソフトウェアエンティティである構成要素サーバを実装して、エンドステーションが構成要素インスタンスを実装できるようにする。この場合、構成要素サーバは階層の最上位レベルにあり、従って、略図において他のすべての構成要素を含む最上位の構成要素を実装するために使用される。その結果、構成要素サーバはルートサーバとして知られている。
ステップ720において、エンドステーション3は略図及び構成要素の仕様を使用して、各構成要素を供給しているエンティティステーション5を決定する。ステップ730において、この情報が略図からの接続データと共に使用されて、各構成要素のエージェント間に必要な接続の詳細が求められる。
ステップ740において、エンドステーション3は、使用する各構成要素に対応する購入注文を生成する。具体的には、購入注文は、各エンティティステーション5を介して各サービスを提供するエンティティに送信され、各構成要素に関連するサービスの提供を要求するようになされる。一般に、各購入注文は、少なくとも以下の情報を含む。
・製造業者ID
・構成要素ID
・ビルドID − 各ビルドインスタンスの識別に使用される
・制約 − ユーザによる実装に対して課されるあらゆる制約の指示
・必要なエージェント接続の詳細
以上では購入注文を用いる場合について説明したが、これらは本質的なものではなく、各構成要素に関連するサービスの実装を注文する他の技術を代わりに使用し得ることが理解できる。
ステップ750において、各購入注文が各エンティティに送信される。一例では、これによって、各エンティティは各サービスを行うことが可能であるか否かを決定することができる。従って、例えば、エンティティは、コンピュータによる実行可能なコードの故障、サービスを手動で行う個人の不在等の実装問題によって利用不可能になる場合がある。
構成要素が複数の下位構成要素から形成される場合、他のエンティティの責任となる下位構成要素のうちの一つ又は複数の故障から、エンティティが構成要素を実装することができない場合がある。これは、下位構成要素を実装するエンティティステーション5からの応答に基づいてエンティティステーション5によって決定され、エンドステーション3に通知される。
エンティティがサービスを行うことができない場合、これが各構成要素自体に伴う問題によるものか、それとも関連する下位構成要素に伴う問題によるものかに関わらず、このことの指示がエンドステーション3に転送される。エンドステーション3により、いずれの構成要素も実行できないと決定される場合、プロセスは終了するか、又は、一つ又は複数の代替の構成要素を選択することによって略図をユーザに更新させることができる。従って、例えば、処理はステップ520に戻り、異なる構成要素を選択することができる。
サービスを行うことができると想定すると、すなわち、このような評価が行われなければ、ステップ760において、エンティティステーション5は構成要素サーバを生成して、各構成要素インスタンスを実行できるようにする。
この点において、エンティティステーション5によって実装される構成要素サーバは、構成要素の実装に使用される下位構成要素を提供するいずれのエンティティステーションにも送信される各購入注文を生成する必要があり得る。従って、構成要素を実装するエンティティステーション5は、下位構成要素を実装しているエンティティステーション5に各購入注文を送信することによって、エンドステーション3と同様の様式で機能することができることが理解できる。従って、エンティティステーション5は構成要素の仕様を使用して、下位構成要素等を決定し、以下はエンドステーション3によって行われるステップ700〜740と同様である。これは、プロセスの階層性質を強調する。
一方、データ処理サービスは実行可能なコードによって実装することもでき、この場合、これは、当業者が理解するように、構成要素インスタンスとして構成要素サーバによって実装される。他の選択肢も、当業者が理解できるように利用可能である。
ステップ770において、接続された各入力及び各出力に関連するエージェントがアクティブ化される。一般に、エージェントは、各構成要素インスタンスを実装する構成要素サーバによって実装されるソフトウェアである。従って、エージェントは、各エンティティステーション5が購入注文を受け取り、各構成要素インスタンスが生成されるとすぐにアクティブ化される。従って、必要な構成要素インスタンス及び関連するエージェントのアクティブ化は、必要な購入注文が、要求を受ける側のエンティティステーション5に伝えられると、略図全体を通して逐次行われる。
具体的には、エージェントは、以下に、より詳細に説明するように、所定の順序でアクティブ化される。多重イベントトランザクション環境では、エージェントがアクティブ化されると、ステップ780において、各入力/出力仕様から各データ形式及び/又はタイプの詳細を決定する。次いでステップ790において、エージェントは、購入注文において各構成要素サーバに提供される接続情報に従って接続を確立することによって決定されたデータ形式/タイプを比較する。具体的には、接続される入力及び出力のそれぞれのエージェントは、購入注文におけるアドレス情報に基づいて、通信ネットワーク2、4を介して、必要に応じてメッセージを転送する。
いずれの場合でも、ネゴシエーションを実現するために、メッセージは各データ形式/タイプの指示を含み、共通のデータ形式/タイプがあるか否かを決定する。この点において、入力及び出力は、両方が共通のデータ形式及び/又はタイプを取り扱うことができる場合にのみ通信することができることが理解できる。
これは、実行可能なコードからエージェントを形成して共通の形式を決定することによって自動的に行うことができるが、一方、例えば、構成要素によって具体化されるサービスが手動で実装される場合に、ネゴシエーションは手動で行うこともできる。この場合、エージェントはダイアログボックスを起動して、異なるエンティティステーションのオペレータが通信して交渉できるようにする。これは通常、2人のオペレータ同士のチャットセッションと同様の形式で行われる。
ステップ800において、共通のデータ形式/タイプがないと決定された場合、プロセスはステップ810に進み、このポイントで、エージェントは、構成要素を相互接続することができないと決定する。これは、例えば、一つの構成要素が第1の形式のデータを出力しており、他の構成要素が第2の形式のデータを許容する必要がある場合に発生する。これが発生すると、ステップ820においてビルドプロセスは停止され、ユーザに通知がされる。これにより、ユーザは、ビルドプロセスを続行できるように是正措置をとることができる。これは、例えば、追加の構成要素又はエージェントを追加する、又は手動でデータを処理して、エラーを修正させることによって実現することができる。
この点において、エージェントがエンティティ処理システムの一つによって実装される構成要素の下位構成要素に設けられる場合、下位構成要素が通信を確立することを保証するのは各構成要素を実装するエンティティの責任であり得る。
一方、ビルドプロセスは、ソフトウェアを構築されないで終了することができる。
いずれの場合でも、各入力及び出力が共通のデータ形式/タイプを有する場合、ステップ830において、エージェントは、各入力及び出力が通信可能な状態にあると決定し、この場合、ステップ850においてサービスの実装が開始される。
これから、一つのトランザクションイベントの接続がエージェント間に確立される場合、一般に、別の任意のエージェントからデータを含むメッセージを受け取るために、単に入力エージェントをアクティブ化することが理解できる。同様に出力エージェントの場合も、エージェントはアクティブ化され、出力データが構成要素によって提供されるまで何もせず、出力データが提供されると、出力データを含むメッセージを生成し、別のエージェントに転送する。この場合、ステップ780〜830は必要ない。
いずれの場合でも、エンティティは、エンティティステーション5に、エージェントが他のエージェントから入力において受けとったメッセージ中のデータと対話させることによって各構成要素で定義される各サービスを提供する。次いで、データは、定義された略図によって要求されるように、エンドステーション3又は別のエンティティステーション5に転送される前に、必要に応じて処理又は使用される。
一般に、各構成要素は各エンティティステーション5に実装される。これを実現するために、処理されるデータはエンドステーション3、ベースステーション1、又は別のエンティティステーション5から各エンティティステーション5にダウンロードされる。これは、構成要素の仕様に示されるように、処理システム15上の特定のポート等にデータを転送することによって実現される。データは、構成要素インスタンスIDと共に転送され、正しい構成要素インスタンスがデータ処理に使用されることを保証する。
しかし、これは、各内容インスタンスを各ポートに提供し、データを各ポートに転送する等、他の技術を利用して実現することもできることが理解できる。
いずれの場合でも、各構成要素インスタンスが処理されるデータを受け取ると、各エンティティステーション5がホストとなる場合、構成要素サーバはデータを交換し、必要に応じてデータを変更し、それから変更されたデータを出力ポートの一つ又は複数に提供する。従って、データは、各構成要素サーバによって実装される実行可能なコードによって、オペレータからの入力コマンドに従って手動で処理することができる。この後者の場合、典型的には、データを受け取ったエージェントが適当なインタフェースを介して、これをユーザに提示し、次いでオペレータが、出力エージェントに転送する前にデータを変更できるようにする。従って、これから、エージェントは、オペレータがデータ及び他の構成要素と対話できるようにするインタフェースを提供する以外の目的を果たさないことが理解できる。
いずれの場合でも、サービスが行われると、データはベースステーション1又はエンドステーション3に転送され、メモリ21又はデータベース11に一時的に記憶され、それから次の構成要素インスタンスのためのホストとして動作するエンティティステーション5の入力ポートに転送される。しかし、一方、別の構成要素による後続する処理のために、エンティティステーション5の一つの構成要素の出力ポートに提供されたデータを別のエンティティステーション5に直接転送することもできる。
このプロセス中、構成要素の仕様の形式に応じて、いくつかの異なる構成要素によって同時に、データを処理することも可能なことが理解できる。
これに加えて、実際には、すべての構成要素が、実行可能なコードを最終的に形成するデータと交換されるわけではないことが理解できる。代わりに、構成要素によっては、それ自体の間でデータを交換するように動作するだけのものもある。一般に、これは、エージェントがアクティブ化され、各構成要素インスタンス間に通信が確立されてすぐに行うことができる。
従って、この説明及び以上の説明から、サービスの実装の一部は、ビルドプロセスの開始の概ね直後に開始することができることが理解できる。具体的には、任意の二つのエージェントが接続し、データの交換準備が整うとすぐにこれが行われる。
これとは対照的に、データを他の構成要素から受け取る必要がある構成要素は、各関連サービスの実行を開始する前にデータを待つことになる。
さらに、前述した例では、通常は、ベースステーション1、エンドステーション3及びエンティティステーション5が、共通の処理システム上で効率的に相互交換可能又は実装可能である。従って、処理システム10、15、及びエンドステーション3は一般に、ベースステーション1、エンドステーション3、及びエンティティステーション5のそれぞれの機能を実装するアプリケーションを実行する。例えば、これによって、エンティティはエンティティステーション5を使用して、エンドステーション3に関して前述したように実行可能なコードを作成することができ、またその逆も同様である。
従って、例えば、エンティティは、そのときに求められる機能に応じてエンティティステーション5として動作するものもあり、エンドステーション3として動作するものもある複数の処理システムを備える。従って、例えば、エンティティは複数の構成要素インスタンスを提供することができ、その実装は処理システムにわたって分散する。この例では、処理システムによって提供される機能は、必要に応じて、エンドステーション3及びエンティティステーション5のいずれか一方又は両方と同等である。
構成要素を実装するためには、通常、サポート構造が必要である。従って、エンティティが、サービスの実装のサポート及びソフトウェアの生成を可能にするために使用される複数のエンドステーション3を含む基盤を適所に有することが一般的であることが理解できる。
サービスを提供するエンティティの場合、通常、エンティティは自動化された複数のエンティティステーション5を有する。しかし、構成要素がサービスを完了することができないような例外又は他のエラーが発生する場合、エンティティステーション5は、構成要素を、個人が稼働させている別のエンティティステーション5に受け渡す又は転送する。これによって、その個人が手動のフィードバックを提供して、例外又はエラーを、可能であれば解決できるようにすることができる。可能でなければ、問題を解決することができないという指示がシステム内の別の構成要素又はエンティティに返される。従って、下位構成要素に伴う問題が発生する場合、問題の指示がまず親構成要素に返される。これは、問題を解決することができるまで、例外が連鎖を下から上に向かって渡され続ける。
エージェントの性質及び動作等、以下、前述した実施態様の特徴のいくつかについてより詳細に説明する。
実施態様例
前述したように、ベースステーション1により、通常は各エンティティステーション5において複数の異なるエンティティによって提供されるサービスに、複数の異なるユーザが一元的にアクセスできることが理解できる。これにより、エンティティによって提供される構成要素を、多くの異なるソフトウェアアプリケーションの作成の際に、複数回再使用することが可能になる。
一例では、これは、異なるサービスにアクセスする手段をユーザに提供するフォーラムの形式である。フォーラムは、前述した例のように、一つのベースステーションを使用して実装することができる。しかし、当業者は、複数のベースステーション、エンドステーション3、エンティティステーション5又は他の任意の適した処理システムを使用して実装することも可能であり、必要に応じて、フォーラムは、ベースステーション、エンドステーション3、エンティティステーション5及び/又は他の処理システムに分散することが理解できる。フォーラムは、ユーザが構成要素を選択できるように構成要素を販売するメカニズムを提供するように動作する。
従って、以下の説明はフォーラムを使用したシステムの実装に焦点を当てるが、この技術は、一つのベースステーションの使用等、任意の実施態様に等しく適用することが可能である。
典型的には、使用の際に、各エンティティが各構成要素に関連する料金を定める。この料金は、フォーラムのユーザが、各構成要素インスタンスサービスの利用に対して支払うべき料金に相当する。従って、ユーザは、エンティティによって提供される一つ又は複数のサービスの提供の対価として、各エンティティに一つ又は複数の料金を支払う。
これにより、エンティティは各サービスの提供に料金を課すことができ、それによってエンティティは収入を得て、各構成要素の開発に対する投資を回収することができる。同様に、これにより、特に設けられたサービスを提供して、金銭的収入を得ることによってエンティティの専門化が可能になる。
これは、エンティティが通常、ソフトウェアアプリケーション全体に必要な実行可能なコードをすべて構築することによってのみ金銭的利益を得る現行のソフトウェア構築技術とは対照的である。
同様に、これによって、通常、エンティティは、詳細にはあまり注意が払われない、ソフトウェアアプリケーション全体を作成しようとするのではなく、特定のサービス提供の最適化に集中することができる。
フォーラムにおいて、異なるエンティティによって提供され、同様のサービスを提供する複数の構成要素へのアクセスをユーザに提供することによって、エンティティが互いに競争して同様のサービスをユーザに提供することが促される。従って、その結果生じる市場の力により、エンティティ間の競争が促進され、それによって各エンティティによる各サービスの提供の向上が促進される。
具体的には、ユーザはより出来がよい構成要素を選択する傾向を有する。その結果、エンティティは構成要素レベルで互いに競争して、ますます出来のよい構成要素を提供する。これによって、エンティティは、より出来のよい構成要素が多数回実装されることになることから投資を回収しながら、特定の構成要素の実装の向上により多くの時間及び金銭を投資することが可能になる。
この点において、同じサービスを提供する他の構成要素と比較して、構成要素は安価で高速であるほどできがよいと考えることができ、コードの最適化等に繋がる。
これから、市場の力及び専門化レベルでの直接競争は、フォーラムを通して提供される各サービスの向上につながることを見て取ることができる。従って、階層構造内のあらゆるレベルにおける各構成要素が最適化されることになり、バグ又は他のエラーのない最適なコードの生成に繋がる。これは、競争が専門化レベルで直接行われる、工業化されたソフトウェア作成手法を表す。
フォーラム内の競争を促すために、ユーザには、各アプリケーションの構築への使用には、どの構成要素が最良であるかを評価できる情報が提供される。次いでユーザは、例えば、以下のものを含む広く多種多様な要因に従って構成要素を選択できる。
・各サービスを行うエンティティ
・コスト
・各サービスを行うエンティティの所在
・構成要素の人気
・構成要素から受けとることのできる、又は出力することのできるデータ形式/タイプ
・それまでのユーザ又はフォーラムが構成要素に与える格付け
この点において、一般に、フォーラムは、ユーザが構成要素の有効性を格付けできるようにする格付けシステムを提供する。例えば、格付けは、各構成要素それぞれに発生したビルド障害の数を、ユーザにフィードバックすることによって、又はフォーラム自体による構成要素のテストによって、統計的に定めることができる。
検討等の使用を通しての市場競争が存在するが、これは通常ソフトウェアコード全体に対して提供されることが理解できる。これとは対照的に、この例での検討及び格付けは構成要素レベルで行われるため、ソフトウェアアプリケーション全体ではなく個々の構成要素の改良が促進される。
構成要素の出来を判定するにあたって、他の要因も使用し得ることが理解できる。
いずれの場合でも、競争力を保つために、各エンティティは、洗練された効率的なサービス実装を提供することに集中し、大幅に改良されたソフトウェアの作成が可能になる。構成要素が改良されると、ソフトウェアアプリケーション全体も改良されることになる。従って、新しいソフトウェアの生成技術の開発がソフトウェアアプリケーションの急速な改良に繋がることが理解できる。
フォーラムのオペレータが利益を得られるようにするために、エンティティに課される任意の料金の少なくとも一部をフォーラムのオペレータに提供して、オペレータが各構成要素の使用レベルに基づいて利益を得られるようにすることもできる。しかし、一方、加入料等を、システムを使用したい個人又はフォーラムに構成要素を提示したいエンティティに課すこともできる。
従って、前述したシステムは、ソフトウェア開発プロセスを、生成されたバイナリ出力のバイトまで下げて、あらゆるレベルのバイナリコード結果において国際競争に対応できるようにする。
この国際競争は急速な専門化をもたらす。そして、これは、専門化が収集されルールに変えることができる狭い領域での理解に到達するのと同様に、自動化を引き起こす。このようにして変形されると、半自動手段は、生産性を向上させるマシンに助けられて採用することができる。時間及びさらなる専門化によって、これは完全に自動化された手段に進化し得る。
従って、プロセスの専門化は、競争力及び自動化の両方を得る手段を提供する。前者は市場の力に基づいてオプションとして品質の改良になり、後者は生産性を大幅に向上させる。
一般に、あらゆるソフトウェア開発の努力は、顧客の見込み、要求及び要望を抽出した要件文書から始まり、バイナリプログラムという結果で終わる。従って、プロセスがどのようにして結果に到達するかは重要ではない。
従って、前述したシステムは、サービスをそれぞれ提供する複数の専門家を選択し調整することによって実行可能なバイナリファイルを構築できるようにする。小屋組業者、クレーンオペレータ及び輸送請負業者のようなサービスを調整することによって家を建てるのと同様である。単純な調整で、トラスを製造し、現場に輸送し、所定位置に組み付けることができる。
通常、システムは二つの主要部分であるワークステーション及びフォーラムで具体化される。この場合、多数のワークステーション及び一つのフォーラムが共に、同種のLANやインターネットでネットワーク化され、各ワークステーションは、それぞれの専門に基づいたサービスを提供可能な専門家である。サービスが実装され、テストされると、専門家はネットワーク接続を使用して、フォーラムを介してサービスを販売することができる。これは、潜在的な顧客が、適切なワークステーション及び各専門家を見つけるためにはサービスを知っていなければならないためである。
フォーラムは、各ワークステーションにおける専門家が要求する全てのサービスを登録し、これらの宣伝を編成する。従って、単にフォーラムを訪れて、必要なバイナリの構築に保持しなければならない複数のサービスを通知するだけでソフトウェアを構築することができる。これが完了すると、提供されるサービスの実装に使用される各ワークステーションに連絡がとられ、それによって各種専門家に必要な作業を行わせる。
形式的にカプセル化されたサービスは、構成要素と呼ばれる実装の例である。カプセル化プロセスの一環として、構成要素の表示がフォーラムに登録される。
このサービス小売りネットワークにアクセスできる専門家のワークステーションを含め、あらゆるワークステーションがソフトウェアを構築することができる。ワークステーションは、小売りに向けてサービスをカプセル化し、フォーラムに登録することのできるツール及びネットワークにわたる構成要素サービスを調整することによってソフトウェアを構築することのできるツールを備えることができる。従って、適したツールを小売り及び契約によるサービスの両方に用いることにより、ワークステーションを使用してソフトウェアを作成し、他の作成に貢献することができる。
好ましい例では、フォーラムは、その他のツールがより効率的に動作することのできるポータルを提供する。例えば、フォーラムを訪れたり、契約したいサービスの詳細にコンタクトするのではなく、フォーラムは、サービスの説明、サービス販売業者の所在等を完備した、問題となっているサービスを表すグラフィックシンボルを、調整ツール内から直接送ることができる。これは、名刺のように、将来のある日に必要になった場合に、販売業者を見つけるために必要な関連情報をすべて含む。
フォーラムは、購入の詳細に加えて他の有用な情報を登録できるようにする。コスト及びサービス完了までの予想時間長のような情報が明らかな候補であるが、予想資源使用及びパフォーマンスのようなサービスの結果についてより関心のある情報が、構築に続くと決定する際に非常に有用である。
設計者向けプログラムは、構築に考慮され、提案されるバイナリの略図を作成するのに使用される。略図は、構築チームを構成する各サービスを表すグラフィックシンボルの集まりからなる。このシンボルの集まりは、すべてのサービスが、それぞれのタスクの完了に必要な情報のソース及びそれぞれの結果を送るために必要な宛先を有するように配置され接続される。
設計者向けプログラムは、オペレータがフォーラムへのポータルを開き、オペレータがそこに宣伝されている製品から選択できるようにすることによって略図を構築できるようにする。このようにして、グラフィックシンボルがフォーラムから略図にドラッグ・アンド・ドロップされ、配置され、接続される。
フォーラムへのポータルも、オペレータにとって大きな助けとなるサービスについての詳細を提供する。略図が完了すると、設計者向けプログラムは、提案されたバイナリの総コスト、提案されたバイナリの構築にかかる総時間、バイナリの予想サイズ、及びバイナリの予想されるパフォーマンスを計算することができる。
次いでオペレータは、構築に進むか否かを決定することができ、関連するコスト、時間等が発生する。
構成要素サーバは、構成要素において具体化される小売りサービスを提供することができる。構成要素がフォーラムに登録されると、ネットワーク上のいずれのエンティティもその構成要素を購入することが可能になる。常に、オペレータはサービスを直ちに実行することが要求され、さもなくば信頼性のないサービスによって顧客を失う危険性があることを覚悟するべきである。小売りインタフェースをネットワークに提供するのは構成要素サーバである。オペレータは、サービスを実行する立場として、ワークステーション上で構成要素サーバを開始し、サービスをカプセル化した構成要素をサーバプログラムにロードする。構成要素サーバプログラムがロードされると、ネットワークからの構築要求を待つ。構築要求は、構成要素の購入注文、サービスに必要な情報源の詳細、サービスに必要な宛先の詳細、購入者詳細等を含むデータパッケージである。
これより、プロセスの具体例について概説する。
ユーザが、バイナリプログラムが必要であると決定する。ユーザは、ネットワーク経由で構成要素サーバ及びフォーラムに接続されたワークステーション上で設計者向けプログラムを開始する。設計者向けプログラムを使用して、ユーザは複数の構成要素の表示をフォーラムから選択し、バイナリプログラムの新しい略図にドラッグ・アンド・ドロップする。すべての構成要素が略図に入ると、構成要素は、選択された構成要素の入力及び出力の要件を満たすように接続される。次いで、略図はハードディスクドライブに保存され、構築プロセスの調整に使用される構成要素サーバが略図にアクセスする。
略図が終了すると、ユーザはコスト、資源使用、スケジュール等に基づいて、構築するか否かを決定する。
次いでユーザは構成要素サーバを動作させ、略図をサーバにロードする。ロードすると、構成要素サーバを構成要素の小売りに利用することが可能になる。しかし、この構成要素は、小売りを意図しないことからフォーラムに登録されないことに留意されたい。
これは、「ルート構成要素」と呼ばれる特別な構成要素である。次いでユーザは、構築要求をこの構成要素サーバに発行して、本質的にこの略図のインスタンスを購入する。構成要素サーバは、構築要求を受け取ると、略図を走査して、略図中の各構成要素に対する構築要求のリストをまとめる。次いでこれらは、ネットワークを介して各構成要素サーバに発行される。各構成要素サーバも同様に、それぞれの構成要素の新しいインスタンスを作成し、それぞれの対応する略図をロードして構築要求を発行し、以下同様にして、すべてのサービスがアクティブ化されるまでサプライチェーンを下降する。
こうして、ユーザの略図は、ネットワークにわたって分散した手動構成要素及び自動構成要素の集まりに分解される。各構成要素によって具体化される各サービスが完了すると、その結果は、バイナリ結果がルート構成要素サーバに返されるまで正しい親構成要素に転送され、プロセスが完了する。次いでユーザは、ビルドプロセスの結果であるバイナリプログラムを得る。
これより、前述したプロセスの実施態様の一例についてさらに詳細に説明する。
エージェント
前述した例では、エージェントは構成要素間の通信の唯一の形態である。エージェントは、構成要素が、具体化するサービスの完了に必要なすべての情報の提供及び収集を担当する。エージェントは一般に、機能の限定された単純な実行可能なコードから形成され、これは、構成要素サーバの一部を成す場合もあれば、構成要素サーバによって実装される場合もある。使用の際に、エージェントは、各ポートを介して他の構成要素のエージェントと通信するようになされる。通常、エージェントはより詳細に以下に説明するようにメッセージを転送することによって通信する。
具体的には、エンドステーション3が購入注文をエンティティステーション5に送信する。各エンティティステーション5は、購入注文を受け取ると、新しい構成要素インスタンスを生成する構成要素サーバ及び他の構成要素のエージェントを見つけてそれに接続可能な対応するエージェントを実装する。これは前述したように、又は、例えば、接続詳細を購入注文において指定することによって、実行することができる。エージェントは他のエージェントと接続する(通信する)だけであるが、データ処理を実行する一環としてエージェントとの手動によるデータ交換が行われる場合もある。
具体的には、これより一例として、エージェントX1及びY1によって接続された構成要素X及びYを有する略図Pを示す図15を参照して説明する。
特定の構成要素インスタンスの特定のエージェントのアドレスを指定するために、エージェントを一意に識別できることが必要がある。従って、この例では、構成要素Xは、製造業者ID IDxを有するエンティティによって作成され、構成要素Yは、製造業者ID IDyを有するエンティティによって作成される。
略図Pがレイアウトされると、構成要素X及びYの構成要素の表示が、通常は、構成要素の仕様の一部として略図Pにダウンロードされ、配置され、接続される。これは、図10A〜図10Eに関連して前述した方法を使用してなされる。略図が構築される際、各構成要素には、U1及びU2で示すように一意のラベルが与えられる。これらのラベルによって、同じタイプの構成要素が二つ以上ある略図が、その構成要素の正しいインスタンスを参照することができる。
各構成要素の表示には、製造業者ID及び品番を含む構成要素の仕様が関連付けられる。構成要素の仕様はエージェントを詳述する入力及び出力の仕様を含み、例えば、厳密に各構成要素に一つずつある。
略図の構築を許可する前に、エンティティIDx、IDyがユーザに課金することができるように、略図Pを作成しているユーザを特定しなければならない。この例では、ユーザには識別子IDpが与えられる。この情報が略図に含まれると、構築の準備が整う。
略図構築処理によって、複数のエンティティが購入注文契約を結ぶことになる。従って、構築の決定により、コスト及び契約上の責務が発生する。略図におけるミスは誤った構築に繋がり、時間及び金銭を無駄にすることになる。
構築を進めると想定すると、次のステップでは、略図Pをビルダプログラムに渡す。ビルダプログラムは、略図を解釈してまとめ、略図内の各構成要素に対する購入注文を発行する。構成要素Xに対する購入注文は、以下の情報を含み得る。
・ベースステーション識別子 1
・略図識別子 P
・構成要素Xのラベル U1
・エンティティ識別子 IDx
・エンティティ品番 X
・以下を含む構成要素Xのエージェントの接続の詳細
・エンティティ識別子ID y
・エンティティ品番 Y
・構成要素Yのエージェント番号 Y1
・ユーザの識別子 IDp
・略図識別子 P
・Yの構成要素ラベル U2
構成要素Yに対する購入注文も同様の情報を含む。
購入されている構成要素が二つ以上のエージェントを有する場合は、各エージェントが、各エージェントのターゲットを指定する別個の接続の詳細を購入注文に含めなければならない。
IDxのエンティティは、IDpのユーザから購入注文を受け取ると、構成要素サーバを使用して構成要素のインスタンスを作成する。この点において、各エージェントに関連するコードを実行することによって、エージェントが作成される。
購入注文の提供後、ここで構成要素Xの各インスタンスは、エージェントX1がエージェントY1と通信するために必要な情報を有している。
基本的な例では、エージェントが一つのイベントトランザクションのみを実行するようになされる場合、唯一の通信方式は、エージェントの一つ、この例ではエージェントX1とのものであり、それによってヘッダ及びペイロードを含むメッセージを生成する。ヘッダは、メッセージをエージェントY1に転送するために必要なルーティング情報を指定し、ペイロードは転送される様々なデータを含む。
メッセージはエージェントY1に転送され、エージェントY1はメッセージを受け取り、ペイロードからデータを抽出する。タスクが完了すると、エージェントを終了することができる。
しかし一方、トランザクションは多重イベントトランザクションである場合、エージェントは、ネゴシエーションの実行等、複数のトランザクションを接続し実行するように動作する。この場合、エージェントの一つが、前述と同様にヘッダ及びペイロードを含むメッセージを生成する。この場合、メッセージの目的は通信を確立するためであるため、その性質は重要ではないが、互いにエージェントを認証するために使用される情報を含む。
いずれの場合でも、通信が確立されると、必要に応じて複数のメッセージがエージェント間で転送され、例えば、エージェントネゴシエーションを行うことができる。
従って、例えば、エージェントが図16に示すデータタイプを取り扱うようになされる場合、エージェントX1は整数INT、文字CHAR及び浮動小数点数FLOATを取り扱うことができ、エージェントY1は、二つの入力DOUBLE、浮動小数点数FLOAT及び日付DATEを取り扱うことができる。従って、エージェントは、構成要素Xが浮動小数点数FLOATの形態で出力を提供しなければならないと決定する。
以上より、エージェントは構成要素間通信の唯一の形式であることが理解できる。その結果、エージェントは通信ネットワーク2、4を介して通信可能できなければならない。
エージェントはそれ自体単純であるが、バンドリング及び受け渡しと呼ばれるプロセスによって、エージェントは複雑な振る舞い及び強力な情報提供・収集能力を示すことができる。
受け渡しメカニズムは、エージェントからエージェントへのあるトランザクションを終了させ、別のトランザクションを開く。これは、構成要素が下位構成要素のエージェントを、まるで構成要素自体のエージェントであるかのように使用している場合に最も有用である。動作例は受け渡し手続きの明確化に役立ち、下位構成要素への受け渡しの一例を提示する。
バンドリングは、特定の目的によって関連する複数のエージェントを一つの単純なエージェントとして取り扱えるようにする再帰的メカニズムである。動作例はバンドリング及びバンドリング解除メカニズムの明確化に役立ち、構成要素のバンドリング及びバンドリング解除の一例を提示する。
構成要素サーバ
構成要素サーバは、エンティティステーション5に設けられ、エンティティステーションが構成要素を実装できるようにするソフトウェアアプリケーションである。具体的には、構成要素サーバは、エンドステーション3によって生成された購入注文を受け取り、次いで購入注文を使用して、適当なエージェントと共に、新しい構成要素インスタンスを作成するようになされる。
これが完了すると、ローカル構成要素サーバが、以下エージェント表示と呼ばれるプロセスにおいて、構成要素に関連するエージェントをアクティブ化する。定義上、すべてのエージェントは、別の遠隔構成要素に関連する別のエージェントに接続される。エージェントが表示されれると、遠隔構成要素サーバで動作している相手方との対話に利用できるようになる。
これより、構成要素CPを表す図17Aを参照して、一つの例について説明する。具体的には、構成要素CPは3つの下位構成要素A、B及びCから形成され、4つのエージェントW、X、Y及びZが提供される。
構成要素サーバは、エンドステーション3から購入注文を受け取ると、各ビルドプロセスにおいてサービスを実行するための構成要素インスタンスの構築を開始する。
これを実現するために、構成要素サーバは、以下の動作をする。
・図17Bに示すように、購入注文POを、各構成要素A、B及びCに関連するサービスを供給するエンティティに提出し、
・各下位構成要素A、B及びCに必要なデータを提供して、定義されるサービスを各下位構成要素が行えるようにし、
・下位構成要素エージェントアドレスを供給して、これらのエージェントが終了すると、構成要素A、B及びCを組み付けられるようにする
ように動作する。
一般に、構成要素サーバは、様々な組み付け段階に多くの構成要素を含むが、以下の説明では、一つの構成要素に対してのみ動作する。
具体的には、構成要素サーバはエージェントW、X、Y、Zを提示して、略図によって要求されるように、これらが他の構成要素のエージェントと通信できるようにする。これに加えて、構成要素CPは下位構成要素A、B及びCを備えるため、複数の内部対話も解決しなければならない。
一般に、構成要素CPのユーザは、構成要素CPが複数の下位構成要素A、B、Cから形成されることに気付かない。従って、ユーザは、構成要素A、B、C間で行う必要がある対話の詳細を提供する必要はなく、これは構成要素CPを提供するエンティティによって決定される。従って、構成要素サーバは、構成要素A、B及びCに注文を出すときに、構成要素A、B、Cの間で必要な対話の詳細も提供する。
構成要素サーバは、図17Cに示すような一時的エージェントT1、T2、T3及びT4も提示して、構成要素CPの内部エージェントと下位構成要素A、B及びCとの間のインタフェースを提供する。これら一時的内部エージェントT1、T2、T3及びT4は、図17Cに示すような外部エージェントW、X、Y、Zと共に提示され、それにより、解決し接続する機会を有したすべてのエージェントに、構成要素が実装できる。
受け渡し
エージェントが静的に接続することに加えて、エージェント受け渡しメカニズムも存在する。エージェント受け渡しメカニズムによって、エージェントとエージェントとの接続を終了させ、エージェントの一つをさらに別のエージェントに再接続することができる。
この振る舞いは、複数のエージェントを一つのエージェントとして管理する手段を提供する。これは、構成要素がいくつかの単純な情報トランザクションを行い、次いでエージェントを別の構成要素に受け渡し、てさらにネゴシエートすることによって実現される。これら単純なトランザクションだけで、複雑なトランザクション全体を、見かけは一つの構成要素として実行することができる。
具体的には、受け渡しは、入念に手作業で構成された下位構成要素又は処理で内部構成されたサービスを、構成要素が提示できるようにする。従って、構成要素が複数のエージェントに見え、所定のサービスを実行するように見える。しかし、実際には、サービスは、それぞれのエージェントの少なくともいくつかを親エージェントからの受け渡しによって満たされる多くの下位構成要素によって供給される。これを実現するために、まず、親のエージェントは、ある外部構成要素に接続し、次いで、そのエージェントの他端を下位構成要素に接続するように命令しなければならない。
受け渡しメカニズムを一通り実行することによって、受け渡しプロセスに関わるステップを示す。
図18Aは、受け渡しを含む略図を示す。図18Aでは、構成要素C1のエージェントA1及び構成要素C2のエージェントA2は通常通り接続されるが、C2は図18Bに示すような下位構成要素C3を有する。
構成要素C2は、図18Cに示すように、エージェントA1を下位構成要素C3のエージェントA3に受け渡すことを意図する。
エージェントプロトコルを単純化するために、各エージェントが一度に他の一つのエージェントにしか接続されないものと仮定する。従って、エージェントA2は、エージェントA1及びA3に同時に接続することはできない。エージェントA2がエージェントA1に接続されると、エージェントA2の詳細を、構成要素C3を生成させる購入注文に含めることができない。構成要素C3を構築できるようにし、かつエージェントA3へのアクセスを得られるようにするために、図18Dに示すような一時的エージェントA2bが作成される。
エージェントA2bの詳細を購入注文に含めて、構成要素C3を構築し、エージェントA3を、構成要素C2が構成要素C3と通信する手段を提供するエージェントA2bに接続できるようにする。エージェントA1がエージェントA2に接続され、エージェントA2bがエージェントA3に接続されていると、構成要素C2は、エージェントA2及びA2bに終了を命令し、エージェントA1をエージェントA3に再接続させることができる。
従って、構成要素C2はローカルエージェントA2及びA2bを使用して、受け渡し順序をエージェントA1及びA3のそれぞれに通信し、エージェントA1及びA3は図18Eに示すように接続されることになる。一般的に、これは、エージェントにA1及びA3の識別子を交換させ、直接接続できるようにすることによって実現される。
これより、構成要素から構成要素に渡す受け渡しメカニズムの一例について、図19を参照して説明する。具体的には、この例では、略図は3つの構成要素A、B、Cを含み、各構成要素は各エージェントA1、B1、B2、C1、C2を有する。
この例では、エージェントA1はエージェントB1のアドレスを略図の購入注文から得る。同様に、エージェントB1もエージェントA1のアドレスを略図の購入注文から得る。前述したエージェント接続メカニズムを利用して、エージェントA1及びB1を接続し認証する。
エージェントA1及びB1はそれぞれの情報を転送し、これによってエージェントB1はエージェントA1をエージェントC1に受け渡すことを決定する。構成要素Bは、エージェントB2をエージェントC2と通信させることによって、エージェントC1のエージェントアドレスを得る。次いでエージェントB1は構成要素Aへの認証済みリンクを使用し、エージェントC1のエージェントアドレスと共に受け渡し要求を送る。
エージェントA1は単に、エージェントB1から接続解除し、エージェントC1に接続する。エージェントC1がその他との接続で通信中の場合。エージェントA1はエージェントC1が空くのを待つ。同様に、構成要素BもエージェントA1のアドレスを得て、これをエージェントC1に転送し、エージェントC1がエージェントA1に再接続できるようにする。従って、エージェントA1とB1との間の接続が、エージェントB2とC2との間の接続に矢印で示すように受け渡され、図に示すようにエージェントA1とC1の間が接続されることになる。
前述したように、エージェントは、手動でのネゴシエーション及びデータ転送を、例えばチャット又は電子メールの類のインタフェースを通して可能にする「ダム」インタフェースに過ぎない。
受け渡しは、一つのイベントトランザクションシステムでは、メッセージを単純に後続エージェントに転送することができるため、絶対に必要なものではないことが理解できる。
エージェントの組み合わせ
前述したように、各エージェントは、通常、別の構成要素に関連する他の一つのエージェントと対話する。一般に、構成要素は多くの入力及び出力を含み、従って多くのエージェントを有し得る。仮に、個人が略図作成時に各構成要素の各エージェント間の接続を定義する必要があるならば、多数の関連接続を行うべき状況での作業は繁雑になる。
従って、典型的には、関連するエージェントを組み合わせ、それによって一つの接続を定義する。これは、複雑なペイロード及び/又はバンドリングを使用して実現することができる。
複雑なペイロードは、各エージェントからのペイロードが組み合わせられて一つのペイロードになる場合に形成される。この場合、下位構成要素A、B、Cを有する構成要素Pは、構成要素A、B、Cのエージェントの各ペイロードを連結したもの又は他の様式での組み合わせに相当する一つのペイロードを提供する一つの外部エージェントを有する。この場合、一つのエージェントを、下位構成要素D、E、Fを有する構成要素Qに見せることができる。この場合、下位構成要素D、E、Fがデータと対話するためには、構成要素Qが複雑なペイロードを分解して、個々のペイロードのそれぞれを形成できるようにする必要があり、次いで各ペイロードを、構成要素D、E、Fのエージェントに提供することができる。
バンドリングの場合、エージェントは、二つ以上のエージェントが事実上、一つのエージェントとして取り扱われるようなバンドルされた構成要素を使用することによって組み合わせられる。次に、バンドリングを解除する構成要素が使用されて、必要に応じて構成要素のバンドルを分解する。次いでこれは、実際にはいずれの対話にも関与しないエージェントが、前述したように他のエージェントに対話要求を転送することができるように、エージェントの受け渡しを実施できるようにする。
これにより、ユーザに単純な一つのエージェントとして見せながら、複雑な対話が複数の構成要素間で可能になる。
バンドリング
多くの場合、構成要素は複数のエージェントが特定のタスクのために情報を解決する必要がある。これらエージェントは時に関連する場合があるため、エージェントをグループ化してバンドルにして複雑性を隠し、そのようにして一つのエージェントのようにバンドルを取り扱うことは理にかなっている。これは略図を大幅に簡易化し、エラーを低減させる。
従って、バンドリングの目的は、エージェントをより効率的に管理することである。バンドリングは、絶対に必要なものではないが、関連するエージェントを、それぞれの関係が保たれるように互いに結び付けられるようにし、多数のエージェントの管理をより容易な作業にする。
特別な構成要素がバンドラ/バンドリング解除サービスを提供し、以下、これらを一般化して、バンドラと呼ぶ。この例では、バンドラは3つのエージェント、すなわち二つの「入力」及び一つの「出力」を有し、バンドルを解除するように動作するバンドラ(「デバンドラ」と呼ぶことができる)は、二つの「出力」及び一つの「入力」を有する。出力及び入力という語は、バンドラ及びデバンドラがほぼ同じタスクを実行することから対を成すものである。出力及び入力は両方とも、一対のエージェントのアドレスを収集し、第3のエージェントを通じて送るが、バンドラは通信を開始するものであり、従って、まずアドレスを収集し、一対のエージェントを入力にし、一つのエージェントを出力にする。デバンドラが入力を通じてアドレスを受け取ると、すぐに、役割が逆になる。バンドラ及びデバンドラは、エージェント情報を交換すると、接続された構成要素を互いに受け渡して役割を終える。これら接続された構成要素のいずれかがバンドラ又はデバンドラである場合、プロセスは再び開始される。
図20Aは、バンドルエージェントBU1、BU2、BU3を提供するバンドル構成要素BUNDLEを通して接続された各構成要素A、Bからの二つのエージェントA1、B1を表す。バンドルエージェントBU3は、構成要素Xへの接続に使用される。バンドルエージェントBU1、BU2、BU3は通常のエージェントと区別がつかない。
使用の際に、図20Aに示す構成要素BUNDLEは、接続をエージェントA1、B1から受け取り、エージェントBU3を提示する。エージェントBU3の役割は、エージェントA1、B1のアドレスを構成要素Xに提供することである。
図20Aに示す例では、構成要素A、B、Xは、エージェントBU1、BU2及びBU3それぞれのアドレスを略図の購入注文から受け取る。同様に、バンドル構成要素BUNDLEも、エージェントアドレスA1、B1及びX1を各略図の購入注文から得る。エージェントA1、BU1は接続して認証し、エージェントB1及びBU2ならびにX1及びBU3も同じことをする。構成要素Xは構成要素BUNDLEとネゴシエートし、エージェントBU3のペイロードがバンドルを表すと決定する。
従って、前述した受け渡しメカニズムを使用することによって、構成要素XはエージェントA1、B1のアドレスを決定し、バンドル構成要素BUNDLEに、図20Bに示すようにA1、B1を受け渡すように命令することができる。従って、図20Bでは、構成要素XはエージェントBU3を通してエージェントA1、B1を知る。次いで構成要素Xは、エージェントBU3を介してバンドル構成要素BUNDLEに、エージェントA1、B1をエージェントX1及びX2にそれぞれ受け渡すように命令する。次いでバンドル構成要素及び各エージェントはサービスを完了し、役割を終える。
図21に示すバンドリング構成要素BUNDLEは、エージェントA1、B1の性質に関わりがない。バンドリング構成要素に関する限り、エージェントは任意の二つのエージェントであり、それぞれのペイロードは関係がない。これにより、図21に示すようなバンドリング構成要素の連結が可能になる。任意の数のバンドリング構成要素を連結することができる。
エージェントをバンドリングするバンドル構成要素を提供することに加えて、デバンドリング構成要素は逆の機能を実行するために提供される。
この一例を図22に示す。図22では、図に示すように、構成要素Aがデバンドリング構成要素DEBUNDLEに接続し、そしてデバンドリング構成要素は二つの構成要素X、Yと接続する。この例では、デバンドリングプロセスは、構成要素エージェントA1とDBU1、DBU3とX1、並びにDBU2とY1が購入注文に指定されるように接続し認証することから始まる。
次いでデバンドリング構成要素は、バンドルによって表された二つのエージェントのアドレスを知る。次いで、X1及びY1に、エージェントA1が提供したアドレスに従って受け渡しを行うように要求する。この点で、デバンドリングエージェントはサービスを完了し、役割を終える。
構成要素のバンドル及びバンドル解除を使用して、バンドルに対して複数の有用な演算を行うことができる。例えば、エージェントa、bをバンドルから抽出し、エージェントa、bを逆の順序にしてバンドルを再び組み立てることによって、エージェントa、bをバンドル内で並び替えることができる。さらに、選択的デバンドリングを利用して、図23に示すように、バンドルから所望のエージェントを抽出することができる。
この例では、エージェントa、b、c、dのバンドル内の各エージェントcをバンドルから切り離す必要がある。これは、関心のあるエージェントが利用可能になるまで、デバンドル構成要素Uを使用してバンドルをバンドリング解除し、次いでバンドリング構成要素Bを使用して、バンドルを再びバンドリングすることによって実現される。
階層バンドリング
例えば、典型的には、エージェントバンドルが最大で100を越える多数のエージェントを含むことがある。バンドリング/バンドリング解除プロセスの効率を向上させるために、エージェントバンドルを階層的に配置することはよくある。そして、アクセスされる機会が多いエージェント又はエージェントのバンドルは、より容易にアクセスできるようになる。
線形、動的階層又は用途を反映した構造等の複数の異なる階層構造を使用することができる。バンドルは、例えば図24Aに示すような階層ツリー状に配置することができる。
これはバンドルの一例の構造を示す。具体的には、この例では、バンドルBは、図に示すように、配置されたエージェントA1〜A12を含む。従って、エージェントA1〜A12のいくつかは、それ自体バンドルBに含まれるバンドルB1〜B8を使用して配置される。従って、構成要素がエージェントA1との対話を要求する場合、バンドルを第1のレベルで解除して、エージェントA1へのアクセスを提供することができる。この場合、デバンドル構成要素を使用して、バンドルBを第1の階層レベルまで下げて分解し、エージェントA1を抽出し、これを各エージェントに必要に応じて提供することができる。この時点で、バンドルB1及びB2も通常、バンドルBから抽出される。この一例を図24Bに示す。
この例では、図に示すように、下位構成要素1001、1002及び1003を有する構成要素1000が提供される。使用の際に、構成要素1002は、バンドルB内のエージェントA1によって提供されるペイロードに対して動作するようになされている。従って、使用の際に、構成要素1000はエージェント1004においてバンドルBを受け取るように動作し、エージェント1004はバンドルをエージェント1005に転送するように動作する。これは通常、単純にバンドルBをエージェント1005に受け渡すエージェント1004との受け渡しメカニズムによって実現される。
いずれの場合でも、構成要素1001は、階層の第1のレベルまでバンドルBをバンドル解除するように動作するデバンドル構成要素である。次いでエージェントA1は、エージェント1006を介して出力され、バンドルB1、B2はエージェント1007、1008を介してそれぞれ出力される。エージェントA1はエージェント1009に転送され、構成要素1002はエージェントA1のペイロードを受け取り、必要に応じて任意のデータ処理を提供することができる。次いで、エージェント1010を介して出力を提供することができる。
これが、バンドル内の特定のエージェントと対話するために必要なすべてであることが理解できる。従って、バンドルB1及びB2自体を、さらなる処理のために他の構成要素に転送することができる。同様に、エージェントA1も、ここでその目的を遂げることができる。さらなる使用がバンドルによるものか、バンドルから抽出された任意のエージェントによるものかは、バンドリングプロセスにとって本質的なものではない。
しかし、例示のみを目的として、この例では、構成要素1000は、変更されたバンドルB’を出力エージェント1015に提供するようになされる。
従って、この例では、エージェント1010に提供される出力は、エージェントA1から変更したペイロードA1’を含むことができる。次いで、エージェントA1’は、バンドルB1、B2と共に、エージェント1011、1012、1013を介してそれぞれ構成要素1003に転送される。図に示すように、構成要素1003は、この時点で変更されている、B’で示すバンドルBを再びバンドリングし、エージェント1014を介してこれを出力エージェント1015に提供するように動作する。
従って、構成要素1000は、エージェントA1のペイロードを変更できるようにする。変更されたエージェントA1’をバンドルB’に再びバンドリングする必要はなく、代わりに、エージェントを必要に応じて、単にバンドルから抽出して使用できることが理解できる。
図24Cは、構成要素1000の変更を示す。構成要素1000の中で、追加の構成要素1020がエージェントA2のペイロードとの追加の対話を提供する。これを実現するために、追加のデバンドル構成要素1021及びバンドル構成要素1022が図に示すように使用される。
この機能は前述したものと同様であるため、これ以上詳細に説明しなくても理解できる。
バンドルの受け渡し
前述したように、エージェントの受け渡しは、対話に明示的に関わらないエージェントが責任を他の下位構成要素に渡せるようにするために行われる。
正しくエージェントの受け渡しを行うためには、受け渡しを所定の順序に従って行う必要がある。これは、バンドルが関わる場合に特に重要である。
この一例について、図25A〜図25Eを参照して説明する。具体的には、図25Aは、3つの下位構成要素1101、1103、1105を含む構成要素1100を含む略図を示し、下位構成要素1101、1103、1105は、エージェント1108、1109、1110を介してバンドル構成要素1107に接続するようになされた各エージェント1102、1104、1106をそれぞれ有する。バンドル構成要素1107は、親構成要素1100のエージェント1112に接続するようになされたエージェント1111を含む。同様に、図に示すように同様の略図を含む構成要素1120も提供される。
この図では、エージェント間の接続はまだ実装されていないため、点線として示される。
最初に、図25Bに示すように、略図がまず構築され、各構成得要素インスタンス及び対応するエージェントが生成されると、エージェントは図25Bに示すように接続するように動作する。従って、最初に、エージェント1102、1104、1106がエージェント1108、1109、1110に接続し、エージェント1112がエージェント1132に接続する。
エージェント1112及び1132はネゴシエートし、プロセスにおいてそれ以上役割を果たす必要がないと決定する。具体的には、エージェント1111、1131を受け渡すことができると決定する。これを実現するために、エージェント1111、1131はエージェント1111、1131のアドレスを交換する必要がある。各エージェントは他の一つのエージェントとしか接続することができないため、これは、各エージェント1112、1132に関連する一時的エージェントを作成することによって実現される。これは、図25Bにおいてエージェント1112、1132内の点線で表される。
この場合、エージェント及び関連する一時的エージェントは内部エージェント及び外部エージェントと呼ばれる。エージェント1112の場合、内部エージェントはエージェント1111に接続され、外部エージェントは1132の外部エージェントに接続される。
各内部エージェント1112、1132は、各エージェント1111、1131のアドレスを決定する。次いでアドレスは外部エージェント1112、1132の間で転送され、必要に応じてエージェント1111及び1131に転送される。エージェント1111、1131は、互いのアドレスを得ると、直接通信することができ、これらエージェントは互いに直接ネゴシエートできるようになる。次いでエージェント1112、1132は、図25Cに示すように、役割を終える。
この例では、エージェント1111及び1131がネゴシエーションを行うと、構成要素1107、1127がこの時点でそれぞれのサービスを実行できるようになる。具体的には、バンドル及びデバンドル構成要素が対応する入力及び出力を有するため、この時点でさらなる受け渡しが実行可能であることが決定される。
従って、エージェント1108、1109、1110のアドレスはバンドルに含められ、バンドルがエージェント1111からエージェント1131に転送される。これはバンドルが解除され、エージェント1108、1109、1110のアドレスはエージェント1128、1129、1130にそれぞれ転送される。同様のプロセスが逆方向でも行われる。エージェンのトアドレスが転送されると、接続をエージェント1108、1109、1110とエージェント1128、1129、1130との間に形成する必要がある。これを実現するために、図25Dに示すように、外部エージェント1108、1109、1110がエージェント1102、1104、1106に接続され、内部エージェント1108、1109、1110が内部エージェント1128、1129、1130に接続されるように、一時的エージェントを前述したように生成する必要がある。このポイントで、エージェント1111及び1131は役割を終えることができる。
これが完了すると、エージェント1108と1128、1109と1129、並びに1110と1130はネゴシエションを行い、エージェント1102と1122、1104と1124、並びに1106と1126のアドレスは、前述した様式と同様にして交換することができるようになる。従って、例えば、エージェント1102のアドレスが外部エージェント1108によって決定され、内部エージェント1128に転送され、次いで内部エージェント1128を介してエージェント1122に転送される。これが完了すると、受け渡しを行うことができ、図25Eに示すように、エージェント1108、1109、1110、1128、1129、1130が役割を終え、エージェント1102、1104、1106はエージェント1122、1124、1126と直接通信する。また、このとき、構成要素1107及び1127も役割を終えることができる。
受け渡しによって、エージェントに必要とされる対話が減少することが理解できる。さらに、バンドリングと併せて実装される場合に、多くのエージェントに対応するバンドル全体の受け渡しが可能である。これによって、計算負荷及びオペレータの複雑さが単純化された略図により軽減する。
チェーニング
ビルドプロセスの実装においてさらなる有用な技術は、チェーニングとして知られる技術である。
具体的には、チェーニングは、エージェント又はエージェントバンドルが、前述と同様に、必要に応じてペイロードを変更することができる略図を通して、エージェント又はより一般的にはエージェントのバンドルを転送することによって動作する。これに加えて、チェーニングは、略図又はその一部を分割せずに渡すことを意図する。これにより、システムを通してペイロードの変更を渡し、必要に応じて返すことができる。
これより、チェーニングの一例を図26A〜図26Gに示す例に関連して説明する。
図26Aに示すように、各入力エージェント1152、1155、1158及び各出力エージェント1153、1156、1159をそれぞれ有する3つの構成要素1151、1154、1157が、図に示すようにエージェント1160、1161に接続される。構成要素は、実行可能なコードを生産し、コードの断片をビルドバンドルに挿入するように動作する。
具体的には、エージェント1160がヘッダファイルをエージェント1151に提供する。これは通常、エージェントペイロードの形態で提供される。構成要素1150は、ヘッダファイルを受け取ると、コードをヘッダファイルの末尾に添付し、エージェント1153、1155を介して構成要素1154に転送する。ここでも、これは通常、エージェントペイロードの形態である。
いずれの場合でも、構成要素1154はヘッダファイルに添付された実行可能なコードの断片を受け取り、自分の実行可能なコードの断片を添付する。これに代えて又はこれに加えて、構成要素1154は、構成要素1150が提供したコードの断片を変更することができる。いずれの場合でも、添付されたコードの断片を含むヘッダファイルは構成要素1157に転送され、さらなるコードの断片も同様にして追加される。プロセスは、必要なコードの断片がすべてヘッダファイルに追加されるまで続けられ、結果として得られる実行可能なコードがエージェント1161に供給される。
ヘッダファイル及び添付されるコードの断片の構造の一例を図26Bに概略的に示す。参照番号は各コード部分を生成する構成要素を示す。
ターゲット構築サイトのRAMの割り当て、プロセッサレジスタの割り当て、物理アドレスの詳細及び一般的な広域の詳細等、実行可能プログラムを実際に構築するには、はるかに多くの詳細が必要であることが理解できる。
上記データをすべて供給するためには、最初の例において説明した単純な一つのエージェントの接続を、追加のエージェント及び実際には追加の構成要素を包含するように拡張する必要がある。4組のエージェントがいくつかの分割されないチェーニングを形成し、各構成要素が順にコードを追加し、メモリを割り当て、CPUレジスタ等を保持又は解放することができる図26Cに示す例を考える。この場合、ファイルヘッダが一つの構成要素1063から受け取られ、一つの構成要素1063に返される。全てのエージェントが全ての構成要素のために相互に接続することは時間がかかり、略図を扱いにくくすることが理解できる。
例では、各構成要素1151、1554、1157が複数の入力エージェント及び複数の出力エージェントを有する。これらは、一つのエージェントで置き換えることができるため、各構成要素は、一つのエージェントを使用してコード構築又はメモリ割り当てに関わるチェーニングにアクセスすることができる。
次いで、これら関連するエージェントをすべて、前述したように組み合わせて一つのビルドバンドルにすることができ、それにより、一つの単純なエージェントを提示しながら、別個のエージェントの機能を保持することができる。従って、図26Cに示す略図は、図26Dに示す略図で置き換えることができる。この場合、構成要素1164、1165はエージェントを連結するように設計されたCAT構成要素であり、構成要素1163はコード構築に使用される構成要素である。従って、Linuxベースのシステムと併用する実行可能ファイルを構築する場合、これはELF INIT構成要素の形態であることが得き、これについて付録Aにおいて詳細に説明している。
構成要素をさらに追加して、構成要素1151、1154、1157内部の処理を単純化することができる。こういった追加の構成要素は事実上、構成要素1151、1154、1157及び他のすべての構成要素をビルドバンドルの詳細から隠す。この一例は、構成要素が受け取ったバンドルを解除することができる、前述したビルドバンドルによって提供される。この一例を図26Eに示す。構成要素1166はビルド構成要素であり、ビルドバンドルをエージェント1167において受け取っており、各バンドル又はエージェントをエージェント1168、1169、1170に提示する。
各構成要素1151、1154、1157は各ビルド下位構成要素を含むことができ、この場合、ファイルヘッダもこれら構成要素に渡さなければならないことが理解できる。
従って、例えば、ELF INIT構成要素1163は、ヘッダをチェーンの一番上に供給し、チェーン状に接続された各構成要素が、実行可能なコードが構築されるまでそれぞれのコードを添付(ある適した構成要素を使用して)できるようにすることによって処理を開始することができる。一方、ELF INIT構成要素1163は、チェーニングの結果を待ち、動作可能システムが必要に応じてELF実行可能形式を形成するヘッダを先頭に付加することができる。
結果は、切れ目のなく接続された下位構成要素の構成要素のツリーである。
任意の長さのチェーンは、複雑性を隠しながら容易に構築することができる。いずれの場合でも、これにより、ビルド構成要素の供給者は、さらに複雑な構築サイトを調整するために、必要に応じてビルドバンドルを何百又は何千ものエージェントに拡張することができる。
前述した機能に加えて、構成要素は、ビルドバンドルの部分を別の構成要素に出力(エクスポート)して、コードを関連セクションに挿入することができる。
この一例を図26Fに示す。具体的には、このシステムは、各実行可能なコードの断片を生成するようになされた3つの構成要素1200、1201、1202を含む。この例では、構成要素1200、1202は、これもまたコードの断片を生成するようになされた各下位構成要素1203、1204、1205、1206、1207を含む。これら構成要素1200、・・・、1207は、複数のビルドCAT構成要素1208、1209、1210、1211を介してELF INIT構成要素1212に接続される。使用の際に、ヘッダファイルが順に構成要素1200に、その後構成要素1203、1204、1202に渡され、それから構成要素1201に、その後構成要素1205、1206、1207に渡される。
従って、これによって、ヘッダファイルに図26Gに示すようなコードの断片が添付される。
この例では、構成要素1200と構成要素1202の間のリンクが動的に作成される場合、構築時にリンクを作成することによって、ツリー構造をメッシュ構造に変換することができる。
これは、例えば、データを指定された所定の場所に出力するために使用することができる。しかし、出力を提供するためには、構成要素が所定のメモリロケーション等を得ている、又はデータをバンドルに挿入してルート構成要素に転送可能とする必要があり得る。この場合、通常、ルート構成要素はバンドルを生成して構成要素の出力に転送される。次いで、これは各下位構成要素の出力に転送され、各下位構成要素は出力を生成してルートサーバに転送する。
このメカニズムによって、データを生成し、ルートサーバの所望のメモリロケーションに構築することができることが理解できる。
これが正しく機能するには、チェーニングを出力エージェントから任意の下位構成要素を通して再び出力エージェントに渡す必要がある。
接続
前述した例の全てでは、エージェント間は1対1で対話が行われた。従って、構成要素からの一つの出力は、後続する構成要素の一つの入力に接続され、各エージェントは一つの対応するエージェントと対話するようになされる。
これは、エージェントのネゴシエートの単純性を確保することによって、システムの複雑性を大幅に低減する。この場合、以下により詳細に説明するDUP構成要素のような構成要素を使用して、エージェントからの出力を複製し、この出力を複数の後続エージェントに転送し、それによって効率的な1体多接続を提供することができる。しかし、一方、エージェントの振る舞いは、1対多、多対1及び多対多の対話をエージェント間で行うように変更することができる。従って、例えば、一つの構成要素からの出力をいくつかの連続した構成要素の入力に接続することが可能である。この場合、構成要素の出力に提供されるデータをいくつかの後続する構成要素の入力に、DUP構成要素を接続する必要なく、同時に提供することが可能なことが理解できる。この場合、出力に関連するエージェントは、いくつかのエージェントと同時にネゴシエーションをする必要がある。
これより、この一例について図27を参照して説明する。
図27はエージェント1031を有する構成要素1030を示し、エージェント1031は、この例では、10進法、2進法又は16進法コードの出力を、好ましい順で提供するようになされる。構成要素1030は、必要に応じて10進法又は16進法、及び、16進法又は2進法の形式でデータを受け取るようになされた各エージェント1033、1035を介して構成要素1032及び1034に接続される。従って、この場合、エージェント1031、1033、1035はネゴシエーションを行い、この場合は16進法コードである共通のデータ形式を決定しなければならないことが理解できる。
次いで、構成要素1030は、出力を16進法コード形式で提供するように動作する。従って、エージェント1031は、出力を最も好ましくない形式で提供しなければならない。この場合に、10進法コードのみで動作するようになされたエージェント1037を介してデータを受け取るようになされた第3の構成要素1036が提供される場合、共通のデータ形式を見つけることができず、従って、構築例外エラーが発生することが理解できる。従って、提供する出力が多すぎると、対話によりネゴシエーション及びデータ転送プロセスが大幅に複雑化することが理解できる。
これにもかかわらず、同報通信データを一つのエージェントから複数の他のエージェントに提供することが可能であり、これが状況によっては効率の向上に繋がり得るという点で、1対多、多対1及び多対多接続性をエージェント間に提供することには大きな利点がある。
多段階構築
動的な構成要素又は動的な略図の実装を可能にするために、多段階構築を使用することができる。具体的には、通常、多段階構築は、設計者が、困難な構築を制御するために、複数の段階で略図を意図的にレイアウトして、次いでこれを、初期段階の進行を満足したときに実装する状況を指す。しかし、これは構成要素レベルで実装することもできる。
具体的には、これにより、初期のデータ処理の結果に応じて構成要素の機能が実装中に変更されるときに、構成要素の動的変更が可能になる。これよち、この一例について図28A〜図28Cを参照して説明する。
図28Aに示すように、エージェント1051、1052、1053、1054及び1055を有する構成要素1050が提供される。構成要素は、エージェント1051、1052、1053を介して入力を受け取り、エージェント1054を介して出力を提供するようになされる。構成要素1050は、入力エージェント1061、1062及び出力エージェント1063を有する下位構成要素1060を含む。図に示すように、入力エージェント1061、1062は、入力エージェント1051、1052に接続され、出力エージェント1063は内部エージェント1055に接続される。
使用の際に、構成要素1050は、エージェント1051、1052、1053を介してデータを受け取り、これらを処理し、次いでエージェント1054を介して出力を提供するようになされる。この例では、エージェント1051、1052を介してデータを受け取る場合、データは構成要素1060に転送され、構成要素1060は入力を処理して出力を生成し、出力はエージェント1063を介して内部エージェント1055に転送される。
内部エージェント1055は、セレクタとして知られる特定のタイプのエージェントである。具体的には、エージェント1055は、エージェント1063から受け取ったペイロードを調べ、次いで、ペイロードに含まれているデータに応じて一つ又は複数の略図を構築するように動作する。従って、例えば、エージェント1063から受け取ったペイロードが10進数である場合、セレクタエージェント1055は一つの構成要素1070を含む略図1064を選択し、これを、図28Bに示すように、構成要素1050の略図に組み込ませることができる。このようにして、図に示すように、エージェント1071及び1072は、エージェント1053及び1055に接続され、出力エージェント1073はエージェント1054に接続される。
略図1064は、エージェント1071、1072、1073に接続された外部エージェントを有する場合があり、図に示すように、外部エージェントはエージェント1071、1072、1073を、エージェント1053、1054、1055に接続できるようにするために、前述したように受け渡す必要があることが理解できる。同様に、セレクタエージェント1055は、二つのエージェントに同時に接続することができないため、接続には、図28Bの点線で示すように、一時的エージェント1055を作成する必要もある。
使用の際に、構成要素1070が仕様に組み込まれると、前述と同様にして、エージェント1055はエージェント1063をエージェント1072に、受け渡すように動作することができ、それによって構成要素1070が、エージェント1071、1072を介して受け取ったデータを必要に応じて処理できるようにする。処理済みデータは、エージェント1073を介して、当業者に理解されるように提供することができる。
しかし、エージェント1055は、エージェント1063が提供した出力が16進法形式であると判定する場合、セレクタエージェント1055は異なる略図1065を選択しなければならない。この一例を図28Cに示し、この場合、組み込まれる略図は、16進数を10進法形式に変換する追加の構成要素1080に接続された構成要素1070を含む。従って、図28Cに示す略図は、内部エージェント1055に接続された入力エージェント1081及び構成要素1070の入力1072に接続された出力エージェント1082を有する構成要素1080を含む。
この場合、内部エージェント1055は、ペイロードをエージェント1081に転送する前に略図を構築させ、エージェント1080がデータを、エージェント1082を介して、エージェント1072に転送する前に10進法形式に変換できるようにする。ここでも、図に示すように、これには一時的エージェント1055を形成する必要があり得る。動作の残りの部分については前述した通りである。
従って、前述した処理では、セレクタエージェントは、構成要素1060によって提供された出力を解析して後続する略図1064、1065を決定する必要がある。従って、ビルドプロセス中、セレクタエージェント1055は、エージェント1063と通常通りにネゴシエーションをするように動作する。これが完了し、構成要素1060が具体化されるサービスを行うと、エージェント1063は出力をペイロードとしてセレクタエージェント1055に供給する。セレクタエージェントはペイロードに含まれる出力を決定する。次いで、必要に応じて後続する略図1064、1065を選択する。次いで、後続する略図を、任意の下位構成要素が実装される通常の方法で構築して実装することができる。
これから、エージェント1055は、略図が選択される前にエージェント1063との接続を終了することができ、この場合、一時的エージェント1055は必要ないことが理解できる。
従って、この形態の構成要素を実装するには、構成要素1050を実装するエンティティは動作モードを変更する必要がある。具体的には、構成要素1050の略図が、通常の状況でのように予め定義される場合、エンティティが購入注文を受け取るときに構成要素インスタンス1050を生成する。この構成要素インスタンスも、同様に、追加の構成要素インスタンスが構成要素1060等の下位構成要素に必要であると決定する。従って、略図において定義されるように、各構成要素インスタンスである、構成要素1070及び/又は1080が導入される。これらの構成要素インスタンスは構成要素1050への異なる構成要素サーバに実装することができ、実際に、異なるエンティティによって実装され得ることが理解できる。
エンティティは、構成要素1050の購入注文を受け取ると、最初に、構成要素1060に対応する一つの構成要素インスタンスを開始する。この状況では、構成要素インスタンス1060は、通常通りにデータを処理して、スケマティックセレクタエージェント1055に出力を提供するように動作する。次いで、セレクタエージェント1055は、残りのサービスを実装するために必要な略図、又は要求されるデータ処理を決定するように動作する。
従って、図28Bに示す略図の場合、スケマティックセレクタエージェント1055は、構成要素1070に対応する構成要素インスタンスを使用することになる略図を選択する。その一方で、図28Cに示す略図の場合、セレクタエージェント1055は、構成要素1080及び1070に対応する二つの構成要素インスタンスのそれぞれを使用することになる略図1065を開始する。
多段階構築は、好ましい実装に応じて自動的に又は手動で実装することができる。
手動処理の場合、内部エージェント1055は、構成要素1050を動作させているエンティティに、エージェント1063からのペイロードで受け取ったデータの指示等の出力を提供するようになすことができる。オペレータは出力を調べ、必要に応じて、例えば図28B、図28Cに示す構成要素略図の残りの部分を構築する。ユーザは略図を定義し、次いで構築するように動作し、各構成要素インスタンスが通常通り生成されることになる。従って、エージェント1055は前述したような受け渡しを行う。構成要素が実装され、エージェントによるネゴシエーションが完了すると、構成要素1050は、残りのデータ処理を必要に応じて完了できるようにする。
一方、自動処理作の場合、エージェント1055は、残りの構成要素及び相互接続の選択を自動的にトリガをかける。一般に、これはメモリに記憶されている所定のリスト等から選択される予め定められた略図に従って実現する必要があることが理解できる。従って、この選択は、エージェント1063から受け取ったデータを使用して、ルックアップテーブル(LUT)にアクセスし、例えば、必要な略図を決定することができる。
これが信頼できるように機能するためには、エージェント1063に提供される可能性のあり得るいずれのデータも取り扱うことができる略図を提供されていなければならない。さもなければビルドプロセス全体が失敗に終わるか、又は手動動作に変える必要がある。
従って、前述した例では、ビルドプロセスは2段階で完了するが、任意の数の段階を提供することができる。いずれの場合でも、多段階構築技術によって、広範囲の機能の実現が可能になる。
具体的には、多段階構築は略図全体に使用することができる。従って、ユーザは、多段階構築向けに設計された略図を定義することができる。この場合、ユーザは三つ又は四つの異なる略図を定義することができ、最終的に使用される略図は、処理を通して部分的に得られる結果に依存する。これが行われる場合、セレクタエージェント後にデータ処理を行う可能性のあるいずれの構成要素も、セレクタエージェントが使用すべき略図を決定するまで構築されない。
この決定は、ユーザからの入力と共に行うことができる。従って、ユーザは、段階的出力を生成する略図を部分的に定義することができる。段階的出力が得られると、ユーザは、得られた特定の出力に応じて、略図の残りの部分を完了することができる。
この場合、第2の段階の構築に関わる構成要素に対する購入注文は、第1の段階が完了し、所望の出力が得られるまで発行されないことが理解できる。
これによって、ユーザは多段階でデータ処理を実行し、実行可能なコードを構築することができる。これは同様に、ビルドプロセスが失敗した場合に発生する費用を低減するとともに、考慮すべき変数の数を低減することができるため、略図を最適化する機会をユーザに提供する。
多段階構築によって、構成要素の動的な実装も可能になる。これは、略図が固定の静的な略図ではなく条件によって変更可能な構成要素である。この場合、エンティティは、完了に多段階構築を必要とする構成要素を定義することができ、このことはユーザが意識しなくてもよい事項(トランスペアレント)である。構成要素は、エージェント1051、1052、1053、1054等の外部エージェントを提供することによって、ビルドプロセス中に略図中の他の構成要素と通常通りに対話する。これによって、他の構成要素を通常通りに構築することができ、構成要素1050からの出力は、第2の内部構築段階が完了した後でのみ提供される。
その結果、一般に、後続する構築段階で必要な構成要素の実装に要求されるいずれの購入注文も発行するのはエンティティであり、従って、これは場合によっては自動的に行い得ることが理解できる。従って、エンティティサーバは、特に第2の構築段階において使用される構成要素が別のエンティティによって提供される場合、第2の構築段階のルートサーバとして働くことができる。
プロトタイプ構成要素
前述した例では、動的な構成要素の場合であっても構成要素は予め定義される。これは、入力及び出力されるデータの性質が予め決定されるためである。これは、ユーザが、フォーラムから構成要素を選択するときに、構成要素の特定の入力及び出力の要件を認識していることを意味する。
従って、図28A〜図28Cに関連して前述した例では、構成要素は動的であってもよく、これによって、例えば、構成要素が異なる形式を有する入力を受け取れるようにすることができる。しかし依然として、これらの形式を予め定義する必要があり、そのため、ユーザに提供される実装の選択肢が限られてしまう。
一方、エンティティはフォーラムに置かれるプロトタイプ構成要素を提供することができる。プロトタイプ構成要素は、定義済みの構成要素の略図を含まず、また同様に、確定済みの入力仕様及び出力仕様を含まない。代わりに、プロトタイプ構成要素は、提供可能な機能の指示を含む。従って、ユーザは、入力を組み合わせることのできるプロトタイプの構成要素を選択することができる。
この段階において、入力及び/又は出力の性質、特に取り扱うことのできるデータ形式は定義されない。従って、ユーザがプロトタイプ構成要素を選択して略図に含めるときに、ユーザが、組み合わせたいデータ形式の指示を、エンティティに提供する必要がある。この手続きは複数の方法で行うことができる。
第1の例では、ユーザが構成要素を選択し、これを略図に追加しようとするときに、構成要素に望む入力仕様及び/又は出力仕様を提供するようにユーザに促し、これがエンティティに転送されて検討される。次いでエンティティは、要件に従って各サービスを提供することが可能であるか否かを評価する。可能であり、構成要素を実装することができる場合、この確認が、必要とされる構成要素エージェントの定義済み入力仕様及び出力仕様と共にユーザに送られる。次いで、仕様を使用して構成要素を確定し、略図に追加できるようになる。
この形態のプロトタイプ構成要素を、以下、条件付きプロトタイプと呼び、これは、略図に組み込み可能になる前に、構成要素を実装可能であるというエンティティからの確認が必要なためである。
しかし、一方、エンティティが、必要な入力仕様及び出力仕様に関わりなく構成要素に具体化されるデータ処理サービスを行うことができることに自信を持つ場合、プロトタイプ構成要素を無条件プロトタイプとして提供することが可能である。
この場合、プロトタイプ構成要素は単に、略図にすぐに組み込むことができる。この場合、構成要素のエージェントは、他の構成要素のエージェントと通信し、そこから入力仕様及び出力仕様を決定するようになされる。従って、エージェントは、通常通りにネゴシエーションをする時に、ビルドプロセス中に対応するエージェントが選択した任意の入力選択肢又は出力選択肢を効率的に許容する。
エージェントネゴシエーションは、一つの無条件プロトタイプ構成要素の入力エージェントが単に、出力エージェントによって指定された好ましい形式に従って出力からのデータを受け取ることができることを示すだけであるという点で基礎的である。同様に出力も、単に後続する構成要素の入力に関連するエージェントによって要求される形式でデータを提供することができることを示すだけである。
従って、無条件プロトタイプの入力仕様及び出力仕様は、効率的に、略図内の他の隣接する構成要素によって要求される入力仕様及び出力仕様に従って決定される。
従って、二つの条件付きプロトタイプ構成要素が相互に接続される場合、共通の仕様が自動的に定義されないことがあり得ることが理解できる。この場合、略図を作成するユーザ又は構成要素を実装するエンティティによるいくつかのユーザ入力が、略図構築を成功させるために必要になる。
いずれの場合でも、無条件プロトタイプ構成要素の場合、構成要素を実装する場合、エンティティは単に、形式に関わりなくデータを受け取り、必要なデータ処理を行うように動作するだけである。これは、適当に柔軟な構成要素を定義することができる場合、自動的に行い得ることが理解できる。
基本構成要素
前述したように、システムは、構成要素を階層的に組み合わせられるようにして、複雑で連続したデータ処理を行えるようにする。従って、フォーラムを介して提供可能な基礎的な基本構成要素を使用して、複雑な構成要素を構築することができる。
基本構成要素は、論理処理等の大半の略図で必要な基本的なデータ処理を表し、通常、適した実行可能なコードを利用して自動的に実装される。例を付録Aに提供する。
コンテキスト依存性
構成要素供給者のサービス実装に保護を提供するため、システムは、コンテキストに依存するコードを生成するように実装することができる。
コンテキスト依存コードとは、コードが実行されるコンテキストを利用するようにコードが生成されるということである。このコンテキスト依存性は、構成要素が生成した実行可能なコードを抽出し、別のプロジェクトで使用することを非常に難しくするため、固有のIP(知的財産)保護を構成要素に提供するにあたって有用である。
具体的には、供給者がコードを顧客に送ると、顧客は、顧客、環境及び仲間の供給者によって提供されるコンテキストに基づいた一意のソリューションを受け取る。従って、顧客が、供給された結果を調べることによって特定の供給者プロセス詳細を想像で見つけることができ得るコンテキスト独立コードを供給するのとは対照的に、供給者のIPは、ソリューションの性質がカスタマイズされることによって隠される。供給者が顧客の結果の中にそれぞれのソリューションを深く細かく構築する場合、隠蔽性が増す。
これとは対照的に、従来のコーディングの慣行は、コンテキストから独立させることによってコードの再使用を促進する。これにより、すべてコードを変更することなく、異なるプロジェクトの範囲でのコードの再使用が可能になる。仮に、構成要素がこのようにしてコードを生成するものであれば、誰かが構成要素を再び購入する必要はなくなり、構成要素を生成する経済性が揺るがされる。従って、この場合に構成要素提供者に対するIP保護はない。
構成要素はサービスであるため、再使用を促すべきであり、従って、コンテキスト依存コードを生成すれば有益である。これは、コードが使用されるコンテキストを利用することによって、構成要素が、コードの要件に基づいた、カスタマイズされた出力を生成することによって実現される。コンテキストは、以下のものを含むことができる。
・開始時の実行可能な既知の状態
・前の命令からのレジスタの既知の状態
・スタック及びメモリの既知の状態
・レジスタ、スタック及びメモリの割り当て
・プロジェクト内のそれ自体(構成要素)の番号
・どの構成要素が自分の構成要素に接続されるか
・コードを置くべき場所
コンテキスト依存コードは、同じタスクを実行する多くの方法があり、方法によってはシステムの他の部分に依存することを利用する。依存するコードを作成することによって、第3者が、あまり書き換えることなくコードの容易な再使用を防止し、又はリバースエンジニアリングを防止する。あるレベルの依存性を越えると、リバースエンジニアリングし書き換えるよりも、構成要素を単に再購入するほうが経済的になる。
コンテキスト依存性は、結果を生むべきコンテキストを供給者が調べることによって実現される。各コンテキストは一意であるため、各コンテキストをカスタマイズすることが可能である。
例えば、コンテキストを無視して、プログラムを終了するコードを構築することができる。従って、
例1
留意点:これはx86アセンブリであり、またアセンブリが16進数の代わりに提示される。
mov eax, 1 ;store number 1 in register eax
mov ebx, 0 ;store number 0 in register ebx
int 0x80 ;trap call to Unix OS
この結果、定数1及び0が、登録されたeax及びebxにそれぞれロードされ、ソフトウェア割り込みを実行してオペレーティングシステムにトラップして戻る。このコードを実行すると、オペレーティングシステムがプログラムを終了し、コードをメモリから解放する。例1は、これを顧客に送ると、供給者のIPを与えることになるので、コンテキストに鈍感である。
コンテキストが包含される場合、以下のように特定の変更を行うことができる。
1)送るコード量を少なくする。
2)実行時間を短くする。
3)コードをこの特定のコンテキストでしか動作できないようにする。
前の命令の実行は、CPUレジスタに既知の定数を残し得る。eax及びebxのそれぞれがすでに1及び0を含んでいる希な場合、このコンテキストの結果は単に、以下のようになり得る。
例2
int 0x80
他の多くの組み合わせが存在する。例えば、異なるレジスタが正しい定数を含む場合、レジスタからレジスタへの移動は、定数をレジスタに移すよりも安価である。同様に、レジスタは、存在する定数が必要な数に非常に近いものである場合に加算することができる。それぞれの場合で、生じる結果は他のいずれのコンテキストでも使用不可能なものである。さらに、顧客は、それぞれのコンテキストでの他の多くの組み合わせに気付かないであろう。
コンテキスト依存性は、これより説明する複数の異なるメカニズムを使用して実現することができる。
アセンブリレベルのコンテキスト依存性
一例では、前述したプロセスは、構成要素のサプライチェーンを使用し、実行可能アプリケーションのコードを生成する。コード生成構成要素サプライチェーンの根底には、アセンブリ命令に似たものに類似した構成要素がある。これら根底の各構成要素は、通常、1〜3のマシンコード命令を生成し、いくつかの例としては、以下のものがある。
・assign
・add
・multiply
・divide
・subtract
・jump condition
これら各構成要素は、レジスタ、スタックメモリ、ヒープメモリ及びマシン状態に対してどのような作用を有するかを理解する。
マシンの状態は、プログラムにおいて使用される命令の中から選択されたものに対するプロセッサの既知の状態の累積計算である。例えば、以下のものである。
;eax=?, ebx=?, ecx=?, edx=?
mov eax, 1 ;eax=1 ;eax=1, ebx=?, ecx=?, edx=?
mov ebx, 2 ;ebx=2 ;eax=1, ebx=2, ecx=?, edx=?
add eax, exb ;eax=eax+ebx ;eax=3, ebx=2, ecx=?, edx=?
mov ecx, eax ;ecx=eax ;eax=3, ebx=2, ecx=3, edx=?
単一パラメータのコンテキスト依存性
単一パラメータ依存性とは、生成されたコードが一つのレジスタの状態に依存することである。単一パラメータ依存性は、最小レベルのマシン状態コンテキスト依存性を表す。
以下に、assign構成要素の実装について説明する。この構成要素は、構築時に既知の指定の定数値に、特定のレジスタを設定する。例えば、assign(eax,1)は、eaxが値1を得ることになるコードを生成する。assign構成要素は、assignコードが実行されて結果を実現するコードを作成する前の既知のマシンの状態を用いることによってコンテキスト依存性を実現する。
例えば、マシン状態が{eax=2,ebx=10,ecx=0,edx=1}の場合、表1に示すように、eaxへの1の割り当てを実現する複数の方法がある。
一般に、サイズ及び速度を最小に抑えながら依存性レベルを最大にする選択肢が最良の選択肢である。前述した例は、割り当て番号及び入力のマシン状態に合致するいくつかのルールを示す。さらなる詳細を表2に示す。
マルチレベルのコンテキスト依存性
アセンブリに近い低レベルにコンテキスト依存性を作り出すことは、実装が最も困難なレベルである。これは、与えられた問題を実装することができる方法の数が限られていることによる。より高いレベルの構成要素がこのようなコンテキストに依存する構成要素を使用するには、固有のコンテキスト依存性が高すぎる。
コード生成プリミティブのようなアセンブリが十分なコンテキスト依存性を有する場合、これらを下位構成要素として使用する構成要素は、リバースエンジニアリングするよりもコード全体を書き直すほうが容易になる程度まで依存性を有するようになる。
コンテキスト依存性の具体例を付録Cに示す。
可変コンテキスト依存性
前述した例では、複数回のコード生成が行われる場合、各回での出力結果は、コンテキストに直接依存するため同じである。
しかし、さらなる保護を提供するために、コードが同じコンテキストにおいて生成される都度、結果が異なるように、出力されたコードを変更することが可能である。これは、以下の事項によって実現することができる。
・ランダムコンテキストの導入(ディザリングとして知られる)
・複数の可能な出力からの選択(例えば、表1は所定のコンテキストに可能な8つの結果を示し、これら8つの選択肢の中の一つがランダムに選択されて出力として使用される)
・データ処理の再分配のネゴシエーション(メッシングとして知られる)
従って、例えば、構成要素は、レジスタを乱数に設定する等により、後続する構成要素が使用するランダムコンテキストを導入するようになすことができる。さらに、システムは、複数の等しく適切であるが、異なるコンテキスト依存性ソリューションのる出力を選択するように動作することができる。
この具体例を付録Cに説明する。
ディザリング
この場合、構成要素は、複数の異なる技術を用いてデータ処理を内部で行うようになされる。この場合、技術は異なる結果コードを生成するように構成される。この一例について、これより図29Aに関連して説明する。
具体的には、この例では、構成要素1250が示される。この場合、構成要素は、図に示すように共に接続された5つの下位構成要素1251、1252、1253、1254、1255を含む。下位構成要素の厳密な性質は、この例では重要ではないが、例示のみを目的として、構成要素1250は値をレジスタeaxに割り当てるようになされている。この場合、値は、外部エージェント1256を介してレジスタeaxに書き込まれる。値はDUP構成要素1251に転送され、DUP構成要素1251は、値を各構成要素1252、1253、1254にコピーする。
この例では、各エージェント1252、1253、1254は、値を異なる方法で割り当てるようになされる。
従って、値「V」の場合、単に、構成要素1252は、コマンドeax=Vを使用してこの値をレジスタに書き込むようになされる。構成要素1253は、コマンドeax=0,eax=eax+Vを使用してレジスタをクリアし、値「V」を追加するようになすことができる。最後に、構成要素1254は、例えばコマンドeax=10,eax=eax−(10−V)を使用してレジスタを所定の値に設定し、次いでレジスタを必要に応じて変更するようになすことができる。
従って、構成要素1252、1253、1254のそれぞれは、同じ最終結果を実現する異なるコマンドを生成することが理解できる。
この場合、決められたコマンドの形態での構成要素処理の結果は構成要素1255に転送される。構成要素1255は、複数の異なる入力を受け取り、その中からランダムに一つを選択するようになされたディザ構成要素である。
従って、構成要素1250が実装され、値Vを受け取ると、各構成要素1252、1253、1254は値Vに基づいて適当なコマンドを生成する。コマンドはディザ構成要素に渡され、ディザ構成要素はコマンドの中から一つをランダムに選択し、エージェント1257を介して出力する。従って、構成要素1250が所定の値Vに対して行われる都度、3つの異なるコマンドの一つがエージェント1257に出力として提供される。
この場合、構成要素1250は外部コンテキストから独立している。すなわち、構成要素はレジスタeaxの現在の状態を考慮に入れることができない。しかし依然として、生成される結果コードは各場合で異なるようにディザリングをすることが望ましい。
従って、このシステムは、同じ外部コンテキストの場合であっても異なる出力が提供されることを保証するように動作することが理解できる。これは、構成要素がサービスを行う様式が秘密のまま保たれることを保証するのに役立つ。
これはディザ構成要素1255の動作を強調するための過度に単純化した例であり、この技術をより複雑な環境において実装し、それによって構成要素からの出力に自動的な変動を導入することができることが理解できる。
例えば、これは図29Bに示すように、外部コンテキスト依存性と共に実装することもできる。この例では、構成要素1254は構成要素1258で置き換えられ、追加の入力エージェント1259が図に示すように提供される。この場合、エージェント1259は、レジスタeaxの現在の値「V2」の指示を、既知であれば提供する。
従って、この場合、構成要素1258は、コマンドeax=eax−(V2−V)を使用してeaxの値を設定するようになされる。従って、構成要素1258からの出力は外部コンテキスト依存性を導入し、それによって構成要素1250のコンテキスト依存性がさらに高められることが理解できる。入力エージェント1259が値V2を受け取らない場合、構成要素は出力を提供しないようになすことができる。この場合、単に、構成要素1255は、構成要素1252、1253によって提供される出力の中から一つを選択する。しかし、出力が構成要素1258によって提供される場合、ディザリング構成要素は、構成要素1252、1253、1258のいずれか一つからの出力を、構成要素1250の出力としてランダムに選択するようになすことができる。
メッシング
メッシングの場合、構成要素は協働して、各構成要素の出力を、各構成要素の各作業に基づいて変更できるようにする。
この一例について、これより、図30A、図30Bに関連して説明する。
この場合、図30Aでは、二つの構成要素1260及び1265が設けられ、構成要素1260は下位構成要素1262、1263、1264を含み、構成要素1265は下位構成要素1267、1268、1269を含む。この例では、構成要素1260、1265は、図に示すように、入力W、X、Zを受け取り、各出力W’、X’及びY’、Z’を生成するようになされる。この場合、最終的な出力は連結構成要素1270を使用して組み合わせられて、最終結果コードW’、X’、Y’、Z’が形成される。
しかし、構成要素1260、1265は、メッシングにより、各構成要素が生成するコードを変更するように動作することができる。
従って、この場合、構成要素1260及び1265はネゴシエーションをして、下位構成要素1263を実装する厳密な場所が構成要素の動作にとってあまり重要ではないと決定する。具体的には、構成要素の機能が、構成要素1263を構成要素1265の下位構成要素として実装することができることを意味する。
この例では、入力エージェントは変更されないままであり、構成要素1260、1265は依然として、同一の様式で入力W、X、Zを受け取る必要があることが理解できる。
しかし、メッシング処理の後、構成要素によって生成される結果出力は変更されている。従って、図30Bに示す配置では、構成要素の出力は、構成要素1260の場合はW’であり、構成要素1265の場合はX’、Y’、Z’である。
その結果、メッシング後、構成要素1260、1265の出力は変更されている。
この例では、構成要素1260及び1265の出力は、構成要素1270によって連結される。これは、全体の略図及びこれが動作する方法に影響を及ぼすことなく、構成要素自体が異なる出力を生成する場合であっても、構成要素1260及び1265を実装した最終結果を略図に統合できることが明らかになる。
従って、これは、略図において他の構成要素に依存する構成要素の出力を変更することにより、コンテキスト依存性を導入する。これは、構成要素1260及び1265の出力をモニタする第3者が、それによってサービスの実装をリバースエンジニアリングする能力を低下させることが理解できる。
この各例では、メッシング手続きに対して複数の予想外の恩恵がある。具体的には、入力Xを受け取り、続けて出力X’を受け取る構成要素1260のエージェントは、入力Xが構成要素1265に提供されるように単純に受け渡すことができる。
さらに、構成要素1260は、ここではもはや、連結構成要素1264を実装する必要がない。これにより、構成要素1265内で必要な処理をわずかに増やすだけで、構成要素1260が必要とする処理が大幅に低減される。従って、このシナリオでは、メッシングの使用によって、略図の実装の効率を全体的に増大させることもできる。
前述したメッシング処理は、略図内に実装される構成要素に従属することが理解できる。従って、メッシングはビルドプロセス中でしか実装することができない。
一般に、メッシングを行う能力は、メッシングをエージェントの機能の一部としてネゴシエートする意欲の指示を、エンティティに提供させることによって実現される。従ってこの場合、エンティティは、接続する構成要素のタイプを検出し、次いでネゴシエート選択肢を提供するように動作するエージェントを作成することができる。これは、例えば、他の構成要素が、構成要素の残りの部分に過度に影響を及ぼすことなく容易に実装することができる任意の下位構成要素の詳細を含み得る。
エージェントは、ネゴシエート要求を受け取る場合、ネゴシエーションが可能であることを示す、ネゴシエート選択肢が設定されているか否かを決定する。
ネゴシエーションが開始されると、これは様々な様式で実装することができる。例えば、これには、動作中のエンティティによる手動の介入が必要な場合もある。しかし通常、これは、エージェントに、構成要素の動作に過度に影響を及ぼすことなく構成要素外で実装可能な下位構成要素のリストを交換させることによって実現することができる。
従って、上で触れた例では、構成要素1260及び1265のインスタンスが構築されると、エージェント1261は、下位構成要素1263の指示をエージェント1266に提供する。この場合、エージェント1266は、構成要素略図に基づいてチェックを行い、構成要素1266を構成要素略図に比較的容易に統合することができると決定する。従って、エージェント1266はエージェント1261に、これを行うべきであることを示す。
従って、当業者が理解するように、ビルドプロセス中、構成要素1265は、構成要素1263の実装を要求する購入注文を生成する。次いで、受け渡しによって、前述したようにエージェント1261が1265に受け渡せるようにする。
この処理は、構成要素デザイナに、例えば構成要素の機能に基づいて使用し得る共通のメッシングを予想させることによって容易に実現できることが当業者に理解できる。これによって、エンティティは構成要素を動的構成要素として実装することが可能になる。
従って、構成要素1265を提供するエンティティは、構成要素1263が下位構成要素として実装される場合があり得ることを予想することができ、これによって、エンティティは構成要素1265を動的構成要素として作成することが可能になる。この場合、エンティティは、構成要素1265に二つの略図、すなわち構成要素1263を含むものと含まないものとを定義する。この場合、エージェント1261は、メッシングを処理すると、構成要素1263の指示を提供する。エージェント1266は、セレクタエージェントとして実装されるため、構成要素1263の指示を受け取り、これを使用して、構成要素1265の実装に使用する略図を選択することができる。
潜在的なメッシング選択肢を予想し、動的構成要素として実装可能な適切な略図を作成することは、構成要素作成の複雑性を増大させるが、これはまた、構成要素を実装するエンティティが、構成要素がデータ処理を実行する方法を秘密のままにすることに役立つことが理解できる。従って、潜在的なメッシングに関して構成要素を柔軟にすることへのこの投資は、データ処理を実行するエンティティの知識に対する保護が追加されることで報われる。
メッシングのために1265を提供するエンティティとの協働に合意した、1260を提供するエンティティは、1260によって購入される間に、構成要素1263等が1265を介してコードを送るようなビルドバンドルを提供可能であることが理解できる。
メッシングは動的構成要素に従って行う必要はなく、代わりに手動で行うことも可能であることが理解できる。
いずれの場合でも、前述したコンテキスト依存コードを生成する技術は、各データ処理を実行する方法のリバースエンジニアリングに対する強力な障壁を提供し、それにより、構成要素の開発への投資に対する保護に関して、エンティティに強力な保護を提供することができることが理解できる。
構成要素の開発におけるエンティティの保護は、開発への投資に明らかに報いるものであり、それにより、エンティティはサービス提供に関して競争することが可能になる。
概括
従って、一例では、前述したシステムは、ユーザが、構成要素の組み合わせを定義することによってデータ処理を実行する、又はコンピュータコードを生成できるようにする。この場合、各構成要素は各データ処理サービスに対応する。これによって、構成要素の組み合わせが実行されると、所望のデータ処理が実行される一連のデータ処理を定義する。又は、所望のコードが生成されることになる一連のデータ処理を定義する。
一般に、構成要素は、定義されたデータ処理サービスを実行可能な各エンティティによって提供され、これは手動又は自動手続きを通して実現することができる。従って、ユーザが適した構成要素の組み合わせを定義することができるようにするために、通常、多くの場合は、構成要素はフォーラムと呼ばれる中央システムを通して提供される。これは、通常、一つ又は複数の処理システムによって実装され、フォーラムに構成要素の仕様の形式の構成要素の形式的定義を受け取らせることによって実現することができる。
データ処理を実行するためには、構成要素の組み合わせを、構成要素を対話できるように十分に詳細に定義できることが必要がある。これを実現するためには、前述した例では、使用される構成要素及び構成要素間の対話を記した略図が定義される。略図は通常、適したGUIを使用して定義されるため、ユーザはフォーラムに提示された構成要素を選択し、これらを略図にドラッグ・アンド・ドロップし、構成要素間に適した接続を定義して構成要素間の対話を定義することができる。この点において、フォーラムは、構成要素の仕様に対するアクセスを提供するポータルとして動作する一つ又は複数の処理システムによって提供される。
略図が完成すると、これをビルドとして知られるプロセスで実装することができる。
ビルド中、各構成要素インスタンスを略図内の各構成要素に生成することができる。
各構成要素インスタンスは、通常、各エンティティによって提供される処理システムを使用して実装される各構成要素サーバ上で作成することができる。使用の際に、システムが実装されると、データを各構成要素インスタンス間で転送することができ、構成要素インスタンスの少なくともいくつかが、受け取ったデータに対して要求されるデータ処理を実行して、必要に応じて処理済みデータの出力を提供する。
構成要素インスタンスは互いに通信可能であり、具体的には、情報及びデータを、両方の構成要素が理解可能な形式で転送可能なことが理解できる。
一例では、これはエージェントを使用して実現され、各エージェントは、各構成要素のポートに提供される。従って、一つの構成要素のポートに関連するエージェントは、別の構成要素のポート出力に関連するエージェントと協働する。ポートは一般に双方向の情報交換に使用されるが、多くの場合、データ転送には方向が関連するため、ポートは一般に入力及び出力に当てはまる。
通常、エージェント間の通信は、アドレス情報及び転送される様々なデータを含むペイロードと共にヘッダを含むメッセージを転送することによって実現される。エージェント間の対話は、一方のエージェントから別のエージェントにメッセージを送らせるだけという単純なものでよい。一方、ネゴシエーション後のデータ転送を含む2段階プロセスも行うことができる。この場合、エージェントはまず互いにネゴシエーションをして、各構成要素間でのデータ転送に使用することができる共通のデータ形式を決定し、それから必要に応じてデータ転送に進む。従って、ネゴシエーション中、ペイロードは通常、エージェントが取り扱うことのできる許容可能なデータ形式等のリストを含む。従って、第1のエージェントは適したリストを第2のエージェントに送り、第2のエージェントは許容可能な形式の指示でこれに応答する。処理するデータを転送する場合、データはペイロードに含まれる。
従って、一例では、エージェントは構成要素間の対話の一つの形式を表す。
略図をビルドプロセス中に構築すべき場合、これは、略図内の構成要素を提供する各エンティティに、購入注文を送ることによって実現することができる。次いで、各エンティティは、各構成要素インスタンスを、任意の関連するエージェントと共に含む各構成要素サーバを構築する。これが完成すると、エージェントは必要な任意のネゴシエーションを行い、それから構成要素間でのデータ転送が行われ、構成要素は、構成要素によって具体化される各データ処理を実行できるようになる。
この例では、エンティティは、各構成要素の購入注文を受け取り、これは、構成要素に関連するエージェントと他のエージェントとの間に形成が必要な接続を指定する。具体的には、これは、構成要素インスタンス及び対応するエージェントが構築されるときに、エージェントが他のエージェントと直接通信することができるように、他のエージェントのエージェントアドレスを含む。
さらに、一例では、生成されたコードは前述したようなコンテキスト依存コードであることができ、システムが、顧客及び供給者の知的財産(IP)を保護することによって経済的に採算のとれる開発モデルを提供できるようにする。一例では、結果コードに対するすべての権利は顧客に与えることができるが、供給者が利用するIP及びコードが作成された方法は決して顧客に知らされない。従って、顧客は、結果を生み出すプロセスではなく結果を購入する。現実的な例としては、製造業者からの車の購入がある。顧客は車にのみ関心を持ち、車がどのように製造されるかについては関心を持たない。
前述した技術は、ソフトウェアがどのように構築されるかを集積するため、これは、供給者のIPを保護するIP保護メカニズムを提供する。すなわち、「どのように製造されるか」は顧客に決して知らされない。これは、コンテキスト依存コードの生成によってさらに高めることができる。これは同様に、供給者がそれぞれの特殊能力を保護するのを助ける。
前述した例は、コンテキストに依存するコードを生成するようになすことができる。従って、従来のコードと比較してサイズを大幅に縮小するシステムについて説明していることが理解できる。さらに、構成要素供給者がコード生成プロセスの小さいが詳細な局面に集中できるようにすることによって実現することのできる専門化により、信頼性及び最適化の劇的な向上を実現することが可能になる。
従って、これは、現在の「職人」手法(個人又は小規模グループが大規模アプリケーションのすべての部分に対して初めから終わりまで線状に取り組む)から離れて、製造業界における現行の模範的経営慣行に取って代わる「工業的」モデル(専門家構成要素供給者、高度な連携及び組み立てラインの概念を用いる)に移行する完全に新しいソフトウェア構築プロセスを提供する。
これは、以下の技術の一つ又は複数を使用して実現することができる。
・競争要素をソフトウェア開発に加える、
・供給者の専門化を可能にする、
・供給者及び顧客両方のIPを保護する、
・クライアントに完全に譲渡可能な所有権を生み出す、
・工業的スタイルのソフトウェアサプライチェーンを作成する。
その結果、いくつかの例では、処理は以下のことをすることができる。
・構成要素の供給者が直接競争して、各サービスを提供できるようにすることによって、構成要素供給者間の競争を可能にし、
・供給者及びクライアントのIPを均整が取れるように保護し、
・構成要素のサプライチェーンの開発を可能にし、
・完全分散型の構成要素の処理エンジンを提供し、
・完全自動コードの生成をサポートする。
一実施態様では、これは以下のツールの使用を通して支援される。
・構成要素デザイナー − 構成要素の視覚的組み立てをサポートするアプリケーション
・構成要素公開及び非公開仕様ファイル − XML等、所定の形式で構成要素の定義のため
・構成要素サーバ − 構成要素公開仕様ファイルに指定のサービス供給をサポートするアプリケーション
・構成要素の提供を調整する、エージェントによって具体化されるサーバ間通信メッセージのセット
IP保護
処理は、構成要素を個々に識別することができ、設計されたコンテキスト内でしか使用可能な出力を生成することができない固有のメカニズムを提供することによって供給者の知的財産を保護することができる。
この点において、現在のコンパイラ技術は所有するプロセスを使用してコードを生成することができるが、結果のコードは常に同じであり(コンテキストの独立)、作成者のIPを認識することなく他者により望み通りに再使用される恐れがあることに留意されたい。例えば、Cでの「printf」関数は、作成者が何等認識することなく、コードライブラリ又はバイナリコードを介して無制限に再使用することが可能である。
しかし、前述した技術では、供給者は、構築プロセスの副産物としてコンテキストベースのIP保護をもたらす構成要素を定義することによって、それぞれの構成要素IPを保護する方法を知ることができる。
IP保護は、構成要素供給者が、構成要素サーバを動作させることによって、それぞれのサービスを提供するという意味で対称的である。供給者は、構成要素が最終的に、構成要素の消費者によってどのように使用されるかについての情報に対するアクセスできない場合がある。
使用に応じた料金の支払い
これに加えて、前述したモデルは、コンテキスト独立環境に存在する受動的に再使用可能要素からのコードの開発を助長する現在のコーディングの慣行とは対照的に、使用に応じて料金を支払う構成要素の戦略を可能にする。コンテキスト独立構成要素は、ユーザが使用の都度、構成要素を再購入する必要性をなくし、構成要素を元から生成することの経済性を揺るがす。
現在、法的なライセンスメカニズムが、コンテキスト独立コードを保護するように働く唯一の防護手段である。しかし、コンテキスト依存コード生成の導入は、構成要素供給者間の直接市場競争と共に、個々の構成要素が生成する実行可能なコードの抽出及び再使用を、その構成要素をリバースエンジニアリングするよりも購入したほうが安くするのに十分難しくする。
サプライチェーン
説明したプロセスは、業界型のサプライチェーンをサポートする。この場合、所定の構成要素に対する購入注文が供給者に届き、構成要素ベンダーサイトに配備された構成要素サーバが必要な下位構成要素に対する購入注文を自動的に生成する。このような自動化により、効率的な「ジャストインタイム」による構成要素のサプライチェーンが生み出される。
分散型構築
プロセスは真の分散型コード構築をサポートする。
当業者は、多くの変形及び変更が明らかになることが理解できよう。当業者に明らかになるこのような変形及び変更のすべてを説明していないが、本発明が広く掲げる精神及び範囲内にあるものと考えられるべきである。
付録A
このセクションは、通常、実行可能なコードの構築に使用される基本構成要素の例を含む。
以下の例では、構成要素の実装に実際に使用される実行可能なコードについては、一般に簡単であり、当業者に理解されるように、十分にプログラマの理解の範囲内であるため、説明を省略する。いずれの場合でも、異なる形態の基本構成要素の実装を提供し得ることも理解できる。
バンドル
前述したように、バンドル構成要素は、複数のエージェント接続を一つのエージェント接続にバンドリングするように動作する。入力及び出力の数の違いを含め、様々な、異なるバンドリング構成要素を提供することができる。
図31Aに示すBUN2構成要素は、エージェント入力1、2を介して入力される二つのエージェントを一つのエージェントにバンドリングすることができる基本構成要素である。バンドルには、NIエージェントから収集された名前が付けられる。別のBUN2構成要素に接続される場合、離れた場所にあるBUN2構成要素からのバンドル名がNOエージェントに出力され、エラーを修正できるようにする。エージェントBはバンドルを出力し、エージェントEはいずれの動作エラーも出力する。
図31Bに示すBUN3構成要素は、入力エージェント1、2、3を介して入力される三つのエージェントをバンドリングすることができる基本構成要素である。バンドルには、NIエージェントから収集された名前が付けられる。別のバンドル3に接続される場合、離れた場所にあるバンドル3からのバンドル名がNOエージェントに出力され、エラーを修正できるようにする。エージェントBはバンドルを出力し、オプションのエージェントEがいずれの動作エラーも出力する。
DUP
dup構成要素は、例えば、図31Cに示すように、二つ以上の出力エージェントOに接続された入力エージェントIを含む。
使用の際に、入力エージェントIが受け取った入力ペイロードが複製され、必要に応じて、各出力エージェントOから供給される。これによって、一つのエージェントからのデータをコピーし、必要に応じて複数のエージェントに分配することができる。
D2H
この構成要素は、図31Dに示され、エージェントIが受け取ったペイロードを、10進数から16進数に変換して、エージェントOから出力する。これはエージェントPによって与えられる精度で行われる。変換のいずれのエラーもオプションのエージェントEにら出力される。
H2B
図31Eに示すH2B構成要素は、エージェントIが受け取ったペイロードを、16進数から2進数に変換して、エージェントOから出力する。これはエージェントPによって与えられる精度で行われる。変換のいずれのエラーもオプションのエージェントEに出力される。
endian
図31Fに示すendian構成要素は、エージェントIがペイロードとして受け取った入力16進数のバイト単位で反転してエージェントOに出力する。例えば、入力が01234567の場合、出力は67452301になる。これはエージェントPによって与えられる精度で行われる。変換のいずれのエラーもオプションのエージェントEに出力される。
Find&Replace
図31Gに示すこの構成要素は、エージェントFindに入力される文字列の出現を求めて、エージェントInに入力された文字列をサーチし、各外観をエージェントReplaceに入力された文字列で置き換え、結果をエージェントOutに送る。
文字列Findが見つからない場合、エージェント文字列Inは変更されることなくエージェントOutに出力される。
Find Tag
図31Hに示すこの構成要素は、Tag Inエージェントに入力されたタグを求めてXML Inエージェントに提示されたXML文書をサーチする。
これは、
・Value Outにタグに関連する値、
・XML OutにXML文書の残りの部分、
・Exceptionに発生したいずれの例外、
を出力する。
例えば、エージェントXML Inに入力されたペイロードが、
"<b>
<a>1</a>
</b>
<a>2</a>
<b>
<a>3</a>
</b>"
であり、Tag Inエージェントのペイロードが「a」である場合、Value Outは「2」であり、XML Outは、
"<b>
<a>1</a>
</b>
<b>
<a>3</a>
</b>"
になる。
例外は、XML Inエージェントのペイロードが有効なXMLではない場合、又はTag Inエージェントのペイロードが見つからない場合に発生する。例外が発生する場合、いずれの出力にも何も現れない。
XMLがBase64形式でエンコードされたデータを含む場合、これは、XML OutエージェントのペイロードにおいてBase64形式のエンコードとして現れるが、もしValue Outエージェントに表される場合はデコードされる。
Add_tag
図31Iに示すadd tag構成要素は、Tag Inエージェントに入力されるペイロードに示されるタグに基づいて、またValue Inエージェントに入力される値に従って、有効なXMLにおいて<Tag In>Value In</Tag In>の形態のXMLデータ(タプル)を作成する。値をBase64数として記憶する必要がある場合にはそうされる。XMLにおいて有効ではないタグである場合、例外が発生し、XML Outエージェントに出力されるペイロードは何も含まない。
Cat
図31Jに示すこの構成要素は、エージェント1及び2に入力されるペイロードの文字列を連結し、結果を残りのエージェントに出力する。例えば、文字列1が「バナナ」であり、文字列2が「スムージー」である場合、出力エージェントは「バナナスムージー」を出力する。
Len
図31Kに示すこの構成要素は、エージェントIが受け取った文字列の長さを測定し、長さをエージェントOから出力する。例えば、エージェントIにおける入力文字列が「ABCDEF」である場合、出力は6になる。
LUT
図31Lに示すこの構成要素は、ルックアップテーブル」プロトコルに従って、XMLでエージェント「T」に供給されるルックアップテーブルから入力「I」をサーチし、適合する出力をエージェント「O」から出力する。
テーブルは複数のエントリからなり、ほとんどの場合、入力/出力タプルで構成される。エージェント「I」における入力がタプルの入力に一致する場合、エージェント「O」における出力は同じタプルからの出力になる。テーブルは、一つのタグ「otherwise」を含むオプションエントリも有する。このタグが提示され、一致するタプルが見つからなかった場合、出力「O」は、「その他」タグに関連する出力値になる。一致するものを見つけることができなかった場合、すなわち、テーブルデータがプロトコルに適合しない場合、例外が発生する。例外が発生する場合、出力Oには何も現れない。
「ルックアップテーブル」プロトコルの一例は以下である。
<protocol>
<protocol_name>lookup table</protocol_name>
<protocol_data>
<entry>
<input>input 1</input>
<output>output 1</output>
</entry>
<entry>
<input>input 1</input>
<output>output 1</output>
</entry>
<entry>
<otherwise>output otherwise</otherwise>
</entry>
</protocol_data>
</protocol>
And
図31Mに示すこの構成要素は、エージェント1及び2に入力されたペイロードに示されるブール文字列の論理和を計算し、結果をエージェントOのペイロードに出力する。入力のいずれかをブール文字列に解析することができない場合、例外が発生し、エージェントOからは何も送られない。例えば、1が「true」であり、2が「false」の場合、Oは「false」になる。
Math
図31N、図31O及び図31Pは、エージェント1、2に入力されたペイロードの除算、加算及び等号判定という数学的関数を行う数学演算子構成要素Div、ADD、EQを示す。この場合、結果は各出力エージェントOに出力され、例外がエージェントEに出力される。
Build ASM1
図31Qに示すBuild ASM1構成要素は、コードの断片の収集を担当するデータ構造を表すビルドチェーニングの処理をする、ビルド構成要素のメンバである。
Build ASM1は、エージェントcodeを介してコードを受け取り、ビルドエージェントに接続されたビルドチェーニングへの挿入に進む。
Build ASM1構成要素の内部略図の一例を図31Rに示す。外部エージェントcodeが内部エージェントDUPに渡され、内部エージェントDUPがcodeエージェントのペイロードを二つコピーすることが分かる。codeエージェントのコピーの一つは構成要素LENに提示され、LENはコード文字列の長さを計算する。次にこれはDiv構成要素に提示され、2で除算され、それからアドレスチェーニングに加えられる。アドレスチェーニングは構成要素BUN3のエージェント1で受け取られ、構成要素BUN3のエージェント2に出力される。コードエージェントの二つ目のコピーはBUN3のエージェント3に提示され、コードをビルドチェーニングに送る。構成要素BUN3は、アドレスイン/アウト及びcodeエージェントを共にバンドリングし、ビルドファミリのその他のメンバに送る役割を果たす。
Build ASM2
図31Sに示すBuild ASM2構成要素もビルド構成要素のメンバである。
Build ASM2は、エージェントcodeでコードを受け取り、エージェントbuildに接続されたビルドチェーニングへの挿入に進むようになされる。Build ASM2はまた、エージェントAddr out上のコードに割り振られたメモリの現在アドレスを提供する。
Build ASM2構成要素の内部略図の一例を図31Tに示す。外部エージェントcodeが内部エージェントDUPに渡され、内部エージェントDUPがcodeエージェントのペイロードを二つコピーすることが分かる。codeエージェントのコピーの一つは構成要素LENに提示され、LENはコード文字列の長さを計算する。次にこれはDiv構成要素に提示され、2で除算され、それからアドレスチェーニングに加えられる。アドレスチェーニングは構成要素BUN3のエージェント1で受け取られ、構成要素DUPを使用して複製され、それからBUN3構成要素のエージェント2に返される。
アドレスの二つ目のコピーはAddr outエージェントに入力される。codeエージェントの二つ目のコピーは構成要素BUN3のエージェント3に入力され、コードをビルドチェーニングに送る。構成要素BUN3は、アドレスイン/アウト及びcodeエージェントを共にバンドリングし、ビルドファミリのその他のメンバに送る役割を果たす。
Init_elf
図31Uに示すInit_elf構成要素もビルド構成要素の一つである。
Init_elf構成要素は、ビルドファミリのその他の構成要素とインタフェースするbuildバンドルを出力する。このbuildバンドルを介して、Init_elf構成要素はコードを受け取り、コードは実行及びロード(ELF)のためのファイル形式に形成される。このファイル形式データがelfエージェントに提示される。
Init Elf構成要素の内部略図の一例を図31Vに示す。エージェントbuildが構成要素BUN3に渡され、BUN3はバンドルを解除してアドレスイン/アウト及びcodeエージェントを復元することが分かる。これはこの例のために設計されたビルドチェーニングを単純にしたものであるため、限られた機能しか有さない。従って、コードが実行及びロードファイル形式(ELF)に組み込まれるとき、アドレス情報は無視される。addressエージェントは、断片が追加されるときにコードアドレスを追跡するためだけに使用される。codeエージェントは、BUN3構成要素のエージェント3で復元されると、DUP構成要素に出力され、DUP構成要素は二つのコピーを作る。コピーの一つは、ELFファイルの総サイズの計算に使用されて、構成要素Fine&Replaceを介してヘッダに包含され、コードの二つ目のコピーはCAT構成要素を介してヘッダに添付され、B2H構成要素を使用して2進数に変換され、それから外部エージェントelfに提示されて親に送られる。
付録B
具体例
代替の技術について、以下詳細に記す複数の具体例において概説する。
第1の具体例
第1の例では、一つの構成要素を含む略図が構築される。この単純な例は、構築に関わるステップを強調する役割を果たす。
図32Aは、「add」サービスを提供する構成要素「Add1」の外部構成要素の表示Add1を示す。内部構成要素の表示を図32Bに示す。図に示すように、構成要素は二つの入力IN1、IN2及び二つの出力OUT、EXCEPTIONSを含む。
この例では、構成要素の表示Add1は、図32Cに示す略図「Add1 test」にレイヤアップされる。この略図は、ルート構成要素と呼ばれる外枠、構成要素の表示Add1からなり、これには、図32Cのハッチングが施された四角で示される4つの内部エージェントIN1、IN2、OUT、EXCEPTIONSが接続される。この例では、すべてのエージェントは対になって1本の線で接続される。
あらゆる構築もルート構成要素サーバのから始まり、この例では、ルート構成要素サーバは前述した例において概説した処理システムの一つに対応する。理論上、前述した例におけるベースステーション1、エンドステーション3及びエンティティステーション5のいずれか一つが、ルート構成要素サーバとして機能することができるが、この例では、ルート構成要素サーバはユーザのエンドステーション3である。
ルート構成要素サーバは、構築要求を受け取ると、ルート構成要素の構築に進む。この例では、ルート構成要素に関連するルート略図がロードされスキャンされる。次いで、ルート略図内のすべての構成要素の表示が識別され、二次構築要求がルート構成要素サーバによって発行される。この場合、一つの構築要求のみが「Add1」構成要素サーバに発行される。これは、この例の略図にこの一つの構成要素しか含まれていないためである。
例えば、各エンティティによって運用され、離れた場所に配置されたエンティティステーション5の一つであることができる「Add1」構成要素サーバ上に、「Add1」の略図が、ルート略図がルート構成要素に関連付けられるのとほとんど同じように、構成要素に関連して存在する。図32Bは、「Add1」構成要素サーバ上に常駐する「Add1」の略図を表す。略図は何も含んでいないことに留意されたい。従って、構成要素Add1はいずれの下位構成要素も含まない。
「Add1」構成要素サーバは、ルートサーバから発行された二次構築要求を受け取ると、それは新しい顧客に提供する輸送手段としての役割を果たす新しいインスタンスを作成する。ルート構成要素サーバの動作と同様に、「Add1」構成要素サーバは、「Add1」に関連する略図をロードし、さらなる構築要求を送り出すことができる様に、任意の構成要素の表示を求めてスキャンする。しかし、この例では、「Add1」略図は空であるため、それ以上の構築要求は発行されない。
ルート構成要素サーバによって発行される「Add1」構築要求は、「Add1」構成要素に関連するエージェントについての情報を供給することに留意することが重要である。これにより、「Add1」構成要素インスタンスのエージェントを正しい宛先、この場合はルート構成要素サーバに接続することが可能になる。
ルート構成要素の次のステップは、内部又は外部エージェントを求めてルート略図をスキャンすることである。ルート構成要素であるため、これはいずれの外部エージェントも含まない。しかし、略図は、図32Cに示すように4つの内部エージェントIN1、IN2、OUT、EXCEPTIONSを含む。
次いで、ルート構成要素サーバはこれら内部エージェントの作成に進み、内部エージェントはそれぞれの相手、すなわち「Add1」構成要素サーバ上のエージェントIN1、IN2、OUT、EXCEPTIONSとコンタクトをとり始める。「Add1」構成要素サーバは同様の機能を実行する。「Add1」略図はエージェントのためにスキャンされ、4つの外部エージェントIN1、IN2、OUT、EXCEPTIONSしか見つからなかった。次いで、「Add1」構成要素サーバは、これら外部エージェントの作成に進み、外部エージェントもまたルート構成要素サーバにおけるそれぞれの相手とコンタクトをとり始める。
ルート構成要素サーバ及び「Add1」構成要素サーバはそれぞれの内部及び外部エージェントのそれぞれの作成に成功したため、接続に成功する。
この点で、ルート構成要素サーバは「Add1」構成要素サーバへの4つの通信経路を確立している。ここで、ユーザは、ルート構成要素サーバ上で利用可能なエージェントを介して「Add1」構成要素サーバにおけるサービスを利用することができる。
「Add1」略図は空であるため、エンティティによって要求されるサービスは、「Add1」構成要素サーバに所在するオペレータによって手動で実行されなければならない。従って、ルート構成要素サーバのユーザが内部エージェントIN1、IN2にそれぞれ数を入力すると、「Add1」構成要素サーバのオペレータは、これらの数を受け取り、次いでそれぞれのサービスを行うことができる。この例では、「Add1」構成要素サーバのオペレータは、数を手動で追加し、エージェントOUTを使用してそれぞれの結果を出力しなければならない。
「Add1」構成要素が入力又は出力の形式、例えば使用すべき数体系の底又は使用すべき小数点以下の桁数を検証したい場合、エージェントは、すべての相手が満足するまで追加のペイロードパケットを自由に送ることができる。この場合、情報をさらに転送する必要はないため、エージェントは自由にリンクを終了することができる。
トランザクションが完了すると、エージェントをルート構成要素サーバ及び「Add1」構成要素サーバの両方において、エージェントを終了することができ、ルート構成要素インスタンス及び「Add1」構成要素インスタンスをそれぞれ役割を終わらせることができる。
この例はかなり単純であるが、構成要素サーバ、エージェントがどのように対話するか、及び通常はエンドステーション3から離れて配置される構成要素サーバに遠隔実行されるサービスの概念を強調する役割を果たす。従って、例えば、ルート構成要素サーバはタウンズビルにあり、「Add1」構成要素サーバはローマにあってもよい。これにもかかわらず、「Add1」構成要素サーバの場所はタウンズビルにいるユーザに対してトランスペアレントである。
留意すべき最後のポイントは、EXCEPTIONSエージェントの使用についてである。EXCEPTIONSエージェントは、Addサービスを提供するエンティティが契約通りのサービスを提供するにあたって何らかの問題がある場合に使用することができ、問題を伝えるために使用することができる。
第2の具体例
第2の例は、この例では「Add」サービスの提供が、自動化された構成要素「Add2」の使用を通して提供されること以外は、第1の例と実質的に同じである。構成要素「Add2」の構成要素の表示Add2の一例を図33に示す。図に示すように、構成要素の表示Add2は、構成要素の表示Add1と実質的に同じである。
この例は、単純な構成要素のサービスの自動化が非常に容易であることを示す。具体的には、自動化は、自動化addの各インスタンスに属するエージェントの状態をモニタリングし、状態が変化したときに特定のタスクを行うことによって実現される。
この例では、「ADD2」構成要素のエージェントIN1、IN2がペイロードを受け取っており、エージェントOUTが接続されたときに、エージェントIN1、IN2からのペイロードが共に追加され、エージェントOUTを介してペイロードパケットとして送り出される。
この自動化add構成要素は、10進数加算の場合のみ機能するように設計されるため、入力が有効な10進数ではない場合、入力が正しくない形式であることを示すメッセージを送る。エージェントOUTが終了指示を受け取っている場合、エージェントIN1、IN2は終了パケットをそれぞれの相手に送る。
この結果は、ルート構成要素が数値5及び4を自動化「Add2」構成要素に送った場合、結果9がルート構成要素のエージェントOUTにすぐに到着する。ルート構成要素が次いで、数値5を送ったエージェントを介して数値6を送るべき場合、数値10が出力に到着し、再開を必要とすることなく任意の修正が可能である。
ルート構成要素が、エージェントIN1、IN2を介して文字「five」及び数値4をそれぞれ送るべき場合、エージェントIN1はメッセージ「数の形式が正しくありません」を自動化された「Add2」構成要素から受け取る。
第3の具体例
第3の具体例は、add構成要素の複雑性を拡張して、10進数及び16進数等、底の異なる数値の入力を取り扱えるようにする。これは、10進数又は16進数のいずれかとして入力を許容できる加算であり、10進数又は16進数のいずれかを出力することができる。
図34Aは、「Add3」構成要素の構成要素の表示Add3の一例である。「Add3」構成要素は、図に示すように、エージェントIN1、IN2、FormatIN1、FormatIN2、FormatOUT、EXCEPTIONSを有する入力及び出力を含む。この例では、「Add3」構成要素は、このより複雑なサービスを行うように選択され、配置された多くの内部構成要素を含む複合構成要素である。図34Bは「Add3」構成要素の内部略図であり、これは、このより複雑なサービスを行うために複数の新しい構成要素を導入している。
図34Bに示す略図の詳細は、特定の形式の数を別の形式に変換するサービスを行う複数の「convert」構成要素である。このようにして、「Add3」構成要素のユーザは各数の形式を指定することができる。
自動化「Add2」構成要素は10進数に対してしか機能しないため、むしろ脆い。しかし、「Add3」構成要素は同じ基本サービスを行うが、多くの形式の入力数を取り扱うことができ、さらには出力数値を任意の所望の形式で生成することができるという点ではるかに堅牢である。これは、脆い「Add2」構成要素を使用しているにも拘わらずである。
エージェントFormatIN1、FormatIN2、FormatOUTを使用して形式化が実現される。
エージェントFormatIN1、FormatIN2に供給された各入力数は、各「convert」構成要素を使用して10進数に変換され、それから「Add2」構成要素に転送される。各「convert」構成要素は4つのエージェントIN、FormatIN、OUT、FormatOUTを有する。
「Add3」構成要素の各INエージェントからの数はエージェントINに提示され、「Add3」構成要素の各FormatINエージェントによって指定された形式のものであると解釈される。
この例では、「convert」構成要素の3つのインスタンスが、「Add2」構成要素に属するエージェントごとに一つずつ使用される。これは、「Add2」構成要素が10進数に対してのみ機能するため必要である。
「Add3」構成要素が外部エージェントIN1、IN2、FormatIN1、FormatIN2、FormatOUT、EXCEPTIONSのすべての構築に使用される場合、ルート構成要素(図示せず)上のそれぞれの相手のエージェントに接続されることになる。
次いで、「Add3」構成要素は、図34Bに対応する内部略図を構築する。これは構築要求及びエージェント接続詳細をすべての下位構成要素に送る。「Add3」構成要素のすべての外部エージェントIN1、IN2、FormatIN1、FormatIN2、FormatOUT、EXCEPTIONSは、各「convert」下位構成要素に直接接続されるため、受け渡されて、下請け業者「convert」構成要素が外部エージェント上の相手エージェントに直接接続することになる。外部エージェントから離れて、「Add3」構成要素は、エージェントが接続されるとすぐにそれぞれのペイロードを自動的に送るように設定された、3つの内部エージェントDECIMALを有する。これらエージェントはそれぞれのペイロードを自動的に送り、終了パケットを受け取るとすぐに終了を送るため、事実上、自動化エージェントである。
conversion構成要素が自動化される場合、「Add3」構成要素全体も事実上、自動化される。これは、より単純なプログラミング構成要素から複雑なプログラミング構成要素を構築する良い例であり、非基本的自動化でもある。「Add2」構成要素は自動化されたが、下位略図を介してタスクを実行する方法がないため、基本構成要素として分類される。事実上、これら技術を利用して生成されたすべてのソフトウェアは、最低レベルの基本要素(primitive)から導出される。
「Add3」構成要素は自動化「Add2」構成要素よりも多様である。「Add3」構成要素の購入者は、変換がどのように機能するかについて心配することなく加算を行うことができ、複雑性レベルの遮蔽を示す。
第4の具体例
この具体例は、最も複雑なadd構成要素について考察する。
この例では、「Add5」構成要素も「add」サービスにさらなるテスト及び機能を提供する。しかし、考察は、技術の特定の主要特徴を説明するのに十分な複雑性を加えるだけであることに留意されよう。「Add5」構成要素は、エージェントバンドリング、基本入力テスト、略図選択及び例外の取り扱いの使用を示す。
「Add5」構成要素は、形式仕様の入力バリエーションを含むことによって「Add3」構成要素を拡張し、バンドリングを使用して外部エージェントの数を低減する。図35Aは、「Add5」構成要素の構成要素の表示を示す。以下の表3に概説する5つのエージェントを有する。
図35Bは、「Add5」構成要素の内部略図を示す。この例は、表4に概説する6個の他の構成要素を使用する。
Validate String
Validate String構成要素は、入力文字列(In)をLISTエージェントの有効文字列リストと比較することによって機能する。この例では、リストは「Decimal」及び「Hexadecimal」である。入力文字列は、有効な場合、有効であるとして渡され、OUT(checked)エージェントは「true」に戻る。文字列が有効ではなかった場合、OUT(checked)エージェントは「false」に戻る。validate stringのさらなるサービスは、入力文字列を指定された出力形式に再フォーマットすることである。これには、空きスペース(スペース及び復帰改行文字)の除去、文字列の小文字への変換、及び、また文字列長のトリミングが含まれ得る。FORMATエージェントがこの出力形式を指定する。
Or
Or構成要素は、複数のソースからの入力に基づいてイベントをトリガするときに使用される論理演算子である。入力のいずれかがtrueの場合にはtrueを出力するように、すべての入力を組み合わせる。Orを購入した最初のとき、入力エージェントは、それぞれ接続されたばかりであるためすべて未定義である。従ってペイロードを有さない。次いで、Or構成要素は、送るべき出力が何であるかを決定するのに十分な情報を得るまでエージェントペイロードを待つ。Or構成要素は入力エージェントのいずれかが「true」のペイロードを有すると、すぐに「true」を出力し、その他の場合は、すべての入力エージェントが「false」と特定されるまで待ち、すべて「false」と特定されたポイントで「false」を出力する。
Bundled Agents
エージェントIN1、IN2、OUTが、バンドリングを利用して、一方は数値を表し、一方は数の形式を指定する二つのエージェントを共に組み合わせる。このバンドリングは、数の形式がバンドルの最初の位置にあり、数値が2番目の位置にあるものと想定する。これら二つの特定のエージェントの組み合わせをナンバーバンドリングと呼ぶ。互換性を保証するために、エージェントIN1、IN2は、ナンバーバンドルを生成するエージェントのみに接続しなければならず、OUTエージェントはナンバーバンドルを取り扱うことのできるエージェントにのみ接続されなければならない。バンドリングについてさらに情報を得るには、バンドリング及びバンドリング解除のセクションを参照のこと。
「Add5」構成要素のエージェントIN1、IN2の数値入力In1、In2は、構成要素C1、C2によってバンドリングが解除され、数値のエージェント及び数の形式のエージェントが得られる。構成要素C2、C1がそれぞれのサービスを行った後、In1の数値がエージェントA37に接続され、数の形式はエージェントA26に接続されることになる。
数値入力In2の場合、数値はエージェントA39に接続されることになり、数の形式はエージェントA29に接続されることになる。次いで、各入力In1、In2の数の形式は、Validate String構成要素C6、C7によって検証されフォーマットされる。出力形式を指定するエージェントA19もC5を使用してチェックされる。
Duplicates and Validate Lists and Formats
Validate String構成要素は、所定の要件に基づいて入力をチェックしフォーマットできるようにする。
この例では、加算構成要素C11において使用されるAdd構成要素に指定された形式がエージェントFormatIN1、FormatIN2、及びFormatOUTに準拠することを保証する必要がある。各Validate String構成要素C5、C6、C7は、指定された有効文字列リストを要求し、有効文字列リストは内部エージェントA14によって供給され、Dup構成要素C4によって3回複製される。この場合、内部エージェントA14のペイロードは「10進数、16進数」であり得る。内部エージェントA10は、「空きスペースなし、小文字」のようなものであり得る3つのValidate String構成要素に要求される出力形式を指定する。これは、Dup構成要素C3を使用して、内部エージェントA10から受け取った文字列を複製することによって実現される。
Selective Construction
Validate String構成要素のOUT(checked)エージェントA23、A53、A31は、各形式仕様が入力検証に合格したか否かを示す。これらのいずれかが不合格である場合、さらなる機能を手動で実行する必要がある。OUT(checked)エージェントA23、A53、A31は、Or構成要素C8を使用して一つのエージェントA36に組み合わせられ、エージェントA36は、「Add4」によって提供される手動の加算を使用すべきか、又は「Add3」によって提供される自動的な加算を使用すべきかを指定するエージェントペイロードを有する。
図35Bにおける略図の中核部分は、addition構成要素C11によって行われる。この構成要素は、addition構成要素の下位略図がセレクタエージェントA36のペイロードに従属するという点で特殊である。
構成要素C11の内部で、エージェントA36は、自動「Add3」構成要素を構築するか、それとも手動「Add4」構成要素を構築するかを選択する。エージェントA1、A3、A19のそれぞれに提供された入力In1、In2及びFormatが、validate string構成要素C5、C6、及びC7によって行われる入力チェックにそれぞれ合格する場合、「Add3」構成要素が使用されて加算演算が行われる。逆に、入力が検証に合格しない場合、加算は手動「Add4」構成要素によって行われ、人が入力を調べて問い合わせることができる。情報に何の意味もない場合、例外が生成され、親構成要素に渡される。
addition構成要素C11は、エージェントによって提供される情報に基づいて異なる下位略図が構築される選択的構築の使用を示す。この例には単純なケースしか提示しないが、一般に、この技術は極めて強力である。略図設計を構成要素への入力情報に基づいて選択することを可能にする。また、構築を多段階で完成することを可能にし、各段階が完了すると、次の段階の構築を起動することができる。
多段階構築は、いずれの時点でも使用される構成要素の総数を大幅に低減し、コンピュータ資源を最小に抑えることができる。また、完全直列構築(すなわち、構成要素が1回毎に一つずつ購入され、構築される)と、完全並列構築(すなわち、すべての構成要素が同時に購入され構築される)との間のトレードオフを可能にする。直列構築は、コンピュータ資源を最小に抑えるが、本質的に並列構築よりも遅い。
addition構成要素C11は下位略図に一つの構成要素しか有さないが、一般には任意のサイズの略図を含むことができる。addition構成要素C11の動作は、略図の残りの部分に関しては、利用者が意識することはない。この例では通常の構成要素とまったく同じように動作する。
実際には、エージェントのペイロードに基づいて下位略図を選択する構成要素サーバを使用して実装することが可能である。一方、「Add5」構成要素の一部として直接実装することも可能である。この場合、addition構成要素C11の各エージェントA36〜A43は内部エージェントとして実装され、addition構成要素C11の下位略図が構築されるときに受け渡される。
構成要素の出力
addition構成要素C11によって行われる加算の出力は、bundle構成要素C10を使用して複数のバンドルに組み合わせられる。
第5の具体例
前述した四つの具体例では、どのようにしてエージェント情報の処理できるかについて示した。前述した各例は、コードの構築を取り扱っているが、代わりにコンピュータプログラムがいくつかのタスク、これら例では加算演算を行っていたことに留意されたい。これから、図1、図3A〜図3B及び図10A〜図10Eのフローチャートに記した例はソフトウェア生成の例であるが、処理動作を直接行うにあたっても使用することが可能なことが理解できる。
いずれの場合でも、第5の具体例は、実行可能なコードをバイト単位で直接構築する技術を利用することによってこの概念を拡張する。
この例では、IBM PC上で実行されると、所定の位置に所定の色でピクセルを画面上に表示し、コードを構築する構成要素について概説する。しかし、生成されるコードは完全なプログラムではなく、この構成要素が組み込まれるように設計されるプログラムの要件に沿って構築されるコードの断片である。この構成要素は、出力にx86マシンコードを生成する。この構成要素の詳細はIBM PCアーキテクチャに固有であるため、概説に留める。
図36Aは、「Put Pixel」構成要素の構成要素の表示Put Pixelを示す。5つの入力エージェントX、Y、Width、Colour及びScreen、並びに二つの出力エージェントExceptions及びBuildがある。
各エージェントの説明を以下の表5に示す。
図36Bは「Put Pixel」構成要素の内部略図を示す。この構成要素は以前からの「Add5」構成要素を、複数の新しい構成要素(Mul、Mov、Seg Prefix、及びBuild)と共に使用する。
構成要素の概説を以下の表6に示す。
画面上のピクセルはすべて、ビデオメモリに記憶され、ビデオメモリは通常のメモリ内の特定のアドレスセットでしかない。これらメモリエリア内で何かを変更すると、画面上で変更される。IBM PCのメモリはセグメント及びオフセットによって参照される。セグメントはメモリの大きな領域を選択し、オフセットはセグメント内のすべてのロケーションにアクセスできるようにする。スクリーンメモリは16進数のセグメントアドレスA000に位置する。オフセットはピクセルの位置を決定し、そのオフセットに記憶されている値がピクセルの色を決定する。
画面画像は一度に1行ずつ線形な配列として記憶されるので、画面上の任意の点(x,y)のオフセットは(y*width)+xで与えられる。乗算(C1)及び加算(C2)がこの計算を行う。
「Put Pixel」構成要素は、画面が正しいビデオモードに設定され、screenエージェントによって指定されるセグメントレジスタは16進数のA000に設定されることを記入する。
「Put Pixel」構成要素は3つのMOVアセンブリ命令を作成する。ピクセルの色が、C3及びC6を使用してALレジスタに移される。次いで、計算されたピクセルオフセット(A14)は、C4及びC7によってDIレジスタに移される。次いで最後に、色を含むレジスタの値(AL)が、セグメントレジスタ内の値及びオフセットを含むレジスタ内の値(AL―>セグメント:DI)によって記述されたメモリロケーションに移される。
アセンブリ命令はMOV構成要素を使用し、MOV構成要素は送信元及び宛先を取り、要求されたMOV命令に適切な16進数マシンコードを出力する。
個々の構成要素によって生成されたコードは、build構成要素によって収集されて組み合わせられ、Buildエージェント(A48)に送ることのできる実行可能なコードを生成する。
これはこれより説明するチェーニングを利用して実現することができる。
具体的には、この例では、putpixel構成要素は、図に示すようにbuildエージェントA48を介して提供される実行可能なコードを生成するようになされる。一般に、結果として得られる実行可能なコードは、適切な処理システムによって実行されると、処理システムにピクセルを画面上の要求された位置に配置させる。
実行可能なコードは、ルートサーバ上の特定のメモリ配置において構築する必要があるため、略図中のエージェントは、実行可能なコードを構築すべきメモリ配置を知る必要がある。
これを実現するために、実行可能なコードの構築に必要な適当なエージェントをバンドリングしたものから形成されるビルドバンドルが、ルートサーバによって提供される。通常、これは、ルートサーバに適当なエージェントを必要に応じて実装させることによって実現される。この場合、ビルドバンドル中のエージェントのペイロードは、要求されるメモリ配置の詳細を含む。こうしてビルドバンドルは、特定のデータを構築すべきメモリ配置を指定する。
ルートサーバは、ビルドバンドルをbuildエージェントA48に転送し、これは次いで、build構成要素C12のbuild出力エージェントA35に渡される。次いで、バンドルはエージェントA34、A33、A32、A31、A30を介して再びエージェントA26に転送される。これにより、move構成要素C6はmoveアセンブリ命令を生成し、これをペイロードとしてビルドバンドルに必要に応じて包含することができる。ビルドバンドルで提供されるmoveアセンブリ命令には、ルートサーバによって、ビルドバンドルにおいて定義される各メモリロケーションが関連付けられる。
このように変更されたビルドバンドルは、次いで、エージェントA26、A30を介して再びmove構成要素C7のエージェントA29に転送される。move構成要素C7は対応するmove命令を生成し、これをビルドバンドルに含め、ビルドバンドルをエージェントA31、A32、A37を介して再びエージェントA36に転送する。この場合、seg prefix構成要素C8は次のmove命令のプレフィックスを計算し、これをビルドバンドルに各ペイロードとして包含し、それからビルドバンドルをエージェントA37、A33、A34、A39を介して再びエージェントA38に転送する。move構成要素C9は、次いでさらに命令を挿入し、それからビルドバンドルを再びbuildエージェントA48に、ひいては再びルートサーバに提供する。
上記例では、putpixel構成要素を通るビルドバンドルの経路は、エージェントA48−A35−A34−A33−A32−A31−A30−A26−A30−A29−A31−A32−A37−A36−A37−A33−A34−A39−A38−A39−A35−A48を通り、チェーニングを形成する。
従って、この場合、put pixel構成要素は、必要に応じて入力をエージェントX、Y、WIDTHにおいて受け取るのみならず、build出力A48を介してビルドバンドルを受け取るようになされることが理解できる。この場合、データを入力X、Y、WIDTHのそれぞれ一つにおいて受け取るとすぐに、このデータは必要に応じて、対応する下位構成要素に転送されて処理される。従って、入力を受け取るとすぐに入力に対して作用することができる。
第6の具体例
最後の具体例は、図36AのPit Pixel構成要素を使用して、図36Cに詳述するスタンドアロンプログラムを作成することを示す。
「Put Pixel」構成要素を、ビデオモードの変更及びセグメントレジスタの、スクリーンメモリの値への設定を担当する「Setup Screen」構成要素と併せて使用する。スクリーンメモリのアドレスは「Put Pixel」構成要素に入力され、出力は、生成されるコードに対応するバイト及びメモリの記憶に使用されるセグメントレジスタである。これはput pixel構成要素によって使用される。プログラムはフロッピードライブから起動すべきであり、画面をクリアし(setup screen構成要素から)、次いで一つのピクセルを位置20、50に赤の色で表示する。
put pixel構成要素は、エージェントx、y及びwidthに入力される数値、並びに、数値に対応する形式を含む複数の数値バンドルから入力を得る。色入力は、ルート略図の内部エージェントから直接入力される。前述したように、ビデオメモリのセグメントアドレスを記憶するために使用されるセグメントレジスタは、setup screen構成要素から入力される。Put Pixel構成要素の出力buildは、構成要素によって生成されたバイトをbuild構成要素に送る。build構成要素はバイトを、setup screen構成要素によって生成されたバイトに添付する。次いで、ブートディスクに要求されるように、バイトを正しくフォーマットすることを担当するBoot構成要素に、Build構成要素は完成したプログラムを送る。
付録C
可変コンテキスト依存性について、内部略図を図37Aに示すassign構成要素の使用に関連してこれより説明する。
Assign構成要素は、実行されると、指定された数値(エージェントvalue)を指定のレジスタ(エージェントregister)に割り当てるコードを生成する。Assign構成要素はbuildチェーニングと併せて動作して、各割り当て後に、CPU内の各レジスタの既知の値を計算して記録する。この情報はマシンの状態を表し、事実上、assign構成要素が動作するコンテキストとしての役割を果たす。
マシンの状態
マシンの状態は、各レジスタが、構築時に決定することができる値を含むか否か、決定することができる場合には値が何であるかを記録する。レジスタの値は、実行時でしか決定することができない場合には未知になる。以下の例では、マシンの状態は、以下の形式を有するXMLペイロードに対応する。
<eax>A</eax>
<ebx>B</ebx>
<ecx>C</ecx>
<edx>D</edx>
ここで、A、B、C、又はDはレジスタの10進数値又は文字列「unknown」に対応する。例えば、以下のようになる。
<eax>0</eax>
<ebx>1</ebx>
<ecx>unknown</ecx>
<edx>10</edx>
この例はx86CPUのレジスタのうち、4個のみのマシン状態を追跡するだけであり、これは様々なCPUアーキテクチャに応じて拡張し変更することができることが理解できる。
構成要素
build中のすべての構成要素は、Init_elf、int 0×80、Bcat及びAssign構成要素を含め、マシン状態サービスをサポートしなければならない。Init_elf構成要素は、値0を含むレジスタeax、ebx、ecx及びedxに対応するLinuxエグゼキュータブルのスタートアップマシン状態でビルドチェーニングを初期化する。Assign構成要素は、マシン状態における一つのレジスタエントリの値を、割り当てるレジスタ及び値に一致するように設定する。int 0×80構成要素は、この構成要素によって生成されるコードは、レジスタeaxの値を実行時に変更するシステムコールに対応するため、マシン状態におけるeaxエントリを「unknown」に設定する。Bcatはビルドチェーニングの一部を成し、コードチェーニングと並列してマシン状態チェーニングを提供することによってマシン状態をサポートし、これにより、各構成要素がマシン状態をチェーニング内の前の構成要素から受け取り、更新されたマシン状態を次の構成要素に送ることができる。
この例は、主にAssign構成要素を使用してコンテキスト依存コーディングを示す。具体的には、Assign構成要素の内部略図の一例を図37Aに示す。
図に示すように、Assign構成要素は、表7に機能をまとめた複数の下位構成要素から形成される。これら構成要素のそれぞれは、レジスタの指定の値への割り当てを実現する一つのルールを実装する。これら構成要素はすべて、Mov immediateを除き、既知のマシン状態に従属する結果コードを生成する。Mov immediateは、コンテキスト情報が利用可能ではない場合の後退した位置である。これら構成要素は非公開構成要素であり、公開市場に提供されるように設計されたものではないことを意味する。これら構成要素は単に、管理のためにAssign構成要素の設計の簡易化を助けるだけである。
各ルールは優先度順にテストされる。一致するものが見つかった場合、計算されたコードが出力され、後続するルール構成要素が結果コードをBuild ASM2構成要素に渡し、Build ASM2構成要素はコード及び更新したマシン状態をビルドチェーニングに挿入する。
Add Other構成要素の外部略図の一例を図8に示す。図37B〜図37Eは、Add Other構成要素の内部略図を示す。前の構成要素がすでに割り当てサービスを実行していた場合、Found Inエージェントは「true」を受け取り、図37Cに示す略図の構築を起動する。この略図は単に、前のルール構成要素が提供した結果を渡すだけである。エージェントFound Inが「false」の場合、図37Dに示す略図が構築される。この略図は、各レジスタエントリをマシン状態情報から抽出し、次いでレジスタが既知の値を有しているか否かをテストする。既知の値を有する一つのレジスタがセレクトレジスタ構成要素によって選択される。複数のレジスタが既知の値を有する場合、select register構成要素がランダムに選択する。この結果、コードはコンテキスト及び要件が同一の場合であっても可変であるため、出力コードがディザリングされる。
図37Dでは、エージェントFound matchが、図37C又は図37Eの略図の構築をトリガする。既知の値を有するレジスタが見つからなかった場合、図37Cが構築される。これは、Add Otherルールがマシン状態コンテキストに一致しなかった場合に行われる。図37Cは単に、要件を次のルール構成要素に渡し、図37Dによって生成されたエージェントChosen regを終了させるだけである。一致が見つかった場合、図37Eが構築される。この略図は、適切なコードを生成し、マシン状態を更新する。
この略図は、アセンブリコードで以下の構造を有するマシンコードを生成する。
Mov Reg1, Reg2
Add Reg1, K
ここで、Reg1は割り当てるべきレジスタであり、Reg2は既知の値を含むレジスタであり、Kは、要求される割り当て値を得るためにReg2の値に加算する必要がある数である。
レジスタの既知の値の差を計算する。
Reg1は、エージェントRegister Inで受け取ったペイロードによって指定され、「eax」、「ebx」、「ecx」、「edx」の一つに対応し、Reg2は、図37Dによって既知のレジスタをサーチした結果としてエージェントChosen regによって指定される。Kは、構成要素81によりマシン状態から抽出されたReg2(80)の既知の値と、エージェントValue Inによって指定される要求される割り当て値の間の差から計算される。
生成されるマシンコードは二つの部分で計算され、第1の部分は、以下にに対応する。
Mov Reg1, Reg2
Add Reg1
また、第2の部分は値Kに対応する。第1の部分は、lookup table構成要素82を使用して、Reg1、Reg2情報を適切なマシンコードに変換することで計算される。
ルックアップテーブルを指定するエージェント83によって送られるペイロードの一例は以下である。
<protocol>
<protocol_name>lookup table</protocol_name>
<protocol_data>
<entry>
<input>eaxeax</input>
<output>89C005</output>
</entry>
<entry>
<input>eaxebx</input>
<output>89D805</output>
</entry>
.....
</protocol_data>
</protocol>
このルックアップテーブルは、Reg1及びReg2の各組み合わせごとに一つのエントリを含むため、レジスタeax、ebx、ecx、及びedxに16個のエントリがある。第2のルックアップテーブル84は、Kのコードを含め、送られたコードに対応するバイト数を出力する。
構成要素85、86及び87はKを計算する。endian構成要素87は数をバイト単位で置換してx86と互換性を有するようにする。次いでこれは命令マシンコードと連結され、最終的な出力コードを生成する。コードを生成することに加えて、マシン状態は構成要素88、89及び90によって更新される。
Hellow World例
この一例について、「hello world」プログラムに関連してこれより説明する。具体的には、構成要素を生成する「アセンブリ的な」コードで書かれた従来の「hello world」プログラムの例を以下に記す。
BITS32
GLOBAL _start
section .text

_start:
mov ebx, 1 ;standard out
mov eax, 4 ;system write system call
mov ecx, string ;Pointer to string
mov edx, 11 ;Length of string
int 0x80 ;start system call

mov ebx, 0 ;exit error code
mov eax, 1 ;System exit system call
int 0x80 ;start system call
section .data
string db 'hello world'
これは、以下を使用してアセンブルされリンクされる。
nasm -f elf hello. asm -o hello.o -l hello.lst
ld -s hello.o. -o hello
実行できる逆アセンブラを表8に示す。これはマシンコードを示し、以下を使用して作成された。
ndisasm -e 128 -b 32 hello
従来のコードとの比較として、前述したassign構成要素を使用して同じプログラムを作成した。これは図38Aに示すルート略図を使用して実現した。
完全にするために、図38Aに示す略図を表すXML文書を以下に示す。
<?xml version="1.0" encoding="UTF-8 ?>
<schematic>
<name>test</name>
<author>none</author>
<description>undescribed</description>
<w>400</w>
<h>460</h>
<agent>
<x>371</x>
<y>412</y>
<agent_id>2147483647<agent_id>
<agent_name>Code Out</agent_name>
<agent_description></agent_description>
<auto_term>manual</auto_term>
<persistance>persistance</persistance>
<payload></payload>
<optional>false</optional>
<auto_payload>false</auto_payload>
<hand_off>true</hand_off>
<sound_file></sound_file>
</agent>
...
<component>
<filename>/dream/asm/techreview/assign.comp</filename>
<schematic_component_id>1</schematic_component_id>
<x>190.0</x>
<y>66.0</y>
</component>
...
<link>
<half_link>
<schematic_component_id>10</schematic_component_id>
<agent_id>3</agent_id>
</half_link>
<half_link>
<schematic_component_id>17</schematic_component_id>
<agent_id>1</agent_id>
<half_link>
<anchor>
<x>190.0</x>
<y>66.0</y>
</anchor>
</link>
...
</schematic>
従来の技術によって生成した結果コードと本発明により生成した結果コードの比較を表8に記す。
従って、両方のコードとも機能は同一であり、二つの論理ブロックをprint string及びsystem exitの形態で含むことが理解できる。しかし、コンテキスト依存コードは、走らされるコンテキストを利用しているため、サイズが大幅に低減され、この例では、従来の技術の場合の34バイトに対して24バイトである。
例えば、従来のコンテキスト独立コードは、Cプログラムhello.cとして実装される場合である。
main()[
printf("hello world");
]
そして、以下を使用して統計的にリンクしてストリップすると、
gcc -static hello.c -o hello
strip hello
377kBのエグゼキュータブルになる。このプログラムはprintfを使用し、printfは汎用であり、かつコンテキストから独立したものであり、明らかにコードの膨張を際立たせる。
この場合、コンテキスト独立の従来のprint stringコードが再使用される場合、変更する必要があるのはストリングポインタ(0×80490A4)だけである。system exitは完全にコンテキストから独立しており、再使用するために変更はまったく必要ない。
しかし、コンテキストに依存したものでは、print stringは、Linuxでのエグゼキュータブルのスタートアップ状態である、eax、ebx、ecx及びedxがゼロの場合のみ働く。さらに、system exitは、ebxが1の場合のみ働く。本例では、system exitは、ebxがprint stringコードによって1に初期化されることを利用する。
Double print string ”Hello world”
この例は、二つのprint stringのシステムコールを使用して「Hello」を、次いで「world」をプリントする。本発明によりこれを行う略図の一例を図38Bに示し、手動で最適化されたコンテキスト独立コードと結果コードの比較を表9に示す。従来のアセンブリコードは以下の通りである。
BITS32
GLOBAL _start
section .text

_start:
mov ebx, 1 ;standard out
mov eax, 4 ;system write system call
mov ecx, string1 ;Pointer to string1
mov edx, 6 ;Length of string1
int 0x80 ;start system call

mov ebx, 1 ;standard out
mov eax, 4 ;system write system call
mov ecx, string2 ;Pointer to string2
mov edx, 5 ;Length of string2
int 0x80 ;start system call

mov ebx, 0 ;exit error code
mov eax, 1 ;System exit system call
int 0x80 ;start system call
section .data
string1 db ‘hello ’
string2 db ‘world’
この例では、コンテキスト独立例は手動で最適化され、当業者に理解されるように、同等の標準的なC++プログラムと比較してサイズが大幅に低減される。重要なのは、コードバレーの2番目のprint stringでは、ecxがstring2のポインタに設定されることを出力する(add ecx,0×6)。この場合、前のprint stringがecxをstring1の値に初期化した。string2のアドレスはecxの前の値に相対して計算される。これは、assign構成要素内のAdd selfを使用して実現される。
この例では、コードの各生成において、Mov other、Inc other、Dec other及びAdd otherからランダムな出力がある。これらはそれぞれ、表10に示すように複数のソリューションからランダムに選択する。これは、要件又はコンテキストを変更しなくとも、機能は同じでありながら、アプリケーションの要件を満たす異なる出力が生成されることを示す。
本発明によるソフトウェア生産の一例を概説した流れ図である。 コンピュータによる実行可能なコードを生成する処理システムの一例の概略 図である。 図2の処理システムを使用してコンピュータによる実行可能なコードを作 成する方法の一例の流れ図である。 図2の処理システムを使用してコンピュータによる実行可能なコードを作 成する方法の一例の流れ図である。 コンピュータによる実行可能なコードを生成するウェブベースのシステムの 一例の概略図である。 図4のエンドステーションの一例の概略図である。 図4のエンティティ処理システムの一例の概略図である。 エンティティに、構成要素を図4のベースステーションに提供させる方法の 一例の流れ図である。 構成要素の属性ダイアログボックスの一例の概略図である。 出力属性ダイアログボックスの一例の概略図である。 図4のシステムを使用してコンピュータによる実行可能なコードを作成 する方法の一例の流れ図である。 図4のシステムを使用してコンピュータによる実行可能なコードを作成 する方法の一例の流れ図である。 図4のシステムを使用してコンピュータによる実行可能なコードを作成 する方法の一例の流れ図である。 図4のシステムを使用してコンピュータによる実行可能なコードを作成 する方法の一例の流れ図である。 図4のシステムを使用してコンピュータによる実行可能なコードを作成 する方法の一例の流れ図である。 ユーザに表示される略図の一例である。 ユーザに表示される構成要素の表示の一例である。 相互接続を包含するように変更された図11の略図の一例である。 図12の構成要素の内部構造の略図の一例である。 二つの相互接続された構成要素の略図の一例の概略図である。 図15のエージェントの動作を示した概略図である。 構成要素サーバの動作を示した概略図である。 構成要素を図5のベースステーションに示される、図17Aの構成要素 サーバの動作を示した概略図である。 エージェントを他の構成要素に示される、図17Aの構成要素サーバの 動作を示した概略図である。 エージェントの受け渡し動作を示した第1の例の概略図である。 エージェントの受け渡し動作を示した第1の例の概略図である。 エージェントの受け渡し動作を示した第1の例の概略図である。 エージェントの受け渡し動作を示した第1の例の概略図である。 エージェントの受け渡し動作を示した第1の例の概略図である。 エージェントの受け渡し動作を示した第2の例の概略図である。 エージェントのバンドリング動作を示した概略図である。 エージェントのバンドリング動作を示した概略図である。 一連のエージェントのバンドリング動作を示した概略図である。 構成要素のバンドリング解除動作を示した概略図である。 バンドリング処理の動作を実現した概略図である。 階層バンドリングの略図の一例である。 図24Aに示すエージェントA1のペイロードを変更するように成され た構成要素の一例の構成要素略図である。 図24Aに示すエージェントA1、A2のペイロードを変更するように 成された構成要素の一例の構成要素略図である。 エージェントバンドリングの受け渡しプロセスの略図の一例である。 エージェントバンドリングの受け渡しプロセスの略図の一例である。 エージェントバンドリングの受け渡しプロセスの略図の一例である。 エージェントバンドリングの受け渡しプロセスの略図の一例である。 エージェントバンドリングの受け渡しプロセスの略図の一例である。 チェーニングの使用例である。 チェーニングの使用例である。 チェーニングの使用例である。 チェーニングの使用例である。 チェーニングの使用例である。 チェーニングの使用例である。 チェーニングの使用例である。 他の構成要素への1対多相互接続を提供するように成された構成要素の一 例の略図である。 多段階構築プロセスの略図の一例である。 多段階構築プロセスの略図の一例である。 多段階構築プロセスの略図の一例である。 ディザリング動作を強調した構成要素の略図の一例である。 ディザリング動作を強調した構成要素の略図の一例である。 メッシング動作を強調した構成要素の略図の一例である。 メッシング動作を強調した構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 基本構成要素の略図の一例である。 「Add1」構成要素の構成要素の表示の一例である。 図32Aの「Add1」構成要素の内部略図の一例である。 図32Aの「Add1」構成要素を使用したテスト略図の一例である。 「Add2」構成要素の構成要素の表示の一例である。 「Add3」構成要素の構成要素の表示の一例である。 図34Aの「Add3」構成要素の内部略図の一例である。 「Add5」構成要素の構成要素の表示の一例である。 図35Aの「Add5」構成要素の内部略図の一例である。 「Put Pixel」構成要素の構成要素の表示の一例である。 図36Aの「Put Pixel」構成要素の内部略図の一例である。 図36Aの「Put Pixel」構成要素を使用したテスト略図の一 例である。 構成要素割り当ての内部略図の一例である。 構成要素割り当ての内部略図の一例である。 構成要素割り当ての内部略図の一例である。 構成要素割り当ての内部略図の一例である。 構成要素割り当ての内部略図の一例である。 「Hello World」例を実装するルート略図の一例である。 「Hello World」の二重プリント例を実装するルート略図の 一例である。

Claims (159)

  1. 構成要素を使用してコードを生成する方法であって、各構成要素は各データ処理サービスに対応し、前記方法は、
    a)コードの必要条件を定義する構成要素の組み合わせを決定し、及び、
    b)前記コンピュータコードが生成されるように、前記構成要素の組み合わせを実装し、それによって前記定義されたデータ処理シーケンスが実行されること、を含む方法。
  2. 前記構成要素の少なくともいくつかは、処理するデータを受け取り及び/又は出力する、一つ又は複数のポートを備える請求項1に記載の方法。
  3. 各ポートは、前記構成要素への、また前記構成要素からのデータの転送を制御するようになされるエージェントを有する請求項2に記載の方法。
  4. a)複数のデータ部分を含むデータの受け取る構成要素、及び、
    b)データを処理する構成要素であって、
    i)データ部分の前記シーケンスの所定の位置への追加、
    ii)データ部分の前記シーケンス中の第1の位置から第2の位置への移動、
    iii)前記シーケンスからデータ部分の除去、及び、
    iv)前記シーケンスにおいてデータ部分の変更、によってデータを処理する構成要素、を備えることを含む請求項2又は3に記載の方法。
  5. 前記方法の少なくとも一部は、記憶装置を備えた処理システムを使用して実行され、
    前記方法は、前記データ部分の一つ又は複数を前記記憶装置に記憶することを含む請求項4に記載の方法。
  6. 前記構成要素の少なくともいくつかは、複数の組み合わせられた下位構成要素から形成され、前記下位構成要素もまた構成要素である請求項1から5のいずれか一つに記載の方法。
  7. 前記構成要素の少なくともいくつかは、
    a)個人による手動による前記データの処理、
    b)処理システムによって実行され、それによって前記データを自動的に処理するように成されたコンピュータコード、及び、
    c)下位構成要素の組み合わせ、前記下位構成要素も構成要素である、
    の少なくとも一つを使用して形成される請求項1から6のいずれか一つに記載の方法。
  8. 一つ又は複数の処理システムを使用して行われる請求項1から7のいずれか一つに記載の方法。
  9. 第1の処理システムに、
    a)ユーザから受け取った入力コマンドに応答して、複数の構成要素を選択させ、
    b)前記選択された構成要素を使用した前記構成要素の組み合わせを定義させ、及び、
    c)前記定義されたデータ処理シーケンスが行われるような、前記構成要素の組み合わせを実装させること、を含む請求項8に記載の方法。
  10. 前記構成要素の少なくともいくつかは一つ又は複数のポートを備え、
    前記方法は、前記処理システムに、
    a)選択された各構成要素の前記ポートの指示を前記ユーザに提供させ、及び、
    b)前記ユーザからの入力コマンドに応答して、前記ポートの中から選択されたポートを相互接続させ、それによって前記構成要素の組み合わせを定義すること、を含む請求項9に記載の方法。
  11. 第2の処理システムに、
    a)複数の構成要素の詳細を決定させ、及び、
    b)前記第1の処理システムを介した、少なくとも前記詳細の指示を前記ユーザに提供させ、ることを含む請求項8から10のいずれか一つに記載の方法。
  12. 前記処理システムに、
    a)前記ユーザからの入力コマンドに応答して、前記構成要素の中から各構成要素を選択させ、及び、
    b)前記第1の処理システムを介した、前記選択された構成要素の前記詳細を前記ユーザに提供させることを含む請求項12に記載の方法。
  13. 前記詳細は構成要素の仕様であり、
    前記処理システムは、
    a)前記構成要素の仕様を記憶する記憶装置であって、
    前記構成要素の仕様は、
    i)前記処理サービスの指示、
    ii)前記構成要素のグラフィック表現、及び、
    iii)各ポートに関連するエージェントの動作を定義するポート仕様、
    の少なくとも一つを含む、記憶装置と、
    b)プロセッサであって、前記方法は前記プロセッサに、
    i)前記記憶装置から一つ又は複数の構成要素の仕様を取得させ、
    ii)前記第1の処理システムを介した、前記構成要素の仕様を前記ユーザに提供させ、ることを含む、プロセッサと、を備える請求項12に記載の方法。
  14. 前記第1の処理システムに、
    a)前記一つ又は複数の選択された構成要素のグラフィック表現を生成させ、
    b)ユーザから受け取った入力コマンドに応答して、前記グラフィック表現を処理させ、それによって前記構成要素の組み合わせを定義することを含む請求項9から13のいずれか一つに記載の方法。
  15. 前記第1の処理システムは、通信ネットワークを介して一つ又は複数の構成要素処理システムに接続され、
    各構成要素処理システムは、一つ又は複数の各構成要素を実装するように成され、
    前記方法は、
    a)前記構成要素の組み合わせ内の各構成要素に対するサービス要求を生成し、及び、
    b)前記通信ネットワークを介して各エンティティに前記サービス要求を転送し、各エンティティは、前記サービス要求に応答して、前記各構成要素によって実現される前記データ処理を実装するように成されること、を含む請求項9から14のいずれか一つに記載の方法。
  16. a)前記構成要素が必要とするあらゆるデータを決定し、及び、
    b)前記サービス要求の際の前記データを提供すること、を含む請求項15に記載の方法。
  17. 各サービス要求は、前記各構成要素の前記ポートのそれぞれの相互接続の指示を含む請求項15又は請求項16に記載の方法。
  18. 各構成要素処理システムに、
    a)前記受け取ったサービス要求に従って、一つ又は複数の各構成要素インスタンスを実装させ、及び、
    b)各構成要素インスタンスに、
    i)前記サービス要求中に定義された前記相互接続に従って他の構成要素と対話させ、及び、
    ii)必要なあらゆるデータ処理を行わせること、を含む請求項17に記載の方法。
  19. 各構成要素処理システムに、
    a)各ポートに関連する各エージェントを実装させ、及び、
    b)前記定義された相互接続に従って各エージェントに別の構成要素のエージェントと協働させ、それによって前記ポート間でデータを転送できるようにすること、を含む請求項17又は請求項18に記載の方法。
  20. 前記第2の処理システムに、
    a)パフォーマンス情報を決定させ、前記パフォーマンス情報は前記構成要素の前記実装に関連する一つ又は複数の基準を表すものであって、及び、
    b)前記パフォーマンス情報をユーザに提供させ、前記ユーザは前記パフォーマンス情報に従って前記構成要素を選択すること、を含む請求項11に記載の方法。
  21. 前記パフォーマンス情報は、
    a)前記構成要素を実装する前記エンティティの指示、
    b)前記エンティティの地理的場所の指示、
    c)前記構成要素の実装期間の指示、
    d)前記各構成要素を実装に関連する費用の指示、及び、
    e)前記構成要素の出来のよさを示す格付け、
    の少なくとも一つを含む請求項20に記載の方法。
  22. a)同等のサービスを行う複数の異なる構成要素を提供し、前記異なる構成要素は異なるエンティティによって提供され、及び、
    b)前記エンティティを競争させ、それによって前記構成要素の改良を促すこと、を含む請求項20又は請求項21に記載の方法。
  23. 各構成要素の使用に対して費用を課すことにより利益を生じることを含む請求項20から22のいずれか一つに記載の方法。
  24. a)前記利益の少なくともいくらかを、前記構成要素を実装する各エンティティに提供し、及び、
    b)前記第2の処理システムの運営者に、前記利益の少なくともいくらかを保持させること、を含む請求項23に記載の方法。
  25. 前記生成されたコードをコンテキストに依存させることを含む請求項1から24のいずれか一つに記載の方法。
  26. 前記構成要素の少なくともいくつかに、
    a)前記コードのコンテキストを決定させ、及び、
    b)前記決定されたコンテキストに従った前記データ処理サービスを実行させ、前記実行されるデータ処理が前記コンテキストに依存するように前記データ処理サービスを実行させる請求項25に記載の方法。
  27. 前記処理システムは、メモリ、スタック及びレジスタを少なくとも備え、前記コンテキストは、
    a)前記レジスタ、スタック及びメモリの少なくとも一つの状態、
    b)前記定義された構成要素の組み合わせ内の他の構成要素、及び、
    c)偶発的要因、
    の少なくとも一つを含む請求項26に記載の方法。
  28. a)ディザリング、
    b)メッシング、及び、
    c)遮蔽
    の少なくとも一つを行うことによって、前記データ処理をコンテキストに依存させることを含む請求項26又は請求項27に記載の方法。
  29. 構成要素を使用してコンピュータコードを生成する装置であって、各構成要素は所定の様式でデータを処理する各サービスに対応し、前記装置は、
    a)データ処理シーケンスに対応する構成要素の組み合わせを定義し、及び、
    b)前記コンピュータコードが生成されるように、前記構成要素の組み合わせを実装し、それによって前記定義されたデータ処理シーケンスが実行されるように成された一つ又は複数の処理システムを備える装置。
  30. a)各構成要素を実装するようにそれぞれ成された一つ又は複数の構成要素処理システム、及び、
    b)第1の処理システムであって、
    i)ユーザから受け取った入力コマンドに従った、前記構成要素の組み合わせの定義、及び、
    ii)前記各構成要素を実装する前記構成要素処理システムの決定、及び、
    iii)前記決定された構成要素処理システムのそれぞれにサービス要求の転送、
    を行うように成された第1の処理システムと、を備える請求項29に記載の装置。
  31. 前記構成要素処理システムは、
    a)前記サービス要求を受け取り、
    b)各構成要素インスタンスを生成し、及び、
    c)前記各構成要素インスタンスを使用した前記サービスを実行する、ように成される請求項30に記載の装置。
  32. 利用可能な構成要素の詳細を記憶するように成された第2の処理システムを備える請求項29から31のいずれか一つに記載の装置。
  33. 前記第2の処理システムは、各構成要素処理システムから構成要素の前記詳細を取得するように成される請求項32に記載の装置。
  34. 前記第1の処理システムは、前記第2の処理システムと協働するように成され、それによってユーザに、
    a)前記利用可能な構成要素の一つ又は複数を選択させ、及び、
    b)前記構成要素の組み合わせを定義させ、る請求項32又は請求項33に記載の装置。
  35. 請求項1から28のいずれか一つに記載の方法を実行するように成される請求項29から34のいずれか一つに記載の装置。
  36. 構成要素を使用してコンピュータコードを生成するコンピュータプログラムプロダクトであって、
    各構成要素は、所定の様式でデータを処理する各サービスに対応し、
    前記コンピュータプログラムプロダクトは、適切な処理システムで実行されると、前記処理システムに請求項1から28のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  37. ユーザにデータを処理させる方法であって、
    一つ又は複数の処理システムを使用して、
    a)各エンティティによって実装される各データ処理サービスをそれぞれ表す複数の構成要素の詳細を記憶し、及び、
    b)選択された構成要素の詳細をユーザに提供し、それによって前記ユーザに、前記データを処理するデータ処理サービスのシーケンスを定義する構成要素の組み合わせを定義させる、ことを含む方法。
  38. a)各構成要素毎に、各エンティティからの構成要素の仕様を受け取り、及び、
    b)前記構成要素の仕様に従って前記詳細を提供すること、を含む請求項37に記載の方法。
  39. 前記処理システムに、
    a)前記構成要素の実装に関連する一つ又は複数の基準を表すパフォーマンス情報を決定させ、及び、
    b)前記パフォーマンス情報をユーザに提供させ、それによって前記ユーザは前記パフォーマンス情報に従って前記構成要素を選択すること、を含む請求項38に記載の方法。
  40. 前記パフォーマンス情報は、
    a)前記構成要素を実装する前記エンティティの指示、
    b)前記エンティティの地理的場所の指示、
    c)前記構成要素の実装期間の指示、
    d)前記各構成要素を実装に関連する費用の指示、及び、
    e)前記構成要素の出来のよさを示す格付け
    の少なくとも一つを含む請求項39に記載の方法。
  41. a)同等のサービスを行う複数の異なる構成要素の提供であって、前記異なる構成要素は異なるエンティティによって提供され、
    b)前記エンティティを競争させ、それによって前記構成要素の改良を促す、ことを含む請求項39又は請求項40に記載の方法。
  42. 各構成要素の使用に対して費用を課すことにより利益を生じることを含む請求項38から41のいずれか一つに記載の方法。
  43. 前記料金の少なくとも一部を前記各エンティティに提供することを含む請求項42に記載の方法。
  44. 通信ネットワークを介して複数のエンドステーションに接続された処理システムを使用することを含み、
    ユーザに、前記エンドステーションを使用して構成要素を選択させ、構成要素の組み合わせを定義させることを含む請求項38から43のいずれか一つに記載の方法。
  45. 前記処理システムは記憶装置及びプロセッサを備え、
    前記方法は、
    i)構成要素の仕様を前記記憶装置に記憶し、及び、
    ii)前記エンドステーションを介して前記構成要素の仕様を前記ユーザに提供し、それによって前記ユーザに、構成要素の組み合わせを定義させ、前記必要なデータ処理サービスを実装させること、を含む請求項44に記載の方法。
  46. ユーザにデータを処理させる装置であって、
    a)各エンティティによって実装される各データ処理サービスをそれぞれ表す複数の構成要素の詳細を記憶し、及び、
    b)選択された構成要素の詳細をユーザに提供し、それによって前記ユーザに、前記データを処理するデータ処理サービスのシーケンスを定義する構成要素の組み合わせを定義させる、ように成される一つ又は複数の処理システムを含む装置。
  47. 請求項38から45のいずれか一つに記載の方法を行うように成される請求項46に記載の装置。
  48. ユーザにデータを処理させるコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項38から45のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  49. 処理システムを使用してデータ処理サービスを実現する構成要素を提供する方法であって、
    a)実行されるデータ処理サービスを決定し、
    b)前記データ処理サービスを行う方法を決定し、及び、
    c)前記データ処理サービスを定義する構成要素の仕様を生成し、前記構成要素の仕様は、データの受け取り又は出力に使用されるポートを表すポート仕様を含むこと、を含む方法。
  50. 前記データ処理サービスを実行する方法を定義する非公開構成要素の仕様をさらに決定することを含む請求項49に記載の方法。
  51. 前記方法は、前記構成要素の仕様を処理システムへの提供を含み、
    前記処理システムは、前記構成要素の詳細をユーザに提供するように適合され、それによって、ユーザにデータ処理サービスに使用する前記構成要素を選択させる請求項49又は請求項50に記載の方法。
  52. 前記方法は、前記処理システムによって実装される構成要素サーバを定義することを含み、
    前記構成要素サーバは、
    a)処理される前記データを受け取る構成要素インスタンス、
    b)前記データを処理する構成要素インスタンス、及び、
    c)前記処理されたデータを出力する構成要素インスタンス、を生成するように成される請求項49から51のいずれか一つに記載の方法。
  53. 前記方法は、各ポートに対してエージェントを定義することを含み、
    前記エージェントは、他の構成要素のエージェントと協働するように成され、それによってデータを前記ポートで受け取り、かつ前記ポートから出力させる請求項52に記載の方法。
  54. 各エージェントは、前記構成要素サーバによって実行されるように成された各コードから形成される請求項53に記載の方法。
  55. 前記方法は、前記構成要素を定義することを含み、それによって前記データを、
    a)ユーザ入力に従って手動で、及び、
    b)前記構成要素サーバによって自動的に、
    の少なくとも一つによって処理させる請求項52から54のいずれか一つに記載の方法。
  56. 前記方法は、
    a)前記エージェントの少なくとも一つにコンテキストの指示を決定し、及び、
    b)内容に従って前記データを処理することによって、前記データ処理を前記コンテキストに依存させることを含む請求項55に記載の方法。
  57. a)ディザリング、
    b)メッシング、及び
    c)遮蔽
    の少なくとも一つを行うことによって、前記データ処理を行うことを含む請求項56に記載の方法。
  58. データ処理シーケンスに対応する他の構成要素の組み合わせの定義によって、前記データ処理サービスの実行方法を決定することを含む請求項49から57のいずれか一つに記載の方法。
  59. 処理システムを使用して、
    a)一つ又は複数の構成要素を選択し、
    b)前記構成要素の組み合わせを定義し、及び、
    c)前記定義された構成要素の組み合わせに従って前記構成要素の仕様を生成することを含む請求項58に記載の方法。
  60. 前記構成要素はエンティティによって提供され、その他の構成要素は異なるエンティティによって提供される請求項58又は請求項59に記載の方法。
  61. データ処理サービスを実現する構成要素を提供する装置であって、
    a)ユーザ入力コマンドに従って、
    i)実行されるデータ処理サービス、及び、
    ii)前記データ処理サービスを行う方法、
    を決定し、及び、
    b)前記データ処理サービスを定義する構成要素の仕様を生成し、前記構成要素の仕様は、データの受け取り又は出力に使用されるポートを表すポート仕様を含むように成された処理システムを備える装置。
  62. 請求項55から66のいずれか一つに記載の方法を実行するように成される請求項61に記載の装置。
  63. データ処理サービスを実現する構成要素を提供するコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項49から60のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  64. 処理システムを使用して構成要素において実現されるサービスを提供する方法であって、前記処理システムに、
    a)サービス要求を受け取らせ、
    b)前記受け取ったサービス要求に応答して、各構成要素インスタンスを生成させ、
    c)処理されるデータの受け取り、
    d)前記各構成要素インスタンスを使用して前記データを処理させ、及び、
    e)前記処理されたデータを出力に供給させ、ることを含む方法。
  65. 前記処理システムに、
    a)所定のプロセス、及び、
    b)オペレータから受け取る入力コマンド
    の少なくとも一つに従って前記データを処理させることを含む請求項64に記載の方法。
  66. 前記処理システムに、前記構成要素の各入力及び出力に関連するエージェントを生成させることを含み、
    前記エージェントは、他の構成要素のエージェントと協働するように成され、それによってデータを前記入力において受け取り及び前記出力から出力させる請求項64又は請求項65に記載の方法。
  67. a)前記サービス要求から他の構成要素との接続を決定し、及び、
    b)前記決定された接続に従って、前記エージェントを他の構成要素のエージェントと協働することを含む請求項66に記載の方法。
  68. 前記処理システムは、通信ネットワークを介して一つ又は複数の構成要素処理システムに接続され、各構成要素処理システムは各構成要素を実装するように成され、
    前記方法は、
    a)前記サービス要求から各エージェントの接続アドレスを決定し、前記接続アドレスは、構成要素処理システムに配置されたエージェントのアドレスに対応すること、
    b)前記エージェントに、前記決定された接続アドレスに従った他のエージェントと協働させること、を含む請求項67に記載の方法。
  69. 前記データを処理する方法は、
    a)データ処理シーケンスに対応する他の構成要素の組み合わせを定義し、及び、
    b)前記構成要素の組み合わせを実装すること、を含む請求項64から68のいずれか一つに記載の方法。
  70. 前記処理システムは、通信ネットワークを介して一つ又は複数の構成要素処理システムに接続され、
    各構成要素処理システムは各構成要素を実装するように成され、
    前記方法は、前記処理システムに、
    a)前記定義された構成要素の組み合わせに従って一つ又は複数のサービス要求を生成させ、及び、
    b)前記通信ネットワークを介した、前記サービス要求を各構成要素処理システムに転送させ、それによって各構成要素を実装させること、を含む請求項69に記載の方法。
  71. a)前記サービスのパフォーマンスのコンテキストを決定し、及び、
    b)内容に従って前記データを処理し、それによって前記データ処理をコンテキストに依存させること、を含む請求項64から70のいずれか一つに記載の方法。
  72. 前記データ処理はコンピュータコードを生成することを含み、
    前記コードは、メモリ、スタック及びレジスタを有する処理システムによって実装されるように成され、
    前記コンテキストは、
    a)前記レジスタ、スタック及びメモリの少なくとも一つの状態、
    b)前記定義された構成要素の組み合わせ内の他の構成要素、及び、
    c)偶発的要因
    の少なくとも一つを含む請求項71に記載の方法。
  73. a)ディザリング、
    b)メッシング、及び
    c)遮蔽
    の少なくとも一つを行うことによって、前記データ処理を行うことを含む請求項71又は請求項72に記載の方法。
  74. 構成要素において実現されるサービスを提供する装置であって、
    a)前記サービスの提供に対する要求を受け取り、
    b)前記受け取った要求に応答して、各構成要素インスタンスを生成し、
    c)処理されるデータを受け取り、
    d)前記各構成要素インスタンスを使用して前記データを処理し、及び、
    e)前記処理されたデータの出力を供給するように成された処理システムを含む装置。
  75. 請求項69から73のいずれか一つに記載の方法を行うように成される請求項80に記載の装置。
  76. 構成要素において実現されるサービスを提供するコンピュータプログラムプロダクトであって、
    各構成要素はデータを処理する各サービスに対応し、
    前記コンピュータプログラムプロダクトは、適切な処理システムで実行されると、前記処理システムに、請求項64から73のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  77. 定義された構成要素の組み合わせの実装によってデータを処理する方法であって、各構成要素はデータを処理する各サービスに対応し、
    前記方法は、
    a)前記構成要素の組み合わせから、
    i)実装する構成要素、
    ii)各構成要素のポート間の接続、
    iii)前記構成要素が必要とするあらゆるデータを決定し、
    b)各構成要素毎に、
    i)前記各サービスの提供を要求するサービス要求を生成し、
    ii)前記サービス要求を、前記各構成要素を実装するエンティティに転送し、前記エンティティは、前記サービス要求に応答して前記各サービスを行い、それによって前記データ処理を行えるようにすること、を含む方法。
  78. 処理システムを使用することを含み、
    前記方法は、前記処理システムに、
    a)構成要素サーバの生成させ、
    b)前記構成要素サーバに、
    i)前記定義された構成要素の組み合わせに対応する構成要素インスタンスを実装させ、
    ii)前記サービス要求を生成させ、
    iii)前記構成要素インスタンスのあらゆるポートに関連するエージェントを生成させ、及び、
    iv)前記エージェントが、前記定義された接続に従って他の構成要素のエージェントと協働させ、それによってデータを前記構成要素のポート間で転送できるようにすること、を行わせることを含む請求項77に記載の方法。
  79. 前記処理システムは、通信ネットワークを介して一つ又は複数の構成要素処理システムに接続され、
    各構成要素処理システムは各構成要素を実装するように成され、
    前記方法は、
    a)前記定義された構成要素の組み合わせに従った、各構成要素の各エージェントの接続アドレスの決定、前記接続アドレスは構成要素処理システムに配置されたエージェントのアドレスに対応すること、
    b)前記サービス要求の生成、前記サービス要求は、
    i)必要なあらゆるデータ、及び
    ii)各エージェントの接続アドレスの指示を含むこと、を含む請求項77又は請求項78に記載の方法。
  80. 前記処理システムは、構成要素の仕様を記憶する記憶装置を備え、
    前記方法は、前記構成要素の仕様に従って前記接続アドレスの決定を含む請求項85に記載の方法。
  81. 定義された構成要素の組み合わせを実装することによってデータを処理する装置であって、
    各構成要素はデータを処理する各サービスに対応し、
    前記装置は、
    a)前記構成要素の組み合わせから、
    i)実装する構成要素、
    ii)各構成要素のポート間の接続、
    iii)前記構成要素が必要とするあらゆるデータを決定し、
    b)各構成要素毎に、
    i)前記各サービスの提供を要求するサービス要求を生成し、
    ii)前記サービス要求を前記各構成要素を実装するエンティティに転送し、前記エンティティは前記要求に応答して前記各サービスを行い、それによって前記データ処理を実行させるように成された処理システムを含む装置。
  82. 請求項77から80のいずれか一つに記載の方法を行うように成される請求項81に記載の装置。
  83. 定義された構成要素の組み合わせを実装することによってデータを処理するコンピュータプログラムプロダクトであって、
    各構成要素はデータを処理する各サービスに対応し、
    前記コンピュータプログラムプロダクトは、適した処理システムで実行されると、前記処理システムに請求項87から80のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  84. 処理システムを使用して構成要素の組み合わせを定義する方法であって、
    各構成要素はデータを処理する各サービスを表し、
    前記方法は、
    a)組み合わせる一つ又は複数の構成要素の選択、
    b)前記処理システムに、
    i)選択された各構成要素のグラフィック表現をディスプレイ上に生成させ、及び
    ii)前記グラフィック表現を処理させ、それによって、前記構成要素のポート間の接続を定義することを含む方法。
  85. 前記処理システムに、
    a)前記表現内の前記構成要素を表す構成要素データと、
    b)前記構成要素間の前記接続を表す接続データと、を生成させることをさらに含む請求項84に記載の方法。
  86. a)前記処理システムにルート構成要素の表示を生成させ、及び、
    b)前記ルート構成要素の任意のポートと前記構成要素のポートとの間の接続を定義すること、を含む請求項84又は請求項85に記載の方法。
  87. 前記処理システムに、前記グラフィック表現を処理させ、前記ルート構成要素のいずれか一つに関連する下位構成要素を表示させることを含む請求項84から86のいずれか一つに記載の方法。
  88. 前記処理システムに、ユーザからの入力コマンドに応答して前記グラフィック表現を処理させることを含む請求項84から87のいずれか一つに記載の方法。
  89. 構成要素を組み合わせる装置であって、各構成要素はデータを処理する各サービスを表し、
    前記装置は、
    a)組み合わせる一つ又は複数の構成要素を選択し、
    b)選択された各構成要素のグラフィック表現をディスプレイ上に生成し、及び、
    c)前記グラフィック表現を処理し、それによって前記構成要素のポート間に接続を定義するように成された処理システムを含む装置。
  90. 請求項84から88のいずれか一つに記載の方法を実行するように成される請求項89に記載の構成要素を組み合わせる装置。
  91. 処理システムを使用して構成要素を組み合わせるコンピュータプログラムプロダクトであって、
    各構成要素はデータを処理する各サービスを表し、
    前記コンピュータプログラムプロダクトは、適切な処理システムで実行されると、前記処理システムに請求項84から88のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  92. コンテキストに依存するデータ処理を実行する方法であって、
    a)所望のデータ処理を行う複数の技術を決定し、
    b)前記決定された技術のそれぞれを実現する構成要素を定義し、及び、
    c)使用に際して、結果得られる処理済みデータが前記コンテキストに依存するように、前記コンテキストに従って前記技術のうちの選択された一つの技術を行うこと、を含む方法。
  93. a)前記コンテキストを決定し、
    b)前記コンテキストに従って前記複数の技術の中から一つの技術を選択し、及び、
    c)前記データ処理を行うこと、を含む請求項92に記載の方法。
  94. a)前記構成要素によって実現されるサービスの実装を要求するサービス要求を受け取り、及び、
    b)前記サービス要求から前記コンテキストを決定すること、を含む請求項93に記載の方法。
  95. 前記構成要素は、データ処理シーケンスを定義する構成要素の組み合わせの一部として実装され、
    前記方法は、前記構成要素の組み合わせ中の他の構成要素から前記コンテキストを決定することを含む請求項93又は請求項94に記載の方法。
  96. 前記構成要素の各ポートに関連するエージェントを提供することを含み、
    前記エージェントは、前記構成要素の組み合わせにおいて定義される接続に従って他の構成要素のエージェントと協働するように成され、それによってデータを前記構成要素の前記ポート間で転送できるようにし、
    前記方法は、前記エージェントの一つに、別の構成要素からコンテキスト指示を受け取らせることを含む請求項95に記載の方法。
  97. 前記データ処理は、メモリ、スタック及びレジスタを有する処理システムによって実行されるように成されたコンピュータコードを生成するにあたって使用され、
    前記コンテキストは、
    a)レジスタ、
    b)スタック、
    c)メモリ、及び、
    d)コードの位置
    の少なくとも一つの状態を含む請求項92から96のいずれか一つに記載の方法。
  98. 確率変数を決定し、前記確率変数に従って前記技術の一つを選択することを含む請求項98から103のいずれか一つに記載の方法。
  99. 前記構成要素は、データ処理シーケンスを定義する構成要素の組み合わせの一部として実装され、前記構成要素は各エンティティによって実装され、
    前記データ処理は複数のデータ処理ステップを含み、
    前記方法は、一つ又は複数の他のエンティティとネゴシエートすることであって、それによって前記データ処理ステップのうちの一つ又は複数を他のエンティティに行わせることを含む請求項98から104のいずれか一つに記載の方法。
  100. コンテキストに依存したデータの処理を実行する装置であって、
    a)所望のデータ処理を行う複数の技術の決定、
    b)前記決定された技術のそれぞれを実現する構成要素の定義、及び、
    c)結果得られる処理済みデータが前記コンテキストに依存するように、前記コンテキストに従って前記技術のうちの選択された一つの技術を行うように成された処理システムを含む装置。
  101. 前記処理システムは請求項92から99のいずれか一つに記載の方法を実行するように成される請求項100に記載の装置。
  102. 処理システムを使用してコンテキストに依存したデータの処理を実行するコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項92から99のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  103. 構成要素に基づいたデータ処理において使用するエージェントを実装する方法であって、
    a)エージェントの指示を受け取り、
    b)エージェントを生成し、及び、
    c)前記エージェント指示に従って、前記エージェントに別のエージェントとの接続を確立させること、を含む方法。
  104. 前記エージェントは前記構成要素のポートに関連付けられ、
    前記方法は、
    a)前記エージェントを協働させてデータタイプを決定し、及び、
    b)前記データを、前記決定されたデータタイプに従って前記ポート間で転送させること、を含む請求項103に記載の方法。
  105. 各エージェントは、取り扱うことのできる各データタイプを定義した関連するエージェント仕様を有し、
    前記方法は、
    a)前記エージェント仕様を比較し、及び、
    b)比較の成功に応答して前記データタイプを決定すること、を含む請求項104に記載の方法。
  106. 前記エージェントは、通信ネットワークを介して各構成要素を実装する一つ又は複数の他の構成要素処理システムに接続された各構成要素処理システムによって実装され、前記エージェントの指示はネットワークアドレスの形式である請求項105に記載の方法。
  107. a)前記エージェントの、第1及び第2の他のエージェントのそれぞれへの接続を要求する第1及び第2のエージェントの指示を受け取り、
    b)前記エージェントに、前記第1及び第2のエージェントの指示を前記第1及び第2のエージェントのそれぞれに提供させ、それによって前記第1及び第2の他のエージェントを相互接続させること、を含む請求項105に記載の方法。
  108. a)前記第1のエージェントの指示を受け取り、
    b)前記エージェントを前記第1の他のエージェントに接続し、
    c)前記第2のエージェント指示を受け取り、
    d)一時的エージェントを生成し、
    e)前記一時的エージェントを前記第2の他のエージェントに接続し、
    f)前記第1及び第2の他のエージェントを、
    i)前記第1のエージェントの指示を前記一時的エージェントから前記第2の他のエージェントに転送し、
    ii)前記第2のエージェントの指示を前記エージェントから前記第1の他のエージェントに転送し、及び、
    iii)前記エージェント及び前記一時的エージェントを終了すること、
    によって接続させること、を含む請求項107に記載の方法。
  109. 各エージェントには各構成要素が関連付けられ、
    前記方法は、構成要素処理システムを使用して前記エージェントを実装することを含む請求項103から108のいずれか一つに記載の方法。
  110. 前記構成要素処理システムに、
    a)各構成要素インスタンスを実装する構成要素サーバを生成させ、及び、
    b)前記構成要素サーバに前記エージェントを実装させること、を行わせることを含む請求項109に記載の方法。
  111. 前記処理システムは、通信ネットワークを介して一つ又は複数の他の処理システムに接続され、
    前記方法は、
    a)受け取ったサービス要求に従って構成要素インスタンスを生成し、前記サービス要求は、ネットワークアドレスの形態の前記エージェント指示を含むこと、
    b)前記構成要素インスタンスに関連する任意のエージェントを生成し、及び、
    c)前記エージェントに、前記各ネットワークアドレスに従って他の任意のエージェントに接続させること、を含む請求項110に記載の方法。
  112. 前記エージェントに、
    a)別のエージェントとの前記接続を介してデータを受け取らせ、
    b)前記受け取ったデータに従って略図を決定させ、前記略図は前記構成要素を実装するために使用されること、を行わせることを含む請求項103から111のいずれか一つに記載の方法。
  113. エージェントヘッダ及びエージェントペイロードを生成することを含み、
    前記エージェントヘッダは、前記エージェントを別の構成要素に転送させ、それによって接続を確立できるようにするルーティング情報を含み、
    前記ペイロードは、転送されるデータを含む請求項103から112のいずれか一つに記載の方法。
  114. 構成要素に基づいたデータ処理において使用されるエージェントを実装する装置であって、
    a)エージェントの指示の受け取り、
    b)エージェントを生成し、及び、
    c)前記エージェントの指示に従って、前記エージェントに別のエージェントとの接続を確立させること、を行う処理システムを含む装置。
  115. 前記処理システムは請求項103から113のいずれか一つに記載の方法を実行するように成される請求項114に記載の装置。
  116. 構成要素に基づいたデータ処理において使用されるエージェントを実装するコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項103から113のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  117. データ処理サービスを提供する動的な構成要素を提供する方法であって、
    a)実行されるサービスを決定し、
    b)前記サービスを行う少なくとも二つの方法を決定し、
    c)受け取ったデータに従って前記方法の中から一つを選択する方法を決定し、及び、
    d)前記データ処理サービスを実現する構成要素を定義する構成要素の仕様を生成すること、を含む方法。
  118. 前記サービスを行う方法は各構成要素を利用し、
    前記方法は、
    a)前記所望のサービスを実装する構成要素を選択し、
    b)構成要素略図を定義し、前記構成要素略図は、少なくとも、
    i)前記サービスを行う各方法の任意の共通部分を表す第1の略図部、
    ii)前記サービスを行う各方法の任意の異なる部分を表す少なくとも二つの第2の略図部、
    iii)前記第2の略図部分をそれぞれ一つ選択するセレクタエージェント、を含むこと、を含む請求項117に記載の方法。
  119. 各入力又は出力に関連するエージェントを定義することを含み、前記エージェントは、前記定義された相互接続に従って別の構成要素のエージェントと協働するように成され、それによって前記構成要素のポート間でデータを転送できるようにする請求項118に記載の方法。
  120. データ処理サービスを提供する動的構成要素を提供する装置であって、
    a)実行されるサービスを決定し、
    b)前記サービスを行う少なくとも二つの方法を決定し、
    c)受け取ったデータに従って前記方法の中から一つを選択する方法を決定し、及び、
    d)前記データ処理サービスを実現する構成要素を定義する構成要素の仕様を生成する処理システムを含む装置。
  121. 前記処理システムは請求項117から119のいずれか一つに記載の方法を行うように成される請求項120に記載の装置。
  122. データ処理サービスを提供する動的構成要素を提供するコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項117から119のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  123. 処理システムを使用して動的構成要素において実現されるサービスを提供する方法であって、
    前記処理システムに、
    a)サービス要求を受け取らせ、
    b)前記受け取ったサービス要求に応答して、各構成要素インスタンスを生成させ、
    c)処理されるデータを受け取らせ、
    d)前記受け取ったデータに従って前記データを処理する方法を選択させ、
    e)前記各構成要素インスタンスを使用して前記データを処理させ、及び、
    f)前記処理されたデータを出力に供給させること、を含む方法。
  124. 前記構成要素は複数のエージェントを含み、
    前記方法は、前記処理システムに、前記構成要素の各入力及び出力に関連するエージェントを生成させることを含み、
    前記エージェントは、他の構成要素のエージェントと協働するように成され、それによって前記入力においてデータを受け取り、かつ前記出力からデータを出力できるようにする請求項123に記載の方法。
  125. a)前記サービス要求から他の構成要素との接続を決定し、及び、
    b)前記決定された接続に従って、前記エージェントに他の構成要素のエージェントと協働させること、を含む請求項124に記載の方法。
  126. 前記構成要素インスタンスは、少なくとも、
    a)前記サービスを行う各方法の任意の共通部分を表す第1の略図部、
    b)前記サービスを行う各方法の任意の異なる部分を表す少なくとも二つの第2の略図部、及び、
    c)前記第2の略図部分のそれぞれ一つを選択するセレクタエージェント、
    を含む構成要素略図によって定義され、
    前記方法は、
    i)前記第1の略図部分の少なくもいくらかを実装し、
    ii)前記セレクタエージェントに前記第2の略図部分のうちの一つを選択させ、及び、
    iii)前記略図部分の残りの部分を実装すること、を含む請求項124又は125に記載の方法。
  127. 前記処理システムは、通信ネットワークを介して一つ又は複数の構成要素処理システムに接続され、
    各構成要素処理システムは各構成要素を実装するように成され、
    前記方法は、
    a)前記定義された構成要素の組み合わせに従って、一つ又は複数のサービス要求を生成し、及び、
    b)前記通信ネットワークを介して前記サービス要求を各構成要素処理システムに転送し、それによって各構成要素を実装させること、を含む請求項128に記載の方法。
  128. 処理システムを使用して動的構成要素において実現されるサービスを提供する装置であって、
    前記処理システムは、
    a)サービス要求を受け取り、
    b)前記受け取ったサービス要求に応答して、各構成要素インスタンスを生成し、
    c)処理されるデータを受け取し、
    d)前記受け取ったデータに従って前記データを処理する方法を選択し、
    e)前記各構成要素インスタンスを使用して前記データを処理し、及び、
    f)前記処理されたデータを出力に供給する、ように成される装置。
  129. 前記処理システムは請求項123から127のいずれか一つに記載の処理システムを使用して動的構成要素において実現されるサービスを提供する方法を実行するように成される請求項128に記載の装置。
  130. 処理システムを使用して動的構成要素において実現されるサービスを提供するコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項123から127のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  131. 構成要素に基づいたデータ処理スキームにおいて二つの各構成要素間に複数のエージェントの接続を提供する方法であって、
    a)各構成要素にバンドリング下位構成要素を提供し、及び、
    b)接続を定義し、前記接続は、
    i)前記バンドリング下位構成要素の第1のエージェント及び前記各構成要素の各エージェント、及び、
    ii)各バンドリング下位構成要素の第2のエージェントとの間のものであること、を含む方法。
  132. a)前記定義された接続に従って、前記エージェントに、定義された接続を確立させ、
    b)前記第2のエージェントに、前記二つの構成要素の複数のエージェントの詳細を交換させ、及び、
    c)前記交換された詳細に従って、前記二つの構成要素のエージェントを相互接続させること、を含む請求項137に記載の方法。
  133. 各エージェントは各アドレスを有し、
    前記方法は、
    a)各バンドリング下位構成要素に、前記各構成要素の前記複数のエージェントのアドレス及び他のバンドリング下位構成要素の前記第2のエージェントのアドレスを提供し、
    b)前記各エージェントアドレスに従って、各バンドリング下位構成要素の前記第1のエージェントに、前記各構成要素の前記複数のエージェント及び前記他のバンドリング下位構成要素の前記第2のエージェントに接続させ、
    c)前記第2のエージェントに前記第1のエージェントのアドレスを交換させ、
    d)前記第1のエージェントのそれぞれに関連する第1の一時的エージェントを生成し、
    e)前記交換されたアドレスに従って、前記第1の一時的エージェントを相互接続し、
    f)前記第1のエージェント及び第1の一時的エージェントに、各構成要素上の前記複数のエージェントのアドレスを交換させ、及び、
    g)前記交換されたアドレスに従って、前記複数のエージェントを接続させること、を含む請求項132に記載の方法。
  134. 前記エージェントをバンドリングする方法は、
    前記第1のバンドリング構成要素に、
    a)各エージェントからペイロード及びヘッダを含むメッセージを取得させ、
    b)各メッセージから前記ペイロードを抽出させ、
    c)前記ペイロードを連結させ、及び、
    d)前記受け取ったメッセージの前記ヘッダに基づいて、前記連結されたペイロード及びヘッダを含むメッセージを生成させること、を含む請求項132に記載の方法。
  135. 前記エージェントのバンドリング解除する方法は、
    前記第2のバンドリング構成要素に、
    a)前記バンドリング構成要素からペイロード及びヘッダを含むメッセージを取得させ、
    b)前記メッセージから前記ペイロードを抽出させ、
    c)前記ペイロードを複数のペイロードに連結解除させ、及び、
    d)前記複数のエージェントのそれぞれに各メッセージを生成させ、各メッセージは、前記受け取ったメッセージの前記ヘッダに基づいて、各ペイロード及びヘッダを含むこと、を含む請求項134に記載の方法。
  136. バンドリング構成要素をシーケンス内に配置し、それによって階層バンドルを定義することを含む請求項131から135のいずれか一つに記載の方法。
  137. バンドリング構成要素を直列的に配置し、それによって前記バンドル内に異なるレベルを定義することを含む請求項136に記載の方法。
  138. バンドリング構成要素を並列的に配置し、それによって階層レベル内にエージェントのグループを定義することを含む請求項136に記載の方法。
  139. 処理システムを使用して、構成要素に基づいたデータ処理スキームにおいて二つの各構成要素間に複数のエージェントの接続を提供する装置であって、
    前記処理システムは、
    a)各構成要素にバンドリング下位構成要素を提供し、及び、
    b)相互接続し、
    i)バンドリング構成要素エージェントを前記各構成要素内の前記複数のエージェントの各エージェントに相互接続し、及び、
    ii)各バンドリング下位構成要素の各エージェントを相互接続するように成される装置。
  140. 前記処理システムは請求項131から138のいずれか一つに記載の方法を実行するように成される請求項149に記載の装置。
  141. 処理システムを使用して、構成要素に基づいたデータ処理スキームにおいて二つの各構成要素間に複数のエージェントの接続を提供するコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項131から138のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  142. ルート処理システム及び複数の構成要素処理システムを使用してコードを構築する方法であって、
    各構成要素処理システムは、略図に定義された各構成要素を実装するように成され、
    前記方法は、
    a)前記ルート処理システムに、ペイロードを含むエージェントを生成させ、
    b)前記エージェントをシーケンス内の複数の構成要素に、最後の構成要素から最初の構成要素へと転送し、
    c)前記最初の構成要素を前記エージェントと対話させ、それによって前記ペイロードにデータを提供し、
    d)前記エージェントを前記最初の構成要素から次の構成要素へ転送し、
    e)前記次の構成要素を前記エージェントと対話させ、それによって前記ペイロードにデータを提供し、
    f)前記最後の構成要素が前記ペイロードと対話するまで、ステップ(d)及び(e)を繰り返し、及び、
    g)前記エージェントを前記ルート処理システムに転送し、それによってコードを提供すること、を含む方法。
  143. 前記構成要素のうちの一つ又は複数と対話して前記構成要素にデータを提供するさらなる構成要素を含む請求項142に記載の方法。
  144. 前記エージェントはエージェントをバンドリングしたものであり、
    前記方法は、
    a)バンドリング構成要素を提供し、
    b)オプションとして、前記定義された構成要素略図に従って、前記エージェントバンドルを前記バンドリング構成要素に転送し、
    c)前記バンドルを選択的にバンドリング解除し、及び、
    d)前記エージェントのうちの選択されたエージェントを前記構成要素に転送し、それによって前記構成要素が前記各エージェントと対話できるようにすること、を含む請求項142又は請求項143に記載の方法。
  145. 前記エージェントバンドルは階層バンドルである請求項144に記載の方法。
  146. 前記バンドル内の前記エージェントは前記コードの異なる部分を表し、
    前記方法は、
    a)前記バンドルを前記ルート処理システムにおいて受け取り、及び、
    b)前記ペイロードから前記データを抽出し、それによって前記コードを形成すること、を含む請求項144又は請求項145に記載の方法。
  147. コードを構築する装置であって、ルート処理システム及び複数の構成要素処理システムを備え、
    各構成要素処理システムは、略図に定義された各構成要素を実装するように成され、
    前記装置は請求項142から146のいずれか一つに記載の方法を実行するように成される装置。
  148. 処理システムを使用して、略図に従ってコードを構築するコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項142から146のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
  149. ユーザにデータを処理させる方法であって、
    a)各エンティティによって実装される各データ処理サービスをそれぞれ表す複数の構成要素の詳細を提供し、
    b)ユーザに、データ処理サービスシーケンスを定義する構成要素の組み合わせを定義させ、及び、
    c)前記定義された組み合わせに従って前記データ処理サービスを行わせること、を含む方法。
  150. a)ユーザに構成要素を選択させ、及び、
    b)前記データ処理サービスをそれぞれ定義し、選択された各構成要素の構成要素の仕様及び各ポートにおいて受け取る又は各ポートから出力するデータを定義するポート仕様をユーザに提供すること、とを含む請求項149に記載の方法。
  151. 各構成要素を実装するエンティティから前記構成要素の前記構成要素の仕様を得ることを含む請求項150に記載の方法。
  152. 通信ネットワークを介してユーザエンドステーションに接続された一つ又は複数の処理システムを使用して実装され、
    a)前記ユーザに前記エンドステーションを使用して前記構成要素を選択させ、及び、
    b)前記構成要素の仕様を前記処理システムの一つ又は複数から前記エンドステーションに転送すること、を含む請求項150又は請求項151に記載の方法。
  153. ユーザに、
    a)前記構成要素を実装する前記エンティティの指示、
    b)前記エンティティの地理的場所の指示、
    c)前記構成要素の実装期間の指示、
    d)前記各構成要素を実装に関連する費用の指示、及び、
    e)前記構成要素の出来のよさを示す格付け、
    の少なくとも一つを含むパフォーマンス情報に従って前記構成要素を選択させることを含む請求項150から請求項152のいずれか一つに記載の方法。
  154. a)前記エンドステーションに、前記構成要素の組み合わせに従ってサービス要求を生成させ、及び、
    b)前記サービス要求をエンティティ処理システムに転送し、それによって前記エンティティ処理システムが、前記構成要素によって定義される前記データ処理を行えるようにすること、を含む請求項150から請求項153のいずれか一つに記載の方法。
  155. 前記構成要素の組み合わせは前記構成要素間の接続を定義し、
    前記サービス要求は、前記エンドステーションが前記構成要素の仕様から決定した接続情報を含む請求項154に記載の方法。
  156. 前記構成要素処理システムに、
    a)前記受け取ったサービス要求に従って、一つ又は複数の構成要素インスタンスを生成させ、
    b)各構成要素インスタンスに、
    i)他の構成要素と協働させてデータを送らせ、及び/又は、データを受け取らせ、及び、
    ii)前記要求されたデータ処理サービスを行わせる、ことを含む請求項155に記載の方法。
  157. ユーザにデータを処理させる装置であって、
    a)各エンティティによって実装される各データ処理サービスをそれぞれ表す複数の構成要素の詳細を提供し、
    b)ユーザに、データ処理サービスシーケンスを定義する構成要素の組み合わせを定義させること、及び、
    c)前記定義された組み合わせに従って前記データ処理サービスを実行させること、を行うシステムを含む装置。
  158. 請求項150から156のいずれか一つに記載の方法を実行するように成される請求項157に記載の装置。
  159. ユーザにデータを処理させるコンピュータプログラムプロダクトであって、適切な処理システムで実行されると、前記処理システムに請求項150から156のいずれか一つに記載の方法を実行させるコンピュータコードを含むコンピュータプログラムプロダクト。
JP2005502080A 2002-11-06 2003-11-06 コード生成 Pending JP2006506757A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
AU2002952510A AU2002952510A0 (en) 2002-11-06 2002-11-06 Code genertation
US42485902P 2002-11-08 2002-11-08
AU2003901926A AU2003901926A0 (en) 2003-04-22 2003-04-22 Code generation
PCT/AU2003/001474 WO2004042639A1 (en) 2002-11-06 2003-11-06 Code generation

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2011274319A Division JP5456756B2 (ja) 2002-11-06 2011-12-15 構成要素を使用してコンピュータによる実行可能なコードを生成する方法及び装置

Publications (1)

Publication Number Publication Date
JP2006506757A true JP2006506757A (ja) 2006-02-23

Family

ID=32314656

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2005502080A Pending JP2006506757A (ja) 2002-11-06 2003-11-06 コード生成
JP2011274319A Expired - Lifetime JP5456756B2 (ja) 2002-11-06 2011-12-15 構成要素を使用してコンピュータによる実行可能なコードを生成する方法及び装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2011274319A Expired - Lifetime JP5456756B2 (ja) 2002-11-06 2011-12-15 構成要素を使用してコンピュータによる実行可能なコードを生成する方法及び装置

Country Status (4)

Country Link
EP (3) EP2385463B1 (ja)
JP (2) JP2006506757A (ja)
CA (1) CA2503629C (ja)
WO (1) WO2004042639A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012230710A (ja) * 2004-05-20 2012-11-22 Cord Bally Corp Pty Ltd 計算機が実行可能なコードを生成する方法及び計算機が実行可能なコードを生成するために使用されるコンポーネントを提供する方法
US9521209B2 (en) 2002-11-06 2016-12-13 Code Valley Corp Pty Ltd Code generation
US10885016B2 (en) 2016-09-06 2021-01-05 Kabushiki Kaisha Toshiba System, client device, server device, and program

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8832178B2 (en) 2002-11-06 2014-09-09 Noel William Lovisa Service implementation
US8589861B2 (en) 2002-11-06 2013-11-19 Code Valley Corp Pty Ltd Code generation
RU2722239C1 (ru) * 2019-11-26 2020-05-28 Общество с ограниченной ответственностью «ПИРФ» (ООО «ПИРФ») Способ создания и использования формата исполняемого файла с динамическим расширяемым заголовком
US11570099B2 (en) * 2020-02-04 2023-01-31 Bank Of America Corporation System and method for autopartitioning and processing electronic resources

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07104981A (ja) * 1993-09-30 1995-04-21 Hitachi Software Eng Co Ltd オブジェクトリンク情報を用いたプログラム構築装置
US5553282A (en) * 1994-12-09 1996-09-03 Taligent, Inc. Software project history database and method of operation
IL124916A (en) * 1995-12-15 2002-02-10 Object Dynamics Corp Method and system for constructing software components
US5920868A (en) * 1996-07-03 1999-07-06 Sun Microsystems, Inc. Cataloging apparatus for facilitating the re-use of distributed objects in a distributed object system
US6401114B1 (en) 1997-05-01 2002-06-04 Stratum Technologies Corporation Method and apparatus for dynamic programming across a computer network
US6256771B1 (en) * 1997-10-16 2001-07-03 At&T Corp. Method and apparatus for providing a dynamic service composition software architecture
US6249905B1 (en) * 1998-01-16 2001-06-19 Kabushiki Kaisha Toshiba Computerized accounting system implemented in an object-oriented programming environment
US6484214B1 (en) * 1998-03-05 2002-11-19 Mcdonnell Douglas Helicopter Company Method for distributed object communications based on dynamically acquired and assembled software components
DE19837871C2 (de) 1998-08-20 2000-06-08 Manfred Broy Verfahren zum automatischen Erzeugen eines Programms
US20010051928A1 (en) * 2000-04-21 2001-12-13 Moshe Brody Protection of software by personalization, and an arrangement, method, and system therefor
US7171693B2 (en) * 2000-05-12 2007-01-30 Xtreamlok Pty Ltd Information security method and system
DE10041072A1 (de) * 2000-08-22 2002-03-14 Siemens Ag Verfahren zur automatischen Erzeugung von Programmcode
US20020055956A1 (en) 2000-09-08 2002-05-09 Krasnoiarov Boris Andreyevich Method and system for assembling concurrently-generated content
US7020868B2 (en) * 2000-11-22 2006-03-28 General Electric Company Graphic application development system for a medical imaging system
EP1211598A1 (en) 2000-11-29 2002-06-05 Texas Instruments Incorporated Data processing apparatus, system and method
CA2440031C (en) * 2001-02-22 2013-07-02 Accenture Global Services Gmbh Distributed development environment for building internet applications by developers at remote locations
EP1246054A1 (en) * 2001-03-30 2002-10-02 BRITISH TELECOMMUNICATIONS public limited company Creating software programs from software components
JP2003005977A (ja) * 2001-06-26 2003-01-10 Ricoh Co Ltd ソフトウェア供給システム
JP2003140895A (ja) * 2001-11-06 2003-05-16 Ricoh Co Ltd 組み替え可能なソフトウェアを持つ検査システム
JP3713466B2 (ja) * 2002-02-18 2005-11-09 株式会社東芝 プログラム作成支援方法、プログラム作成支援プログラム及びプログラム作成支援装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9521209B2 (en) 2002-11-06 2016-12-13 Code Valley Corp Pty Ltd Code generation
US10140098B2 (en) 2002-11-06 2018-11-27 Noel William Lovisa Code generation
JP2012230710A (ja) * 2004-05-20 2012-11-22 Cord Bally Corp Pty Ltd 計算機が実行可能なコードを生成する方法及び計算機が実行可能なコードを生成するために使用されるコンポーネントを提供する方法
JP2014044748A (ja) * 2004-05-20 2014-03-13 Cord Bally Corp Pty Ltd 第1のコンポーネントと第2のコンポーネントとの間のネゴシエーションを実行する方法及びネゴシエーションを実行するコンポーネント
US10885016B2 (en) 2016-09-06 2021-01-05 Kabushiki Kaisha Toshiba System, client device, server device, and program

Also Published As

Publication number Publication date
EP1565813A4 (en) 2009-06-10
JP2012104134A (ja) 2012-05-31
EP1565813B1 (en) 2019-01-09
EP2385463A2 (en) 2011-11-09
EP2385463B1 (en) 2020-04-29
EP2385463A3 (en) 2012-04-25
WO2004042639A1 (en) 2004-05-21
EP2390785A3 (en) 2012-10-24
JP5456756B2 (ja) 2014-04-02
CA2503629A1 (en) 2004-05-21
CA2503629C (en) 2014-07-08
EP2390785A2 (en) 2011-11-30
EP1565813A1 (en) 2005-08-24

Similar Documents

Publication Publication Date Title
US8589861B2 (en) Code generation
Greenfield et al. Software factories: assembling applications with patterns, models, frameworks and tools
JP5456756B2 (ja) 構成要素を使用してコンピュータによる実行可能なコードを生成する方法及び装置
US10140098B2 (en) Code generation
US7454399B2 (en) Application integration system and method using intelligent agents for integrating information access over extended networks
Perrouin et al. Reconciling automation and flexibility in product derivation
Ziadi et al. Software product line engineering with the UML: Deriving products
Zimmermann et al. Combining pattern languages and reusable architectural decision models into a comprehensive and comprehensible design method
US20040064805A1 (en) Enterprise scoped software factory
Hausmann et al. Model-based discovery of Web Services
US8196089B2 (en) Pattern-based development of computer system solutions
Brown et al. On components and objects: the foundations of component-based development
WO2006122494A1 (fr) Procede et systeme de description et de mise au point d&#39;un systeme d&#39;application a comportement dynamique
Lytra et al. Supporting consistency between architectural design decisions and component models through reusable architectural knowledge transformations
Jézéquel Model-driven engineering for software product lines
Binder et al. Towards a standards-based domain specific language for industry 4.0 architectures
Srinivasan et al. CODE: a development environment for OWL-S Web services
Lytra et al. Constraint-based consistency checking between design decisions and component models for supporting software architecture evolution
Kapova et al. Application of advanced model-driven techniques in performance engineering
US20120278787A1 (en) Collaborative realtime planning using a model driven architecture and iterative planning tools
Eslamichalandar et al. Service composition adaptation: An overview
Zúñiga-Prieto et al. An incremental and model driven approach for the dynamic reconfiguration of cloud application architectures
Bresciani et al. The Tropos analysis process as graph transformation system
Ali et al. Perspectives to promote modularity, reusability, and consistency in multi-language systems
AU2003275766B2 (en) Code generation

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051109

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061017

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081106

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091215

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100310

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100317

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100514

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100608

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100907

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100914

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110118

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110408

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110415

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110517

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110524

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110719

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110719

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110816

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110816

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111215

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20111220