(57)【特許請求の範囲】
【請求項１】
クライアントにインストールされた実行可能な旧プログラムを実行可能な新プログラムに更新するための方法であって、プロセッサと１つまたは複数のメモリとを備えた処理装置を用いて、前記実行可能な旧プログラムと前記実行可能な新プログラムとの間の最終差分結果を発生させると共に当該発生させた最終差分結果を使用して前記更新を行う方法であり、
前記旧プログラムは、データを含むアドレス可能なユニットであるエントリーを備え、前記エントリーの少なくとも一部は、当該エントリー以外における当該旧プログラム内の他のエントリーを参照するためのレフアレンスを有するレフアレンスエントリーであり、
前記新プログラムは、データを含むアドレス可能なユニットであるエントリーを備え、前記エントリーの少なくとも一部は、当該エントリー以外における当該新プログラム内の他のエントリーを参照するためのレフアレンスを有するレフアレンスエントリーであり、
該方法が、
（ａ）前記プロセッサが、前記メモリに記憶された前記旧プログラムを走査し、当該旧プログラムの前記レフアレンスエントリーの各々の前記レフアレンスを固定値に置換すると共に、前記レフアレンスによって参照される前記エントリーにラベルマークを付加することにより、第１の修正された旧プログラムを生成し、当該第１の修正された旧プログラムを前記メモリに記憶する過程と、
（ｂ）前記プロセッサが、前記メモリに記憶された前記新プログラムを走査し、当該新プログラムの前記レフアレンスエントリーの各々の前記レフアレンスを固定値に置換すると共に、前記レフアレンスによって参照される前記エントリーにラベルマークを付加することにより、第１の修正された新プログラムを生成し、当該第１の修正された新プログラムを前記メモリに記憶する過程と、
（ｃ）前記プロセッサが、前記メモリに記憶された前記第１の修正された旧プログラムの前記ラベルマークの各々に区別ラベル番号を割り当てることにより、前記旧プログラムの前記レフアレンスと前記ラベルマークとの第１の変換表を生成し、当該第１の変換表を前記メモリに記憶する過程と、
（ｄ）前記プロセッサが、前記メモリに記憶された前記第１の修正された旧プログラムと前記メモリに記憶された前記第１の修正された新プログラムとの差分を、当該差分を決定するためのファイル差分ユーティリティを用いて求めることにより、前記第１の修正された旧プログラムから前記第１の修正された新プログラムを生成するための命令のリストを含む第１の差分表を生成し、当該第１の差分表を前記メモリに記憶する過程と、
（ｅ）前記プロセッサが、
ｉ）前記新プログラムにおいて削除又は挿入される前記エントリーを決定するため、前記メモリに記憶された前記第１の差分表を解析し、
ii)参照されている前記エントリーが前記旧プログラムに存在することが示されている場合には、前記メモリに記憶された前記第１の変換表において対応するエントリーから前記区別ラベル番号をコピーすることにより、あるいは、
参照されている前記エントリーが前記新プログラムに挿入されることが示されている場合には、前記第１の変換表の前記区別ラベル番号とは異なる区別ラベル番号を挿入することにより、
前記新プログラムの前記レフアレンスと前記ラベルマークとの第２の変換表を生成し、当該第２の変換表を前記メモリに記憶する過程と、
（ｆ）前記プロセッサが、前記メモリに記憶された前記第１の修正された旧プログラムの前記ラベルマークをコピーすると共に、前記メモリに記憶された前記旧プログラムの前記レフアレンスエントリーの前記レフアレンスを、前記過程（ｃ）において前記メモリに記憶された前記第１の変換表における前記区別ラベル番号であって当該旧プログラムの当該レフアレンスエントリーの参照先のエントリーに対応する位置に付加された前記区別ラベル番号によって置換することにより、第２の修正された旧プログラムを生成し、当該第２の修正された旧プログラムを前記メモリに記憶する過程と、
（ｇ）前記プロセッサが、前記メモリに記憶された前記第１の修正された新プログラムの前記ラベルマークをコピーすると共に、前記メモリに記憶された前記新プログラムの前記レフアレンスエントリーのレフアレンスを、前記過程（ｅ）において前記メモリに記憶された前記第２の変換表における前記区別ラベル番号であって当該新プログラムの当該レフアレンスエントリーの参照先のエントリーに対応する位置に付加された前記区別ラベル番号によって置換することにより、第２の修正された新プログラムを生成し、当該第２の修正された新プログラムを前記メモリに記憶する過程と、
（ｈ）前記プロセッサが、
前記第２の修正された旧プログラムと前記第２の修正された新プログラムとの対応するエントリーに含まれているレフアレンスに相違がある場合には、前記メモリに記憶された前記第１の差分表の命令を当該相違を含まないエントリーのみに対応する命令によって置換すると共に、当該相違を反映するための修正命令を、前記メモリに記憶された前記第１の差分表に付加し、
前記最終差分結果と前記旧プログラムに基づいて前記新プログラムを構成するために前記旧プログラムに対して挿入すべきデータ及び前記旧プログラムのデータを置換すべきデータを、前記メモリに記憶された前記第１の差分表に付加することにより、
前記第２の修正された旧プログラムから前記第２の修正された新プログラムを生成するための前記最終差分結果を生成し、当該最終差分結果を前記メモリに記憶する過程と、
を具備することを特徴とする方法。
【請求項２】
第２のプロセッサと１つまたは複数の第２のメモリを備えた第２の処理装置において実行される方法であって、前記１つまたは複数の第２のメモリのいずれかの記憶領域に格納された実行可能な旧プログラムから実行可能な新プログラムを発生させて当該新プログラムを前記第２のメモリに格納することにより、当該第２のメモリに格納された前記実行可能な旧プログラムの更新を実行するための方法であり、
前記旧プログラムは、データを含むアドレス可能なユニットであるエントリーを備え、前記エントリーの少なくとも一部は、当該エントリー以外における当該旧プログラム内の他のエントリーを参照するためのレフアレンスを有するレフアレンスエントリーであり、
前記新プログラムは、データを含むアドレス可能なユニットであるエントリーを備え、前記エントリーの少なくとも一部は、当該エントリー以外における当該新プログラム内の他のエントリーを参照するためのレフアレンスを有するレフアレンスエントリーであり、
該方法は、
（ａ）前記第２のプロセッサが、前記請求項１の前記過程（ｈ）によって生成された前記最終差分結果を受信する過程と、
（ｂ）前記第２のプロセッサが、前記第２のメモリに記憶された前記旧プログラムを走査し、当該旧プログラムの前記レフアレンスエントリーの各々の前記レフアレンスを固定値に置換すると共に、前記レフアレンスによって参照される前記エントリーにラベルマークを付加することにより、第１の修正された旧プログラムを生成し、当該第１の修正された旧プログラムを前記第２のメモリに記憶する過程と、
（ｃ）前記第２のプロセッサが、前記第２のメモリに記憶された前記第１の修正された旧プログラムの前記ラベルマークの各々に区別ラベル番号を割り当てることにより、前記旧プログラムの前記レフアレンスと前記ラベルマークとの第１の変換表を生成し、当該第１の変換表を前記第２のメモリに記憶する過程と、
（ｄ）前記第２のプロセッサが、前記第２のメモリに記憶された前記第１の修正された旧プログラムの前記ラベルマークをコピーすると共に、前記第２のメモリに記憶された前記旧プログラムの前記レフアレンスエントリーの前記レフアレンスを、前記過程（ｃ）において前記第２のメモリに記憶された前記第１の変換表における前記区別ラベル番号であって当該旧プログラムの当該レフアレンスエントリーの参照先のエントリーに対応する位置に付加された前記区別ラベル番号によって置換することにより、第２の修正された旧プログラムを生成し、当該第２の修正された旧プログラムを前記第２のメモリに記憶する過程と、
（ｅ）前記第２のプロセッサが、前記第２のメモリに記憶された前記第２の修正された旧プログラムに対して、前記最終差分結果に含まれる修正命令を適用することにより、第２の修正された新プログラムを生成し、当該第２の修正された新プログラムを前記第２のメモリに記憶する過程と、
（ｆ）前記第２のプロセッサが、
ｉ）前記新プログラムにおいて削除又は挿入される前記エントリーを決定するため、前記第２のメモリに記憶された前記最終差分結果を解析し、
ii)参照されている前記エントリーが前記旧プログラムに存在することが示されている場合には、前記第２のメモリに記憶された前記第１の変換表において対応するエントリーから前記区別ラベル番号をコピーすることにより、あるいは、
参照されている前記エントリーが前記新プログラムに挿入されることが示されている場合には、前記第１の変換表の前記区別ラベル番号とは異なる区別ラベル番号を挿入することにより、
前記新プログラムの前記レフアレンスと前記ラベルマークとの第２の変換表を生成し、当該第２の変換表を前記第２のメモリに記憶する過程と、
（ｇ）前記第２のプロセッサが、前記第２の変換表の前記ラベルマークの値に対応する位置に、当該第２の変換表における当該ラベルマークのアドレスを設定することにより、前記第２の変換表を逆にして、前記新プログラムの前記レフアレンスと前記ラベルマークとの前記第３の変換表を生成する過程と、
（ｈ）前記第２のプロセッサが、前記第３の変換表に基づいて、前記第２のメモリに記憶された前記第２の修正された新プログラムの前記レフアレンスエントリーの前記ラベルマークを前記レフアレンスによって置換することにより、前記新プログラムを再構成する過程と、
を具備することを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の分野】
本発明は一般的にコンピユータプログラムの更新に関する。
【０００２】
【発明の背景】
遠隔通信、特にインターネット（Internet）の利用の益々の増加に伴い、インターネット上での商業的取引、電子的スーパーマーケット、インターネット上でのコンピユータ製品の流通、その他の様な新しい応用が導入されて来た。
【０００３】
普通のユーザー用として該インターネットへのアクセスの普及と利用可能性との両者は製品の流通を助長するのみでなく、この目的で該インターネットインフラストラクチャを使用する、遠隔のサイトからの懸案製品のアップグレードと更新をも助長して来た。
【０００４】
コンピユータプログラムの特定の例に戻ると、旧プログラムが遠隔のクライアントのサイトでインストールされ、新プログラムへのアップグレードを受けるが、そこでは後者は旧プログラムに比して幾つかの修正を含んでいる。
【０００５】
遠隔のクライアイントのサイトで（ネットワークを通して）該更新を行うために、好ましくはプロバイダーは該旧プログラムと新プログラムとの間の差分（difference）を表す差分結果（difference result）を発生させ、該最終フアイル（resulting file）を該インターネットを通して該遠隔のクライアントのサイトへ送る。クライアントは今度は、適当なユーテリテイを呼び出すが、それは該旧プログラム内の該差分を組み込み、それにより該クライアントのサイトで望ましい新プログラムを発生させる。該指定された手順は、一方で該プロバイダが該クライアントのサイトにいる必要がなく、他方で該新プログラム全体でなくその差分結果だけが該クライアントへ送られる点で、明らかな利点をもたらしている。例えば、修正されるオフイス’９７（Office '97）のパッケージ｛米国、マイクロソフト社（Microsoft Inc. USA）から商業的に入手可能である｝がクライアントに送られべき場合を仮定すると、該パッケージのプログラムの圧縮されたサイズは数十メガバイトを占めるので、そして更に該インターネットの比較的低いスループットと該クライアント端末でのモデムのスループット（例えば、平均３３，６００ｂｐｓ）のボトルネックとを考慮すると、該ネットワークを通して新しいパッケージ全体を伝送することが実際上適していないことは容易に理解される。
【０００６】
通常、該差分結果の量は生の新プログラム（raw new program）のそれより著しく少なく、従って新プログラム全体よりも該差分結果データのみを送る方が効率的である。これは、該旧プログラムと新プログラムとの間の差分結果を発生させるため本質的に公知の｛ユニックス（UNIX）オペレーテイングシステムのディフ（diff）ユーテリテイ又はエフエスエフ（SFS）からのジーエヌユー（GNU）プロジェクトの同様なディフユーテリテイにより使用される技術の様な｝フアイル差分応用（file difference application）を適用するにも拘わらず、そして下記で詳細に説明される様に、例え（該新プログラムを発生させるために）該旧プログラムに導入される修正が非常に少なくても、通常は比較的多量のデータとなる。かくして、例えば、該新プログラムをもたらすために、２，３の新しい命令が挿入されそして２，３の他のものが削除される旧プログラムを考えよう。該旧プログラムと新プログラムとの間の差分結果は該挿入され削除される命令のみならず、ジャンプする、条件付きジャンプする、関数をコールする、本質的に、該コマンドの組み込み部分（integral part）として目標アドレス（レフアレンス）を指定する、データ及び恐らくはその他をレフアレンスする（レフアレンスエントリーとして集合的に参照される−下記用語集を見よ）全てのエントリーも表すことになる。幾つかの命令が付加され他が削除される事実により後者のアドレスは変えられるかも知れない。修正されたレフアレンスエントリーは挿入されたものではなく、そして削除されたものでないことも明らかなことを注意することは重要である。事実、唯１つの新しいエントリーの挿入が、差分結果に自然に反映されそして明らかにその量を膨張させる複数の変更されたレフアレンスエントリーとなる。
【０００７】
従って、該旧及び新プログラム間の実際に変化は非常に限られている事実にも拘わらず、最終フアイル差分は比較的大きいことが評価される。同じ問題は、プログラムの様に組立られ、指定された仕方で更新を受けるデータ表（下記用語集参照）を使う他の応用でも遭遇される。
【０００８】
従って差分結果を達成するためにこれまでに公知の技術に比較して、旧プログラムと新プログラムとの間で著しく少ない量の差分結果となる効率的ツールを提供するニーヅが当該技術には存在する。該提案されたツールは、それに限定はされないが、インクレメンタルなソフトウエア更新とバージヨン管理（incremental software updates and version control）を含む種々の応用に有用である。
【０００９】
当該技術には、旧データ表と新データ表との間で非常に僅かな量の差分結果となる効率的ツールを提供するなおもう１つのニーヅが存在する。
【００１０】
【用語集】
下記は用語の用語集であるが、その幾つかは従来からのものであり、他は新造された。
【００１１】
データ表（Data Table ）−エントリー（entries）の表であるが、各々は異なるサイズであってもよい。
【００１２】
エントリー（Entry）−データ表はエントリーを含んでおり、該エントリーの各々はデータを含むアドレス可能なユニットである。
【００１３】
アドレス−１つのエントリーに独特に割り当てられそれによりそのエントリーがアクセスされる番号である。下記説明では、用語エントリーとアドレスは時には互換性を持って（interchangeably）使用される。
【００１４】
レフアレンス（Reference）−該データ表内のエントリーの中に現れるデータの１部であり、同じデータ表から幾つかの他のエントリーを参照するために使用される。レフアレンスはアドレスか又はアドレスを計算するために使用される番号か何れかとすることが出来る。レフアレンスを含むエントリーはレフアレンスエントリーとも呼称される。
【００１５】
ラベル（Label）−エントリーの抜粋記号（abstruct notation）であり、それはレフアレンスを通して同じデータ表のもう１つのエントリーにより参照される。
【００１６】
旧データ表（Old Data Table）−新データ表（又は新データ表の部分）を発生させるために更新される（ことによると遠隔のサイトから）べきデータ表（又はデータ表の部分）。遠隔更新に関する限り、必ずしもそうではないが、通常はそれはインターネットの様な通信ネットワークを通して伝送される。唯説明の便宜のために、説明は主としてインターネットに焦点を当てているが、本発明はこの特定の例に決して拘束されないことは注意されるべきである。
【００１７】
一例として、データ表はマシンメモリー内にロードされたプログラムか又は実行可能なフアイルか何れかとして実行可能なプログラムであり得る。この例では、エントリーは該プログラムの個別機械命令であるか該プログラムで使用される個別データ要素である。
【００１８】
プログラムの命令とデータ要素は他の命令又はデータ要素へのアドレスを含んでもよく、レフアレンスと見なされる。この様なレフアレンスは、該プログラムに印加された逆アセンブリ過程によるか、又は、もし与えられば、それらを創るリンクエディタ（link-editors）により実行可能プログラムに付けられた再配置表（relocation table）を解析することにより検出出来る。
【００１９】
データ表のもう１つの例は、レコードが他のデータレコードのアドレスを含んでいるバイト配列内に記憶されインターリンクされたレコードのグループである。該レコードのフオーマットとそれらが該配列内に割付される仕方は既知であり、この様な配列の解析と分解は可能である。
【００２０】
旧プログラム（Old program）−旧データ表の例：新プログラム（プログラムの部分）を発生させるために更新されるべきプログラム（プログラムの部分）である。
【００２１】
旧プログラムと新プログラムへの参照は、唯説明の便宜のためになされ、そしてとりわけ（例えば、バージヨンのアップグレードのために）該旧プログラムの該新プログラムへの更新、（例えば、該旧プログラム内のバグの訂正のために）、該旧プログラムの該新プログラムへの修正、そして第１の旧プログラムから第２の（そしてことによると異なる）新プログラムへの変更を含むことは更に注意されるべきである。
【００２２】
【発明の概要】
説明の便宜のために、本発明をコンピユータプログラムの特定の例と関連して説明する。本発明は決してこの特定の例により拘束されるものではない。
【００２３】
上記説明の様に、（新プログラムを発生させるために）旧プログラムに導入される修正が非常に僅かであっても、旧プログラム及び新プログラムに本来公知のフアイル差分ユーティリテイ（file difference utility）を適用することは比較的多量のデータとなることが普通である。本発明は、該差分結果の該比較的大きなサイズは、他の新しく挿入されたエントリー（及び／又は削除されたエントリー）の結果としてレフアレンスエントリー内のレフアレンスの変更から生ずると云う観察に基づいている。
【００２４】
この観察に基づいて、本発明は修正された旧プログラム（modified old program）と修正された新プログラムを発生させることを狙っているが、そこでは上記説明の様に前記新及び旧プログラムの対応するエントリー内へのレフアレンスの差分は該修正された旧及び新プログラム内の不変のエントリー（invariant entries）として反映される。正味の結果は（該修正された旧プログラムと該修正された新プログラムとの間での）該不変のレフアレンスエントリーは差分結果に現れず、それにより今まで公知の技術を使用することにより得られる従来の差分結果と比較してそのサイズを減少させている。
【００２５】
従って、本発明は旧プログラムと新プログラムとの間のコンパクトな差分結果を発生させる方法で、各プログラムが該プログラム内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備える場合の該方法を提供するが、該方法は、
（ａ）旧プログラムを走査しそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより修正された旧プログラムが発生される過程を備える過程を実行する過程と、
（ｂ）該新プログラムを走査しそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより修正された新プログラムが発生される過程を備える過程実行する過程と、
（ｃ）少なくとも前記修正された旧プログラムと修正された新プログラムとを直接的又は間接的に使用して前記差分結果を発生させる過程とを具備している。
【００２６】
本発明は更に、新プログラムを発生させるために旧プログラム内の更新を実行するための方法で、各プログラムが該プログラム内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該方法を提供するが、該方法は、
（ａ）コンパクトな差分結果を有するデータを受信する過程を具備しており、前記コンパクトな差分結果は修正された旧プログラムと修正された新プログラムとを使用して発生されており、該方法は又
（ｂ）該旧プログラムを走査しそして実質的に各レフアレンスエントリー用に、
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより該修正された旧プログラムが発生される過程を備える過程を実行する過程と、
（ｃ）少なくとも前記コンパクトな差分結果と前記修正された旧プログラムとを使用して該修正された新プログラムを再構成する過程とを具備しており、前記修正された新プログラムは少なくとも前記新プログラムの実質的に各レフアレンスエントリーが前記修正された新プログラム内で区別ラベルマークにより置換されている点では前記新プログラムと異なり、該方法は更に、
（ｄ）少なくとも前記コンパクトな差分結果と前記修正された新プログラムを直接的又は間接的に使用して前記新プログラムを再構成する過程を具備している。
【００２７】
なお更に、本発明は旧プログラムと新プログラムとの間のコンパクトな差分結果を発生させる方法で、各プログラムが該プログラム内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該方法を提供するが、該方法は、
（ａ）少なくとも前記旧プログラムを使用して修正された旧プログラムを発生させる過程と、
（ｂ）少なくとも前記新プログラムを使用して修正された新プログラムを発生させる過程とを具備しており、前記修正された旧プログラムと修正された新プログラムとは少なくとも次の特性、すなわち
（ｉ）前記旧プログラムと新プログラムとの間の遷移の部分を形成する削除／挿入の修正のために前記新プログラム内の対応するエントリーとは異なる前記旧プログラム内のエントリーの実質的に各々のレフアレンスが前記修正された旧及び修正された新プログラムの対応するエントリー内の不変レフアレンス（invariant refrences）として反映される該特性を有しており、該方法は又、
（ｃ）少なくとも前記修正された新プログラムと修正された旧プログラムとを使用して前記コンパクトな差分結果をは発生させる過程を具備している。
【００２８】
なお更に、本発明は、新プログラムを発生させるために旧プログラム内の更新を実行するための方法で、各プログラムは該プログラム内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該方法を提供するが、該方法は
（ａ）コンパクトな差分結果を有するデータを受信する過程を具備しており、前記コンパクトな差分結果は修正された旧プログラムと修正された新プログラムとを使用して発生されており、該方法は又
（ｂ）少なくとも前記旧プログラムを使用して修正された旧プログラムを発生させる過程と、
（ｃ）少なくとも前記修正された旧プログラムと前記コンパクトな差分結果とを直接的又は間接的に使用して修正された新プログラムを再構成する過程とを具備しており、前記修正された旧プログラムと修正された新プログラムとは少なくとも次の特性、すなわち、
（ｉ）前記旧プログラムと新プログラムとの間の遷移の部分を形成する削除／挿入の修正のために前記新プログラム内の対応するエントリーとは異なる前記旧プログラム内のエントリーの実質的に各々のレフアレンスが前記修正された旧及び修正された新プログラムの対応するエントリー内の不変レフアレンスとして反映される該特性を有しており、該方法は更に、
（ｄ）少なくとも前記コンパクトな差分結果と前記修正された新プログラムとを直接的又は間接的に使用して前記新プログラムを再構成する過程を具備している。
【００２９】
もう１つの側面に依ると、本発明は、旧プログラムと新プログラムとの間のコンパクトな差分結果を発生させるためのシステムで、各プログラムは該プログラム内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該システムを提供するが、該システムは処理装置を具備しており、該処理装置は
（ａ）該旧プログラムを走査出来てそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより修正された旧プログラムが発生される過程を備える過程を実行出来て、
（ｂ）該新プログラムを走査出来てそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより修正された新プログラムが発生される過程を備える過程を実行出来て、
（ｃ）少なくとも前記修正された旧プログラムと修正された新プログラムとを直接的又は間接的に使用して前記差分結果を発生出来る。
【００３０】
なお更に、本発明は、新プログラムを発生させるために旧プログラム内の更新を実行するためのシステムで、各プログラムが該プログラム内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該システムを提供するが、該システムは処理装置を具備しており、該処理装置は、
（ａ）コンパクトな差分結果を有するデータを受信出来て、前記コンパクトな差分結果は修正された旧プログラムと修正された新プログラムとを使用して発生されており、該処理装置は又、
（ｂ）該旧プログラムを走査出来てそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより該修正された旧プログラムが発生される過程を備える過程を実行出来て、
（ｃ）少なくとも前記コンパクトな差分結果と前記修正された旧プログラムとを使用して該修正された新プログラムを再構成出来るが、前記修正された新プログラムは少なくとも、前記新プログラムの実質的に各レフアレンスエントリーが前記修正された新プログラム内では区別ラベルマークにより置換されている点で前記新プログラムと異なり、該処理装置は更に、
（ｄ）少なくとも前記コンパクトな差分結果と前記修正された新プログラムを直接的又は間接的に使用して前記新プログラムを再構成出来る。
【００３１】
本発明は更に、旧プログラムと新プログラムとの間のコンパクトな差分結果を発生させるためのシステムで、各プログラムが該プログラム内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該システムを提供するが、該システムは処理装置を具備しており、該処理装置は、
（ａ）少なくとも前記旧プログラムを使用して修正された旧プログラムを発生させることが出来て、
（ｂ）少なくとも前記新プログラムを使用して修正された新プログラムを発生させることが出来るが、前記修正された旧プログラムと修正された新プログラムとは少なくとも次の特性、すなわち
（ｉ）前記旧プログラムと新プログラムとの間の遷移の部分を形成する削除／挿入の修正のために前記新プログラム内の対応するエントリーとは異なる前記旧プログラム内のエントリーの実質的に各々のレフアレンスが前記修正された旧及び修正された新プログラムの対応するエントリー内の不変レフアレンスとして反映される該特性を有しており、該処理装置は又、
（ｃ）少なくとも前記修正された新プログラムと修正された旧プログラムとを使用して前記コンパクトな差分結果を発生させることが出来る。
【００３２】
なお更に、本発明は新プログラムを発生させるために旧プログラム内の更新を実行するためのシステムで、各プログラムは該プログラム内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合のシステムを提供するが、該システムは処理装置を具備しており、該処理装置は、
（ａ）コンパクトな差分結果を有するデータを受信出来るが、前記コンパクトな差分結果は修正された旧プログラムと修正された新プログラムとを使用して発生されており、該処理装置は又
（ｂ）少なくとも前記旧プログラムを使用して修正された旧プログラムを発生させることが出来て、
（ｃ）少なくとも前記修正された旧プログラムと前記コンパクトな差分結果とを直接的又は間接的に使用して修正された新プログラムを再構成出来るが、前記修正された旧プログラムと修正された新プログラムとは少なくとも次の特性、すなわち、
（ｉ）前記旧プログラムと新プログラムとの間の遷移の部分を形成する削除／挿入の修正のために前記新プログラム内の対応するエントリーとは異なる前記旧プログラム内のエントリーの実質的に各々のレフアレンスが前記修正された旧及び修正された新プログラムの対応するエントリー内の不変レフアレンスとして反映される該特性を有しており、該処理装置は更に、
（ｄ）少なくとも前記コンパクトな差分結果と前記修正された新プログラムとを直接的又は間接的に使用して前記新プログラムを再構成出来る。
【００３３】
なお更に、本発明は旧データ表と新データ表との間のコンパクトな差分結果を発生するための方法で、各データ表が該データ表内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該方法を提供するが、該方法は
（ａ）該旧データ表を走査しそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより修正された旧データ表が発生される過程を備える過程を実行する過程と、
（ｂ）該新データ表を走査しそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより修正された新データ表が発生される過程を備える過程を実行する過程と、
（ｃ）少なくとも前記修正された旧データ表と修正された新データ表とを直接的又は間接的に使用して前記差分結果を発生させる過程とを具備している。
【００３４】
更に、本発明は、新データ表を発生させるために旧データ表内の更新を実行するための方法で、各データ表が該データ表内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該方法を提供するが、該方法は、
（ａ）コンパクトな差分結果を有するデータを受信する過程を具備しており、前記コンパクトな差分結果は修正された旧データ表と修正された新データ表とを使用して発生されており、該方法は又
（ｂ）該旧データ表を走査しそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより該修正された旧データ表が発生される過程を備える過程を実行する過程と、
（ｃ）少なくとも前記コンパクトな差分結果と前記修正された旧データ表とを使用して該修正された新データ表を再構成する過程とを具備しており、前記修正された新データ表は少なくとも、前記新データ表の実質的に各レフアレンスエントリーが前記修正された新データ表内では区別ラベルマークにより置換されている点では前記新データ表と異なり、該方法は更に、
（ｄ）少なくとも前記コンパクトな差分結果と前記修正された新データ表を直接的又は間接的に使用して前記新データ表を再構成する過程を具備している。
【００３５】
本発明は更に、旧データ表と新データ表との間のコンパクトな差分結果を発生させるための方法で、各データ表が該データ表内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該方法を提供するが、該方法は、
（ａ）少なくとも前記旧データ表を使用して修正された旧データ表を発生させる過程と、
（ｂ）少なくとも前記新データ表を使用して修正された新データ表を発生させる過程とを具備しており、前記修正された旧データ表と修正された新データ表とは少なくとも次の特性、すなわち
（ｉ）前記旧データ表と新データ表との間の遷移の部分を形成する削除／挿入の修正のために前記新データ表内の対応するエントリーとは異なる前記旧データ表内のエントリーの実質的に各々のレフアレンスが前記修正された旧及び修正された新データ表の対応するエントリー内の不変レフアレンスとして反映される該特性を有しており、該方法は又、
（ｃ）少なくとも前記修正された新データ表と修正された旧データ表とを使用して前記コンパクトな差分結果を発生させる過程を具備している。
【００３６】
本発明は新データ表を発生させるために旧データ表内の更新を実行するための方法で、各データ表が該データ表内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該方法を提供するが、該方法は、
（ａ）コンパクトな差分結果を有するデータを受信する過程を具備しており、前記コンパクトな差分結果は修正された旧データ表と修正された新データ表とを使用して発生されており、該方法は又
（ｂ）少なくとも前記旧データ表を使用して修正された旧データ表を発生させる過程と、
（ｃ）少なくとも前記修正された旧データ表と前記コンパクトな差分結果とを直接的又は間接的に使用して修正された新データ表を再構成する過程とを具備しており、前記修正された旧データ表と修正された新データ表とは少なくとも次の特性、すなわち、
（ｉ）前記旧データ表と新データ表との間の遷移の部分を形成する削除／挿入の修正のために前記新データ表内の対応するエントリーとは異なる前記旧データ表内のエントリーの実質的に各々のレフアレンスが前記修正された旧及び修正された新データ表の対応するエントリー内の不変レフアレンスとして反映される該特性を有しており、該方法は更に、
（ｄ）少なくとも前記コンパクトな差分結果と前記修正された新データ表とを直接的又は間接的に使用して前記新データ表を再構成する過程を具備している。
【００３７】
本発明は更に旧データ表と新データ表との間のコンパクトな差分結果を発生するためのシステムで、各データ表は該データ表内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該システムを提供するが、該システムは処理装置を具備しており、該処理装置は
（ａ）該旧データ表を走査出来てそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより修正された旧データ表が発生される過程を備える過程を実行出来て、
（ｂ）該新データ表を走査出来てそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより修正された新データ表が発生される過程を備える過程を実行出来て、
（ｃ）少なくとも前記修正された旧データ表と修正された新データ表とを直接的又は間接的に使用して前記差分結果を発生出来る。
【００３８】
なお更に、本発明は新データ表を発生させるために旧データ表内の更新を実行するためのシステムで、各データ表が該データ表内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該システムを提供するが、該システムは処理装置を具備しており、該処理装置は、
（ａ）コンパクトな差分結果を有するデータを受信出来るが、前記コンパクトな差分結果は修正された旧データ表と修正された新データ表とを使用して発生されており、該処理装置は又、
（ｂ）該旧データ表を走査出来てそして実質的に各レフアレンスエントリー用に
（ｉ）前記エントリーの該レフアレンスを区別ラベルマークにより置換し、それにより該修正された旧データ表が発生される過程を備える過程を実行出来て、
（ｃ）少なくとも前記コンパクトな差分結果と前記修正された旧データ表とを使用して該修正された新データ表を再構成出来るが、前記修正された新データ表は少なくとも、前記新データ表の実質的に各レフアレンスエントリーが前記修正された新データ表内では区別ラベルマークにより置換されている点では前記新データ表と異なり、該処理装置は更に、
（ｄ）少なくとも前記コンパクトな差分結果と前記修正された新データ表を直接的又は間接的に使用して前記新データ表を再構成する出来る。
【００３９】
更に、本発明は旧データ表と新データ表との間のコンパクトな差分結果を発生させるためのシステムで、各データ表が該データ表内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該システムを提供するが、該システムは処理装置を具備しており、該処理装置は、
（ａ）少なくとも前記旧データ表を使用して修正された旧データ表を発生させることが出来て、
（ｂ）少なくとも前記新データ表を使用して修正された新データ表を発生させることが出来るが、前記修正された旧データ表と修正された新データ表とは少なくとも次の特性、すなわち
（ｉ）前記旧データ表と新データ表との間の遷移の部分を形成する削除／挿入の修正のために前記新データ表内の対応するエントリーとは異なる前記旧データ表内のエントリーの実質的に各々のレフアレンスが前記修正された旧及び修正された新データ表の対応するエントリー内の不変レフアレンスとして反映される該特性を有しており、該処理装置は又、
（ｃ）少なくとも前記修正された新データ表と修正された旧データ表とを使用して前記コンパクトな差分結果を発生させることが出来る。
【００４０】
本発明は新データ表を発生させるために旧データ表内の更新を実行するためのシステムで、各データ表は該データ表内の他のエントリーを参照するレフアレンスを有するレフアレンスエントリーを備えている場合の該システムを提供するが、該システムは処理装置を具備しており、該処理装置は、
（ａ）コンパクトな差分結果を有するデータを受信出来るが、前記コンパクトな差分結果は修正された旧データ表と修正された新データ表とを使用して発生されており、該処理装置は又
（ｂ）少なくとも前記旧データ表を使用して修正された旧データ表を発生させることが出来て、
（ｃ）少なくとも前記修正された旧データ表と前記コンパクトな差分結果とを直接的又は間接的に使用して修正された新データ表を再構成出来るが、前記修正された旧データ表と修正された新データ表とは少なくとも次の特性、すなわち、
（ｉ）前記旧データ表と新データ表との間の遷移の部分を形成する削除／挿入の修正のために前記新データ表内の対応するエントリーとは異なる前記旧データ表内のエントリーの実質的に各々のレフアレンスが前記修正された旧及び修正された新データ表の対応するエントリー内の不変レフアレンスとして反映される該特性を有しており、該処理装置は更に、
（ｄ）少なくとも前記コンパクトな差分結果と前記修正された新データ表とを直接的又は間接的に使用して前記新データ表を再構成出来る。
【００４１】
【好ましい実施例の詳細な説明】
図１では、モジュール（１０）は、本発明の１実施例により差分結果を発生させるために、例えば、プロバイダのサイトで実行される動作のシーケンスを表示する。今動作のシーケンスを例示的旧及び新プログラム（図２）と関連して説明する。指定された動作のシーケンスは、それに限定されないが、従来型ピーシー（conventional P.C.）、コンピユータネットワーク、他の本来公知の全てのものを含む本来公知の如何なるプラットフオームでも実行されてよいことは注意されるべきである。
【００４２】
かくして、Ｐ1は、｛矢印（４１’）から（４６’）により指示する様に｝それぞれエントリー５，８，１，１，１３、及び１１へのレフアレンスを有するエントリー（４１）、（４２）、（４３）、（４４）、（４５）及び（４６）を備える旧プログラムを表す。
【００４３】
Ｐ2は仮想的メモリー表（８０）内に描かれた修正のシーケンスにより発生された（又は発生され得た）新プログラムを表す。前記修正（実際の又は仮想の何れかの）のシーケンスはＰ1とＰ2との間の遷移シーケンス（tansition sequence）を構成する。
【００４４】
エントリー番号６で示す様に、アドレス’１’へのレフアレンスは、例えばプログラマーにより導入されたパッチにより、アドレス番号’１１’へのレフアレンスにより置換される（’Ｒ’は置換されることを表す）。第６エントリーに続いて、３つの新しいエントリーが挿入された（’Ｉ’は挿入されることを表す）。該新しく挿入されたエントリーはアドレス７から９に居る。Ｐ1でアドレス７から９に元々居た次の３つのエントリーは（３つの挿入されたエントリーのために）今やＰ2のアドレス１０から１２へシフトされている。
【００４５】
次ぎに、エントリー１０と１１が削除され（Ｄ）、従ってＰ2では何のアドレスも割り当てられない。Ｐ1でのエントリー１２と１３とは完全な儘でありＰ2でアドレス１３と１４とに居る。Ｐ1のエントリー１４が削除されそれはメモリー表（８０）に於ける様に（アドレス無しに）マーク付けされる。最後に、エントリー（１５）は完全な儘であり従ってＰ2でエントリー１５にいる。
【００４６】
Ｐ1からＰ2への遷移を構成する修正のシーケンス見たが、指定された修正が如何にＰ1とＰ2のレフアレンスエントリーに影響するかを次ぎに簡潔に復習する。
【００４７】
かくして、期待される様に、エントリー２でのレフアレンス５は完全な儘であり、従ってＰ1とＰ2間には差分結果は現れない。
【００４８】
Ｐ1のエントリー４のレフアレンス８は今度はＰ2のエントリー４でレフアレンス１１により修正される。エントリー４の該レフアレンスの修正（８から１１への）はＰ2のエントリー７乃至９の挿入により引き起こされるが、該挿入は明らかにエントリー８（Ｐ1での）をエントリー１１（Ｐ2での）へシフトしている。更に何か進める前に、Ｐ1とＰ2に従来のフアイル差分の応用（conventional file difference application）を用いることはレフアレンス８が１１へ変更されたのでエントリー４が変更されたことを明らかに反映することが注意されるべきである。他のエントリーが影響された（すなわち、エントリー７乃至９）と云う事実のためだけでそれが起こったので、本発明に依って、この変化を中立化させることが望ましいことを当業者は容易に評価するであろう。従って本発明の目的は、この種の修正が、それらは差分結果に反映されず、それにより後者を比較的コンパクトに保つと云う明らかな結果を有する不変のレフアレンスに修正される様な状況を引き起こすことである。
【００４９】
今図２の例に戻ると、Ｐ1のエントリー６に次のレフアレンス１がある。想起される様に、このエントリーは意図的に１１に修正され、そしてＰ2のエントリー６では期待される様に、レフアレンス１１を有する。プログラムでのシフトから生じ、従って差分結果での出現から中立化されるべき前のレフアレンス修正と異なり、現在の修正は懸案（すなわち、エントリー６のレフアレンスは１から１１へ変更された）のエントリーに適用され、差分結果に反映されるべきである。今Ｐ2のエントリー７に戻ると、それは挿入エントリーの部分を形成し、従ってそのレフアレンス９は明らかにＰ1では反映されない。勿論、エントリー７が挿入されたので、差分結果に現れることが期待される。
【００５０】
その付随したレフアレンス１３を有するエントリー１０はＰ1から削除され、期待される様に、それはＰ2では現れず、削除用エントリーとして差分結果で示されるべきであることは勿論である。
【００５１】
Ｐ1でその付随レフアレンス１を有するエントリー９はＰ2のエントリー１２に対応する。エントリー１２のレフアレンスは１の儘であるので、差分結果には現れない。
【００５２】
Ｐ1の最後のレフアレンスエントリー１４に戻ると、それはＰ2に現れず（それは削除されたので）、従って削除用エントリーとして差分結果に現れることが期待される。
【００５３】
差分結果へのそれらの影響のみならずＰ1とＰ2との差分を一般的に説明したが、システムの１つの制限のない実現と望ましい差分結果を達成するための本発明の方法を説明するために今図１に注意を向ける。
【００５４】
この特定の実施例により、望ましい不変のレフアレンスは修正された旧及び新プログラムを発生することにより達成されるが、そこではエントリーでのアドレスレフアレンスは次の様にラベルマークにより置き換えられ、すなわち、
ａ）ラベルマークを付加しエントリー内のレフアレンスを幾つかの固定値（some fixed values）で置換することによりＰ1からＰ”1表を｛図１の（２０１）と（２０２）の過程｝そしてＰ2からＰ”2表を｛図１の（２０３）と（２０４）の過程｝創る。図２で示す様に、エントリー１，５，８，１１及び１３｛それぞれ（１０１）から（１０５）と呼称される｝にラベルマークを付加することによりＰ1からＰ”1が発生される。図２で示される様に、エントリー２，４，６，９、１０及び１４でのレフアレンスは固定値、この特定の例では０にセットされる。図２には示されないが、Ｐ”2が同様な仕方で発生される。
【００５５】
ｂ）Ｐ1内のエントリーレフアレンスとラベル区別値（label distinct values）との間の変換表（translation table）Ｌ１｛図１の過程（２０５）｝を創る。かくして、図１（１１０）で示す様に、区別ラベル番号（distinct label number）がＰ”1の各ラベルマークに割り当てられる。この特定の例によると、区別ラベル（distinct label）は昇順で割り当てられ、図示の様に、ラベルマーク（１０１）から（１０５）はそれぞれの値１から５が割り当てられる。
【００５６】
ｃ）上記で指定された種類のフアイル差分ユーテリテイ（file difference utilities）を使用して差分表（difference table）Ｄ1（２０６）を生ずるようＰ”1とＰ”2が比較される。図２で示す様に、Ｄ1（１２０）は各々が＜Ｘ，ｎ＞の構造を有するエントリーのリストを含んでいるが、そこではＸはＣ（コピー）、Ｉ（挿入）、Ｄ（削除）、又はＴ（トグル）を表しそしてｎは命令の数を表す。事実Ｄ1はＰ”1からＰ”2を発生させるための命令のリストを有する。この特定の例によると、Ｄ1は次のエントリー＜Ｃ、６＞を有するが、それはＰ”1の最初の６つのエントリーはＰ”2にコピーされるべきことを意味する。第６のエントリーはＰ1とＰ2で異なる（すなわちレフアレンスは１から１１へ変更された）が、このエントリーはＰ”1とＰ”2で同じであり何故なら両レフアレンスは０にセットされたからであり、従って該第６のエントリーはコピーされた部分の１部を形成する。次のエントリー＜Ｉ、３＞は３つの新しいエントリーが挿入されるべきことを意味し、これはＰ2に挿入された（そしてＰ”2にも又反映される）新しい３つのエントリー７から９を説明している。次のエントリー＜Ｃ、３＞はＰ”1のアドレス７から９に居りＰ”2（そしてＰ2）のアドレス１０から１２に（その内容に影響せず）シフトされる３つのエントリーを表す。次のエントリー＜Ｄ、２＞はＰ1から（そして明らかに又Ｐ”1から）削除された２つのエントリー（１０と１１）を表す。次のエントリー＜Ｃ、１＞はＰ”2のエントリー１３にシフト（その内容に影響することなく）されたＰ”1のエントリー１２を表す。次のエントリー＜Ｔ、１＞は、Ｐ”1のエントリー１３のラベルで変化が起きた、すなわち、このラベルを参照する該エントリーが削除された｛Ｐ”1（そしてＰ1）のエントリー１０｝と云う簡単な理由でそれがＰ”2の対応するエントリー１４で除去されたことを指示する特殊なエントリーである。＜Ｔ、１＞はかくして該ラベルマークを削除するが、該エントリー１３は（エントリー１４へ）コピーされるべきであることを意味する。次ぎに＜Ｄ、１＞はＰ”1の削除されたエントリー（１４）を表し、そして＜Ｃ、１＞はＰ”1からＰ”2へコピーされるべき最後の完全な儘であるエントリー（エントリー１５）をコピーすることを表す。
【００５７】
ｄ）削除又は挿入されるプログラムフラグメント（program fragments）の位置とサイズを決定し、そして等価な変更をＬ1変換表に適用し、Ｐ2のエントリーレフアレンスをそれらの区別ラベル値に変換するＬ2変換表（２０７）を創るために、次の仕方でＤ1を解析する。
挿入されてなくて参照されたエントリー用には
・Ｌ2［エントリーアドレス］＝Ｌ1［Ｐ1内エントリーアドレスに符号する（matching）］（以後第１条件と云う）を実行する。
挿入され参照されたエントリー用には
・Ｌ2［エントリーアドレス］＝Ｕ（）はＬ1内の如何なる値とも異なる；
Ｕ（）は区別ラベルを発生させるためのラベル発生関数を意味する（以後第２条件と云う）。該関数は繰り返し性であり（of repeatable nature）、すなわち同じシナリオで賦活された時は常に同じ結果を発生させる。後者の特性は次のプログラム再生フエーズが下記で説明される時明確化される。
【００５８】
最終Ｌ2表（１３０）が図２で示される。かくして、最初の６つの命令が第１条件に合致し（すなわち挿入されないエントリー）、従って区別ラベル（１と２）は簡単にＬ1からコピーされる。
【００５９】
次の３つのエントリーは挿入され、従って第２条件が適用され、区別ラベル値を発生させるためにＵ（）が賦活される。Ｌ1に示す様に、５つのラベルが”占められている（occupied）”ので、次の自由な１つは６であり、従ってレフアレンスエントリー９には値６が割り当てられる。当業者は、この例でＵ（）が最後の占められた値を１だけ簡単にインクレメント（increment）することにより該区別ラベル値を発生させるが、これは１例に過ぎないことを容易に評価するであろう。
【００６０】
次の３つのエントリー＜Ｃ、３＞に戻ると、レフアレンスエントリー１１は第１の基準に合致し、従って該ラベル値（３）はＬ1から取られる。
【００６１】
Ｄ1の次のエントリー＜Ｄ、２＞は、それが２つの削除されたエントリーに関するので、無視される。
【００６２】
次のエントリー＜Ｃ、１＞はレフアレンスエントリーを有さず、従ってＬ2を発生させるために処理される必要はない。
【００６３】
次のエントリー、＜Ｔ、１＞は削除されたラベル（Ｌ1のエントリー１３から）に対応し、この点で無視された前の削除修正と似ている。
【００６４】
最後の２つのエントリー、＜Ｄ、１＞と＜Ｃ、１＞はレフアレンスエントリーを含まず、従ってＬ2を発生するためには処理される必要はない。
【００６５】
ｅ）Ｌ1とＬ2の表を使用してエントリーレフアレンスをそれらの変換された値で置換し、Ｐ”1とＰ”2からラベルマークをコピーすることにより、それぞれＰ1とＰ2用のＰ’1（２０８）とＰ’2（２０９）を創る。
過程（ｅ）はＰ’1に関連して説明され、必要に応じて変更を加えてＰ’2（図２の１５０参照）にも適用する。かくして、Ｐ”1のラベルマーク（１０１）から（１０５）がＰ’1（図１の１４０）のそれぞれの位置にコピーされる。次ぎに、Ｐ1のレフアレンスエントリーはＬ1から検索された様にそれらの対応するラベルマークにより置換される。特に、Ｐ1のエントリー２のレフアレンス５はＬ1からの対応するラベルにより置換される。示される様に、ラベル２がＬ1のエントリー５にあり、従ってＰ’1のエントリー２のレフアレンスは２にセットされる。
同様な仕方で、Ｐ1のエントリー４のレフアレンス８はＬ1のエントリー８にあるラベル番号（３）に従って、ラベル番号３により置換される。同様な仕方で、Ｐ1のエントリー６，９，１０及び１４のレフアレンス１，１，１３及び１１はそれぞれのラベル番号１，１，５及び４により置換される。
【００６６】
ｆ）Ｐ’1とＰ’2を発生させると、最終差分結果Ｄ2が発生される。この目的のために、Ｐ1からＰ2へコピーされるプログラムフラグメントの位置を決定するようにＤ1が解析される（すなわち、図２の例では、＜Ｃ、ｘ＞又は＜Ｔ、ｘ＞コマンドに合致するエントリーであり、＜Ｉ、ｘ＞＜Ｄ、ｘ＞コマンドは無視される）。Ｄ1から得られたものとしてコピーされたエントリーについては、次の仕方でＤ2（２１０）を発生するためにＰ’1とＰ’2とが比較される。
【００６７】
ｆ１）（置換された）レフアレンスを含むＰ’1とＰ’2の符号するエントリーの各対を取り、それらの置換されたレフアレンス値を比較する。食い違いがある場合は、該差分を反映するために特別の修正命令を付加する。
【００６８】
ｆ２）全ての挿入されたプログラムフラグメントと置換された値を付加する。これらのフラグメントがＰ’2から取られ、かくしてそれらはラベルマークを有し、そしてアドレスレフアレンスはＬ2変換の下に留まる。
ここで過程（ｆ）を図２の特定の例と関連して例示する。想起される様に、＜Ｃ、ｘ＞コマンドに合致するエントリーのみが該ｆ１過程解析用には関心がある。かくして、Ｄ1の最初の挿入されてないエントリー、すなわち＜Ｃ、６＞が解析される。過程ｆ１に従って、第６のエントリーのみが置換されたレフアレンスを含んでいる（Ｐ’2のレフアレンス３と比較されたＰ’1のレフアレンス１）。従って、Ｄ1の最初のコマンド＜Ｃ、６＞はＤ2内で＜Ｃ、５＞により置換されそして”エントリー６のラベルを置換すること”を表す訂正コマンド＜Ｒ、１＞がＤ2に付加される。（これ又該最初の６エントリーと合致し該＜Ｃ、６＞命令にに包含される）Ｐ’1のエントリー２及び４は、Ｐ’2の対応するエントリーと丁度同じ様に、それぞれのレフアレンス２及び３を含んでおり、従って、訂正コマンドは要さない。
＜Ｃ、３＞＜Ｃ、１＞コマンドに対応するエントリーの残りはＰ’1とＰ’2の置換されたレフアレンスを含まず、従って置換コマンドは要さない。
再生パーテイ（reconstructing party）がＤ2とＰ1からＰ2を再構成出来るように挿入されたデータと置換されたデータ（置換されたレフアレンス）がＤ2に付録されることを過程ｆ２は簡単に規定している。
かくして（Ｐ２のエントリー７から９に挿入されるべき）３つのエントリー、それらはＤ2の＜Ｉ、３＞に対応するが、がセクション（１６１）でＤ2に付加される。同様に、Ｄ2の＜Ｒ、１＞に対応する第６のエントリーの置換されたレフアレンス３（１の代わりの）が、セクション（１６１）で、Ｄ2に付加される。
【００６９】
特定の応用に依っては、Ｄ2は、必要なそして適切な全てを、記憶媒体に記憶されても、或いは通信ネットワーク（図２の２１２）を通して伝送されてもよい。
【００７０】
本実施例により、Ｐ1とそう受信されたＤ2とからＰ2を再生するために動作（２２０）の典型的シーケンスについて次ぎに説明する。又Ｐ2の再生は、必要なそして適切な全てを、如何なる望ましいプラットフオーム上で実現されてもよい。動作のシーケンスは、この実施例に依れば、
ａ）Ｐ1（２２１）からＬ1（２２２）を発生させる、（２００での上記過程ｂ参照）。
ｂ）Ｐ1とＬ1とからＰ’1（２２３）を発生させる、（２００で上記過程ｅ参照）。
ｃ）Ｐ’1にＤ2の修正コマンドを適用することによりＰ’1とＤ2（２１０）とからＰ’2を発生させる。
ｄ）Ｐ1のコピーされたプログラムフラグメントの位置とサイズとを決定するためにその様に受信されたＤ2の差分結果を解析し、ＡＬ2（図１の２２５）を創るためにＬ1を使用するが、該ＡＬ2はＰ’2に現れるラベル計数値（label enumeration values）をそれらの元のアドレスレフアレンスへ戻るよう変換し、それは次の仕方で行う。
挿入されてなくて参照されたアドレス用には
ＡＬ2［Ｌ1［Ｐ’1内アドレスに符号する（matching）］］＝アドレス（第１条件）
挿入され参照されたアドレス用には
ＡＬ2［Ｕ（）］＝アドレス（第２条件）
ここで過程（ｄ）を図２の特定の例に関連して例示する。かくして、ＡＬ2（１７０）を発生させるために、再生側（２２０）でその全てが利用可能なこの最後のＬ1，Ｐ’2及びＤ2を使用して、最初にＬ2（１３０）が再生される。Ｌ2を再生すると、Ｌ2を逆にする（reversing）ことによりＡＬ2が容易に得られる。特に、Ｌ2のエントリー１は値１を保持し、従ってＡＬ2のエントリー１は値１を保持する。Ｌ2のエントリー５は値５を保持し、従ってＡＬ2のエントリー２は値５を保持する。同じ逆ロジックに追随することにより、Ｌ2のエントリー９は値６を保持し従ってＡＬ2のエントリー６は値９を保持し、最後に同じロジックに追随することによりＡＬ2のエントリー３は値１１を保持する。
ｅ）最後に、ＡＬ2を使用して、Ｐ’2のアドレスレフアレンスをラベル計数値から元のアドレスレフアレンスへ戻るよう変換することによりＰ’2（２２４）とＡＬ2（２２５）からＰ2（２２６）が再生される。
【００７１】
ここで過程（ｅ）を図２の特定の例に関連して例示する。かくして、Ｐ2（１８０）を再生するために、ＡＬ2によりＰ’2のラベルレフアレンスが変換される。特に、Ｐ’2のエントリー２のラベルレフアレンス２は、ＡＬ2のエントリー＃２の値５に従ってＰ2の実際のエントリーレフアレンス５により置換される。同様に、Ｐ’2のエントリー４と６のラベルレフアレンス３はＡＬ2のエントリー＃３の値１１に従って、Ｐ2の実際のアドレスレフアレンス１１により置換される。同様な仕方で、Ｐ’2のエントリー１２のラベルレフアレンス１はＡＬ2のエントリー＃１の値１に従ってＰ2の実際のアドレスレフアレンス１により置換される。最後に、Ｐ’2のエントリー７のラベルレフアレンス６はＡＬ2のエントリー＃６の値９に従ってＰ2の実際のアドレスレフアレンス９により置換される。この特定の例により示される様に、Ｐ2は、中間的データ構造，ＡＬ2により差分結果データＤ2から間接的に発生される。
【００７２】
ＡＬ2のエントリー４と５は値０を保持しており、それらが削除されたＰ1内エントリーの１部を形成しているので、レフアレンスラベル４と５はＰ2内で更新される必要がないことを意味する。
【００７３】
当業者は、本発明が通信ネットワークを通してソフトウエアを更新する特定の応用に関連して説明されたが、本発明がこの特定の応用に決して拘束されるものでないことは容易に評価するであろう。かくして、もう１つの例によれば、本発明は効率の良いバージヨン管理（version control）用に適用可能である。例えば、１連のプログラムバージヨンＰ1、Ｐ2及びＰ3を考える。本発明の技術を適用することはそれぞれＰ1Ｐ2とＰ2Ｐ3の間の差分を表すコンパクトなＤ12とＤ23を生ずる。最終的なコンパクトなＤ12とＤ23は、従来の、サイズのより大きい差分結果に比較して、望ましい、効率の良いバージヨン管理ツールをもたらす。勿論、必要なそして適切な全ての、他の応用が実行可能である。
【００７４】
本発明を、コンピユータプログラムの旧及び新バージヨン間で抽出差分の特定の応用に関連して説明したが、グラフの形式で描かれたデータ表のより一般化された表現に関連した説明を次ぎに述べる。
【００７５】
特定の例に戻る前に、データ表での表現に適用する２，３の所見（observations）を下記に表明する。
・該グラフはそれらにアクセスすることを可能にするレフアレンスにより相互連結されたデータレコードの集まりを表す。
・データレコードは予め規定された順序に従う配列の様な線形の記憶装置に記憶されている。
・該レフアレンスを記憶するために割り当てられる記憶量は省略出来ない。
・該レフアレンスを表すデータは隣接するブロックとして保持されず、該データ表の他の項目の中に（例えば、データレコードの中に）分散されている。
【００７６】
これを考えて、図３Ａに注意を向ける。グラフ（３００）はグラフの形式での（旧バージヨンの）抽象的データ構造を表す（それは下記でより詳細に説明される様に多くの応用に適用可能である）。ノード（node）Ａ−Ｅはデータレコードを表し、リンクは他のレコードへのレフアレンスを表す。この例では、データレコード用の予め規定された順序はレコード名のアルフアベット順のソート（sort）である。該グラフの記憶は次の様に現れる。
【００７７】
１．Ａ、２，４
２．Ｂ、３
３．Ｃ、４，５
４．Ｄ
５．Ｅ、２
かくして、例えば、アドレス１を有する、データレコードＡ（３０１）はそれぞれデータレコードＢとＤ（３０４と３０５）へのレフアレンス２と４を表すリンク（３０２と３０３）により連結される。
【００７８】
データＤ（３０５）へのリンク（３０７）により連結されＡＢＡと名付けられたデータレコード（図３Ｂの３０６）を付加することにより上記グラフを修正することが今必要であると仮定すると、これは次の新グラフの記憶をもたらすが、そこでは前記アルフアベット順に従ってＡＢＡが挿入される。
【００７９】
１．Ａ、３，５
２．ＡＢＡ、５
３．Ｂ、４
４．Ｃ、５，６
５．Ｄ
６．Ｅ、３
従って唯１つのデータレコードの挿入が旧グラフの記憶と新グラフの記憶との間に可成り大きな差分を引き起こすことが評価される。
【００８０】
上記抽象的データ構造は、指定されたデータ構造では、実行の順序が課されるコンピユータプログラムに比較してアルフアベット順が課されている事実を除けば、コンピユータプログラムと類似していることは容易に評価される。
【００８１】
従って、上記で図１と２に関連して詳細に説明した技術を適用することはコンパクトな差分の抽出を引き起こす。
【００８２】
上記で指定された様に、該データ表はコンピユータプログラムの表現に決して拘束されない。かくして、限定のない例によれば、該指定されたグラフ（３００）は地図を表現しており、そこではノードが市を、リンクが種々の市を連結する道路を表す。本発明の技術は｛例えば、シンボル（symbol）ＡＢＡを有する市とシンボルＤを有する市との間の新しい道路の建設に対応する｝地図での地勢の修正のコンパクトな表現を見越している。
【００８３】
もう１つの限定のない例によれば、指定されたグラフは電子回路を表現しており、そこではノードは部品を表し、リンクは該部品間のワイヤの接続を表す。
【００８４】
次の請求項で現れる番号、アルフアベット文字そしてローマ式シンボルは単に説明の便宜に名付けられ、過程の特定の順序を必ずしも意味しない。
【００８５】
本発明が或る程度の特殊さを有して説明されたが、付属する請求項の精神と範囲を離れることなく種々の変更と修正がなされ得ることは当業者の容易に評価するところである。
【図面の簡単な説明】
【図１】  本発明の１実施例による動作シーケンスの略図的図解である。
【図２】  例示的な旧及び新プログラムと、図１の動作シーケンスの適用により得られる種々の中間的結果を示す。
【図３】  本発明の差分抽出をうけるグラフの形式で表示された例示的データ表である。
【図１】
0004733831.tif 000002
【図２Ａ】
0004733831.tif 000003
【図２Ｂ】
0004733831.tif 000004
【図３Ａ−３Ｂ】
0004733831.tif 000005