JP2005531066A - ソフトウェア・アトマイゼーション用のビュー - Google Patents
ソフトウェア・アトマイゼーション用のビュー Download PDFInfo
- Publication number
- JP2005531066A JP2005531066A JP2004515872A JP2004515872A JP2005531066A JP 2005531066 A JP2005531066 A JP 2005531066A JP 2004515872 A JP2004515872 A JP 2004515872A JP 2004515872 A JP2004515872 A JP 2004515872A JP 2005531066 A JP2005531066 A JP 2005531066A
- Authority
- JP
- Japan
- Prior art keywords
- atom
- database
- merge
- atoms
- code
- 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.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99942—Manipulating data structure, e.g. compression, compaction, compilation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
ソフトウェア・アトマイゼーション用のビューは新たまたは仮想データベースを作成するために、アトム・データベース内の既存のアトムをランタイム変換する。ビューはアトム・データベースに記憶されているコードおよびデータ・アトムを共用し、かつメモリに読み込まれているコードおよびデータ・アトムを共用する。ビューは新たなアトムの挿入、既存のアトムの修正、または既存のデータの削除を含む、アトム・データベースに適用可能な1組の変換オペレーションである。変換オペレーションはディスク上に新たなアトム・データベースを作成するために実際に施し得、またはディスク上に実際のアトム・データベースを実際に作成する必要なく、ランタイムで仮想アトム・データベースを作成するために仮想的に施すこともできる。既存のアトムの修正はアトム・バイト、またはアトム・リファレンス、またはアトムの属性の変更を含む多様な方法で実行可能である。
Description
関連出願
本出願は参照により本明細書に全体が組み込まれている、2002年6月21日に出願された米国特許出願第10/178、898号の継続出願である。
本出願は参照により本明細書に全体が組み込まれている、2002年6月21日に出願された米国特許出願第10/178、898号の継続出願である。
発明の背景
一般にコンピュータ・ソフトウェアはインタープリタ型言語システムまたはコンパイラ型言語システム用に作成される。インタープリタ型言語システムは高レベル・プログラム・ステートメントを実行可能な形式に翻訳し、実行前に高レベル・ステートメントを完全に翻訳する(すなわちコンパイルする)のではなく、一度に1つのステートメントを実行する。ベーシック、LISP、およびAPLはインタープリタ型言語として広く実施されている。コンパイラ型言語は高レベル・プログラム・ステートメントを実行前に中間のオブジェクトコード・フォーマットに翻訳する。コンパイラ型言語システムでは、プログラム・ステートメントはソースコード・プログラミング言語(例えばC、C++)で書き込まれる。ソース・コードはコンピュータによって直接実行できない高レベル、もしくはアセンブリ言語で書き込まれた人間に読み取り可能なプログラム・ステートメントを含んでいる。ソース・コードは1組の構文および意味規則に従うことによって、ソース・コードをオブジェクト・コード(例えばOBJファイル)へと変換するコンパイラによって処理される。次にオブジェクト・コードは実行可能なコンピュータ・プログラム(例えばEXEファイル)を作成するためにリンカーを用いて互いにリンクされる。
一般にコンピュータ・ソフトウェアはインタープリタ型言語システムまたはコンパイラ型言語システム用に作成される。インタープリタ型言語システムは高レベル・プログラム・ステートメントを実行可能な形式に翻訳し、実行前に高レベル・ステートメントを完全に翻訳する(すなわちコンパイルする)のではなく、一度に1つのステートメントを実行する。ベーシック、LISP、およびAPLはインタープリタ型言語として広く実施されている。コンパイラ型言語は高レベル・プログラム・ステートメントを実行前に中間のオブジェクトコード・フォーマットに翻訳する。コンパイラ型言語システムでは、プログラム・ステートメントはソースコード・プログラミング言語(例えばC、C++)で書き込まれる。ソース・コードはコンピュータによって直接実行できない高レベル、もしくはアセンブリ言語で書き込まれた人間に読み取り可能なプログラム・ステートメントを含んでいる。ソース・コードは1組の構文および意味規則に従うことによって、ソース・コードをオブジェクト・コード(例えばOBJファイル)へと変換するコンパイラによって処理される。次にオブジェクト・コードは実行可能なコンピュータ・プログラム(例えばEXEファイル)を作成するためにリンカーを用いて互いにリンクされる。
実行可能なコンピュータ・プログラムはディスクに記憶された状態と、コンピュータ・メモリへとロードされた場合の双方でサイズが極めて大きいことが可能である。ダイナミック・リンク・ライブラリ(“DLL”)は主要な実行可能コンピュータ・プログラムから分離された実行可能ルーチンおよびデータを記憶する機構を備えている。実行可能ルーチンは実行可能コンピュータ・プログラムが必要とする必要時にロードされることができる。DLLはルーチンまたはデータが利用される場合にメモリだけを使用することによってスペースを節約する。DDLはさらに、実行可能コンピュータ・プログラムから分離され、また他のDDLから分離されたコンピュータ・コードおよびデータの編成および管理をも行う。それによってプログラマーは、コンピュータ・プログラムまたはその他のいずれかのDLLを呼び出すオペレーションに影響を及ぼすことなく、また呼び出しプログラムまたはその他のいずれかのDLLの再コンパイルを必要とせずに、DLL内のあるルーチンだけを修正、または改良することが可能になる。その上、DLLは複数のコンピュータ・プログラム間で共用可能である。DLL自体は極めて大きく、多重に実行可能なルーチンであり、DLLはそのモノリシックな性質のためダウンロード、更新、およびローディングに関して極めて粒状(グラニュラー)であるとは言えない。
大規模DLLまたはその他のコード/データの更新に関連する転送時間を最小限にする技術が存在する。差分検出アルゴリズム(例えばrsync)を利用したファイル転送プロトコルは転送時間を短縮することができる。これらのアルゴリズムはソース・ファイルおよびターゲット・ファイルをデータ・ブロックへと整理し、ブロックを分析し、ソース・ファイルとターゲット・ファイルとで同一ではないブロックだけを転送する。
通信媒体を介して、およびディスクからメモリまでの双方のコードおよびデータの転送時間を短縮するために圧縮を利用できる。実行可能コード用の圧縮を実施する実行可能なコード・サイズに特に敏感な組み込みプロセッサ・システムが実装されてきた。コードの圧縮された「ワイヤ」表現を利用できるが、実行前にコードを復元しなければならない。別の技術は圧縮されたコードを直接実行する(例えば「バイト符号化RISC」または「BRISC」仮想機械)。
CurlTM言語はレイアウト、スクリプト、およびプログラミング能力を1つの統合された環境に結合する。この完全機能言語をクライアント側の実行と対にすることによって、CurlTM技術はウエブを介して迅速で、効率がよく機能性が高いアプリケーションを提供し、クライアントとサーバーとが連携できる対話型のウエブ・サービス能力を可能にする。CurlTMコンテンツはCurlTMプラグインおよびCurlTMランタイム環境で強化されたウエブ・ブラウザを用いて表示される。CurlTMランタイム環境は、ほぼ同僚のコードとデータからコンパイルされるので多くのランタイム環境とは異種である。CurlTMは多数のDLLを使用して実現される。
発明の概要
大規模な実行可能プログラムおよび/または共用ライブラリ(DLL)を備えたシステムにはディスクに記憶される際、並びにメモリにロードされる際に容量の問題がある。その上、これらのシステムの更新/パッチには、出荷時に拡張された大域幅が必要であり、コードおよび/またはデータの複数のほぼ同じコピーがクライアント側に記憶される結果になることが多い。このことが特に当てはまるのは、コンピュータ・システムが増加するさまざまな新レリースを経て進化し、ユーザーは複数のレリースに対応するサポートを同時に必要とするからである。
大規模な実行可能プログラムおよび/または共用ライブラリ(DLL)を備えたシステムにはディスクに記憶される際、並びにメモリにロードされる際に容量の問題がある。その上、これらのシステムの更新/パッチには、出荷時に拡張された大域幅が必要であり、コードおよび/またはデータの複数のほぼ同じコピーがクライアント側に記憶される結果になることが多い。このことが特に当てはまるのは、コンピュータ・システムが増加するさまざまな新レリースを経て進化し、ユーザーは複数のレリースに対応するサポートを同時に必要とするからである。
アトム・データベースのビューは新たな、または仮想データベースを作成するために、アトム・データベース内の既存のアトムをランタイム変換することによってこれらの問題に解決策をもたらす。ビューはアトム・データベースに記憶されているコードおよびデータ・アトムを共用し、ならびにメモリに読み込まれているコードおよびデータ・アトムを共用する。アトムとは永続識別子、コード/データ・バイト、および他のアトムへのリファレンスを含む細粒度のアドレス指定可能なコードまたはデータのユニットである。本特許出願は、教示内容全体が参照により本明細書に組み込まれている、2002年6月3日にMathew J.HostetterおよびBenjamin R.Harrisonによって出願された係属米国特許出願第10/161、964号“Software Atomization”の関連出願である。
ビューは新たなアトムの挿入、既存のアトムの修正、または既存のデータの削除を含む、アトム・データベースに適用可能な1組の変換オペレーションである。修正も削除もされないアトム用には再利用オペレーションが絶対的である。変換オペレーションはディスク上に新たなアトム・データベースを作成するために実際に施すこともでき、またはディスク上に実際のアトム・データベースを実際に作成する必要なく、ランタイムで仮想アトム・データベースを作成するために仮想的に施すこともできる。既存のアトムの修正はアトムバイト、またはアトムリファレンス、またはアトムの属性の変更を含む多様な方法で実行することができる。ビューは必要なら、アトム・データベースを適切に修正するために破壊的にさえ適用可能である。
様々な種類のビュー変換には様々な利点と欠点がある。仮想アトム・データベースを作成するためにビューを仮想的に適応すればアトムを記憶するために要するスペースは少なくなるが、アトムがロードされるごとに変換オペレーションが行われるのでランタイムで遅くなる。利点は変換情報が保持され、様々なビュー間でアトムを共用するために利用できることである。新たなアトム・データベースを作成するためにビューを実際に適応すればより大きいディスクのスペースが必要であるが、変換オペレーションがすでに適用されているのでランタイムでより迅速になる。それによって、変換されたアトムを直接ロードすることができるが、様々なビュー間でアトムを共用する能力は失われる。アトム・データベースを共用できない場合でも、異なるアトム・データベースのコピーで各実行可能を実行することができる。既存のアトム・データベースに上書きするためにビューを実際に適用すればディスクのスペースは節減され、ランタイムでより迅速になるが、変換がなされてしまうと、変換情報は失われ、したがってもはやアトム・データベースを異なるビュー間で共用できない。あらゆる状況に最適な単一のオプションはない。特定の性能基準を満たすために最良の全般的解決策を選択するためには、それぞれのコンピュータ・プログラム環境が様々なビュー・オプションの利点と欠点のバランスをとらなければならない。
マッピング・テーブルは、唯一のオペレーションが修正オペレーションであり、またこれらの修正オペレーションは既存のアトムのアトム・バイトおよびアトム・リファレンスを別のアトムのアトム・バイトおよびアトム・リファレンスと置き換えることしかできない(置換オペレーションとして知られている)簡単なビュー形式である。これは同じアトムidを保持しつつ、(実際に、または仮想的に)既存のアトムを完全に別のアトムと置き換えるために利用できる。それによって古いアトムへのアトム・リファレンスを有するかもしれない他のいずれかのアトムは、代わりに置き換えたアトムを「自動的に」参照することができるようになる。マッピング・テーブルは既存のアトムを別のアトムと置き換えるので、これらのテーブルはあるアトム・バイトを英語から日本語に翻訳すること、またはあるアトム・リファレンスをレイジーからイーガー(from lazy to eager)へと変更することのような関心ある修正オペレーションを随意に実行することができる。
アトム・データベースのビューを作成する方法は、1組の変換オペレーションを規定し、この1組の変換オペレーションをアトム・データベースに適用することを含んでいる。ランタイムで変換オペレーションが仮想的に行われた場合は、
仮想アトム・データベースが作成され、変換オペレーションが実際に行われた場合は新たなアトム・データベースが作成される。アトム・データベースはアトムを記憶し、アトムは永続的に割り当てられているアトム識別子、コンピュータ・コードおよび/またはデータ、および他のアトムへのリファレンスを含んでいる。新たなアトム・データベースはアトム・データベースから分離したファイルに記憶することができ、またはオリジナルのアトム・データベースと置き換えることができる。変換オペレーションは新たなアトムを挿入する挿入オペレーション、既存のアトムを修正する修正オペレーション、および/または既存のアトムを削除する削除オペレーションを含んでいる。
仮想アトム・データベースが作成され、変換オペレーションが実際に行われた場合は新たなアトム・データベースが作成される。アトム・データベースはアトムを記憶し、アトムは永続的に割り当てられているアトム識別子、コンピュータ・コードおよび/またはデータ、および他のアトムへのリファレンスを含んでいる。新たなアトム・データベースはアトム・データベースから分離したファイルに記憶することができ、またはオリジナルのアトム・データベースと置き換えることができる。変換オペレーションは新たなアトムを挿入する挿入オペレーション、既存のアトムを修正する修正オペレーション、および/または既存のアトムを削除する削除オペレーションを含んでいる。
ビューは多様な方法でアトム・データベースのアトムを共用するために利用できる。単一のビューおよびアトム・データベースを第1の実行可能なプログラムおよび第2の実行可能なプログラムと関連付けることによって、アトム・データベース内のアトムを共用するために単一のビューを利用できる。アトム・データベースは仮想アトム・データベースを作成するためにビューを利用してランタイムで仮想的に変換される。仮想アトム・データベースからのアトムは次に第1の実行可能なプログラムおよび第2の実行可能なプログラムによってロードされ、それによって第1の実行可能なプログラムと第2の実行可能なプログラムとでアトムを共用する。アトムが第1の実行可能なプログラムによってアクセス可能な第1メモリ・バッファにロードされ、アトムが第2の実行可能なプログラムによってアクセス可能な第2メモリ・バッファにロードされる場合はディスク上での共用がなされる。アトムが第1の実行可能なプログラムと第2の実行可能なプログラムの双方によってアクセス可能なメモリ・バッファにロードされる場合は、メモリ内での共用がなされる。
第1のビューおよびアトム・データベースを第1の実行可能なプログラムに関連付け、第2のビューおよびアトム・データベースを第2の実行可能なプログラムと関連付けることによって、アトム・データベース内のアトムを共用するために複数のビューを利用できる。アトム・データベースは、第1の仮想アトム・データベースおよび第2の仮想アトム・データベースを作成するために第1のビューおよび第2のビューを利用してランタイムで仮想的に変換される。仮想アトム・データベースからのアトムは第1のビューを利用して第1の実行可能なプログラムによって、また第2のビューを利用して第2の実行可能なプログラムによってロードされ、それによって第1の実行可能なプログラムと第2の実行可能なプログラムとでアトムを共用する。アトムが第1のビューを利用して第1の実行可能なプログラムによってアクセス可能な第1メモリ・バッファにロードされ、アトムが第2のビューを利用して第2の実行可能なプログラムによってアクセス可能な第2メモリ・バッファにロードされる場合はディスク上での共用がなされる。いずれのビューによっても影響されないアトム(すなわち未修正のアトム)の場合、アトムが第1のビューを利用した第1の実行可能なプログラムと、第2のビューを利用した第2の実行可能なプログラムの双方によってアクセス可能なメモリ・バッファにロードされる場合は、メモリ内での共用がなされる。
ビューは多くの目的のために利用できる。変換オペレーションは性能をカスタマイズするためにアトムが実行するコンピュータ・ハードウェアおよび/またはソフトウェア・システムの最適化機能に基づいて規定可能である。変換オペレーションは、カスタマイズされた機能セットと共にレリースされるように、アトムによって提供されるある種の機能へのアクセスを制限するために規定される。
アトムはさらにアトム特性を備え、アトム変換オペレーションはアトム特性を変更することができる。例えば、デバッグ情報を修正することによってコード・アトムを変換することができる。
ビューの上にビューを付与するために仮想アトム・データベースに1組の変換オペレーションを行うことができる。
マッピング・テーブルは、1組の変換オペレーションが第1のアトムを第2のアトムと置き換える修正オペレーションだけを含む簡単なビューである。置換オペレーションは簡単であるが、全てのリファレンスを一方のアトムから他方のアトムへと効率的に変更する強力な機構である。
ビューを含む1組のアトム変換オペレーションはプログラマーによって手動的に作成可能であり、または処理工程によって自動的に生成可能である。第1アトム・データベースから第2アトム・データベースへと変換するための1組のアトム変換オペレーションを作成する方法は標準アトム共用アルゴリズム、第1アトム・データベース、および第2アトム・データベースを利用した標準化を含んでおり、第1アトム・データベースおよび第2アトム・データベースは各々、永続的に割り当てられているアトム識別子、コンピュータ・コードおよび/またはデータ、および他のアトムへのリファレンスを含むアトムを記憶する。第1アトム・データベースと第2アトム・データベースのアトムの間の1組のゴール・マージが特定される。*ゴール・マージを援助する第1アトム・データベースと第2アトム・データベースとの間の1組のアシスト・マージが特定される。1組のアシスト・マージ内の最良のマージを選択し、選択された最良のマージをコミットし、1組のゴール・マージを更新し、1組のアシスト・マージを更新する工程は、1組のゴール・マージが空いていない間に反復される。
再利用マージではない、またはコミットされた再利用マージで援助しなかった各々のコミットされたマージはアンドゥされる。一意的に互換性があるマージが作成された場合は、一意的に互換性があるマージをゴール・マージに追加し、一意的に互換性があるマージの1つに無限の重みを割り当て、1組のアシスト・マージが特定される工程に進む。残りの同型化(isomorphism)を特定するため、第1データベースと第2データベースとを利用して修正されたアトム共用アルゴリズムが適用される。一意的に互換性があるマージが作成された場合は、一意的に互換性があるマージをゴール・マージに追加し、一意的に互換性があるマージの1つに無限の重みを割り当て、1組のアシスト・マージが特定される工程に進む。互換性があるいずれかのマージが作成された場合は、重みが最大の互換性があるマージをコミットし、コミットされた互換性があるマージに無限の重みを割り当て、コミットされた互換性があるマージを1組のゴール・マージに追加し、1組のアシスト・マージが特定される工程に進む。コミットされたマージは修正/置換マージ、挿入マージおよび/または策上マージを含むことができる。これらのマージはビュー内での実際の変換オペレーションである。
レリースにおよんでコードとデータとを共用することでディスク記憶とメモリの利用の双方が省かれる。レリースにおよんでコードとデータとを共用できることによってさらに、別個のレリースを保持し、レリース間の「ラッパー」インターフェースの手動的な作成をしなくてもすむ。ラッパーの目的は新規コードの後方互換性バージョンを生成することで、コードの古いバージョンをもはやクライアント側で保持する必要がないようにすることである。ラッパーと、は各々が基本的に同一の大量のコードを含むプログラムの複数バージョンの間接費を回避する試みである。プログラム・バージョン間でのコードおよびデータの自動的な共用を可能にすることによるソフトウェア・アトマイゼーション用のビューによってラッパーの必要性がなくなり、ソフトウェア・プログラム・バージョンの設計時により多くの構成上の自由度が可能になる。
発明の詳細な説明
以下に本発明の好適な実施形態を説明する。好適な実施形態はCurlTM言語、スクリプト、および非CurlTMプログラムで書き込まれたソフトウェアを処理するために、アトム化されたCurlTMランタイムの適宜の部分を実行するCurlTMランタイム環境を実装するコンピュータ・プログラムをアトム化するのに適している。
以下に本発明の好適な実施形態を説明する。好適な実施形態はCurlTM言語、スクリプト、および非CurlTMプログラムで書き込まれたソフトウェアを処理するために、アトム化されたCurlTMランタイムの適宜の部分を実行するCurlTMランタイム環境を実装するコンピュータ・プログラムをアトム化するのに適している。
図1は本発明の実施形態が実装されているコンピュータ・システムの略図である。クライアント・コンピュータ50およびサーバー・コンピュータ60はコンピュータ・プログラムをアトム化し、アトム化されたコンピュータ・プログラムを実行するための処理、記憶、および入力/出力デバイスを備えている。クライアント・コンピュータ50はさらに通信ネットワーク70を介して、他のクライアント・コンピュータ50およびサーバー・コンピュータ60を含む他のコンピュータ・デバイスにもリンクされることが可能である。通信ネットワーク70は互いに通信するために現在TCP/IPプロトコル・スイートを使用しているインターネット、世界規模のコンピュータ・コレクション、ネットワーク、およびゲートウェイの一部であってよい。インターネットはデータおよびメッセージを転送する数千もの商業、政府、教育、およびその他のコンピュータ・ネットワークからなる主要ノード、またはホスト・コンピュータ間の高速データ通信線の学区ボーンをもたらすものである。本発明の別の実施形態では、コンピュータ・プログラムのアトム化、およびアトム化されたコンピュータ・プログラムの実行のための処理、記憶、および入力/出力デバイスを自立型コンピュータ上に実装することができる。
図2は図1のコンピュータ・システム内のコンピュータの内部構造(例えば50、60)の略図である。各コンピュータはシステム・バス200を含んでおり、
バスとはコンピュータの構成部品間でのデータ転送用に使用される1組のハードウェア線である。バス200は基本的に、素子間での情報の転送を可能にするコンピュータ・システムの異なる素子(例えばプロセッサ、ディスク記憶装置、メモリ、入力/出力ポート、ネットワーク・ポートなど)を接続する共用電線管である。システム・バス200には様々な入力および出力デバイス(例えばディスプレー、プリンタ、スピーカーなど)をコンピュータに接続するためのI/Oデバイス・インターフェース202が接続されている。ネットワーク・インターフェース206によってコンピュータをネットワーク(例えばネットワーク70)に接続された様々な他のデバイスに接続可能である。メモリ208は本発明の実施形態を実装するために利用されるコンピュータ・ソフトウェア命令(例えばアトム・エクストラクタ・プログラム150およびアトム管理プログラム160)およびデータ構造(例えばアトム・データベース120)用の揮発性記憶装置を備えている。ディスク記憶装置210は本発明の実施形態を実装するために利用されるコンピュータ・ソフトウェア命令(例えばアトム・エクストラクタ・プログラム150およびアトム管理プログラム160)およびデータ構造(例えばアトム・データベース120)用の不揮発性記憶装置を備えている。
バスとはコンピュータの構成部品間でのデータ転送用に使用される1組のハードウェア線である。バス200は基本的に、素子間での情報の転送を可能にするコンピュータ・システムの異なる素子(例えばプロセッサ、ディスク記憶装置、メモリ、入力/出力ポート、ネットワーク・ポートなど)を接続する共用電線管である。システム・バス200には様々な入力および出力デバイス(例えばディスプレー、プリンタ、スピーカーなど)をコンピュータに接続するためのI/Oデバイス・インターフェース202が接続されている。ネットワーク・インターフェース206によってコンピュータをネットワーク(例えばネットワーク70)に接続された様々な他のデバイスに接続可能である。メモリ208は本発明の実施形態を実装するために利用されるコンピュータ・ソフトウェア命令(例えばアトム・エクストラクタ・プログラム150およびアトム管理プログラム160)およびデータ構造(例えばアトム・データベース120)用の揮発性記憶装置を備えている。ディスク記憶装置210は本発明の実施形態を実装するために利用されるコンピュータ・ソフトウェア命令(例えばアトム・エクストラクタ・プログラム150およびアトム管理プログラム160)およびデータ構造(例えばアトム・データベース120)用の不揮発性記憶装置を備えている。
中央プロセッサ・ユニット204もシステム・バス700に接続され、コンピュータ命令(例えばアトム・エクストラクタ・プログラム150およびアトム管理プログラム160)を実行し、ひいてはコンピュータをアトム化し、アトム化されたコンピュータを実行することを可能にする。
図3はランタイムで出力をディスプレーするコンピュータ・プログラムを作成し、ロードするための従来の工程を示している。ソース・コード102はソース・コード・プログラミング言語(例えばC、C++)を用いてコンピュータ・プログラマーによって作成される。コンパイラ104はソース・コードを処理し、オブジェクト・コード106のファイルを作成する。リンカー・セクション109を作成するためにリンカー108を用いて1つ以上のオブジェクト・コード106ファイルがリンクされる。リンカー・セクション109は結合されて実行可能コード110が作成される。実行可能コード110は自立型の実行可能プログラム(例えばEXEファイル)として、または共用されるコード・ライブラリ(例えばDLLファイル)としてリンクされることができる。実行可能コード110はランタイム・ディスプレー114を作成するために実行用のローダ112によってメモリへとロードされる。
図4はランタイムで出力をディスプレーするアトム化されたコンピュータ・プログラムを作成し、ロードするためのソフトウェア・アトム化工程を示している。従来の工程と同様に、ソース・コード102はソース・コード・プログラミング言語(例えばC、C++)を用いてコンピュータ・プログラマーによって作成される。コンパイラ104はソース・コードを処理し、オブジェクト・コード106のファイルを作成する。ソース・コード102が通常の態様でオブジェクト・コード106のファイルへとコンパイルされた後、アトム・エクストラクタ150はオブジェクト・コード106を処理してアトム130を特定する。細粒度の、個々にアドレス指定可能なアトム130がアトム・データベース120に入れられ、各アトム130は一意的なアトムid132を受け取る。細粒度のアトム130は任意の整数バイトのコードおよびデータを定義する。コードおよびデータへのリファレンスはアトムidリファレンスへと変換される。例えば、コード内でのプロシージャ・コールはそれらのアトムid132を介して他のアトム130の起動へと転換される。データ・リファレンスもそれらのアトムid132を介してデータ・アトム・リファレンスに変換される。
アトム・エクストラクタ150はオブジェクト・コード・ファイル106を無視して、コードからアトム130を作成する。オブジェクト・コード106からアトム130を抽出するために必要な情報は、プロシージャをロードし、呼び出し、読み出し専用データを最適化するために従来のローダは同じ情報を必要とするという事実によって、既にオブジェクト・ファイル内に組み込まれている。オブジェクト・コード・ファイル106から複数のデータ・アトムを抽出するために必要な情報は様々なデータ量の分離を必要としている。分離はある種の従来のコンパイラ(例えばgcc)によって自動的に、またはソース・コード(例えばコンパイラ指令)内にデータ量を直接マーキングするプログラマーによって明示的に行うことができる。ランタイムでアトム管理プログラム160はアトム・データベース120からアトム130にアクセスし、実行のためにこれらをメモリにロードする。ロードされたアトム130は次に、ランタイム・ディスプレー114、または実行時にこれらがそのためにプログラムされる他のいずれかの結果を作成することができる。アトム管理プログラム160は静的コード分析または動的プロファイリングに基づいてアトム130をロードする最適な順序を決定することができる。オブジェクト・コード・ファイル106内に別個のセクションを作成するためにコンパイラに依存することによって、アトム化工程を自動化することができ、手動的な分解および分析の必要がなくなる。コンパイラを使用することはコードおよびデータの別個のセクションを作成する1つのオプションであるが、その代わりに、アトム130を作成するためにソース・ファイルを処理するため他のプログラムを使用することもできる。
図5はアトム抽出工程を示している。ステップ302で、コンピュータ・プログラムのコードおよび/またはデータがオブジェクト・コードのフォーマットで受信される。ステップ304で、コンピュータ・プログラムのコードおよび/またはデータ情報がコンピュータ・プログラム・コードおよび/またはデータからオブジェクト・コードのフォーマットで抽出される。ステップ306で、コンピュータ・プログラムのコードおよび/またはデータ・リファレンス情報がコンピュータ・プログラム・コードおよび/またはデータからオブジェクト・コードのフォーマットで抽出される。ステップ308で、アトム識別子を使用するためにコンピュータ・プログラム・コードおよび/またはデータのリファレンス情報が修正される。最後にステップ310で、アトム識別子、コンピュータ・プログラム・コードおよび/またはデータ情報、およびコンピュータ・プログラム・コードおよび/またはデータ・リファレンス情報を含むコンピュータ・プログラム・コードおよび/またはデータ情報がアトム内に記憶される。
図6aはアトム、アトム・データベース、ビュー、および仮想アトム・データベースの略図である。コンセプトとしては、アトム・データベース120はアトム130の向きを持ったグラフであると見なすことができる。アトム・バイト134(ノード)はアトムid132(ノードid)によって識別され、アトム・リファレンス136(エッジ)によってリンクされる。アトム・データベース120はアトム130を記憶する。各アトム130は一意的アトムid132によって識別される。各アトム130ごとのコードおよび/またはデータはアトム・バイト134として表される。アトム130はアトム・バイト134およびアトム・リファレンス内のコードおよび/またはデータを含めて圧縮される。ある環境では、復元はディスクの読み出し時間よりも速く、圧縮・復元工程によってパフォーマンスが著しく向上し、同時にメモリおよびディスクの記憶スペースが小さくてすむ。アトム(例えばアトム141、142、143、144)を記憶するアトム・データベース120は変換オペレーションを利用して、アトム(例えばアトム141、142、143、144,145)を記憶する仮想アトム・データベース121へと仮想的に変換されることができる。挿入オペレーションはアトム146を追加し、置換オペレーションはアトム143をアトム145に置き換える(その結果アトム144はその時点でアトム145になる)。ビュー122を介してアトム・データベース120にアクセスする(すなわち仮想アトム・データベース121にアクセスする)プログラム(例えば実行可能プルグラム158)はアトム144にアクセスしてアトム145を呼び出し、これに対してアトム・データベース120に直接アクセスする実行可能プログラム156はアトム144にアクセスしてアトム143を呼び出す。このようにして、(例えば141、142のような)同一のアトムのコピーを記憶しておく必要なく、アトム・ソフトウェアの複数のバージョン/レリースを保持することができる。
アトム130は永続的アトムid132(識別子)によって一意的に識別されるコード断片、またはコード要素である。コード・アトム130は典型的にはソース言語(例えばC/C++) 級のプロシージャである。データ・アトム130はデータ要素であり、任意のサイズのものでよい。アトム130は必要時にメモリ(例えば読み出し専用コード・バッファ170、読み出し専用データ・バッファ180、読み出し−書き込みデータ・バッファ190のような)メモリに引き込まれ、もはや必要ではなくなると入れ換え可能である。アトムid132の性質が永続的であることにより、あるアトム130が既に存在することが判定され、永続的アトムid132によって識別されることによって、エンジニアは既存のレリースに基づいて新規にレリースすることが可能である。それによって既存のレリースからのデルタに基づいて増分的なレリースがなされる。
アトム・データベース120内のアトム130は(例えばコード、データ、リファレンス、および/または特性を更新するために)所望のプログラミング変更に影響するように修正可能である。修正オペレーションの1つの重要なサブセットは、アトム130がディスク上で、および/またはメモリ内で共用するためにビュー122を使用して別のアトム130と置き換えられる置換オペレーションである。アトムの置き換えによってアトム130を参照するコードおよび/またはデータは、参照されたアトムが異なるアトム130と置き換えられ、またはそれに更新された場合に不変のままに留まることができる。ビュー122はリファレンスを1つのアトムid132から別のアトムid132に変換することができる。ビュー122はさらに、アトム130の別のデータ、リファレンス、および/または特性に影響を及ぼす変換オペレーションをも含むことができる。
複数のビュー122をアトム・データベース120上に画成して、実行可能なプログラム156が様々な態様でアトム130を共用できるようにすることが可能である。このようにして、アトム化のためにビューを利用する実行可能プルグラム156をアトム・データベース120の特定のビュー122に対して実行可能であろう。例えば、実行指令線「MyApplication.exe‐dATOM.DB‐v1.1」を介してビュー122およびアトム・データベース130を実行可能プログラム156と関連付けることが可能である。実行可能なプログラム156「MyApplication.exe」は、ビュー・ファイル「1.1」内に画成されたビュー122を利用して作成されたビュー・バージョン「1.1」で画成されたアトム130にアクセスするため、アトム・ローダ(例えばアトム管理プログラム160)を呼び出すためのスタブを含むことができる。
ビュー122の変換オペレーションの生成には1つのアトム・データベース120から別のアトム・データベース120へのアトム130の設定差を作成することが含まれる。アトム130は様々なビュー122間で共用可能であるので、単一のアトム・データベース120を利用して製品の複数のレリース/バージョンを保持することができる。
新レリースのコンピュータ・ソフトウェアを、変換オペレーションを含むビュー122内に符号化することができる。変換オペレーションは2つの物理的アトム・データベース120間、または仮想データベース121と物理的アトム・データベース120間、または一対の仮想アトム・データベース121間の差を規定することができる。このようにしてソフトウェアのレリースは、先行するソフトウェアのレリースをベースにすることができる。
図6bはアトム、アトム・データベース、ビュー、および仮想アトム・データベースの略図である。ビュー122はアトム・データベース120を新たなアトム・データベース120に変換することができる。図6aに記載されている実施例では、アトムがアクセスされ、メモリにロードされた際にアトム・リファレンス、データおよび/または特性を変換することによって、変換によって仮想アトム・データベース121が作成された。新たな物理的アトム・データベースを作成するためにこれと同じ工程を利用することができる。このようにして、変換オペレーションは一度しか行われる必要がなく、変換されたアトム130の像で別個の新たなアトム・データベース123が作成される。別個の新たなアトム・データベース123は(修正も削除もされずに)再利用されるアトム・データベース120から全てのアトム130のコピーを記憶し、挿入オペレーションの結果挿入された全ての新規アトム130を記憶し、かつ修正オペレーションの結果修正されたアトム130を記憶する。別個の新たなアトム・データベース123はアトム・データベース120を更新する非破壊的な方法をもたらす。
図6cはアトム、アトム・データベース、ビュー、および上書きされた新規アトム・データベースの略図である。ビュー122はアトム・データベース120を新たなアトム・データベース120に変換することができる。新たなアトム・データベース120は(図6aに示すような)仮想アトム・データベース121であってもよく、または(図6bに示すような)別個の新たなアトム・データベース123であってもよい。新たなアトム・データベース120はさらに、既存のアトム・データベース120に上書きして、上書きされたアトム・データベース123を作成することもできる。別個の新規アトム・データベースの場合と同様に、変換オペレーションは一度しか行われる必要がなく、変換されたアトム130の像で別個の新たなアトム・データベース123が作成される。上書きされた新たなアトム・データベース123は(修正も削除もされずに)再利用されるアトム・データベース120から全てのアトム130のコピーを保持し、挿入オペレーションの結果挿入された全ての新規アトム130を記憶し、かつ置換オペレーションの結果置換されたアトム130を記憶する。未使用のアトムを上書きされたアトム・データベース123から除去するために削除オペレーションを行うことができる。上書きされた新たなアトム・データベース123はアトム・データベース120を更新する破壊的な方法をもたらす。
図7aは単一のビューを利用し、ディスク上のアトムを共用する複数の実行可能プログラムの略図である。ランタイムで、本発明の実施形態は共用されたライブラリ(すなわちDLL)用の従来の機構を回避し、その代わりに、例えばメモリの4Kブロックの代わりにアトムの粒状性でロードするより効率的なアトム機構を利用する。アトム管理プログラム160は必要に応じてアトム・データベース120からアトム130をロードする。アトム管理プログラム160はメモリを割り当て、その後バッファ内のアトム(例えばアトム141)を管理する。アトム・エクストラクタ150はメモリ内の、既存のアトム130を探し、既にロードされていなければアトム・データベース120からこれらをロードするアトム管理プログラム160用にアトム130を介して間接的にされる以前に修正されたプロシージャ・コールを有している。
バッファ管理は限定されたメモリの利用、交換およびスラッシングの縮減、および立ち上げ時間の短縮を含む幾つかの利点をもたらす。限定されたメモリの利用によってメモリの利用はいずれかの特定のサイズに限定される。例えば、コード・アトム130用に正確に8MBのメモリを規定でき、新たなアトム130が必要になると古いアトム130を交換可能であろう。本発明の実施形態によって、メモリの利用を制限することにより交換およびスラッシングが縮減され、したがってメモリの過度の利用を管理するためにプログラムはそのメモリ管理機構を使用する必要がない。プログラムのメモリ管理は汎用であり、特定のニーズ用に調整されたものではないので、本来効率は低い。必要なコードを正確にロードすることによって、また他のコードは単に共用のライブラリ内に「隣接」しているという理由だけでメモリの消費は縮減される。アトム管理プログラム160は立ち上がり時間を短縮する。アトム管理プログラム160は第1のアトム130をロードし、実行する。新たなアトム130が必要になると、それらがロードされ、実行される。したがって、コードはコード全体がメモリにロードされるまで待機しなくとも適正に動作する。本発明の実施形態は、(未だ転送されていない場合があるアトム130の利用可能性により制限されて)ダウンロードが完了する前に、ダウンロードされているコード・アトム130の実行を開始する。
アトム管理プログラム160は下記の3つの種類のバッファを管理する。すなわち、読み出し専用コード・バッファ(例えば176、178)、データ定数用に利用可能な読み出し専用データ・バッファ(例えば186、188)、および大域的データ用に利用可能な読み出し−書き込みデータ・バッファ(例えば196、198)である。読み出しー書き込みデータは任意のサイズのものでよく、またアトム・データベース120から再ロードされることができなくてもよいので、そのサイズは制限されなくてもよく、したがってそれを管理するためにプログラムの仮想メモリ・システムをその管理用に使用してもよい。
アトム130を一度に1つだけロードするのは、関連するものと判定できた場合にワーキングセット・アトム130を同時にロードするよりも効率が低い。どのアトム130が「ワーキング・グループ」を形成しているかを判定するためにワーキングセット・チューナーが使用される。ワーキングセット・チューナーはアトム化された環境向けの情報を収集するようにされている。情報の収集がなされると、アトム130の相互の関係を示すアトム・データベース120内の指令のような情報を利用する機構が使用される。本発明の実施形態は特定のロード順序に適合するようにアトム130を並べ替える能力を備えている。
アトム管理プログラムの読み出し専用コード・バッファ176、178の管理によって、ロードのある程度の最適化がなされる。1つのアトム130が他のアトム130へのプロシージャ・コールを行う場合、この呼び出しは一般にアトム管理プログラム160を介したスタブを用いて間接的に行われる。ターゲット・アトム130への直接的なジャンプ(「リンク・スナッピング」)を行うために呼び出し元のコードのメモリ内の画像が修正されると、プロシージャ・コールはより迅速になる。しかし、一旦リンクがスナップされると、アトム管理プログラム160はリンクの無効化を伴わずにターゲット・アトム130を移動またはスワップアウトすることができない。頻繁に呼び出されるアトム130の場合は、これは価値ある交換条件であることがある。どのアトム130がダイレクトコールにふさわしいかを判定するために、またアトム130をメモリ内のロックするためにアトム管理プログラム160によってツールが使用される。リンク・スナッピングのための分析は、コード/データをメモリ内にロックダウンすることによってランタイムで、またランタイムでスタブを使用しないことをあるアトム・リファレンス136にマークすることによってコンパイル・タイムに実施されることができる。アトム・データベースのビュー122とスタブ/リンク・スナッピングとを組み合わせることによって、システムの特性を所望のパフォーマンス基準に適合させる多くのオプションが与えられる。
複数の実行可能プログラム156、158はコードおよび/またはデータを共用するために同じ仮想アトム・データベース121(または新規アトム・データベース123)にアクセスすることができる。例えば、実行可能プログラム156はコード・アトム141をも呼び出す。コード・アトム141のコピーがディスクから読み出され、各プログラムの読み出し専用メモリ・バッファ176、178へとロードされる。次に、ロードされたコード・アトム141を実行可能プログラム156、158が直接呼び出す。このようにして、複数の異なる実行可能プログラム156、158は、場合によっては異なる製品および/または異なる製品バージョンから、アトム・データベース120に記憶されているディスク上のアトム130(例えばアトム141)を共用する。
図7bは単一のビューを利用し、ディスク上およびメモリ内のアトムを共用する複数の実行可能プログラムの略図である。この実施例では、複数の実行可能プログラム156、158がバッファ(例えば読み出し専用コード・バッファ170、および読み出し専用データ・バッファ180)を共用する。第1の実行可能プログラム(例えば実行可能プログラム156)がアトム141を呼び出すと、アトム管理プログラム160はアトム141を読み出し専用コード・バッファ170へとロードする。後続の実行可能プログラム(例えば実行可能プログラム158)がアトム141を呼び出すと、アトム管理プログラム160はそのアトム141が既にロードされたことを判定することができる。このようにして、複数の異なる実行可能プログラム156、158はアトム・データベース120内に記憶されているメモリ内のコード・アトム130(例えばアトム141)を共用し、複数の実行可能プログラム間でアトムを同時に再利用する。読み出し専用コード・バッファ170を共用する実行可能プログラムのある種の制約は、例えば共用されるコード・アトムでスナップされることはできないリンクを付与する。1つのビュー122だけしか利用されていないのでアトム144を共用することができるため、付加的な共用も可能である。したがって、双方の実行可能プログラム156、158共同じビュー122を利用でき、修正されたアトム144のコピーを共用することができる。
図7cは複数のビューを利用し、ディスク上のアトムを共用する複数の実行可能プログラムの略図である。この実施例では、複数の実行可能プログラム156、158が各々独自のバッファ(例えば読み出し専用コード・バッファ176、178、読み出し専用データ・バッファ186、188、および読み出し−書き込みコード・バッファ196、198)を有している。その上、各実行可能プログラム156、158は下にあるアトム・データベース120の異なるビュー122、125を利用して、異なる仮想アトム・データベース121、124にアクセスする。ビュー122は仮想データベース121を作成し、その内部でコード・アトム141はコード・アトム142を呼び出し、それが144を呼び出す。ビュー125は仮想データベース124を作成し、その内部でコード・アトム141はコード・アトム142を呼び出し、それが145を呼び出す。実行可能プログラム156、158がコード・アトム141を呼び出すと、これらは仮想アトム・データベース(すなわち仮想アトム・データベース121、124)を作成するためにそれぞれのビュー(すなわちビュー122、125)を介してアトム・データベース120にアクセスする。次に、実行可能プログラム156、158はアトム141のコピーをそれぞれのバッファ(例えば読み出し専用コード・バッファ176、178)へとロードすることによってアトム141のディスク・コピーを共用することができる。実行可能プログラム156のロードされたコード・アトム141が実行されると、これはコード・アトム142にアクセスし、これは実行可能プログラム156の読み出し専用コード・バッファ176へとロードされる。コード・アトム142は未修正のままに読み出し専用コード・バッファ176へとロードされる。実行可能プログラム158のロードされたコード・アトム141が実行されると、これはコード・アトム142にアクセスし、これは実行可能プログラム158の読み出し専用コード・バッファ178へとロードされる。コード・アトム142はビュー125内で規定されたようにリファレンスが変換されたアトム・データベース120からロードされる。このようにして、100%のコード・アトム141が共用され、極めて高比率のコード・アトム142が共用されることが可能である。コード・アトム142用には全てのコード・バイトが共用され、単一のリファレンスだけが変更されるので、ほとんどのリファレンスが共用される。コード・アトム142がロードされる際の差分は、各実行可能プログラム156、158がアトム130にアクセスするために異なるビュー122,125を利用しているからである。このようにして、複数の異なる実行可能プログラム156、158は異なるビュー122、125によって規定された他のアトム130を修正しつつ、アトム・データベース120内に記憶されたディスクからの幾つかのコード・アトム130(例えばアトム141)を共用する。
図7dは複数のビューを利用し、ディスク上およびメモリ内のアトムを共用する複数の実行可能プログラムの略図である。この実施例では、複数の実行可能プログラム156、158が独自のバッファ(例えば読み出し専用コード・バッファ176、178、読み出し専用データ・バッファ186、188、および読み出し−書き込みデータ・バッファ196、198)を保持するとともに、バッファ(例えば読み出し専用コード・バッファ170、および読み出し専用データ・バッファ180)を共用している。その上、各実行可能プログラム156、158は異なるビュー122、125を利用して異なる仮想アトム・データベース121、124にアクセスする。ビュー122は仮想データベース121を作成し、その内部でコード・アトム141はコード・アトム142を呼び出し、それが144を呼び出す。ビュー125は仮想データベース124を作成し、その内部でコード・アトム141はコード・アトム142を呼び出し、それが145を呼び出す。ビュー125を仮想データベース121に適用することによって仮想データベース124を作成してもよく、その場合は変換オペレーションはアトム143を145と置き換えているであろう。実行可能プログラム156、158がコード・アトム141を呼び出すと、これらは仮想アトム・データベース(例えば仮想アトム・データベース121、124)を作成するためにそれぞれのビュー(例えばビュー122、125)を介してアトム・データベース120にアクセスする。各仮想アトム・データベース121および124は実際に、下にある同じ物理的アトム・データベース120を共用してもよい。次に、実行可能プログラム156、158はコピーを共用された読み出し専用コード・バッファ170へとロードすることによってアトム141のディスク・コピーとメモリ・コピーとを共用することができる。実行可能プログラム156がコード・アトム142をロードすると、これは読み出し専用コード・バッファ176へとロードされる。実行可能プログラム158がコード・アトム142をロードすると、これは読み出し専用コード・バッファ178へとロードされる。実行可能プログラム156および実行可能プログラム158はコード・アトム142を完全に共用することはできないが、ディスクを共用することができ、これは他の呼び出し元によって利用されるように共用された読み出し専用コード・バッファ170へとロードされることができる。ローディングの差は、各実行可能プログラム156、158がアトム130にアクセスするために異なるビュー122、125を利用し、したがって異なる変換が適用されることによるものである。このようにして、複数の異なる実行可能プログラム156、158は異なるビュー122、125によって規定された他のアトムを置換しつつ、アトム・データベース120内に記憶されたディスクから、およびメモリ内の幾つかのコード・アトム130(例えばアトム141)を共用する。
図8はアトム管理工程を示している。ステップ321でターゲットであるアトムのために必要な何らかの変換を施すために、ビュー122にアクセスされる。変換にはアトム・リファレンス、アトム・データベースロム・コード/データ(バイト)および/またはアトム特性の修正を含めることができる。ステップ322で、アトム管理工程はアトム・データベースからアトム識別子、コンピュータ・プログラム・コード、および/またはデータ情報、およびコンピュータ・プログラム・コードおよび/またはデータ・リファレンス情報を含むアトムをメモリへとロードすることによってアトム化されたコンピュータ・プログラム・コードを管理する。次にステップ324で、コンピュータ・プログラム・コードおよび/またはデータ・リファレンス情報が修正されて、アトム識別子およびオフセットがメモリ・アドレスと置き換えられるようにされる。
図9はアトム・データベースのデータ構造の略図である。アトム・データベース120はアトム130を記憶する。アトム130はコンパイルされたプロシージャまたは文字列定数のような単一のデータに対応する。アトム130は必要時にアトム・データベース120からメモリへとロードされる。それによってメモリのフットプリントが縮小され、ディスクI/Oが縮減される。アトム・データベース120はアトムid132の値(整数)からアトム130へとマッピングされる。アトムid132はアトム130を識別する31ビットの整数をして表すことができる。アトム130は任意の順序でロードされることが可能である。アトム130をメモリにロードするために必要なスペースを節減し、I/Oを最小限にするため、アトム・データベース120のディスク上の表示が最適化される。アトム・データベース120はさらにアトムid132の値から記号およびデバッグ情報のような該当するアトム130に関連する情報へのマッピングをも行う。アトム・データベース120は各々が可変サイズの幾つかの別個のセクションを備えた1つのファイルであり、セクションはDB見出し350とアトム−マップ360とを含んでいる。様々な実施形態で、アトム−マップ360はボデー−アトム−マップ、記号−アトム−マップ、カテゴリー−アトム−マップ、および記述−アトム−マップを含むことができる。db見出し350が最初に来るが、他のマップ・セクションの順序、位置および数は随意である。DB見出し350は各々の他のセクションごとのファイル・オフセットを含んでいる。
DB見出し350はデータベース・ファイル内のまったく最初の事象である。これはマジック−ナンバー、バージョン−ナンバー、cpuの種類、osの種類、ボデー−アトム−マップ−オフセット、記号−アトム−マップ−オフセット、カテゴリー−アトム−マップ−オフセット、および記述−アトム−マップ−オフセットを含む他のセクションのファイルと位置に関するある種の大域的な情報である。
マジック・ナンバーはこのファイルをアトム・データベース120として定義し、さらにファイル内の他の全てのマルチバイト数の並び順をも定義する。データベースがリトルエンディアン・バイト順で記憶されている場合は、マジック・ナンバーはこれらの4つのバイト:0xD7 0x15 0xFF 0x31からなっている。ビッグエンディアン・ファイルの場合は、バイトは逆になる:0x31 0xFF 0x15 0xD7。このバイト・シーケンスには特定の意味はない。データベース・ファイルは常に、そのコードを含んでいるプロセッサの固有の並び順(バイト順)に記憶される。それによって、ランタイムでの無駄が多いバイト交換の必要がなくなる。しかし、マジック・ナンバーは並び順を明確に特定するので、クロス−プラットフォーム・ツールがアトム・データベース120を操作できる。
バージョン・ナンバーはデータベースによって用いられるファイル・フォーマットのバージョンを示す。
CPUの種類はデータベースがそのために作成されたCPUの種類(例えばPentium(登録商標)、PowerPCなど)を示す。
OSの種類はこのデータベースがそのために作成されたOSの種類(例えばWin32、Linux、MacOS Xなど)を示す。
ボデー−アトム−マップ−オフセットはファイルの始端に対する、ボデー−アトム−マップ・セクションが始まるファイル・オフセットである。
記号−アトム−マップ−オフセットはファイルの始端に対する、記号−アトム−マップ・セクションが始まるファイル・オフセットである。
カテゴリー−アトム−マップ−オフセットはファイルの始端に対する、カテゴリー−アトム−マップ・セクションが始まるファイル・オフセットである。
記述−アトム−マップ−オフセットはファイルの始端に対する、記述−アトム−マップ・セクションが始まるファイル・オフセットである。
図10はアトム・マップ見出しデータ構造の略図である。アトム−マップ360はアトム−マップ見出し370とアトム−マップ−アレイ380とを含んでいる。アトム−マップ360はアトムid132を、そのアトムid132に関連する何らかの情報を見出すことができるファイル・オフセットへとマッピングする。アトム−マップ360の表示は任意の組のアトムid132にも有効であるが、これは連続的なアトムid132の範囲向けに最適化され、したがって例えば、アトムid132用のアトム−マップ360{12、23、24、216}はアトムid132{10、11、12、13}の場合よりも多くのスペースをとる。アトム−マップ360のセクションはデフォールト−アトム−シーケンス−デルタ372、アトム−オフセット−シーケンス−アレイ−サイズ374、アトム−オフセット−シーケンス−アレイ−オフセット376、およびアトム−マップ−データ−オフセット378を含むアトム−マップ見出し370から始まる。
デフォールト−アトム−シーケンス−デルタ372の欄は連続するアトムid132に対応するデータ用のファイル・オフセットのシーケンスを含むアトム−マップ360で使用可能である。これらのシーケンスはスペースを節約するためにアトム−マップ360内で「デルタ符号化」される。デルタ符号化は数列を連続する対偶間の差として記憶する技術である。多くのシーケンスでは、デルタは小さく、多くの符号化方式がゼロに近い数をよりコンパクトに記憶することができるので、デルタ・シーケンスはオリジナルのシーケンスよりも少ないスペースしかとらない場合が多い。例えば、{1000、1011、1012、1013、1015、1016}のデルタ符号化バージョンは{1000、1、1、1、2、1}に見えよう。デルタは通常は小さい正の整数であるが、良好に選択された定数、すなわちデフォールト−アトム−シーケンス−デルタ372をそれぞれのデルタから減算することによってさらにゼロに近づけることができる。例えば、オリジナルの数列が{1000、1050、1104、1165、1202}であったものと想定してみる。このシーケンスをデルタ符号化すると{1000、50、54、61、37}が生ずる。デフォールト−アトム−シーケンス−デルタ372が50に等しいものとすると、このシーケンスはさらに{1000、0、4、11、−13}へと調整されよう。最後の数はゼロにより近いので、シーケンスをよりコンパクトに符号化できる。ホフマン符号化または演算符号化法を適用することも可能である。
アトム−オフセット−シーケンス−アレイ−サイズ374はアトム−マップ360のシーケンス・アレイ内のエントリ数である。
アトム−オフセット−シーケンス−アレイ−オフセット376はデータベース・ファイル内のアトム−マップ360のセクションの始端に対する、アトム−マップ360のシーケンス・アレイのファイル・オフセットである。
アトム−マップ−データ−オフセット378はアトム・データベース120のファイル内のアトム−マップ360のセクションの始端に対する、アトム−マップ360用のデータが始まるファイル・オフセットである。
アトム−マップ360(例えばボデー−アトム−マップ、記号−アトム−マップ、カテゴリー−アトム−マップ、および記述−アトム−マップ)はアトム−マップ−アレイ380を含んでいる。各アトム−マップ−アレイ380の要素はファイル・オフセットの圧縮されたシーケンス(すなわちアトム−オフセット−シーケンス390)へのリファレンスである。各アトム−オフセット−シーケンス390は連続するアトムid132の群に属する情報用の圧縮されたファイル・オフセットを含んでいる。
図11はアトム・マップ・アレイ・データ構造の略図である。アトム−マップ−アレイ380は最初のid382、シーケンス−サイズ384、およびシーケンス−オフセット386の要素からなっている。シーケンス−サイズ384はアトム−オフセット−シーケンス390内のアトム130の数である。シーケンス内のアトム130は最初のid382から始まる連続的なアトムid132を有している。シーケンス−オフセット386は、アトム・データベース120のファイルのアトム−マップ360のセクションの始端に対する、アトム−オフセット−シーケンス390へのファイル・オフセットである。アトム−マップ−アレイ380は各シーケンス内の最初のアトム130のアトムid132によって分類される。それによって、2分探索を行うことによりアトムid132を、これを含むシーケンスへとマッピングすることが可能になる。次にこれを含むシーケンスを走査すると、所望のアトム130用のファイル・オフセットが生ずる。
図12はアトム・オフセット・シーケンス・データ構造の略図である。アトム−オフセット−シーケンス390は最初のアトム−ファイル−オフセット392とデルタ符号化ファイル・オフセット394とを含むファイル・オフセットのデルタ符号化されたアレイである。各ファイル・オフセットはアトム−マップ−データ−オフセット378に追加され、その結果がアトム−マップ360のセクションの始端に対して解釈される。1つの長いシーケンスは、それがシーケンス当たりの固定されたオーバーヘッドをアトム化するので、同数のファイル・オフセットを含む、より小さい2つのシーケンスよりも小さいスペースしかとらない。しかし、シーケンスが長いほど探索にかかる時間が長くなる。したがって、アトム−マップ360は典型的には、長さ、ひいては探索時間に適宜の制約を設けるために、厳密に必要であるよりも多いシーケンスへと分解される。しかし、シーケンスのサイズには定められた制限はない。
最初のアトム−ファイル−オフセット392はシーケンス内の最初のアトム130のファイル・オフセットである。シーケンスの残りの部分はこの値から始まる一連のデルタである。
デルタ符号化ファイル−オフセット−アレイ394は、連続的なアトムid132を見出すことができるファイル・オフセットのシーケンスを符号化するバイトのブロックである。
シーケンスを符号化するため、エンコーダはファイル・オフセットのシーケンスから開始する。これらはアトム−マップ−データ−オフセット378に追加される予定のバイト・オフセットを表す。例えば、オリジナルのファイル・オフセットの数列が{1000、1050、1104、1165、1645、760}であったものと想定してみる。アトム130は必ずしもファイル内の順序ではないことに留意されたい。最初に、シーケンスがデルタ符号化されて{1000、50、54、61、480、−885}が生ずる。デフォールト−アトム−シーケンス−デルタ372が50に等しいものとすると、このシーケンスはさらに{1000、0、4、11、430、−935}へと調整されよう。最後に、(最初のアトム−ファイル−オフセット392内に記憶されている最初の数の後の)シーケンス内の各々の数はサイズ可変整数として符号化される。符号化によってバイト・シーケンス{0x00 0x04 0x0B 0x83 0x2E 0xF8 0x59}を生ずる。幾つかの整数はより小さい値用により少ないバイトをとるサイズ可変符号化法を用いて記憶される。符号付きの整数は7ビット値のシーケンスとして符号化される。数値は、データベースの全体的な並び順に関わりなくビッグエンディアン・バイト順(最上位バイトが最初)に記憶される。各バイトのハイビットはそれ以上のいずれかのバイトが続くか否かを示す特別のフラグである。最初のバイトの7番目のバイト(数値データの最上位ビット)は符号拡張される。符号がない整数は7ビット値のシーケンスとして符号化される。数値はデータベースの全体的な並び順に関わりなくビッグエンディアン・バイト順(最上位バイトが最初)に記憶される。各バイトのハイビットはそれ以上のいずれかのバイトが続くか否かを示す特別のフラグである。結果として生ずる数値は符号拡張される。
アトム−マップ360は特定の種類の情報をアトムid132に関連付けるために使用される。例えば、アトム−マップ360をコード/データ・ボデー情報、記号情報、カテゴリー情報、および記述情報用に使用可能である。
ボデー−アトム−マップは、通常のアトムの場合は、結合して最終的な通常アトム・ボデーを形成することができるアトム・リファレンス136およびアトム・バイト134に関する圧縮された情報を含み、特定目的のアトムの場合は、特定目的のアトムの各々の特殊型に適する情報を含む、そのアトムid132をロードするために必要な情報のブロックへと各アトムid132をマッピングする。
ブロックの最初のバイトは1組のアトム−フラグ396を符号化するために使用される。アトム−フラグ396の3つの下位ビットの値が特定目的の識別子(例えば「7」の値を示す3つのオン・ビット)を含んでいない場合は、アトム130は通常のアトムであり、そうではない場合にはアトム130は特定目的のアトムである。通常のアトム・ボデーのローディング速度を高めるため、アトム130用のアトム・リファレンス136とアトム・バイト134の双方ともアトム・データベース120のファイルに連続して記憶される。アトム・データベース120のサイズを小さく保つため、ひいてはこれをロードできる速度を高めるため、通常のアトム・ボデー用のアトム・リファレンス136およびアトム・バイト134は多様な態様で圧縮される。
図13は符号化されたアトム・データ構造の略図である。通常のアトム用の情報ブロックは、アトム−フラグ396、アトム−ナンバー情報397、符号化されたアトム−リファレンス398、および符号化された未処理アトム−バイト399からなっている。
アトム−フラグ396はアトム圧縮の種類を特定するフラグ・バイトの様々なビットを使用する。本発明の実施形態は複数の圧縮方法をサポートする。アトム−フラグ396のバイトの他のビットはアトムをどのバッファにロードすべきか(すなわち読み出し専用コード・バッファ、読み出し専用データ・バッファ、読み出し−書き込みデータ・バッファ)を特定する。さらに別のビットはロードされる際にアトム130が必要とするアラインメントの定数を2とした対数を定義する。(例えばこれらのビット内に記憶された「3」の値によって、アトム130はロードされるとmod8バイトで位置合わせされよう。)
アトム−ナンバー情報397は符号化されたアトム−リファレンス398のブロック内に幾つのリファレンスが現れるか、および符号化された未処理アトム−バイト399のブロックから幾つの未処理バイトが抽出されるかに関する情報を含むバイト・ブロックである。このエントリはリファレンスの数および抽出すべき未処理バイト数の双方を決定する。概念的なアトム・バイト134およびアトム・リファレンス136は符号化されたアトム−リファレンス398および符号化されたアトム未処理バイト399としてそれぞれ符号化される。
アトム−ナンバー情報397は符号化されたアトム−リファレンス398のブロック内に幾つのリファレンスが現れるか、および符号化された未処理アトム−バイト399のブロックから幾つの未処理バイトが抽出されるかに関する情報を含むバイト・ブロックである。このエントリはリファレンスの数および抽出すべき未処理バイト数の双方を決定する。概念的なアトム・バイト134およびアトム・リファレンス136は符号化されたアトム−リファレンス398および符号化されたアトム未処理バイト399としてそれぞれ符号化される。
図14は符号化されたアトム・リファレンス・データ構造の略図である。各々の符号化されたアトム−リファレンス398はこのアトム130から別のアトム130への参照を記述するバイト・ブロックである。例えば、アトム130が別のアトム130によって表される別のプロシージャを呼び出すプロシージャを表している場合、別のアトム130は符号化されたアトム−リファレンス398内に記述されよう。符号化されたアトム−リファレンス398のこのアレイはアトム管理プログラム160によって、アトムをロードする際にアトム130を互いにリンクするために使用される。
アトム−ナンバー情報397は符号化されたアトム−リファレンス398によって符号化されるアトム・リファレンスの数である。
符号化された各アトム−リファレンス398はアトム−リファレンス−タイプ402、ソース−オフセット−デルタ404、Dest−オフセット406、およびデストネーション−アトムid408を含んでいる。
アトム−リファレンス−タイプ402はあるアトム130から他のアトム130への異なる種類のリファレンスを定義する。全ての種類が全てのプラットフォームによって使用されるわけではない。妥当なアトム−リファレンス−タイプ402はイーガー−アブソリュート−32、イーガー−リラティブ−32、レイジー−アブソリュート−コード−32、レイジー−リラティブ−コード−32およびレイジー−アブソリュート−32を含んでいる。
イーガー−アブソリュート−32によってアトム管理プログラム160は参照されたアトム130を即座にロードし、それに対する絶対的なアドレスを記憶する。
イーガー−リラティブ−32はイーガー−アブソリュート−32と同類であるが、イーガー−リラティブ−32は参照されたアトム130への相対的なオフセットを記憶する。相対的なオフセットはリファレンスの始端から測定される。
レイジー−アブソリュート−コード−32はコードを含むアトム130への絶対的なアドレス(例えば32ビット)を定義する。これが「レイジー」(緩慢)であるのは、参照されたアトム130はそれが最初に呼び出されるまで実際にはロードされないからである。アトム管理プログラム160は参照されたアトム130が呼び出されて初めてこれを緩慢にロードするコード・スタブを指し示すようにリファレンスをセットアップすることによって遅延されたローディングを管理する。
レイジー−リラティブ−コード−32はレイジー−アブソリュート−コード−32と同類であるが、レイジー−リラティブ−コード−32はリファレンスに対する相対的なオフセットを記憶する。相対的なオフセットはリファレンスの始端から測定される。
データのレイジーな、すなわち需要に応じたローディングは、参照されたデータ・アトムがランタイムで実際にアクセスされるまでロードされないように、コードのレイジーなローディングによって暗黙的に、または参照用アトム識別子を符号化することによって明示的に行われる。データを参照するコードのローディングは呼び出されるまで遅延可能であるので、コードが参照するデータは同様に遅延され、データのレイジーなローディングを暗黙的に行う。明示的なレイジー・データは典型的には、レイジーにロードされるデータを(例えばコンパイラ指令を用いて)マークするためにプログラマーによるサポートを必要とする。1実施形態では、明示的なレイジー・データは、参照するアトム識別子を2倍し、参照するアトム識別子を1だけ増分してレイジー・データ・アトム識別子を生成する特定の符号化アルゴリズムを利用して参照される。
レイジー−アブソリュート−32は別のアトム130への絶対的な(例えば32ビットの)アドレスを定義する。これは参照されるアトム130が実際に明示的にロードされない点で「レイジー」である。むしろ、アトム管理プログラム160は符号化されたアドレス(2*参照されたアトムid)+1を記憶することによってこのリファレンスをリンクする。符号化されたこのアドレスは常に奇数であることに留意されたい。ジャンプ・スタブを利用可能なレイジーコード・リファレンスとは異なり、レイジー・データ・リファレンスはアトム管理プログラム160が実行中のプログラムからの協力を必要とする。ポインタの値が奇数であることをチェックし、それらがレイジー・データ・リファレンスであることを認識する必要がある。次に、アトム管理プログラム160へとコールバックすることによって所望のアトム130にロードする必要があり、典型的には炉ふぁ連ステップに最終アドレスを上書きするであろう。もちろん、レイジーにロードされたデータが偶数のアラインメントを有することが判明していなければならず、さもなければこのようなポインタの向けの奇数値が曖昧になる。
ソース−オフセット−デルタ404はリファレンスが現れるアトム130へのバイト数を特定する。この値は先行のリファレンスの終りからのデルタとして表される。全く最初のリファレンスは、ソース・オフセット0で終わる先行リファレンスがあたかも存在するかのように符号化される。リファレンスは常にそれらのソース・オフセットによって分類されて記憶されるので、このアレイ内のデルタは常に負ではない。例えば、アトム130がバイト・オフセット0、4、8、12、20で4バイトのリファレンスを有している場合は、これらのリファレンス用のソース・オフセット・デルタ欄は0、0、0、0、4として符号化されよう。
Dest−オフセット406は、リファレンスが指し示す参照された(Dest)アトム130へのバイト数のオフセットを符号化する。
Dest−アトム・id408はこのリファレンスが指し示すアトム130用のアトムid132である。
符号化された未処理アトム−バイト399はアトム130用のアトム・バイト134を表すバイト・ブロックであり、他のアトム130へのいずれかのリファレンスを保持するスペースが必要であり、残りの未処理バイトはアトム圧縮の種類によって定められる態様で圧縮される。未処理バイトを作成するためにアトム・バイト内のリファレンスを除去することができるが、それは符号化されたリファレンス情報が(リファレンスがどこで作成されたかを特定する)ソース・オフセット、(ターゲット・アトムを特定する)デストネーションid、および(リファレンスが指し示すターゲット・アトムへのバイト数を特定する)Dest−オフセットを含んでいるからである。例えば、アトム・バイト134がC文字列の定数を表す場合は、このアレイは、場合によっては圧縮された状態で文字列内の文字のシーケンスを保持するであろう。そうではなく、アトム・バイト134が4つのデータ・バイトからなり、その後に別のアトム130への4バイトのリファレンスが続き、その後にさらに8つのデータ・バイトが続く場合は、符号化された未処理アトム−バイト399は、場合によっては圧縮された状態でちょうど12バイトのデータを含むであろう。4バイトのリファレンスがローディング中に所定位置に「継ぎ合わされ」、完全にロードされたアトム・バイト134が16バイトを占めるようにする。
特定目的のアトムは(例えば「7」の値に設定された下位の3ビットのような)特定目的の識別子を含むアトム−フラグ396によって定義される。アトム−フラグ396の残りのビットは、特定目的のアトムがdll−ref−アトムであるのか、dll−アトムであるのかを特定する。
Dll−ref−アトムは3つの欄を備えている。すなわち、アトム−フラグ、dll−アトム−idおよびdll−記号である。Dll−ref−アトムは(printf()のようなライブラリ機能用のアトム130のような)外部DLL内の記号に対応している。これらのアトム130はそのDLLで参照するための一対のDLLおよび記号として表される。Dll−アトム−idはdll−記号を参照するDLLを特定するdll−アトムのidを特定する。Dll−記号はどの記号をDLL内で参照するかを特定する。
Dll−アトムはアトム−フラグ欄とdll−パス−ネーム欄とを備えている。Dll−アトムはdll−ref−アトムに関連し、dll−ref−アトムが記号を参照するDLLを特定する。Dll−パス・ネームはdlopen、LoadLibrary、またはこれと同等の機能に送るのに適するパス・ネームを特定する。これはC文字列(0で終わるバイトのシーケンス)として記憶される。
記号−アトム−マップはアトムid132をテキスト記号にマッピングし、それによって関連するアトム130は名前によってアクセスされることができる。記号はユーザーに便利な態様でアトム130を参照するのに有用である。例えば、アトム130を57のアトム識別値で参照する場合、プログラマーにとっては(例えば)57」のような)アトム識別値によるよりも(例えば「printf」のような)名前で参照するほうが簡単である。
カテゴリー−アトム−マップは定まった意味論を持たない、アトムid132からテキスト・カテゴリーへのアトム−マップ360である。カテゴリー−アトム−マップによって開発者はアトムを特定のカテゴリーに分類することが可能になる。別の例では、文字列アトム130を識別し、国際化のため、およびその他の多くの目的のためにアトム130を識別するため、アトム130にタグを付すためにカテゴリーを利用することができる。
記述−アトム−マップは定まった意味論を持たない、アトムid132からテキスト記述へのアトム−マップ360である。記述−アトム−マップは、アトム準拠のシステムを開発/デバッグする場合に、開発者にとって有用なデバッグ情報ヲ記憶するために利用することができる。
アトム・リファレンスの種類はリファレンス利用のプロファイリングに基づいて、静的または動的に変更可能である。アトム・リファレンス136は一般に、実際のアトム・バイト134のローディングをランタイムで実際に必要になるまで遅延するために、デフォールトで「レイジー」になる。「イーガー」リファレンスによって、呼び出しアトム130がロードされると、参照されたデータ/コードはそれが実際に必要であるか否かに関わらずロードされる。ランタイムで所定のアトム130内で実行されたランタイムのコード・パスは、アトム130内の全ての命令を実行しないことが多い。呼び出されない、または参照されないアトム130のローディングはメモリと処理資源の無駄になることがある。
コード用のレイジーなリファレンスを解消することには、参照されたアトム130が最初に呼び出された時点でこれをレイジーにロードするコード・スタブを指し示すことが含まれる。データ用のレイジーなリファレンスを解消することには、参照されたアトムidを(2*参照されたアトムid)+1として記憶することが含まれる。
一旦レイジー・コード・リファレンスが実行/アクセスされると、コード・スタブを使用するという遠回りを避けるために最適化を行うことができる。最適化にはロードされたアトムを直接参照するために参照コードを「バックパッチ」することが含まれる。バックパッチはスタブを使用する代わりにメモリ内のコード・アトム130に直接ジャンプするものである。バックパッチは最初の実際の呼び出し元に関して実行可能であり、さらに、参照されたアトム130が実際に呼び出された場合にその時点でそこに直接ジャンプすることが可能であるように、ロードされるどのアトム130にも適用可能である。コード・スタブは、バックパッチが行われなかったいずれかのアトムが利用するようにメモリ内に残しておくことができる。本発明の実施形態はコード・アトム130とデータ・アトム130とのリファレンスにタグが付されて、アトム・レベルで特定のローディング・アクション(例えばレイジーまたはイーガー)を行うことを提案する。
図15は6つのコード・プロシージャと3通のデータ要素のシステム例の略図である。この実施例ではプロシージャP1はプロシージャP2およびP3を呼び出し、プロシージャP1はさらにデータ要素D1にアクセスし、これはデータ要素D2にアクセスする。プロシージャP2はプロシージャP4にアクセスし、これはデータ要素D3にアクセスする。プロシージャP3はデータ要素D1にアクセスし、プロシージャP5を呼び出す。本発明の実施形態によれば、各コード・プロシージャ{P1、P2、P3、P4、P5、P6}は個々にアドレス指定可能な単一のアトムとして定義される。同様に、各データ要素{D1、D2、D3}は個々にアドレス指定可能な単一のアトムとして定義される。ランタイムでP1がロードされると、D1が即座にロードされ、それによってD2がロードされる。P2およびP3へのリファレンスがレイジーである場合は、P2およびP3用にスタブが作成され、それによってプロシージャのコードの実際のローディングは、それらが実際に呼び出される場合、その時点まで延期されることができる。通常の実行パス中にある種のコード・プロシージャ(例えばエラー・ハンドラ)が呼び出されないことが充分に可能である。この場合、ローディングを遅延させることによって処理工程とメモリが節約される。コードのレイジーなローディング(例えばP2)に基づくデータ(例えばD3)の暗黙的なレイジー・ローディングによってプロセッサとメモリの双方が節約される。
データ要素に同様の能力を付与するためにデータ・アトム・リファレンスを符号化することができる。データの明示的なレイジー・ローディングによってさらに一層の節約がなされる。(例えばD3のローディングはP2がロードされた後でも遅延させることができる。)
参照されたアトムのアトム識別子を修正することによって、アトム管理プログラム160はデータ要素/アトムが実際に参照されるまでそのローディングを遅延させることができる。コード・アトムの場合と同様に、(例えばエラー・メッセージのような)あるデータ・アトムが通常の実行パス中に参照されないことは充分あり得る。データ・アトムのレイジーな/遅延されたローディングも処理工程とメモリを節約する。
参照されたアトムのアトム識別子を修正することによって、アトム管理プログラム160はデータ要素/アトムが実際に参照されるまでそのローディングを遅延させることができる。コード・アトムの場合と同様に、(例えばエラー・メッセージのような)あるデータ・アトムが通常の実行パス中に参照されないことは充分あり得る。データ・アトムのレイジーな/遅延されたローディングも処理工程とメモリを節約する。
(例えばLinux DLLのような)従来のシステムはコード・スタブを備えるが、これらのシステムは可能な全てのリファレンス用のスタブを立ち上がり時に構成する。これに対して、本発明の実施形態はロードされたアトム130によって実際に参照される各アトム130用のスタブだけを構成する。図13を参照すると、P1のローディングによってP2およびP3用のスタブは作成されるがP4用のスタブは作成されない。従来のシステムは典型的には立ち上がり時に全てのデータ要素をロードする。例えば、従来のシステムでは、D1、D2、およびD3は立ち上がり時に全てロードされる。これに対して、本発明の実施形態はD2がロードされる場合、またはD3が実際に利用される場合だけD3をロードするだけである。ローディングに関連してデータおよびコードを同様に扱うフレキシビリティによって、パフォーマンスの多くの向上が得られる。これはデータとコードの比率が比較的大きいシステムに特に当てはまる。
ビューを利用して、システムの実施例はP5の置き換えである新たなプロシージャP6を含むことができる。ビューはP5へのリファレンスをP6へのリファレンスと置き換えるローディングおよび参照オペレーション用に適用可能であるので、既存のシステムを変更する必要がない。
図16aはデータ・アトム130の略図である。データ・アトム130はそれらのアトムid132、アトム・バイト134、およびアトム・リファレンス136を例示するために概念的に示されている。(図15のD1に類似する)データ・アトム16001はデータの2つのアイテム(アトム・バイト134)、すなわち人名(例えば“Mary Smith”)およびMaryの年齢(例えば47)へのリファレンス(ポインタ)を含んでいる。リファレンス(アトム・リファレンス136)はアトム16002へのリファレンスである。(図15のD2に類似する)アトム16002は“Mary Smith”とうい文字列を表すデータ・アトム130(アトム・バイト132)であり、アトム16002は他のどのアトムをも参照しない。
図16bはコード・アトム130の例の略図である。コード・アトム130はそれらのアトムid132、アトム・バイト134、およびアトム・リファレンス136を例示するために概念的に示されている。(図15のP5に類似する)コード・アトム15000は人名と年齢をプリントするprint_person()プロシージャ用の実行可能なコードを表す。(図5のP3に類似する)コード・アトム16000はMaryの名前と年齢をプリントするprint_person()プロシージャを呼び出すプロシージャを表す。コード・アトム16000はデータ・アトム16001を参照することによってMaryについてのデータを参照し、コード・アトム15000、print_person()への参照を介してprint_person()機能を呼び出す。したがって、アトム16000によって表されるアトムは2つのアトム・リファレンス136、すなわちアトム15000(print_person()プロシージャ用のコード・アトム)へのコード・アトム・リファレンス136と、アトム16001(Maryのデータ用のデータ・アトム)へのデータ・アトム・リファレンス136とを含んでいる。
図16cは置き換えられたコード・アトムの例の略図である。コード・アトム17000はアトム・データベース120に追加され、print_person()プロシージャの更新バージョン(アトム15000)を表す。print_person()を呼び出す実行可能プログラムはこの時点で、実行可能プログラムがコード・アトム17000を参照してアトム15000へのリファレンスを修正するビューで実行されたか否かに基づいて、古いprint_person()プロシージャ(アトムid15000)または新たなprint_person()プロシージャ(アトム17000)のいずれかをよびだすことができる。このようにして、既存のプロシージャを別の呼び出し元用に依然として所定位置に残しつつ、実行可能プログラムが既存のプロシージャの更新バージョンを呼び出すことができるようにするため、ビューを適用することができる。
図17aはアトム・データベース差分処理工程の略図である。アトム・データベース差分処理工程500は2つのアトム・データベース、すなわち第1アトム・データベース510と第2アトム・データベース520とを取り出し、パッチ・ファイルとして記憶可能なビュー122を作成する。ビュー122は1つのアトム・データベースを他のアトム・データベースに仮想的に、または物理的に変換するために利用可能である。アトム・データベース差分処理工程500の目標の1つは、ビュー122のサイズを最小限にして、効率的に記憶され、分散されることを可能にすることである。
各アトム130は(例えばプロシージャ用の実行可能コード、または文字列定数の文字のような)バイト・ブロックからなる「ボディー」(アトム・ボデー134)、プラス他のアトム130へのゼロ以上のリファレンス(アトム・リファレンス136)からなっている。各リファレンスはボデー内のある特定のオフセット位置にある。例えば、プロシージャへの呼び出し命令20バイトは典型的にはオフセット20の位置、またはその近傍に呼び出されたプロシージャ用のアトム130へのリファレンスを含んでいるであろう。
アトム・データベース120はエッジにラベルが付された、向きを持ったグラフを符号化し、各アトム130はノードであり、各アトム・リファレンス136はエッジである。パッチ・ファイルの作成には、第1アトム・データベース510と第2アトム・データベース520とで共通であるサブグラフを特定し、これらのノードを出荷せずに、再度パッチ・ファイル内で再利用することが含まれる。残念ながら、高品質のパッチの作成には同一構造のサブグラフを特定する以上のことが必要である。実際には、サブグラフは1つか2つの相違点を除けば同一構造である場合が多い。その相違は例えば、1つのプロシージャは変更されるが、それを呼び出す全てのプロシージャは不変のままに留まる場合に生じる。1つの相違のために全部を断念するのではなく、サブグラフ用に大部分のアトムを再利用したい。
パッチ・ファイルは結果として生じるグラフを第2アトム・データベース520と同一構造にする第1アトム・データベース510への変換シーケンスを符号化する。正しい変換のセットを特定することはアトム・データベース差分処理工程500の一部である。アトム・データベース差分処理工程500は第2アトム・データベース520内の各アトムを、各々が異なる種類のグラフ変換である3つのカテゴリーの1つに分類する。この分類のベクトルはパッチ・ファイルを作成するために必要な全ての情報を含んでいる。再利用の分類は、第1アトム・データベース510内のアトム130を再利用でき、したがってこれを差分処理セットに加える必要がないものと判定する。これは最良の場合である。置換の分類は、おそらくは他のアトム130が再利用のカテゴリーに入ることができるように、第1アトム・データベース510内のアトム130と新たなアトム130とを置き換える必要があるものと判定する。このアトム130用のバイトはパッチ・ファイル内に現れる。挿入の分類は、この新たなアトム130は第1アトム・データベース120内のどのアトム130とも全く共通点がなく、したがってそれを追加する必要があるものと判定する。このアトム130用のバイトはパッチ・ファイル内に現れる。パッチ・ファイルは置換を記述する情報を含む必要がないので、挿入はやや置換よりベターであると思われる。削除オペレーションはオプションであるが、それはパッチが損失なく実施された後、余剰のアトム130を残したままにできるからである。この工程はパッチを適用する際にディスク上のアトム130を実際に置き換える必要がない。何故ならば、パッチ後のインストールの観点から見た場合、代わりに新たなアトム130を使用すべき場合に、古いアトム130へのリファレンスを修正するために変換オペレーションを利用できるからである。
ここで図17bを参照すると、この場合は各大文字{A、B、C、D、E、F}はアトム130のコンテンツを示している。2つのアトムは、それらが同じ大文字を有していれば、その場合に限って同じボデーを有する。主要な接尾辞“”は、ノードが新たなグラフ内にあることを示している。このグラフ用の最適な変換シーケンスは、再利用(C、C’)、置換(D、E’)、再利用(B、B’)、および挿入(A‘)である。削除(F)変換はオプションである。
留意すべき重要事項は、置換(D、E’)の変換オペレーションは再利用(B、B’)の変換オペレーションを可能にするために決定的に重要であることである。BおよびB’で示されているアトムが等しくなるように変換されると、BとB’とが等しくなる。このアルゴリズムは、できるだけ多くの再利用マージを可能にするためにグラフを変換しようとして多くの時間を費やす。変換によってBおよびCが古いグラフから再利用可能にされたので、これらはパッチ・ファイルで出荷される必要はない。
ここで図17cを参照すると、同様に見えるが実際にはより複雑な実施例が示されている。エッジが順に並べられ、したがって2つのグラフは自明に同一構造ではないことに留意されたい。この実施例では、下記の選択がなされなければならない。XとYを再利用するか、またはAを再利用する。双方ともうまくいく。 XとYを再利用するためには、(X、X’)を再利用し、(Y、Y’)を再利用し、(A、A’)を置換する。Aを再利用するためには、(X、Y’)を置換し、(Y、X’)を置換し、(A、A’)を再利用する。正しい解答はX、YおよびAの大きさによる。AがXおよびYと比較して小さければ、最初の回答がベターである。Aが比較的大きければ、第2の回答がベターである。
再利用のマージを最大限にする1組のグラフ変換を選択するには貪欲アルゴリズムが利用される。このアルゴリズムは最適な結果を生ずることは保証されていないが、グラフがかなり類似している場合は良好な結果を生ずる。2つのアトム130、すなわち1つは(古い)第1アトム・データベース510からのアトム、もう1つは(新たな)第2アトム・データベース520からのアトムは、差分処理アルゴリズムが互いにマッピングした場合に「マージ」されたものと定義される。2つのアトム130がマージされた後、それらはそれ以降は等しいものとして扱われる。「マージ」という名詞はマージされる予定の一対のアトム130を表している。「コミットされたマージ」とは、実際に実施されたマージである。差分処理アルゴリズムが完了すると、コミットされた各マージは再利用マージまたは置換マージのいずれかに分類される。マージされずに留まっているアトム130は挿入マージに分類される。2つのアトム(古いアトムと新しいアトム)は、結局は依然として再利用マージと共にマージされるならば「互換性がある」。具体的には、
1) アトム130は相互以外にはどのアトム130ともマージしていない。
2) アトム130は同一のボデーを有している。
3) アトム130はそれが参照するアトム130を無視して一対の同一のリファレンスを有している。言い換えると、リファレンスは同じオフセット、種類などを有している。
4) 参照された全てのアトム130が互いに対偶でマージし、または全くマージしていない。言い換えると、このマージを再利用できなくするマージはコミットされていない。
5) 「それ自体」へのリファレンスは2つのアトム内に対偶で勢揃いされなければならない。
6) アトム130は内部矛盾するマージ要求を有していない。この状態は例えば、古いアトムがアトムXを2回参照し、新たなアトムがアトムAとBとを参照した場合に生ずる。再利用マージになるには、XはAとBの双方とマージしなければならず、それは不可能である。
1) アトム130は相互以外にはどのアトム130ともマージしていない。
2) アトム130は同一のボデーを有している。
3) アトム130はそれが参照するアトム130を無視して一対の同一のリファレンスを有している。言い換えると、リファレンスは同じオフセット、種類などを有している。
4) 参照された全てのアトム130が互いに対偶でマージし、または全くマージしていない。言い換えると、このマージを再利用できなくするマージはコミットされていない。
5) 「それ自体」へのリファレンスは2つのアトム内に対偶で勢揃いされなければならない。
6) アトム130は内部矛盾するマージ要求を有していない。この状態は例えば、古いアトムがアトムXを2回参照し、新たなアトムがアトムAとBとを参照した場合に生ずる。再利用マージになるには、XはAとBの双方とマージしなければならず、それは不可能である。
2つのアトム130(古いアトムと新たなアトム)は、互いに「互換性があり」、他のアトム130とは互換性がない場合に「一意的な互換性」がある。マージの「重み」はその重要度の表示である。重みは、アトム130が再利用マージとのマージに成功しない場合にパッチ・ファイルに追加されるバイトの推定数に等しい。これは必然的にバイトでのアトムのディスク表現である。
差分処理アルゴリズムの概要には下記のステップが含まれる。
1) 古いdbと新たなdbを標準化する。
2) 「ゴール」マージのセットGMを特定する。
3) GMを補助するマージのセットAMを特定する。
4) GMが空いていない間に、
a) AM内の最良のマージを選択および適用する。
1) 古いdbと新たなdbを標準化する。
2) 「ゴール」マージのセットGMを特定する。
3) GMを補助するマージのセットAMを特定する。
4) GMが空いていない間に、
a) AM内の最良のマージを選択および適用する。
b) GMを更新する。
c) AMを更新する。
5)再利用マージになるようにも、コミットされた再利用マージで補助されるようにも調整されない、コミットされた各マージをアンドゥする。一意的な互換性があるマージが出現した場合は、それらの全てをGMに追加し、1つの無限重みを与え、ステップ3)に進む。
6) 残りの同一構造を探索するために、古いdbと新たなdbとの間に修正された共用アルゴリズムを適用する。一意的な互換性があるマージが出現した場合は、それらの全てをGMに追加し、1つの無限重みを与え、ステップ3)に進む。
7) いずれかの互換性があるマージが存在する場合は、1つの無限重みを与え、ステップ3)に進む。
5)再利用マージになるようにも、コミットされた再利用マージで補助されるようにも調整されない、コミットされた各マージをアンドゥする。一意的な互換性があるマージが出現した場合は、それらの全てをGMに追加し、1つの無限重みを与え、ステップ3)に進む。
6) 残りの同一構造を探索するために、古いdbと新たなdbとの間に修正された共用アルゴリズムを適用する。一意的な互換性があるマージが出現した場合は、それらの全てをGMに追加し、1つの無限重みを与え、ステップ3)に進む。
7) いずれかの互換性があるマージが存在する場合は、1つの無限重みを与え、ステップ3)に進む。
古いdbと新たなdbの標準化には、各データベース内の同一構造のサブグラフを潰すために互いに独立して、古いdbと新たなdbとにわたって標準のアトム共用アルゴリズムを実行することが含まれる。それによってデータベースは標準化され、アトムが複数回マージされる必要があるほとんどの場合がなくなる。
GMの特定では、「ゴール・マージ」のセットは、それ以外の場合に曖昧なアトムの海にある幾つかの「固定点」を確定することによって、2つのグラフを勢揃いする試みを含んでいる。これらによって、その時点から他のマージングを決定できる出発点が得られる。GMは常に、未だ公式の再利用マージになっていない、一意的な互換性がある全てのマージのセットに等しい。アトムのボデー、並びにそれらのリファレンスの構造をハッシュするハッシュ・テーブルでな意的に互換性があるマージを発見する。アルゴリズムの進展とともに、マージはGMに追加され、残りのグラフが変換されるとGMから除去される。GMの要素は「ゴール・マージ」と呼ばれる。このアルゴリズムはそれまでに生じた全ての再利用を発見しようとはしないことに留意されたい。それらの数が極度に多い場合がよくある。最悪の場合は、生じる可能性がある再利用マージの総数がグラフのサイズの約二乗にも達する。
AMの特定では、「アシスト・マージ」のセットは、ゴール・マージ用に再利用になることが分かりつつ進行し、参照された全てのマージは対偶でマージされなければならない。これらの対偶のマージは「アシスト・マージ」と呼ばれ、これら全てのセットがAMである.したがってAMはGMの純然たる関数である。GMの要素がAM内にも現れてもよい。これは、ゴール・マージが別のゴール・マージを補助する場合に出現する。
「明確な」マージを適用する場合、あるアトムを他のアトムでマージすることの欠点は、これらのアトムがもはや別のいずれかのアトムと自由にマージされないことにある。しかし、1つだけの他のアトムが潜在的なマージの相手(またはその逆)である場合は、その欠点は消えてしまう。このようなマージをコミットすることの利点は、それによって残りのマージ候補のスコアがより正確になることが助長されることである。この段階中に、このような「明確な」全てのマージが特定され、適用される。各アトムは最終的にゴール・マージ、アシスト・マージ、またはその双方になる。潜在的なマージが1つ以上あるか否かを判定することは重要なので、(n乗倍になることがある)可能な全てのマージを例示する必要はない。むしろ、マージをカウントすることができ、また、可能性がある第2のマージ相手が発見された場合は処理工程を停止することができる。潜在的なゴール・マージの数は、定義によれば、互換性があるアトムの数と同数である。これはハッシュ・テーブルを用いて容易に計算される。
アトムX用の潜在的なアシスト・マージの計算はさらに複雑である。これはXの全ての親を通して反復することによって行われる。各親ごとに、その親が互換性を有する他のアトムを吟味する。これらはそれぞれが潜在的なゴール・マージを表している。それぞれの潜在的なゴール・マージごとに、正常な再利用マージにするために、Xがそれとマージされる類似のアトムをノートしておく。このような各アトムはX用の潜在的なアシスト・マージである。これらのアトムをカウントすることで、Xがその一部となり得るアシスト・マージ候補の数が明らかになる。
GMが空いていない間、各ボール・マージ(古いマージ、新たなマージ)を実際の再利用マージへと転換することを試みる。前述したように、それには古いアトムと新たなアトムとによって参照された全てのアトムを対偶でマージすることが必要である。メイン・ループは(後述する)最高の「スコア」とのマージを特定し、そのマージを貪欲にコミットし、GMが空になるまでその工程を繰り返す。負のスコアを有するマージは、それらが最高のスコアを有していれば理論的にはコミットされることができるが(それが実際に起こる場合を構築することは不可能ではないとしても困難であろう)、そのスコアが負の無限大に等しいマージは明らかに無視される。
各マージは、そのマージをコミットすることがパッチ・ファイルのサイズをどの程度縮小するかを(極めて大雑把に)見積もる「スコア」を有している。アシスト・マージとゴール・マージの双方ともスコアを有している。スコアの計算が比較的局部的な処理工程であることは重要である。各マージがグラフ全体のスコアの変更を要求するならば、アルゴリズムの動作は緩慢すぎて実際的ではなくなる。マージがアシスト・マージではなく、またそのアシスト・マージの全てがコミットしたゴール・マージではないならば、そのスコアは負の無限大である。そうではない場合は、そのスコアはゴール・マージによってそれにかけられる「圧力」の関数である。
各ゴール・マージはそれが依存する全てのコミットされないアシスト・マージ、ならびにそれ自体に均等に圧力をかける。圧力は「それ自体」へのリファレンスを除いて、ゴール・マージの重みをコミットされないアシスト・マージで除算することによって計算される。
そこで、少数のリファレンスを有する極めて大きいアトムがそのアシスト・マージに大量の圧力をかけ、多数のリファレンスを有するアトムはそのアシスト・マージに比較的小さい圧力をかけて、マージ当たりの利点が少ないことを示す。このような公式であるので、より多くのアシスト・マージがコミットすると、残りのマージ候補への圧力は高まり、それらに対して「ジョブを終了する」ように促す。
マージに対する全ての圧力の合計はPと呼ばれる。アシスト・マージMのスコアは、そのPの値からMと相互排他的な他のアシスト・マージ用の全てのPの最大値を減算した値に等しい。例えば、アトム(X、Y)をマージすることはアトム(X、Z)をマージできないことを意味する。何故ならば、Xは一度だけしかマージできないからである。(X、Z)をマージすることによって得られるものが多い場合は、(X、Y)のマージを防止するためにこれにペナルティを課すことが適当である。
多数のマージが可能な場合に、それらが全く起こり得ないので異常なペナルティを課すことを避けるため、「合計」の代わりに「最大」が用いられる。上記の実施例では、(X、Y)によって妨げられる各々のマージはXまたはYのいずれかを含んでいなければならないので、仮に数千ものマージが理論上妨げられたとしても(例えば(X、A)、(X、B)、(X、C)…)、これらのマージのうち多くても2つのマージしか同時に起こり得ないであろう(1つのマージはXを含み、もう1つのマージはYを含む)。したがって、数千もの防止されたマージにペナルティを課すことは厳しすぎよう。
ゴール・マージは、それらのスコアが通常は負の無限大であるにせよ、それ自体に圧力をかけることに留意されたい。その理由は、ゴール・マージと相互排他的なアシスト・マージはそれを防止するためにペナルティが課せられるからである。
2つのアトムをマージすることによって、以下の3つが変化することがある。すなわち、GM、AM、またはAMおよびGM内のマージのスコアである。ゴール・マージがコミットされた再利用マージになれば、明らかにゴール・マージのセットは変化する。そうなると、マージは完全に終了しているのでGMから除去される。ゴール・マージをコミットするだけではこれをGMから除去するのに充分ではない。何故ならば、そのアシスト・マージに圧力を加えて、それが実際に再利用マージになるようにする必要が依然としてあるからである。マージがコミットされると、各アトムは一回しかマージできないので、これらのアトムを含む他のマージは不可能になる。それによって、この時点で不可能なマージに依存していたいずれかのゴール・マージは再利用マージになる可能性が全くなくなり、したがってこれらはゴール・マージであることを止め、GMから除去される。マージはさらに、互換性があるマージを一意的に互換性があるマージへと転換することによって、新たなゴール・マージを作成してもよい。例えば、古いdbと新たなdbの各々に10のアトムがあり、その全てが互いに互換性を有しているものと想定する。どの対偶が良好なマージを呈するかに関する完璧なガイドはないので、処理工程は100(10*10)の全てのゴール・マージを作成はしない。しかし、マージがこれらのアトムによって参照されたアトム内で出現する場合は、これらのアトムの急激な対偶が一意的な互換性を有するようになることがある。何故ならば、古いdb内の所定のアトムにとって、双方とも同じボデーを有し、そのマージされたリファレンス(単数または複数)の全てが依然として潜在的に勢揃いするアトムは1つしかないからである。
以前にはゴール・マージであると見なされなかった2つの互換的なアトムを互いにマージすると、その時点でこれらは一意的な互換性を有するので新たなゴール・マージが生成される。それらをマージするようにコミットした以降にそのことを調べる方法の1つは、それらが参照するアトムに圧力を加えることによって、同様にそのマージを再利用マージにしようとする処理工程である。
AMはGMの単純な関数であるので、GMに対する変更はAMに影響する。意味論的にはそれは、GMが変化するごとにAMがあたかもスクラッチから再計算されるかのようである。実際には、AMは増分的に更新される。
マージのスコアは上記の買う式に従ってマージによって影響される。意味論的には、全てのマージ候補のスコアがあたかもスクラッチから再計算されるかのようである。実際には、アトム・グラフ内のマージに「近い」アトムのスコアだけが更新されればよい。
コミットされたマージが再利用マージでもなく、再利用可能でもない場合は、それはアンドゥされる必要がある。それは次の2つの理由による。第1に、マージの置き換えは挿入よりもやや高くつくからである。第2に、マージをアンドゥすると含まれているアトムが異なるマージ用に適するようになり、それにはある種の再利用マージを可能にする必要があることがあるからである。アンドゥ・ステップの後に、コミットされていない、一意的な互換性があるいずれかのマージが現れた場合は、それらの全てをBMに追加し、メイン・ループを再試行する。しかし、ループを再開始する前に、少なくともそのマージがコミットされた再利用マージになることを確実にするため、新たなゴール・マージに最大の重みの無限重みを付与する。それによってアルゴリズムは絶えずアンドゥし、永久にマージを再適用せずに最終的に終了することが保証される。
アトム・システムはデータベース内の全ての同一構造のアトムを潰すことができる汎用の共用アルゴリズムである。課題は本質的に「FSM還元」(FMS reduction)の課題と同じである。2つのグラフ間の差異を計算するという課題は、双方のアルゴリズムとも同一構造を探求しているので、同一構造のアトムの共用に関するものである。古いdbと新しいdbとで修正された共用アルゴリズムを実行することは、他のパスによって失われた同一構造を探す優れたバックストップである。この修正された共用アルゴリズムは下記のいくつかの点で標準型の共用アルゴリズムと異なっている。1)アトムはデータベース内ではなく、データベース間だけで共用され得る。2)変わりやすいデータのような通常は共用できないアトムでも、共用され得る。また、3)各アトムは一回だけしか共用され得ない。共用ステップの跡で、コミットされない、一意的な互換性があるマージが現れると、最も重いゴール・マージの無限重みを付与した後、先行ステップと同様にメイン・ループを再試行する。
互換性があるいずれかのマージがなお存在する場合は、最大の重みを有する1つをコミットし、それに無限重みを付与し、それをGMに加え、メイン・ループを再試行する。代替実施形態では、各アトムに関連する、人間が読み取れる記述を吟味し、マージのガイドとしてそれを利用するというオプションがある。この「不正」(cheating)はうまくいくことが多いが、プロシージャは改名されたが、それ以外は不変のままである場合は失敗する。
本は発明を好適な実施形態を参照して図示し、説明してきたが、添付の特許請求の範囲に含まれる範囲から逸脱することなく、形態と細部を多様に変更してもよいことが当業者には理解されよう。
具体的には、複数の個別セクションを有するアトム・データベース120が記載されてきたが、本発明の教示内容がなくてもアトム130の様々な利用を示すセクションを追加したり、除去することができることが当業者には容易に理解されよう。その上、実際のディスク符号化方式は本発明の教示内容の範囲で変更可能である。
本発明の実施形態はCurlTMランタイムで実現するのに適しているが、開示内容で本発明をCurlTMランタイムで限定するものは全くない。本発明の実施形態はどのソフトウェア・プログラムにも適用可能である。
本発明の上記の、およびその他の目的、特徴、および利点は、異なる図面を通して同様の参照符号が同一の部品を表す添付図面に図示された、本発明の公的な実施形態から明らかにされる。図面は縮尺どうりではなく、むしろ本発明の原理を示す際に強調がなされている。
図1は本発明の実施形態が実装されるコンピュータ・システムの略図である。
図2は図1のコンピュータ・システムの内部構造の略図である。
図3はランタイムで出力をディスプレーするためにコンピュータ・プログラムを作成し、ロードするための従来の工程を示す図である。
図4はランタイムで出力をディスプレーするためにアトム化されたコンピュータ・プログラムを作成し、ロードするためのソフトウェア・アトマイゼーションの工程を示す図である。
図5はアトム抽出工程を示す図である。
図6aはアトム、アトム・データベース、ビュー、および仮想アトム・データベースの図である。
図6bはアトム、アトム・データベース、ビュー、および別個の新規アトム・データベースの図である。
図6cはアトム、アトム・データベース、ビュー、および上書きされた新規アトム・データベースの図である。
図7aは単一のビューを利用し、ディスク上のアトムを共用する複数の実施可能プログラムの略図である。
図7bは単一のビューを利用し、ディスク上およびメモリ内のアトムを共用する複数の実施可能プログラムの略図である。
図7cは複数のビューを利用し、ディスク上のアトムを共用する複数の実施可能プログラムの略図である。
図7dは複数のビューを利用し、ディスク上およびメモリ内のアトムを共用する複数の実施可能プログラムの略図である。
図8はアトム管理工程を示す図である。
図9はアトム・データベースのデータ構造の略図である。
図10はアトム・マップ見出しデータ構造の略図である。
図11はアトム・マップ・アレイのデータ構造の略図である。
図12はアトム・オフセット・シーケンスのデータ構造の略図である。
図13は符号化されたアトム・データ構造の略図である。
図14は符号化されたアトム・リファレンス・データ構造の略図である。
図15は6つのコード・プロシージャと3つのデータ要素のシステム例の略図である。
図16aはデータ・アトムの例の略図である。
図16bはコード・アトムの例の略図である。
図16cは置き換えられたコード・アトムの略図である。
図17aはアトム・データベース差分処理工程の略図である。
図17bは古いアトム・データベースと新たなアトム・データベースとを表すグラフの略図である。
図17cは代替の、古いアトム・データベースと新たなアトム・データベースとを表すグラフの略図である。
Claims (24)
- アトム・データベースのビューを作成する方法であって、
1組の変換オペレーションを規定する工程と、
該変換オペレーションがランタイムで仮想的に適用された場合には、仮想データベースが作成され、該変換オペレーションが実際に適用された場合には、新たなアトム・データベースが作成されるように、1組の変換オペレーションを該アトム・データベースに適用する工程と、を含み、
該アトムは、
永続的に割り当てられたアトム識別子と、
コンピュータ・コードおよび/またはデータと、
他のアトムへのリファレンスと、を含む方法。 - 前記新たなアトム・データベースは前記アトム・データベースから分離したファイルに記憶される請求項1に記載の方法。
- オリジナルの前記アトム・データベースに前記新たなアトム・データベースを置き換える請求項1に記載の方法。
- 前記変換オペレーションは、
新たなアトムを挿入する挿入オペレーションを含む請求項1に記載の方法。 - 前記変換オペレーションは、
既存のアトムを修正する修正オペレーションを含む請求項1に記載の方法。 - 前記変換オペレーションは、
既存のアトムを削除する削除オペレーションを含む請求項1に記載の方法。 - 前記ビューおよび前記アトム・データベースを第1の実行可能プログラムおよび第2の実行可能プログラムに関連付ける工程と、
該ビューを利用して、前記アトム・データベースをランタイムで仮想的に変換して、仮想アトム・データベースを作成する工程と、
第1の実行可能プログラムおよび第2の実行可能プログラムによって該仮想アトム・データベースからアトムをロードすることによって、該第1の実行可能プログラムと該第2の実行可能プログラムとで該アトムを共用する工程と、をさらに含む請求項1に記載の方法。 - 前記アトムは前記第1の実行可能プログラムによってアクセス可能な第1メモリ・バッファへとロードされ、前記アトムは前記第2の実行可能プログラムによってアクセス可能な第2メモリ・バッファへとロードされる請求項7に記載の方法。
- 前記アトムは前記第1の実行可能プログラムと前記の双方によってアクセス可能なメモリ・バッファへとロードされる請求項7に記載の方法。
- 第1のビューおよび前記アトム・データベースを第1の実行可能プログラムに関連付け、第2のビューおよび前記アトム・データベースを第2の実行可能プログラムに関連付ける工程と、
該第1のビューを利用して、該第1の実行可能プログラムによって、また該第2のビューを利用して、該第2の実行可能プログラムによって、該アトム・データベースからアトムをロードすることによって、該第1の実行可能プログラムと該第2の実行可能プログラムとで該アトムを共用する工程と、をさらに含む請求項1に記載の方法。 - 前記アトムは前記第1の実行可能プログラムによってアクセス可能な第1メモリ・バッファへとロードされ、前記アトムは前記第2の実行可能プログラムによってアクセス可能な第2メモリ・バッファへとロードされる請求項10に記載の方法。
- 前記アトムは前記第1のビューを利用して前記第1の実行可能プログラムと、前記前記第2のビューを利用して前記第2の実行可能プログラムとの双方によってアクセス可能なメモリ・バッファへとロードされる請求項10に記載の方法。
- 前記変換オペレーションは前記アトムが動作するコンピュータ・ハードウェアおよび/またはソフトウェア・システムの最適化機能に基づいて規定される請求項1に記載の方法。
- 前記変換オペレーションは前記アトムによって付与されるある機能へのアクセスを制限するために規定される請求項1に記載の方法。
- 前記アトムはさらにアトム特性を備え、前記アトム変換オペレーションは該アトム特性を変化させる請求項1に記載の方法。
- 前記1組の変換オペレーションは第1のアトムを第2のアトムに置き換えて、マッピング・テーブルが作成される修正オペレーションだけを含む請求項1に記載の方法。
- 前記1組の変換オペレーションは仮想アトム・データベースに適用される請求項1に記載の方法。
- 第1アトム・データベースと第2アトム・データベースへと変換するためのアトム変換オペレーションを生成する方法であって、
a)標準型のアトム共用アルゴリズムを利用して、第1アトム・データベースと第2アトム・データベースとを標準化する工程であって、該第1アトム・データベースと該第2アトム・データベースとは各々、
永続的に割り当てられたアトム識別子と、
コンピュータ・コードおよび/またはデータと、
他のアトムへのリファレンスと、を記憶する工程と、
b)該第1アトム・データベースのアトムと該第2アトム・データベースのアトムとの間の1組のゴール・マージを特定する工程と、
c)該第1アトム・データベースのアトムと該第2アトム・データベースのアトムとの間の該ゴール・マージを補助する1組のアシスト・マージを特定する工程と、
d)1組のゴール・マージが空いていない間に、
i)1組のアシスト・マージ内の最良のマージを選択する工程と、
ii)該選択された最良のマージをコミットする工程と、
iii)該1組のゴール・マージを更新する工程と、
iv)該1組のアシスト・マージを更新する工程と、を反復する工程と、
e)再利用マージではない、またはコミットされた再利用マージに関連がなかった各々のコミットされたマージをアンドゥする工程と、
f)一意的な互換性があるマージが作成されたか否かを判定し、該一意的な互換性があるマージを該ゴール・マージに追加し、該一意的な互換性があるマージの1つに無限重みを割り当て、ステップc)に移る工程と、
g)残された同一構造を特定するために、該第1アトム・データベースと該第2アトム・データベースとを利用して修正されたアトム共用アルゴリズムを適用する工程と、
h)一意的な互換性があるマージが作成されたか否かを判定し、該一意的な互換性があるマージを該ゴール・マージに追加し、該一意的な互換性があるマージの1つに無限重みを割り当て、ステップc)に移る工程と、
i)いずれかの互換性があるマージが作成されたか否かを判定し、最大の重みを有する該互換性があるマージをコミットし、該コミットされた互換性があるマージに無限の重みを割り当て、該コミットされた互換性があるマージを1組のゴール・マージに追加し、ステップc)に移る工程と、を含む方法。 - 前記コミットされたマージの少なくとも1つは置換マージである請求項18に記載の方法。
- 前記コミットされたマージの少なくとも1つは挿入マージである請求項18に記載の方法。
- 前記コミットされたマージの少なくとも1つは削除マージである請求項18に記載の方法。
- アトム・データベースのビューを作成する装置であって、
1組の変換オペレーションと、
該変換オペレーションがランタイムで仮想的に適用された場合には、仮想データベースが作成され、該変換オペレーションが実際に適用された場合には、新たなアトム・データベースが作成されるように、1組の変換オペレーションを該アトム・データベースに適用するプロセッサと、を含み、
該アトムは、
永続的に割り当てられたアトム識別子と、
コンピュータ・コードおよび/またはデータと、
他のアトムへのリファレンスと、を含む装置。 - アトム・データベースのビューを作成する装置であって、
1組の変換オペレーションを規定する手段と、
該変換オペレーションがランタイムで仮想的に適用された場合には、仮想データベースが作成され、該変換オペレーションが実際に適用された場合には、新たなアトム・データベースが作成されるように、1組の変換オペレーションを該アトム・データベースに適用する手段と、を含み、
該アトムは、
永続的に割り当てられたアトム識別子と、
コンピュータ・コードおよび/またはデータと、
他のアトムへのリファレンスと、を含む装置。 - コンピュータ・プログラム製品であって、
アトム・データベースのビューを作成するためのコンピュータが使用可能な媒体と、
該コンピュータが使用可能な媒体上に組み込まれた1組のコンピュータ・プログラム命令であって、
1組の変換オペレーションを規定し、かつ、
該変換オペレーションがランタイムで仮想的に適用された場合には、仮想データベースが作成され、該変換オペレーションが実際に適用された場合には、新たなアトム・データベースが作成されるように、1組の変換オペレーションを該アトム・データベースに適用する命令と、を備え、
該アトムは、
永続的に割り当てられたアトム識別子と、
コンピュータ・コードおよび/またはデータと、
他のアトムへのリファレンスと、を含むコンピュータ・プログラム製品。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/178,898 US7281017B2 (en) | 2002-06-21 | 2002-06-21 | Views for software atomization |
PCT/US2003/019180 WO2004001592A2 (en) | 2002-06-21 | 2003-06-18 | Views for software atomization |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005531066A true JP2005531066A (ja) | 2005-10-13 |
Family
ID=29734812
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004515872A Withdrawn JP2005531066A (ja) | 2002-06-21 | 2003-06-18 | ソフトウェア・アトマイゼーション用のビュー |
Country Status (8)
Country | Link |
---|---|
US (1) | US7281017B2 (ja) |
EP (1) | EP1518193A2 (ja) |
JP (1) | JP2005531066A (ja) |
KR (1) | KR20050081869A (ja) |
CN (1) | CN1672150A (ja) |
AU (1) | AU2003247547A1 (ja) |
CA (1) | CA2490281A1 (ja) |
WO (1) | WO2004001592A2 (ja) |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7029573B2 (en) * | 2001-06-19 | 2006-04-18 | Exxonmobil Research And Engineering Company | Composition and control method for treating hydrocarbon |
US7117507B2 (en) * | 2002-06-03 | 2006-10-03 | Sumisho Computer Systems Corporation | Software atomization |
US7281017B2 (en) | 2002-06-21 | 2007-10-09 | Sumisho Computer Systems Corporation | Views for software atomization |
US10069808B2 (en) * | 2003-04-16 | 2018-09-04 | Eileen Chu Hing | Methods and systems for providing a customized network |
US8037102B2 (en) | 2004-02-09 | 2011-10-11 | Robert T. and Virginia T. Jenkins | Manipulating sets of hierarchical data |
US9646107B2 (en) | 2004-05-28 | 2017-05-09 | Robert T. and Virginia T. Jenkins as Trustee of the Jenkins Family Trust | Method and/or system for simplifying tree expressions such as for query reduction |
WO2006002071A2 (en) * | 2004-06-15 | 2006-01-05 | K5 Systems Inc. | System and method for monitoring performance of groupings of network infrastructure and applications |
US7882147B2 (en) * | 2004-06-30 | 2011-02-01 | Robert T. and Virginia T. Jenkins | File location naming hierarchy |
US7620632B2 (en) * | 2004-06-30 | 2009-11-17 | Skyler Technology, Inc. | Method and/or system for performing tree matching |
US7627591B2 (en) | 2004-10-29 | 2009-12-01 | Skyler Technology, Inc. | Method and/or system for manipulating tree expressions |
US7801923B2 (en) * | 2004-10-29 | 2010-09-21 | Robert T. and Virginia T. Jenkins as Trustees of the Jenkins Family Trust | Method and/or system for tagging trees |
US7630995B2 (en) | 2004-11-30 | 2009-12-08 | Skyler Technology, Inc. | Method and/or system for transmitting and/or receiving data |
US7636727B2 (en) | 2004-12-06 | 2009-12-22 | Skyler Technology, Inc. | Enumeration of trees from finite number of nodes |
US8316059B1 (en) | 2004-12-30 | 2012-11-20 | Robert T. and Virginia T. Jenkins | Enumeration of rooted partial subtrees |
KR100673313B1 (ko) * | 2004-12-30 | 2007-01-24 | 재단법인서울대학교산학협력재단 | 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법 |
US8615530B1 (en) | 2005-01-31 | 2013-12-24 | Robert T. and Virginia T. Jenkins as Trustees for the Jenkins Family Trust | Method and/or system for tree transformation |
US7681177B2 (en) | 2005-02-28 | 2010-03-16 | Skyler Technology, Inc. | Method and/or system for transforming between trees and strings |
US8356040B2 (en) | 2005-03-31 | 2013-01-15 | Robert T. and Virginia T. Jenkins | Method and/or system for transforming between trees and arrays |
US7899821B1 (en) | 2005-04-29 | 2011-03-01 | Karl Schiffmann | Manipulation and/or analysis of hierarchical data |
US7685145B2 (en) * | 2006-03-28 | 2010-03-23 | Microsoft Corporation | Database physical design refinement using a merge-reduce approach |
US8176253B2 (en) * | 2007-06-27 | 2012-05-08 | Microsoft Corporation | Leveraging transactional memory hardware to accelerate virtualization and emulation |
US9043553B2 (en) * | 2007-06-27 | 2015-05-26 | Microsoft Technology Licensing, Llc | Leveraging transactional memory hardware to accelerate virtualization and emulation |
US8266387B2 (en) * | 2007-06-27 | 2012-09-11 | Microsoft Corporation | Leveraging transactional memory hardware to accelerate virtualization emulation |
US20090024986A1 (en) * | 2007-07-19 | 2009-01-22 | Microsoft Corporation | Runtime code modification |
US8370823B2 (en) * | 2007-08-27 | 2013-02-05 | International Business Machines Corporation | Device, system, and method of computer program optimization |
US8584102B2 (en) * | 2007-12-27 | 2013-11-12 | Microsoft Corporation | Creating and using deltas to modify existing computer code |
US8261240B2 (en) * | 2008-01-15 | 2012-09-04 | Microsoft Corporation | Debugging lazily evaluated program components |
US20090193043A1 (en) * | 2008-01-29 | 2009-07-30 | Inventec Corporation | Method and system for transforming database and compressible database structure |
KR20120072138A (ko) * | 2010-12-23 | 2012-07-03 | 한국전자통신연구원 | 맞춤형 소프트웨어 제공 장치 및 방법, 그리고 소프트웨어 맞춤화 방법 |
WO2013066450A1 (en) * | 2011-10-31 | 2013-05-10 | Forsythe Hamish | Method, process and system to atomically structure varied data and transform into context associated data |
US9256419B2 (en) * | 2012-04-23 | 2016-02-09 | Hewlett Packard Enterprise Development Lp | Dynamic software updates |
US20140188952A1 (en) * | 2012-12-31 | 2014-07-03 | Praveen Killamsetti | Reading data without an indirection logical reference identifier in a system that uses indirection access |
US10333696B2 (en) | 2015-01-12 | 2019-06-25 | X-Prime, Inc. | Systems and methods for implementing an efficient, scalable homomorphic transformation of encrypted data with minimal data expansion and improved processing efficiency |
WO2019092543A1 (en) | 2017-11-09 | 2019-05-16 | nChain Holdings Limited | System for securing verification key from alteration and verifying validity of a proof of correctness |
WO2019092552A1 (en) | 2017-11-09 | 2019-05-16 | nChain Holdings Limited | Systems and methods for ensuring correct execution of computer program using a mediator computer system |
WO2019116187A1 (en) | 2017-12-13 | 2019-06-20 | nChain Holdings Limited | System and method for securely sharing cryptographic material |
CN108959499A (zh) * | 2018-06-26 | 2018-12-07 | 郑州云海信息技术有限公司 | 分布式文件系统性能分析方法、装置、设备及存储介质 |
CN109145025B (zh) * | 2018-09-14 | 2021-09-24 | 创新先进技术有限公司 | 一种多数据源集成的数据查询方法、装置及业务服务器 |
CN112241276B (zh) * | 2019-07-19 | 2022-04-22 | 华为技术有限公司 | 一种设备的升级方法及装置 |
CN113448942B (zh) * | 2020-03-27 | 2022-07-22 | 阿里巴巴集团控股有限公司 | 数据库访问方法、装置、设备及存储介质 |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4246638A (en) * | 1978-09-14 | 1981-01-20 | Thomas William J | Method and apparatus for controlling usage of a programmable computing machine |
US5291601A (en) * | 1989-06-01 | 1994-03-01 | Hewlett-Packard Company | Shared libraries implemented with linking program loader |
CA2102883A1 (en) * | 1993-02-26 | 1994-08-27 | James W. Arendt | System and method for lazy loading of shared libraries |
US5446888A (en) * | 1994-01-14 | 1995-08-29 | Pyne; Charles F. | Remote file transfer method and apparatus |
JP2755154B2 (ja) * | 1994-02-23 | 1998-05-20 | 日本電気株式会社 | プログラム変換処理装置およびプログラム変換処理方法 |
TW313643B (ja) | 1994-12-14 | 1997-08-21 | At & T Corp | |
US5802367A (en) * | 1995-07-07 | 1998-09-01 | Microsoft Corporation | Method and system for transparently executing code using a surrogate process |
US6112025A (en) * | 1996-03-25 | 2000-08-29 | Sun Microsystems, Inc. | System and method for dynamic program linking |
US5893113A (en) * | 1996-04-25 | 1999-04-06 | Navigation Technologies Corporation | Update transactions and method and programming for use thereof for incrementally updating a geographic database |
WO1997048043A1 (en) * | 1996-06-11 | 1997-12-18 | Codd Edgar F | Delta model processing logic representation and execution system |
US5832520A (en) * | 1996-07-03 | 1998-11-03 | Miller, Call, Plauck And Miller | Automatic file differencing and updating system |
US6006034A (en) * | 1996-09-05 | 1999-12-21 | Open Software Associates, Ltd. | Systems and methods for automatic application version upgrading and maintenance |
US5991765A (en) * | 1997-05-06 | 1999-11-23 | Birdstep Technology As | System and method for storing and manipulating data in an information handling system |
US6421827B1 (en) * | 1997-12-17 | 2002-07-16 | International Business Machines Corporation | System and method for detecting and reordering loading patterns |
US6230316B1 (en) * | 1998-04-17 | 2001-05-08 | Symantec Corporation | Patching rebased and realigned executable files |
US6279149B1 (en) * | 1998-09-24 | 2001-08-21 | International Business Machines Corporation | Aggregate structure identification and its application to program analysis |
US6243859B1 (en) * | 1998-11-02 | 2001-06-05 | Hu Chen-Kuang | Method of edit program codes by in time extracting and storing |
US6564219B1 (en) * | 1998-11-19 | 2003-05-13 | Emc Corporation | Method and apparatus for obtaining an identifier for a logical unit of data in a database |
US20020073398A1 (en) * | 1998-12-14 | 2002-06-13 | Jeffrey L. Tinker | Method and system for modifying executable code to add additional functionality |
US6601114B1 (en) * | 1999-05-27 | 2003-07-29 | Sun Microsystems, Inc. | Fully lazy linking with module-by-module verification |
US6763397B1 (en) * | 1999-05-27 | 2004-07-13 | Sun Microsystems, Inc. | Fully lazy linking |
US6564223B1 (en) * | 1999-09-30 | 2003-05-13 | Oracle Corp. | Method and article for managing references to external objects in a runtime environment |
US6691305B1 (en) * | 1999-11-10 | 2004-02-10 | Nec Corporation | Object code compression using different schemes for different instruction types |
US7089390B2 (en) * | 2001-02-16 | 2006-08-08 | Broadcom Corporation | Apparatus and method to reduce memory footprints in processor architectures |
US20020143764A1 (en) * | 2001-04-03 | 2002-10-03 | Martin Andrew R. | Data management system and method for intercepting and changing database instructions between a database back end and an application front end |
US7047521B2 (en) * | 2001-06-07 | 2006-05-16 | Lynoxworks, Inc. | Dynamic instrumentation event trace system and methods |
US6971089B2 (en) * | 2001-08-01 | 2005-11-29 | International Business Machines Corporation | Debugger impact reduction through motion of induction variable based breakpoints |
US7117507B2 (en) * | 2002-06-03 | 2006-10-03 | Sumisho Computer Systems Corporation | Software atomization |
US7281017B2 (en) | 2002-06-21 | 2007-10-09 | Sumisho Computer Systems Corporation | Views for software atomization |
US7490331B2 (en) * | 2003-03-04 | 2009-02-10 | International Business Machines Corporation | Mapping to and from native type formats |
-
2002
- 2002-06-21 US US10/178,898 patent/US7281017B2/en not_active Expired - Lifetime
-
2003
- 2003-06-18 EP EP03761098A patent/EP1518193A2/en not_active Withdrawn
- 2003-06-18 CN CNA038173417A patent/CN1672150A/zh active Pending
- 2003-06-18 AU AU2003247547A patent/AU2003247547A1/en not_active Abandoned
- 2003-06-18 JP JP2004515872A patent/JP2005531066A/ja not_active Withdrawn
- 2003-06-18 KR KR1020047020754A patent/KR20050081869A/ko not_active Application Discontinuation
- 2003-06-18 CA CA002490281A patent/CA2490281A1/en not_active Abandoned
- 2003-06-18 WO PCT/US2003/019180 patent/WO2004001592A2/en not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
US7281017B2 (en) | 2007-10-09 |
EP1518193A2 (en) | 2005-03-30 |
KR20050081869A (ko) | 2005-08-19 |
WO2004001592A3 (en) | 2004-05-21 |
CN1672150A (zh) | 2005-09-21 |
WO2004001592A2 (en) | 2003-12-31 |
AU2003247547A8 (en) | 2004-01-06 |
AU2003247547A1 (en) | 2004-01-06 |
US20030236794A1 (en) | 2003-12-25 |
CA2490281A1 (en) | 2003-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005531066A (ja) | ソフトウェア・アトマイゼーション用のビュー | |
Schäling | The boost C++ libraries | |
CN111966424B (zh) | 使用复常量的方法和系统 | |
US7117507B2 (en) | Software atomization | |
Schäling | The boost C++ libraries | |
US7484223B2 (en) | System and method for building a run-time image from components of a software program | |
US5680616A (en) | Method and system for generating and maintaining property sets with unique format identifiers | |
US6286134B1 (en) | Instruction selection in a multi-platform environment | |
US7133874B2 (en) | Prototyping model for components of a software program | |
US8655897B2 (en) | Data converting apparatus, method, and computer product | |
US20160026509A1 (en) | Method and system for improving startup performance and interoperability of a virtual application | |
US7428559B2 (en) | Versioning model for software program development | |
US20070180444A1 (en) | External registration for function configuration within a client platform application | |
US6195792B1 (en) | Software upgrades by conversion automation | |
AU2891800A (en) | Method and apparatus for dispatch table construction | |
US20050015673A1 (en) | Type system for representing and checking consistency of heterogeneous program components during the process of compilation | |
CN111880777A (zh) | 程序信息下发方法、装置、电子设备 | |
JP5548331B2 (ja) | ナビゲーションデータベースのためのフォーマット記述 | |
US7096463B2 (en) | System and apparatus for dynamically upgrading concentrated executable computer software code | |
JP2000029674A (ja) | アプリケ―ションソフトウェア構成方法 | |
CN109558121B (zh) | 接口驱动程序的开发方法、装置、设备及存储介质 | |
US6592628B1 (en) | Modular storage method and apparatus for use with software applications | |
US5642514A (en) | Method and system for constructing compact executable files by eliminating redundant debugging strings | |
US20050268305A1 (en) | Software atomization | |
US7093245B2 (en) | System and apparatus for upgrading concentrated executable computer software code without reconcentration |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20060905 |