JP4165683B2 - 複合データ構造の永続的表現の生成 - Google Patents

複合データ構造の永続的表現の生成 Download PDF

Info

Publication number
JP4165683B2
JP4165683B2 JP2000552581A JP2000552581A JP4165683B2 JP 4165683 B2 JP4165683 B2 JP 4165683B2 JP 2000552581 A JP2000552581 A JP 2000552581A JP 2000552581 A JP2000552581 A JP 2000552581A JP 4165683 B2 JP4165683 B2 JP 4165683B2
Authority
JP
Japan
Prior art keywords
function
argument
fragment
code
program
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.)
Expired - Fee Related
Application number
JP2000552581A
Other languages
English (en)
Other versions
JP2002517817A (ja
JP2002517817A5 (ja
Inventor
マーク エイ ビー ホールスティード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2002517817A publication Critical patent/JP2002517817A/ja
Publication of JP2002517817A5 publication Critical patent/JP2002517817A5/ja
Application granted granted Critical
Publication of JP4165683B2 publication Critical patent/JP4165683B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4493Object persistence

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Processing Or Creating Images (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、電子データの処理に関し、具体的には、マルチメディア・プレゼンテーションと他のアプリケーション用の、マルチコンポーネント・データ・オブジェクトの構造についての永続的表現を構成することに関係する。
【0002】
【従来の技術】
コンピュータ・アプリケーションの最も急速に成長している領域の1つに、複合マルチメディア情報のプレゼンテーションがある。テレビや映画のようなマルチメディアを配送する従来の伝達手段は、内部構造を持っていない単一で固定した情報の流れとして、そのコンテンツを提示する。すなわち、このプレゼンテーションは構造的には単一のオブジェクトであり、単一ファイルの情報であって、分離可能な部分を持っていない不可分のデータ単位である。最近、コンピュータの仲介によるデータのプレゼンテーションが、個々の部分に分割されるようになっており、例えば画像の動画シーケンスや個々のサンプルされたサウンドを組み合わせることによってつくられた音楽のようなものがある。今日では、多くの様々な種類のマルチメディア・プレゼンテーションは、実際には、要素であるデータ・オブジェクトからなる複合構造体であって、それら要素データ・オブジェクトは、コンテンツ・オブジェクトの相互関係についてのある1つの表現にしたがって、再生中リアルタイムで合成される。すなわち、1つのプレゼンテーションの個々の部分の構造は、もはやコンテンツそれ自体にハードワイヤ的に組み込まれるものではなく、別個のエンティティを形成し、そしてこの別個のエンティティは、プレゼンテーションを再現するために、そのコンテンツと一緒に伝送及び/又は格納されなければならない。
【0003】
従来のマルチメディア・プレゼンテーションの内部形式が拡大することによってその内部形式が再生時に再現される明示的構造を備えた複数のデータ要素を含むようになると同時に、「プレゼンテーション」という用語によって包含されるものの範囲も、以前に比べてずっと広範なものとなりつつある。したがって、本発明の目的のためには、この用語は、その可能な最も広い意味で理解されなければならない。プレゼンテーションには、あらゆる種類のデータの実演、表示、実現が含まれる。映画は1つのプレゼンテーションであり、ワールド・ワイド・ウェブ・ページは1つのプレゼンテーションであり、コンピュータ・データベースに対する照会の結果も1つのプレゼンテーションと考えることができる。プレゼンテーションの他の形式には、マイクロソフト・パワー・ポイントのようなプログラムでつくられたスライド・ショーや、デスクトップにおける文書中の動画による図及びメニュー・バーのようなユーザー・インターフェースが含まれる。
【0004】
従来のオーサリング・プログラムは、構造化されたプレゼンテーションをコンポーネント・オブジェクトから構築するものであり、それらコンポーネント・オブジェクトにはそれらを操作する標準的メソッドが含まれる。このようなメソッドには、アニメーション・ルーチン、再生ルーチンなどが含まれる。これらのメソッドは、アプリケーション・プログラム・インターフェース(API)の呼び出しという形をとることできる。APIとは、定義済みのデータタイプと個々に呼び出し可能な関数とを定義するライブラリである。それらの関数は、引数を持っていてもいなくてもよく、また結果を返しても返さなくてもよい。これらの関数は、パーソナル・コンピュータや他のデジタル・プロセッサ内のダイナミック・リンク・ライブラリ(.dll)に保存されることが多い。
【0005】
個々のコンポーネントから1つのプレゼンテーションを構築するには、どのようにそれらコンポーネントが相互に関係するか、また再生中プレゼンテーションを再現するときどのようにこれら個々のコンポーネントが機能するかを指定するメカニズムが必要となる。1つのプレゼンテーションのこの実行時構造は、格納メカニズムであって、これをプレゼンテーションの実行中プログラムが使用してメモリ内で情報を表す。実行時構造は、一般に、その特定の構造に対し個々に設計されたAPIを通して宣言型として作成される。APIを用いて実行時構造を作成するプログラムは、関数を呼び出してデータ・オブジェクトを作成する。これらのオブジェクトは次に、データ構造が完全に定義されるまで、他の関数呼び出しなどへの引数になる。
【0006】
プレゼンテーションを作成するこのプログラムを閉じると、その構造を表す情報のいくらかがディスク・ファイルに書き込まれる。プレゼンテーションの再現を可能にする元となる実行時構造の長期的なフォーマットは、「永続的な(persistent)」表現と呼ばれる。閲覧、編集あるいはその他の用途のために後でプレゼンテーションを再現するプログラムは、その実行時構造についてのある種の永続的表現を必要とする。
【0007】
実行時データ構造の永続的表現に対する従来のアプローチには、その構造についてあるスタイルにした記述を書き出すことが含まれる。例えば、プレゼンテーションのデータ構造が、各オブジェクトが1以上の子を持つある階層構造のオブジェクトに似ている場合、そのファイル・フォーマットは、一般に、このファイルに含まれる情報として各オブジェクトを記述し、これに続いてそのオブジェクトの各々の子への参照が続く。
【0008】
上記アプローチに関し、プレゼンテーションを再現するためのプログラム中へ永続的表現が読み込まれるとき、重大な問題が生じる。その永続的表現をマッピングによってそのデータ構造を構築する一続きのAPI呼び出しに変えることは、複雑なタスクとなることが多い。すなわち、このタイプの永続的表現は、実際のデータ構造自身を適切に記述するものではあるが、この構造をどのように構築するかについて記述するというジョブの実行については貧弱である。従来の表現は、時間のかかる構文解析と翻訳とを必要とする。この問題はデータ構造の複雑さの増加とともに急速に増大している。そして現代のプレゼンテーションはますます複雑なものとなる傾向がある。
【0009】
したがって、マルチメディア及びこれと類似のマルチ・コンポーネントのプレゼンテーションの構造を表す改善されたシステムに対する要望、並びに、高速で、コンピュータ・メモリとリソースが少なくて済む、永続的表現を生成し利用する方法に対する要望が存在する。
【0010】
【発明が解決しようとする課題】
本発明は、複合データ・プレゼンテーションの構造または他のオブジェクトの構造を指定するための新しい形式の永続的表現へと、オーサー(作者)の入力を変換する便宜を提供するものである。オーサリング・ツールは、プレゼンテーションを構築するのに使用する定義されたメソッドとデータタイプとからなるライブラリから、一続きのメソッド呼び出しとデータとをコード・フラグメントのリストとして記録する。そのため、オーサーはその構造表現を作成するための明示的アクションを行う必要がなくなる。同時に、本発明を収容するために従来のオーサリング・ツールとメソッドライブラリとを修正する必要はほとんどない。プログラム・ジェネレータは、それらフラグメントを、そのプレゼンテーションの再生を可能にするようにユーザー・コンピューター内のインタプリタで実行可能な命令セットでプログラムに変換する。すなわち、本発明は、データ構造を再現することができるプログラムを自動的に生成し、そしてそのプログラムはそれ故に、それらの構造の永続的表現として作用する。データ構造をダイナミックなプログラムとして表すこの処理は、単純で直接的なものであり、その構造についての別個の明示的な記述の生成を必要としない。
【0011】
【課題を解決するための手段】
この基本的な発明の効率は、いくつかの追加的特徴によって高まる。例えば、一時変数を生成するためのツーパス処理によって、永続的表現を形成するプログラム内の冗長符号を回避できる。関数の結果値を示す辞書によって、プログラム内の他の命令への参照が単純化される。プログラムの全体的効果を変えない命令をリオーダ(reorder)することにより、さらに効率的な符号化が可能となる。
【0012】
【発明の実施の形態】
以下の実施例の詳細な記述において、本明細書の一部を形成する添付図面の参照を行う。この図面には、本発明を実施することができる具体的な実施例が例示として示されている。これらの実施例は十分詳細に記述されており、この記述によって当業者による本発明の実施が可能になる。本発明の精神と範囲から逸脱することなく、他の実施例の利用も可能であり、また構造的および論理的な変更を行うことも可能であると理解すべきである。したがって、以下の詳細な記述は限定する意味で考えられるべきものではなく、よって本発明の範囲は添付の請求項によってのみ画定されるものである。
【0013】
図1は、本発明を実施することができる好適な計算環境についての簡単な全体的説明を提供するものである。本明細書では以後、パーソナル・コンピュータ(PC)によって実行される命令を含むコンピュータで実行可能なプログラム・モジュールという一般的文脈で本発明についての説明を行う。プログラム・モジュールにはルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらによって特定のタスクが行われたりあるいは特定の抽象的なデータタイプが実行される。当業者ならば理解できるように、携帯型デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのプログラムが可能な消費者用電子装置、ネットワークPC、ミニコンピュータ、メインフレーム・コンピュータ及び同種のものを含む他のコンピュータ・システム構成を用いて本発明の実施が可能である。また本発明は、通信網を介してリンクされた遠隔処理装置によってタスクを行う分散型コンピュータ環境においても実施可能である。分散型コンピュータ環境では、ローカルな記憶装置と遠隔の記憶装置の双方にプログラム・モジュールを配置することもできる。
【0014】
図1では、処理ユニット21、システム・メモリ22および、該システム・メモリと他のシステム構成要素を処理ユニット21と接続するシステム・バス23を含む、従来型のパーソナル・コンピュータ20の形の汎用計算機が用いられている。システム・バス23は、メモリ・バスやメモリ制御装置、周辺バス、およびローカルバスを含むタイプのものであればいずれのタイプであってもよい。また任意の様々なバス構造を用いることも可能である。システム・メモリ22には、リード・オンリー・メモリ(ROM)24とランダム・アクセス・メモリ(RAM)25とが含まれる。ROM24内に格納されている基本入出力システム(BIOS)24には、パーソナル・コンピュータ20の構成要素間で情報の転送を行う基本ルーチンが含まれる。またBIOS24には、システム用起動ルーチンも含まれる。さらにパーソナル・コンピュータ20には、ハードディスク(図示せず)からの読み出しとそれへの書き込みを行うためのハードディスク装置27と、リムーバブル磁気ディスク29からの読み出しとそれへの書き込みを行うための磁気ディスク装置28、およびCD−ROMやその他の光学媒体のようなリムーバブル光ディスク31からの読み出しとそれへの書き込みを行うための光ディスク装置30も含まれる。ハードディスク装置27、磁気ディスク装置28、光ディスク装置30は、ハードディスク装置用インターフェース32、磁気ディスク装置用インターフェース33および光ディスク装置用インターフェース34によってそれぞれシステム・バス23と接続している。これらのディスク駆動装置およびそれと関連するコンピュータ読取り可能媒体によって、パーソナル・コンピュータ20用のコンピュータ読取り可能命令、データ構造、プログラム・モジュール及びその他のデータの不揮発性格納が行われる。本明細書に記載の例示的環境では、ハードディスク、リムーバブル磁気ディスク29およびリムーバブル光ディスク31が用いられているが、当業者ならば理解できるように、コンピュータによってアクセス可能なデータの格納が可能な他のタイプのコンピュータ読取り可能媒体をこの例示的動作環境において使用することも可能である。そのような媒体には、磁気カセット、フラッシュ・メモリ・カード、デジタル多用途ディスク、ベルヌーイ・カートリッジ、RAM、ROMおよび同種の媒体が含まれる。
【0015】
プログラム・モジュールは、ハードディスク、磁気ディスク29、光ディスク31、ROM24およびRAM25に保存してもよい。プログラム・モジュールには、オペレーティング・システム35、1以上のアプリケーション・プログラム36、その他のプログラム・モジュール37およびプログラム・データ38が含まれる。ユーザーは、キーボード40やポインティング・デバイス42のような入力装置を介してパーソナル・コンピュータ20にコマンドと情報の入力を行うことができる。その他の入力装置(図示せず)には、マイク、ジョイ・スティック、ゲーム用パッド、衛星テレビ受信用アンテナ、スキャナあるいは同種の入力装置が含まれる。上記およびその他の入力装置は、システム・バス23と接続したシリアルポート・インターフェース46を介して処理ユニット21と接続されることが多いが、パラレルポート、ゲーム用ポート、ユニバーサル・シリアル・バス(USB)のような図1に図示されていない他のインターフェースを介して接続することもできる。また、モニター47あるいは他の表示装置は、ビデオ・アダプタ48のようなインターフェースを介してシステム・バス23と接続する。モニターに加えて、パーソナル・コンピュータには、一般にスピーカやプリンタのような他の周辺出力装置(図示せず)が含まれる。
【0016】
パーソナル・コンピュータ20は、遠隔コンピュータ49のような1以上の遠隔コンピュータとの論理接続を利用するネットワーク環境で動作することもできる。遠隔コンピュータ49は、別のパーソナル・コンピュータ、サーバー、ルータ、ネットワークPC、ピア装置あるいはその他の一般的なネットワーク・ノードであってもよい。遠隔コンピュータ49には、パーソナル・コンピュータ20と接続する多くのあるいはすべての上述の構成要素が一般に含まれるが、図1には記憶装置50しか例示されていない。図1に描かれている論理接続にはローカル・エリア・ネットワーク(LAN)51と広域ネットワーク(WAN)52が含まれる。このようなネットワーク環境は、オフィスや企業間コンピュータ・ネットワーク、イントラネットおよびインターネットではありふれたものである。
【0017】
LANネットワーク環境に設置される場合、PC20はネットワーク・インターフェースすなわちアダプタ53を介してローカルネットワーク51と接続する。インターネットのようなWANネットワーク環境で使用する場合、PC20にはモデム54またはネットワーク52を介して通信を確立するための他の手段が一般に含まれる。モデム54はPC20の内部または外部のいずれにあってもよく、シリアル・ポート・インターフェース46を介してシステム・バス23と接続する。ネットワーク環境では、20またはその一部に常駐するものとして描かれているプログラム・モジュールは遠隔記憶装置50に保存してもよい。言うまでもなく、図示のネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段を代用することも可能である。
【0018】
図2は、本発明による永続的表現を生成しインタプリトするためのシステム200全体を示すものである。
【0019】
オーサーは、従来のオーサリング・ツール210を用いて、画像、音、テキストおよびその他のコンテンツを操作することによりマルチメディア・プレゼンテーションのようなデータ・オブジェクトを作成する。例えば、画像を動画化し、音の流れをそのアニメーションと同期させ、テキストの挿入を行うことが可能となる。デザイナがオンスクリーン制御を行ってこれらのフィーチャを実行するとき、オーサリング・ツールは、アプリケーション・プログラム・インターフェース(API)に対する関数またはメソッドの呼び出しを行う。APIは、関数の定義済セットを実行するプログラム・コードを含むライブラリであり、この定義済セットの関数は非常に頻繁に使用されるので、これらの関数を含む単一のモジュールを書き込むことにより、他の任意のプログラムが単純なメカニズムを用いて呼び出し使用できるようになっているものである。APIは、1セットのデータタイプと、これらのデータタイプに対して作用する1セットのメソッドまたは関数とを定義するダイナミック・リンク・ライブラリ(.dll)ファイルの形を一般にとる。しかし、本発明では、上記のデータタイプやメソッドまたは関数を何らかの特定の方法で格納することを必要とせず、あるいは概念的にグループ化することを除いてそれらを一緒にグループ化することさえ必要としない。すなわち、「ライブラリ」という用語は、上記メソッドが定義済セットまたは定義済みグループを形成することを単に意味するにすぎない。データタイプには、整数、ストリング、ブーリアンのような基本的なタイプが含まれる。またこれらのデータタイプには、JavaとC++においてクラスと呼ばれ、また、C言語で構造体(struct)と呼ばれる基本的なタイプを集めたオブジェクトが含まれる。関数は、このセットのデータタイプから任意の数の引数(ゼロを含む)をとり、そしてゼロまたは1つの結果を返す。例えば、Javaでは、Void function1 (type1 a, type2 b)は、タイプ1とタイプ2の2つの引数aとbをそれぞれとり、そして結果を返すことはない。Type1 function2 ()は、引数をとらないがタイプ1を持つ結果データを返す。この文脈では、プレゼンテーションAPI(PAPI)には、引数で指定される量による画像オブジェクトのスケーリングと回転、一連の画像の動画化、音オブジェクトの音量の所定の量での変化、のような演算を実行するための多数の個別の関数とデータが含まれる。例えば、ファイルから画像を読み出し、その画像を回転するように設定するためには、以下のセットのAPI呼び出しを行うことができる。
ImageBvr image=importImage ("image.gif").transform(rotateRate (0.1))
音を読み込み、その音量を調節し、時間の経過と共に左から右へその音をパンさせるための1セットのAPIの一例は次のようになる。
SoundBvr sound=importSound("sound.wav").gain(0.75).pan(sin(localTime))
【0020】
本発明は、従来のAPIに情報を追加して増補API211を形成する。この追加情報には、各関数が結果を返すか否かにかかわらず各関数の可読形式の名称、そして引数が存在する場合にはその引数の数が含まれる。この情報は、公的に利用可能なコンポーネント・オブジェクト・モデル(COM)に基づくAPI用のタイプ・ライブラリを介し、Java言語で書かれたAPIに対する反映によって容易に作成することができる。この情報には、関数が副作用を持つか否か、その関数が明示的な結果を生成することによる以外にシステムに対して影響を与えるかどうか、を示す優先フラグのような他の情報を含ませることもできる。結果を返さない関数のほとんどには副作用がある。オーサリング・ツール210には、必要な場合に修正を行うことによって、各々の呼出しをコード・フラグメントとして記録し、そのコード・フラグメントは、呼び出された各々のメソッドと、そのメソッドに対する引数と、オーサリング・ツールがその特定の呼出しを行った順序とを表す。ファイル212には、以下に一層詳しく説明するコード・フラグメントの一続き全体が含まれる。
【0021】
プログラム・ジェネレータ220は、ファイル212からのそれらコード・フラグメントを変更しアセンブルし翻訳して、デザイナが作成したプレゼンテーションの構造についての永続的表現を具現化する圧縮ファイルでプログラム221を形成する。すなわち、プレゼンテーションの実際の構造を明示的に指定する代わりに、プログラム221は、この構造を再現するための一続きの命令を含むプログラムとしてその構造を表す。このプログラムは、実際のプロセッサ用命令セットで書かれてはいず(書くことは可能ではあるが)、この用途のために特に構成された仮想計算機(VM)によって実行可能な命令を含むものである。
【0022】
プログラムは、API関数に対する一続きの呼び出しを記述する。引数は、一定値か、他の関数から得られる結果かのいずれかである。結果値は一時変数223に格納することができるため、複数の関数で引数として使用可能となる。例えば、ある1つの簡単なJavaプログラムは、例えば次のようになる。
int a=3;
int b=function1(a);
int c=function2(b, 4);
function3 (c, function1(c));
【0023】
プログラム・ジェネレータ220は、この呼び出しシーケンスの機能的に等価な記述をその指定された出力言語で書き出さなければならない。例えば、ターゲット言語がJavaである場合、出力は例えば以下のようになる。
Int x=Function2(function1(3), 4);
function3 (x, function1(x));
【0024】
ターゲットが一般化されたスタックベースの仮想計算機である場合、プログラム・ジェネレータは、例えば、以下の命令を有する等価のプログラムを出力する。
Push 4
Push 3
Call Function1
Call Function2
Store stack top to Temp0
Call Function1
Push Temp0 to stack
Call Function3
このシーケンスは、ある関数がその引数をスタックからポップ・オフし、そしてその結果をスタックの一番上へプッシュすることを前提としている。
【0025】
ブロック230は、多くの形式のうちの任意の形式で、プレゼンテーションの再生のための伝送及び/又は記憶を表す。システム・コンポーネント210〜223がパーソナル・コンピュータ20(図1)に配置されている場合、プログラム221とコンテンツ222は、装置50における格納のため、ネットワーク51または52を介して49のようなサーバーへアップロードすることができる。このプレゼンテーションは、ワールド・ワイド・ウェブ・ページまたはデータの他のコレクションの中に組み入れることができる。そのようにした後、同じパーソナル・コンピュータ20または別のパーソナル・コンピュータ20のユーザーは、プログラム221とプレゼンテーションのコンテンツをダウンロードすることができる。上記とは別の方法として、ディスク、CD−ROMなどのような携帯可能な記憶媒体でコンテンツとVMプログラム221とを分配することにより、あるいは、コンテンツとVMプログラム221をハードディスクやその他の固定媒体に格納することにより、伝送が行われる場合もある。
【0026】
ブロック231と232とは、ユーザーのコンピュータで受信及び/又は格納されたプログラム221とコンテンツ222のコピーを表している。このコンピュータ内のプログラム・インタプリタ240は、プログラム・コピー231を実行して、プレゼンテーション252を再現するため、API251に対するその適切な呼び出しを従来型の表示プログラムに実行させる。インタプリタ240が、定義済み命令セットを実行する仮想計算機として実装される。インタプリタ240はプログラム231の命令を処理して、元々そのプレゼンテーションを作成するためにオーサリング・ツール210が生成したのと同じ引数を持ちかつそれと同じ関数を、API251から呼び出す。しかし、API251は、API211の従来のバージョンである。すなわ・BR>ソ、API251には、上述の増補情報は含まれない。このようにして、表示プログラム250は、プログラム231の永続的表現の中に符号化された構造を、プレゼンテーション・コンテンツ232に対し単純で直接的な方法で吹き込む。インタプリタ240は一般に、非常に小さなプログラムであり、これは、感知できないほどの初期遅延しか伴わずに始動させることが可能であって、ユーザーのコンピュータ内のメモリをほとんど必要とせず、またリソースも少ししか必要としない。また、言うまでもなく、プログラム231は構文解析も必要とせず、また、記述形式から実行可能形式への変換も必要としない。
【0027】
図3はプログラム221を生成するメソッド300を表している。オーサーがプレゼンテーションを完成させてその発表を望むとき、ブロック310は、プレゼンテーションのためオーサリング・ツール210によって行われた一続きのメソッド呼び出しを記録する。ブロック320は、増補API211のメソッドに対する各呼び出しに対しステップ321〜329を実行して、その呼び出しのためのコード・フラグメントを生成する。
【0028】
通常、321のようなブロックは、この時点でAPIのそのメソッドを実行することになる。しかし、本実施例では、プレゼンテーションの構築の完了後に別個の処理でそれらの呼び出しを記録するので、増補APIは単に、従来の関数を呼び出すふりをするにすぎない。この理由のため、ブロック321は点線の輪郭で示してある。この時点でAPIの実際の機能を行わせることは、余計なメモリを消費することになる。したがって、増補APIは、単に実際のAPIの呼び出しの結果をシミュレートするものにすぎず、ここでは呼び出しシーケンスを記録するためだけに使用されている。ブロック322は、このメソッドのための増補情報をAPIから読み出す。この情報の中には、このメソッドが実行した関数の名称と、この関数の呼び出しに使用した引数のリストとが含まれる。この情報の中には、この関数が副作用を持つかどうかを示す優先フラグも含まれる。状況によっては、この特性は、フラグを用いて明示する代わりに推測を行うことができる。例えば、結果を返さないほとんどどの関数にも副作用がある。またこれとは別の方法として、下記の適当なブロックにおける関数テーブルによって、副作用を持つ関数の名称を特定することもできる。増補情報の中には、他の補助データを含めることもできる。
【0029】
ブロック323は、現コード・フラグメントを表すキーを生成する。このキーは連続番号や任意の他の一意的記号であってもよい。ブロック324は、この現在の呼び出しからの関数の名称をそのコード・フラグメントに書き込み、またその優先フラグの記録も行う。後続するメソッド呼び出しは、これらのメソッド中へ渡される各引数のソースを特定することができなければならない。したがって、現在の関数が明示的な結果を生み出す関数であるとブロック325が判定した場合、ブロック326は、現コード・フラグメントのそのキーに対し参照を付ける。このキーは、辞書213(図2)の中に入れることができ、その辞書213はデータ値によって配列されたそのようなオブジェクトについてのものである。上記とは別の方法としては、その結果データ・オブジェクト自体に、上記キーを含めることもできる。
【0030】
上記関数が引数を持たない場合、ブロック327は、次のメソッド呼び出しを行うためにブロック320へ直ちに戻る。別の関数の結果である任意の引数に対して、ブロック328は、その引数をキーとして用いてコード・フラグメントの辞書を探索することにより、その結果を生み出したコード・フラグメントへの参照を、引数リストの中へ挿入する。現フラグメントに挿入されたこの特定参照は、上記の適切なフラグメントのキー番号である。上記辞書中にフラグメントが見つからなかった場合、上記データ値は定数であるとみなす。定数である任意の引数に対して、ブロック329は、そのコード・フラグメント内の引数リスト中にこの定数を書き込む。下記のテーブルIは、上記の短いサンプル・プログラムに対するコード・フラグメントのリストを例示するものである。
テーブルI
【表1】
Figure 0004165683
すなわち、引数は、任意のタイプの定数に対する参照として、あるいはこのリスト中の他のコード・フラグメントに対する参照として格納される。「Priority(優先順位)」、「Ref Cnt(参照カウント)」および「Temp(一時変数)」とラベルをつけた欄については、後程説明する。
【0031】
ブロック330は、すべてのコード・フラグメント212のリスト(図2)を出力する。このリストは、本プレゼンテーションで生じるすべての関数呼び出しと、これらの関数に対する引数とを記述している。ブロック340は、増補APIを呼び出す過程中において引数を保持するために一時変数が作成された場合にはそれらすべての一時変数を削除する。ブロック350〜351は、可能な場合にさらに効率を高めるためそれらフラグメントのリオーダを行う。このリオーダは、前のフラグメントからの引数の利用可能性によって制限されることは言うまでもない。しかし、追加的な要因がリオーダを制限する場合もある。ブロック350は、ある特定のコード・フラグメントが、明示的な結果を返すこと以外に何らかの副作用、システムに対する何らかの影響を与えるかどうかの判定を行う。そのようなフラグメントをリオーダすることは、予想できない結果をもたらすことになってしまう。ブロック350は、ブロック324において各フラグメント中に書込まれた優先フラグを用いる。上記のテーブルにおいては、フラグメント0〜2はそれらのフラグがoffとなっていて、ブロック351でこれらフラグメントのリオーダを行うことが可能である。フラグメント3はそのフラグがonになっているので、そのリオーダを行うことはできない。前述したように、このフラグあるいはさらに別のフラグを用いて、他の理由によるリオーダの制御を行うことができ、また他のアクションの制御を行うことさえも可能である。最後に、ブロック400は、仮想計算機プログラム221(図2)のための命令を生成する。
【0032】
図4は、ブロック400のステップを詳細に示すものである。ブロック400の具体的な形態は、その実現のために選択される言語およびその言語をインタプリトするために用いられる仮想計算機のタイプに依存する。本実施例では、スタックベースの仮想計算機を用いている。すなわち、その命令ストリームは後入先出スタック241(図2)であり、これらの命令は、関数を呼び出すか定数値をプッシュするかのいずれかを行う。すなわち、引数を持つ関数は、その引数をスタックの一番上からポップオフし、結果を返す関数は、その結果をスタックの一番上にプッシュする。単純な形態では、ブロック400は、ある関数の引数をスタックにプッシュする命令を書き、次いで、その関数を呼び出す命令を書く。詳述すると、逆順の各引数に対して、その引数が、定数であるかあるいは別のコード・フラグメントへの参照であるかどうかの判定を行う。定数の引数は、この定数データを仮想計算機のスタックの上にプッシュする命令を生成する。コード・フラグメントの引数に対しては、本ルーチンは、再帰的に自身を呼び出し、その参照するフラグメントのキーを用いることによってその引数を見つけ出す。この一連のステップは、上記リストに等価のツリーを走査して、ターゲットの仮想計算機と互換性を有する順序で、各フラグメントに対する命令を生成する。しかし、この基本アプローチは、1回より多く関数引数として使用されるフラグメントに対し複数回のビジット(visit)を行うという点で非効率的である。複数回のビジットは、同じコード・フラグメントに対する重複した命令を生成する。
【0033】
ブロック400に対し選択されたこの方法は、2回の走査を用い、1回目のパス中に参照カウントを生成し、2回目のパス中にだけ命令を生成することにより、冗長符号を除去する。最初、ブロック410は、コード・フラグメント・リスト中のすべてのフラグメントの参照カウントをゼロに設定する。これら参照カウントは、任意の都合のよいロケーションに保持することができる。上記のテーブルIでは、これらカウントが、コード・フラグメント・リスト212において「Ref Cnt」とラベルをつけた列に格納されていることを示している。ブロック411は、各コード・フラグメントについて1回目のパス(ステップ412−413)を行う。ブロック412はコード・フラグメントの各引数を調べ、ブロック413は、現フラグメントにおいて引数として使用される各コード・フラグメントの参照カウントを増分する。テーブルIの「Ref Cnt」列内の値は、本サンプル・リストを通る1回目のパスの後における各コード・フラグメントに対する参照カウントを示している。これの最大カウント数は2に制限されるが、その理由は、フラグメントが複数回使用されるかどうかをルーチン400が検出する必要があるだけだからである。また、本当の参照カウントを保持し、そして再使用するための一時変数を、これらへのすべての参照が終了した後に解放することも可能である。
【0034】
ブロック420は2回目のパスを行う。430として一緒にグループ化したブロックでは、仮想計算機240(図2)のターゲット言語で各コード・フラグメントに対する命令を生成する。ブロック430は図4において再帰的に呼び出されるので、ブロック420は、すべてのコード・フラグメントに対しコードを生成するために、それらすべてのコード・フラグメントで反復される必要はない。したがって、ブロック420は、優先フラグが設定されているフラグメントを処理するだけでよい。これらのフラグメントは、他のフラグメントが使用する可能性のある値を返さないフラグメントであり、副作用を持つフラグメントである。テーブルIに示した例では、ブロック420は、フラグメント3のみでループすることになる。残りのフラグメントは、フラグメント3のパラメータについての再帰によって生成される。このアプローチは、ブロック351(図3)に従ってそれらフラグメントを黙示的にリオーダするというさらなる効果を有する。
【0035】
ブロック440は、この現在のコード・フラグメント内の各引数について反復される。ブロック441が現在の引数が定数であることを検知した場合、ブロック442がその定数をスタックにプッシュする命令を生成する。引数が関数(すなわち、別のフラグメントに対する参照)である場合、ブロック430を再帰的に実行して、その参照されるフラグメントに対する命令、この参照されるフラグメントが参照するかもしれない任意のフラグメント等々に対する命令を生成する。
【0036】
現フラグメントのすべての引数が処理されたとき、ブロック450は、その命令ストリームに対し、現フラグメントにおいて名称が挙げられた関数を呼び出す命令を追加する。テーブルIでは、その名称は、「Function Name(関数名)」列におけるエントリであり、究極的には増補API211(図2)内の名称から得られていた名称である。オブジェクト指向型プログラム言語で書かれたメソッドは、そのメソッドが呼び出されている対象のオブジェクトをプッシュすることも通常必要とする。なぜなら、スタックベースの仮想計算機は、どのオブジェクトに対しその関数を呼び出すかを知っていなければならず、したがって、スタックの一番上にこのオブジェクトを見つけることを予期しているからである。例えば、image. transform(引数)への呼び出しには、スタック上への変形すべき引数を評価するコードを生成し、次いで、スタック上への画像オブジェクトを評価するコードを生成し、そして最後にその関数を呼び出す命令を出力することが関係する。スタック上に上記オブジェクトを置くことには、他の関数呼び出しを用いて行ってもよい。オブジェクトに関して静的メソッドは定義されていないので、スタック上へとオブジェクトをプッシュする必要はない。技術的には、メソッドを呼び出す対象となるオブジェクトもまた、そのメソッドの引数である。しかし、別様に明示的に述べていない限り、本明細書における「引数(argument)」という用語には、そのようなオブジェクトは含まれない。JavaとC++では、一般に、この余分な引数を黙示的な「この」オブジェクトと呼ぶ。
【0037】
現フラグメントの参照カウントが2より少ない場合、ブロック451はブロック430から出る。しかし、現フラグメントが引数として2回(またはそれ以上)使用されることを参照カウントが示す場合、ブロック452はそのフラグメントを表す一時変数を生成する。ブロック453は、ブロック450で行われた関数呼び出しを表すところの出力スタックのトップ・エントリを、その新たな一時変数にコピーする命令を生成する。実施上の細目として、テーブルIには、もう1つの列「Temp(一時変数)」があり、その値は、一時変数がフラグメントに対し割り当てられていない場合に−1に設定される。フラグメントへの最初のビジットに際して、Ref Cnt=2かつTemp=−1である場合、Tempは、次に利用可能な一時変数をポイントするように設定される。
【0038】
現フラグメントが、2という参照カウントを有し、かつ前のフラグメントの処理からブロック452によって生成された一時変数を既に有する場合、ブロック430が再び実行される必要はない。詳しくは、ブロック460は、ブロック461に現フラグメントと関連する一時変数を発見させ、その一時変数のコピーをスタックにプッシュする命令を生成させる。この一時変数自体は、この時点で破棄されない。この一時変数は、さらに別のコード・フラグメントによって再使用される可能性があるからである。
【0039】
ブロック420がすべてのフラグメントの処理を終了したとき、仮想計算機プログラム221(図2)は一続きの命令を含み、この一続きの命令は、元のプレゼンテーションを再現するためインタプリタ240の仮想計算機によって直接実行可能なプログラムを構成する。すなわち、このプログラムは、元のプレゼンテーションの構造についての永続的表現であり、静的にではなく動的に構造を記述するものである。本メソッド400は、スタックベース・マシーンのためのプログラムを出力するものではあるが、コード・フラグメント212を他のタイプのインタプリタ240(仮想のものであれ現実のものであれ)用のプログラム221に変換するメソッドを、以上の記述から簡単な方法で設計することもできる。
【0040】
この出力プログラム内の個々の命令は、API211またはAPI251内のメソッドの定義済セットに対する呼び出しに対応している。同様に、この出力プログラム内のデータ項目のタイプは、その同じAPIがサポートするデータタイプからすべて引き出される。関数名とデータタイプは、それら命令でフルの名称を用いる代わりに、より簡潔に表すこともできる。
【0041】
これらのメソッドは、1乃至2バイトの数値IDを含む命令コードに割り当てられる。呼び出される頻度が高いと予想されるメソッドは、1バイトのIDを持つ。さらに具体的には、このセットの命令コードは、各ブロックが255個のコードからなるn個のブロックに分割される。nは、このセット全体を含むのに十分な大きさとなるように選択される。256−n+1個の最も広く使用される関数には、0から256−n個の番号が振られた1バイト・コードが割り当てられる。残りの関数には、2バイトコードが割り当てられる。これらのコードの第1のグループは、255に等しい第1バイトと0〜255の範囲の第2バイトを持つ。255個のコードの第2のグループは、254の第1バイトを持ち、0から255の範囲の第2バイトを持つ、などである。
【0042】
永続的表現を持ち得る各データタイプに関して、1つの命令コードが、そのタイプの値をスタックにプッシュさせる。例えば、「整数値をプッシュせよ」、「浮動小数点値をプッシュせよ」および「ストリング値をプッシュせよ」という命令には、数値IDが割り当てられる。これらの命令に関して、これと関連するデータ項目(整数、浮動小数点数あるいはストリング)がその命令コードの直後のプログラムの2進ストリーム中に置かれる。以下にさらに十分に説明する追加命令は、図2にブロック242として図示したようにスタックから一時記憶域へデータをポップし、次いで、一時記憶域からスタックへデータをプッシュする。整数は、1バイト〜4バイト方式を用いて符号化される。無符号整数については、第1バイトの2つの最上位ビットは、そのコード内のバイト数より1少ない。残りの6ビットは、1〜4バイトの整数の最上位バイトである。後続のバイトは、もし存在する場合には、整数の最上位の値から最下位の値へ配列される。符号付き整数は、同じ方法で符号化されるが、例外として定数0x20、0x2000、0x200000、0x20000000は1〜4バイト無符号値から減じられてそれぞれ最終の符号付き値を与える。
【0043】
図5は、スタックベースの仮想計算機プログラム・インタプリタ240(図2)によって実行されるメソッド500を示す図であり、このメソッドは、プレゼンテーション・コンテンツ232とAPI251とからプレゼンテーション252の構造を再現するためのメソッドである。本実施例では、インタプリタ240は、表示プログラム250およびその他のモジュールを包含するより大きな実行時プログラムの一部として実装される。このインタプリタは、COMオブジェクトとして実現され、このCOMオブジェクトは、マイクロソフト・インターネット・エクスプローラ・ブラウザのようなコンテナとインターフェースするマイクロソフト・アクティブX・コントロールによって作成され維持される。このコントローラは、ファイル231に含まれた命令ストリームを読み出すための任意の数の仮想計算機のインスタンス生成を管理し、そのファイル231は、プレゼンテーションを再現または再生するコンピュータにローカルかつ該コンピュータからリモートに格納されている。
【0044】
ブロック510は、プログラム・コピー231(図2)から順番に命令を読み出す。ブロック511は、プログラム231のそのデータ・ストリームから現在の命令を読み出す。ブロック520は、現命令が定数を表すか関数呼び出しを表すかの判定を行う。前者の場合、ブロック521は、このインタプリタ用として定義されたスタックにその定数をプッシュする。所望の場合、異なるデータタイプ用として複数のスタックを定義することができる。ブロック522は、1グループの命令を実行し、これら命令は、インタプリタ用として定義された一時データ記憶域242(図2)を操作する。この記憶域には、いくつかの記憶場所が含まれ、その各々は一意的キーすなわちアドレス値を有する。1つの命令は、データをスタックから一時記憶域の記憶場所へポップする。また別の命令は、ある記憶場所からスタックへデータをプッシュする。双方の命令の後には命令ストリーム内で整数が続き、この整数は一時記憶域内の特定の記憶場所のキーを指定する。
【0045】
上記の現命令が関数呼び出しである場合、ブロック530は、命令コード内の数値IDがどのAPI関数を指定しているかの判定を行う。次いで、ブロック531がその関数をAPIから呼び出す。この関数が引数を持つ場合、ブロック532は、ブロック532にそれら引数をスタックから1つずつ引き出させる。この関数が結果値を返したことをブロック533が判定した場合、ブロック534はその結果をスタックにプッシュする。
【0046】
また、ブロック520には、他の種類の命令を実行するためのブロック540への分岐も含まれている。
【0047】
可能な関数のセットは、通常は固定されているものの、追加の関数や追加のメソッドを定義することは可能である。以上の記述は、前述したコンポーネント・オブジェクト・モデル(COM)を用いるオブジェクトでメソッドを実装している。このモデルは、定義済セット内にないオブジェクトに対するメソッドの呼出しを可能にする"IDispatch"メカニズムを含んでいる。例えば、invokeメソッド呼び出しは、IDispatchCOMインターフェース上の名称を付されたメソッドまたは関数を、スタックの値からの引数の配列と共に呼び出すことを可能にする。IDispatch呼び出しから返される結果値をスタックにプッシュすることも可能である。
【0048】
追加命令は、ワールド・ワイド・ウェブ・ページのようなプレゼンテーション内のどこか他のところで定義されたCOMオブジェクトにアクセスする。これによって、インタプリタの命令ストリームは、通常のメカニズムを介するかIDispatchインターフェースを通じるかのいずれかによって、これらのオブジェクトに作用するメソッドを呼び出すことが可能になる。
【0049】
別の特別な命令により、インタプリタはメソッドを定義することが可能になる。この場合のメソッドは、ある時期やあるイベントの検出時のようなときに要求によって実行可能な1セットの命令コードである。例えば、表示プログラム250は、ユーザーがマウス・ボタンを押したときコールバックメソッドを発して、ストリングを表示させたり、新しいオブジェクトを示すようにすることもできる。インタプリタは、この命令に出会うと、その命令コードに続く整数を命令ストリームからフェッチする。この整数は、このメソッドのための命令とデータを構成するバイトのカウントである。インタプリタは、適切な数のバイトをプログラム・ストリームから読み出してバッファ中へ入れ、そしてインタプリタの新たなインスタンスを作成する。この新たなインタプリタは、元の命令ストリームからではなく、そのバッファから命令を読み出し処理する。このメソッドへの引数の引き渡しは、このメソッドの実行前に、スタックまたは一時記憶域にそれら引数を入れることにより行う。何らかの結果値は、スタックからまたは一時記憶域から返される。
【0050】
さらに別の命令により、インタプリタは、特定の名称を持つCOMオブジェクトに対するクエリを受けることが可能となる。このようにして、命令ストリームによって作成されたCOMオブジェクトをエクスポートし、インタプリタの外部で(スクリプトなどで)利用することが可能となる。
【0051】
以上の説明によって当業者は本発明を実施することができ、さらに請求項によって画定される本発明の範囲内での変更を当業者に対し示唆するものである。
【図面の簡単な説明】
【図1】 本発明の実施に適した環境を示すブロック図である。
【図2】 本発明の構成要素を示すブロック図である。
【図3】 本発明による永続的表現を生成するためのメソッドを示すフローチャートである。
【図4】 図3のコード生成ステップを詳述するフローチャートである。
【図5】 本発明の永続的表現をインタプリトするメソッドを示すフローチャートである。

Claims (4)

  1. 処理ユニット、オペレーティング・システムと少なくとも1つのプログラム・モジュールとを記憶するコンピュータ読取り可能媒体、入力装置、前記処理ユニットと前記コンピュータ読取り可能媒体及び前記入力装置とを接続するシステムバスを備え、複合データ・オブジェクトを再現するために予め定められた仮想計算機のインタプリタによって直接実行可能な前記複合データ・オブジェクトの構造表現を表すプログラムを生成するためのシステムにおいて、前記少なくとも1つのプログラム・モジュールが、
    複合データ・オブジェクトを創るための1セットのメソッドを有するライブラリであって、該メソッドが実行する関数の各々の可読形式の名称を含む前記メソッドに関係する可読情報を含むように増補された、ライブラリと、
    前記入力装置によりコンテンツの操作が行われる時、前記ライブラリから一続きのメソッドを呼び出すことにより、前記複合データ・オブジェクトを作成するとともに、前記一続きのメソッド呼び出しに各々関連した一続きのコード・フラグメントを発生し、前記各コード・フラグメントに、
    前記ライブラリからの前記メソッドに関係する可読情報から得た、呼び出されたメソッドに関連する関数の名称と、
    前記関数の引数が定数の場合におけるその定数と、
    前記関数の引数が別のコード・フラグメントへの参照である場合におけるその前記別のフラグメントへの参照と、
    を含めるオーサリング・ツールと、
    前記一続きのコード・フラグメントを一続きの命令に翻訳して、前記予め定められた仮想計算機のインタプリタによって実行可能な命令セットで、前記プログラムを形成するプログラム・ジェネレータと、
    を備え、
    前記プログラム・ジェネレータは、2回の走査を行い、
    1)1回目の走査において、前記各コード・フラグメントが、前記一続きのコード・フラグメント内の別のコード・フラグメントにより引数として使用される場合、その回数を表す参照カウントを生成して、該各コード・フラグメントに含め、
    2)2回目の走査において、
    a)もし前記関数に引数が存在する場合には、前記関数の各引数について、
    a1)前記引数が定数の場合、該定数をスタックにプッシュする命令を生成し、
    a2)前記引数が前記別のコード・フラグメントへの参照である場合、前記別のフラグメントについて、上記a1と当該a2を含む引数処理を再帰的に実行し、
    b)前記関数のすべての引数についての前記引数処理が完了したとき、前記関数の名称を有する関数を呼び出す命令を生成し、
    c)前記参照カウントが2以上の場合、
    c1)前記各コード・フラグメントに対し、該各コードフラグメントを表す一時変数が生成されていない場合には、前記各コード・フラグメントを表す一時変数を生成し、前記各コード・フラグメント内の前記関数による結果を前記一時変数にコピーする命令を生成し、
    c2)前記各コード・フラグメントを表す前記一時変数が既に生成されている場合には、前記一時変数をスタックにプッシュする命令を生成すること、
    を特徴とするシステム。
  2. オーサリング・ツールを用いてデザイナが作成したマルチ・コンポーネント・データ構造の構造表現を表すプログラムを生成するための、コンピュータにより実行される方法であって、前記プログラムは、マルチ・コンポーネント・データ構造を再現するために予め定められた仮想計算機のインタプリタによって直接実行可能であり、前記コンピュータが、処理ユニット、オペレーティング・システムと少なくとも1つのプログラム・モジュールとを記憶するコンピュータ読取り可能媒体、入力装置、前記処理ユニットと前記コンピュータ読取り可能媒体及び前記入力装置とを接続するシステムバスを備え、前記方法が、
    前記入力装置によりコンテンツの操作が行われる時に、前記マルチ・コンポーネント・データ構造の作成のために前記オーサリング・ツールによって行われる一続きのメソッド呼び出しを記録するステップと、
    前記一続きのメソッド呼び出しに各々関連した一続きのコード・フラグメントを発生するステップと、
    前記一続きのコード・フラグメントを一続きの命令に翻訳して、前記予め定められた仮想計算機のインタプリタによって実行可能な命令セットで、前記プログラムを形成するステップと、
    前記マルチ・コンポーネント・データ構造の前記構造表現として前記プログラムを格納するステップと、
    を含み、
    A.前記一続きのコード・フラグメントを発生するステップは、前記各コード・フラグメントに、
    A1)呼び出されたメソッドに関連する関数の名称と、
    A2)前記関数の引数が定数の場合におけるその定数と、
    A3)前記関数の引数が別のコード・フラグメントへの参照である場合におけるその前記別のフラグメントへの参照と、
    を含め、
    B.前記一続きのコード・フラグメントを一続きの命令に翻訳して前記プログラムを形成するステップは、2回の走査を行い、
    B1)1回目の走査において、前記各コード・フラグメントが、前記一続きコード・フラグメント内の別のコード・フラグメントにより引数として使用される場合、その回数を表す参照カウントを生成して、該各コード・フラグメントに含め、
    B2)2回目の走査において、
    a)もし前記関数に引数が存在する場合には、前記関数の各引数について、
    a1)前記引数が定数の場合、該定数をスタックにプッシュする命令を生成し、
    a2)前記引数が前記別のコード・フラグメントへの参照である場合、前記別のフラグメントについて、上記a1と当該a2の引数処理を再帰的に実行し、
    b)前記関数のすべての引数についての引数処理が完了したとき、前記関数の名称を有する関数を呼び出す命令を生成し、
    c)前記参照カウントが2以上の場合、
    c1)前記各コード・フラグメントに対し、該各コード・フラグメントを表す一時変数が生成されていない場合には、前記各コード・フラグメントを表す一時変数を生成し、前記各コード・フラグメント内の前記関数による結果を前記一時変数にコピーする命令を生成し、
    c2)前記各コード・フラグメントを表す前記一時変数が既に生成されている場合には、前記一時変数をスタックにプッシュする命令を生成すること、
    を特徴とする方法。
  3. 複合データ・オブジェクトの構造表現を表すプログラムを生成するための、コンピュータで実行される方法であって、前記プログラムは、前記複合データ・オブジェクトを再現するために予め定められた仮想計算機のインタプリタによって直接実行可能であり、前記コンピュータが、処理ユニット、オペレーティング・システムと少なくとも1つのプログラム・モジュールとを記憶するコンピュータ読取り可能媒体、入力装置、前記処理ユニットと前記コンピュータ読取り可能媒体及び前記入力装置とを接続するシステムバスを備え、前記方法が、
    前記入力装置によりコンテンツの操作が行われる時に、前記複合データ・オブジェクトの構造を構成するために、ライブラリから一続きのメソッドを呼び出すステップと、
    前記一続きのメソッド呼び出しを記録するステップと、
    前記一続きのメソッド呼び出しに各々関連した一続きのコード・フラグメントを発生するステップと、
    前記一続きのコード・フラグメントを一続きの命令に翻訳して、前記予め定められた仮想計算機のインタプリタによって実行可能な命令セットで、前記プログラムを形成するステップと、
    前記複合データ構造の前記構造表現として前記プログラムを格納するステップと、
    を含み、
    A.前記一続きのコード・フラグメントを発生するステップは、前記各コード・フラグメントに、
    A1)呼び出されたメソッドに関連する関数の名称と、
    A2)前記関数の引数が定数の場合におけるその定数と、
    A3)前記関数の引数が別のコード・フラグメントへの参照である場合におけるその前記別のフラグメントへの参照と、
    を含め、
    B.前記一続きのコード・フラグメントを一続きの命令に翻訳して前記プログラムを形成するステップは、2回の走査を行い、
    B1)1回目の走査において、該各コード・フラグメントが、前記一続きコード・フラグメント内の別のコード・フラグメントにより引数として使用される場合、その回数を表す参照カウントを生成して、該各コード・フラグメントに含め、
    B2)2回目の走査において、
    a)もし前記関数に引数が存在する場合には、前記関数の各引数について、
    a1)前記引数が定数の場合、該定数をスタックにプッシュする命令を生成し、
    a2)前記引数が前記別のコード・フラグメントへの参照である場合、前記別のフラグメントについて、上記a1と当該a2を含む引数処理を再帰的に実行し、
    b)前記関数のすべての引数についての前記引数処理が完了したとき、前記関数の名称を有する関数を呼び出す命令を生成し、
    c)前記参照カウントが2以上の場合、
    c1)前記各コード・フラグメントに対し、該各コード・フラグメントを表す一時変数が生成されていない場合には、前記各コード・フラグメントを表す一時変数を生成し、前記各コード・フラグメント内の前記関数による結果を前記一時変数にコピーする命令を生成し、
    c2)前記各コード・フラグメントを表す前記一時変数が既に生成されている場合には、前記一時変数をスタックにプッシュする命令を生成すること、
    を特徴とする方法。
  4. マルチ・コンポーネント・データ構造の構造表現を表すプログラムを生成する方法を実行するための、コンピュータによって実行可能な命令とデータを含む記憶媒体であって、前記プログラムは、マルチ・コンポーネント・データ構造を再現するために予め定められた仮想計算機のインタプリタによって直接実行可能であり、前記コンピュータが、処理ユニット、オペレーティング・システムと少なくとも1つのプログラム・モジュールとを記憶するコンピュータ読取り可能媒体、入力装置、前記処理ユニットと前記コンピュータ読取り可能媒体及び前記入力装置とを接続するシステムバスを備え、前記方法が、
    前記入力装置によりコンテンツの操作が行われる時に、前記マルチ・コンポーネント・データ構造の作成のためにオーサリング・ツールによって行われる一続きのメソッド呼び出しを記録するステップと、
    前記一続きのメソッド呼び出しに各々関連した一続きのコード・フラグメントを発生するステップと、
    前記一続きのコード・フラグメントを一続きの命令に翻訳して、前記予め定められた仮想計算機のインタプリタによって実行可能な命令セットで、前記プログラムを形成するステップと、
    前記マルチ・コンポーネント・データ構造の前記構造表現として前記プログラムを格納するステップと、
    を含み、
    A.前記一続きのコード・フラグメントを発生するステップは、前記各コード・フラグメントに、
    A1)呼び出されたメソッドに関連する関数の名称と、
    A2)前記関数の引数が定数の場合におけるその定数と、
    A3)前記関数の引数が別のコード・フラグメントへの参照である場合におけるその前記別のフラグメントへの参照と、
    を含め、
    B.前記一続きのコード・フラグメントを一続きの命令に翻訳して前記プログラムを形成するステップは、2回の走査を行い、
    B1)1回目の走査において、前記各コード・フラグメントが、前記一続きコード・フラグメント内の別のコード・フラグメントにより引数として使用される場合、その回数を表す参照カウントを生成して、該各コード・フラグメントに含め、
    B2)2回目の走査において、
    a)もし前記関数に引数が存在する場合には、前記関数の各引数について、
    a1)前記引数が定数の場合、該定数をスタックにプッシュする命令を生成し、
    a2)前記引数が前記別のコード・フラグメントへの参照である場合、前記別のフラグメントについて、上記a1と当該a2を含む引数処理を再帰的に実行し、
    b)前記関数のすべての引数についての前記引数処理が完了したとき、前記関数の名称を有する関数を呼び出す命令を生成し、
    c)前記参照カウントが2以上の場合、
    c1)前記各コード・フラグメントに対し、該各コード・フラグメントを表す一時変数が生成されていない場合には、前記各コード・フラグメントを表す一時変数を生成し、前記各コード・フラグメント内の前記関数による結果を前記一時変数にコピーする命令を生成し、
    c2)前記各コード・フラグメントを表す前記一時変数が既に生成されている場合には、前記一時変数をスタックにプッシュする命令を生成すること、
    を特徴とする記憶媒体。
JP2000552581A 1998-06-04 1999-06-04 複合データ構造の永続的表現の生成 Expired - Fee Related JP4165683B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/090,818 1998-06-04
US09/090,818 US6096095A (en) 1998-06-04 1998-06-04 Producing persistent representations of complex data structures
PCT/US1999/012578 WO1999063435A1 (en) 1998-06-04 1999-06-04 Producing persistent representations of complex data structures

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2008148873A Division JP2008262584A (ja) 1998-06-04 2008-06-06 複合データ構造の永続的表現の生成

Publications (3)

Publication Number Publication Date
JP2002517817A JP2002517817A (ja) 2002-06-18
JP2002517817A5 JP2002517817A5 (ja) 2008-07-24
JP4165683B2 true JP4165683B2 (ja) 2008-10-15

Family

ID=22224470

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2000552581A Expired - Fee Related JP4165683B2 (ja) 1998-06-04 1999-06-04 複合データ構造の永続的表現の生成
JP2008148873A Pending JP2008262584A (ja) 1998-06-04 2008-06-06 複合データ構造の永続的表現の生成

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2008148873A Pending JP2008262584A (ja) 1998-06-04 2008-06-06 複合データ構造の永続的表現の生成

Country Status (4)

Country Link
US (1) US6096095A (ja)
EP (1) EP1082655A1 (ja)
JP (2) JP4165683B2 (ja)
WO (1) WO1999063435A1 (ja)

Families Citing this family (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6960133B1 (en) 2000-08-28 2005-11-01 Igt Slot machine game having a plurality of ways for a user to obtain payouts based on selection of one or more symbols (power pays)
US6973641B1 (en) * 1998-06-04 2005-12-06 Microsoft Corporation Persistent representations for complex data structures as interpreted programs
US6192512B1 (en) * 1998-09-24 2001-02-20 International Business Machines Corporation Interpreter with virtualized interface
US7076788B1 (en) * 1999-11-01 2006-07-11 Nokia Networks Oy Method for describing software architecture
US6769985B1 (en) 2000-05-31 2004-08-03 Igt Gaming device and method for enhancing the issuance or transfer of an award
US7695363B2 (en) 2000-06-23 2010-04-13 Igt Gaming device having multiple display interfaces
US7699699B2 (en) 2000-06-23 2010-04-20 Igt Gaming device having multiple selectable display interfaces based on player's wagers
US7168069B1 (en) * 2000-07-12 2007-01-23 Stmicroelectronics, Inc. Dynamic generation of multimedia code for image processing
US6839059B1 (en) 2000-08-31 2005-01-04 Interactive Video Technologies, Inc. System and method for manipulation and interaction of time-based mixed media formats
US6922702B1 (en) * 2000-08-31 2005-07-26 Interactive Video Technologies, Inc. System and method for assembling discrete data files into an executable file and for processing the executable file
US20020026521A1 (en) * 2000-08-31 2002-02-28 Sharfman Joshua Dov Joseph System and method for managing and distributing associated assets in various formats
US6935955B1 (en) 2000-09-07 2005-08-30 Igt Gaming device with award and deduction proximity-based sound effect feature
US6739973B1 (en) 2000-10-11 2004-05-25 Igt Gaming device having changed or generated player stimuli
US6901591B1 (en) 2000-10-31 2005-05-31 Sun Microsystems, Inc. Frameworks for invoking methods in virtual machines
US6996813B1 (en) * 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
US6978456B1 (en) 2000-10-31 2005-12-20 Sun Microsystems, Inc. Methods and apparatus for numeric constant value inlining in virtual machines
US20020091840A1 (en) * 2000-11-28 2002-07-11 Gregory Pulier Real-time optimization of streaming media from a plurality of media sources
US6912541B1 (en) * 2000-12-01 2005-06-28 Unisys Corporation Method and apparatus for implementing persistent data in object oriented programs
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) * 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US7543288B2 (en) * 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US6957428B2 (en) 2001-03-27 2005-10-18 Sun Microsystems, Inc. Enhanced virtual machine instructions
US7058284B2 (en) * 2001-03-29 2006-06-06 Matsushita Electric Industrial Co., Ltd. Universal multimedia optic disc player and its application for revocable copy protection
US7043481B2 (en) * 2001-06-01 2006-05-09 Thought, Inc. System, method and software for creating, maintaining, navigating or manipulating complex data objects and their data relationships
US20030046266A1 (en) * 2001-07-26 2003-03-06 Ward Mullins System, method and software for creating or maintaining distributed transparent persistence of complex data objects and their data relationships
US20040205116A1 (en) * 2001-08-09 2004-10-14 Greg Pulier Computer-based multimedia creation, management, and deployment platform
US6988261B2 (en) * 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7039904B2 (en) * 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US7058934B2 (en) 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US7901291B2 (en) 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US7666098B2 (en) 2001-10-15 2010-02-23 Igt Gaming device having modified reel spin sounds to highlight and enhance positive player outcomes
US7708642B2 (en) 2001-10-15 2010-05-04 Igt Gaming device having pitch-shifted sound and music
US6848996B2 (en) * 2001-10-15 2005-02-01 Igt Gaming device with sound recording changes associated with player inputs
US20030131144A1 (en) * 2002-01-10 2003-07-10 Ncr Corporation Data wedge
US9521209B2 (en) * 2002-11-06 2016-12-13 Code Valley Corp Pty Ltd Code generation
US8832178B2 (en) 2002-11-06 2014-09-09 Noel William Lovisa Service implementation
US7789748B2 (en) * 2003-09-04 2010-09-07 Igt Gaming device having player-selectable music
US7136988B2 (en) * 2003-10-03 2006-11-14 International Business Machines Corporation Mass data storage library frame spanning for mixed media
CN101032165B (zh) * 2004-08-17 2010-06-16 松下电器产业株式会社 制作装置、制作方法
US8043155B2 (en) 2004-10-18 2011-10-25 Igt Gaming device having a plurality of wildcard symbol patterns
US20060143227A1 (en) * 2004-12-27 2006-06-29 Helm Martin W System and method for persisting software objects
JP5349581B2 (ja) * 2008-04-16 2013-11-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 照会処理視覚化システム、照会処理を視覚化する方法及びコンピュータ・プログラム
US8591308B2 (en) 2008-09-10 2013-11-26 Igt Gaming system and method providing indication of notable symbols including audible indication
CN102509329B (zh) * 2011-10-12 2013-05-29 盛乐信息技术(上海)有限公司 渲染字体的方法及***
US10666997B2 (en) * 2012-01-05 2020-05-26 Disney Enterprises, Inc. Cloud based content assembly method and system
US8460090B1 (en) 2012-01-20 2013-06-11 Igt Gaming system, gaming device, and method providing an estimated emotional state of a player based on the occurrence of one or more designated events
US8740689B2 (en) 2012-07-06 2014-06-03 Igt Gaming system and method configured to operate a game associated with a reflector symbol
US9245407B2 (en) 2012-07-06 2016-01-26 Igt Gaming system and method that determines awards based on quantities of symbols included in one or more strings of related symbols displayed along one or more paylines
US9192857B2 (en) 2013-07-23 2015-11-24 Igt Beat synchronization in a game
US9947170B2 (en) 2015-09-28 2018-04-17 Igt Time synchronization of gaming machines
KR101769848B1 (ko) * 2015-12-30 2017-08-22 (주)비아이매트릭스 상용 인터프리터를 이용한 스크립트 기반 데이터 처리 시스템

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5729253A (en) * 1991-03-20 1998-03-17 Hitachi, Ltd. Method for inputting and acquiring requirement
US5862372A (en) * 1994-11-16 1999-01-19 Morris; Robert M. Visually oriented computer implemented application development system utilizing standardized objects and multiple views
US5864864A (en) * 1995-09-27 1999-01-26 Sun Microsystems, Inc. Method and apparatus for providing transparent persistent data support to foreign data types
US5999192A (en) * 1996-04-30 1999-12-07 Lucent Technologies Inc. Interactive data exploration apparatus and methods
US6014134A (en) * 1996-08-23 2000-01-11 U S West, Inc. Network-based intelligent tutoring system
US5864866A (en) * 1997-03-26 1999-01-26 International Business Machines Corporation Apparatus and method for providing externalization in an object-oriented environment
US5956036A (en) * 1997-03-31 1999-09-21 International Business Machines Corporation Shared modules graphical user interface
US5889520A (en) * 1997-11-13 1999-03-30 International Business Machines Corporation Topological view of a multi-tier network

Also Published As

Publication number Publication date
US6096095A (en) 2000-08-01
EP1082655A1 (en) 2001-03-14
JP2002517817A (ja) 2002-06-18
WO1999063435A1 (en) 1999-12-09
JP2008262584A (ja) 2008-10-30

Similar Documents

Publication Publication Date Title
JP4165683B2 (ja) 複合データ構造の永続的表現の生成
US7426734B2 (en) Facilitating presentation functionality through a programming interface media namespace
US7546590B2 (en) Dynamic conversion of object-oriented programs to tag-based procedural code
US6980979B2 (en) Method and apparatus for customizing Java API implementations
US7020666B2 (en) System and method for unknown type serialization
US7490315B2 (en) Persistent representations for complex data structures as interpreted programs
EP1038219B1 (en) Apparatus and method for allowing object-oriented programs created with different framework versions to communicate
US9189263B1 (en) Object synchronization in shared object space
RU2371758C2 (ru) Интерфейс программирования для компьютерной платформы
US6519594B1 (en) Computer-implemented sharing of java classes for increased memory efficiency and communication method
JPH11259304A (ja) プラグインメディアデコ―ダ供給方法及び装置
US20040095387A1 (en) Virtualized and realized user interface controls
JP2001502823A (ja) インターフェイス定義言語によって定義されたデータ構造体を異種システム間で移送するための方法および装置
KR20010020250A (ko) 객체 지향의 프로그래밍 언어를 위한 하드웨어 가속기
CA2255035C (en) Archiving tool
US20050086237A1 (en) Shared queues in shared object space
US7664882B2 (en) System and method for accessing multimedia content
JPH10320248A (ja) 実行時ルックアップ及び読出し専用アクセス用バイナリイメージへファイルを埋込むための装置及びその方法
US6785880B1 (en) Tooling framework system and method for code generation
Hamakawa et al. Audio and video extensions to graphical user interface toolkits
Parsons et al. The java story
JP2001306326A (ja) データ処理システム及びデータ処理方法、並びに、ソフトウェア記憶媒体
JPH09244904A (ja) 仮想コード翻訳系および仮想マシンシステム
Mac OS Mac OS X Technology Overview
Oh et al. Experiments with MHEG Player/Studio: an interactive hypermedia visualization and authoring system

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20040308

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040511

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040616

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20040716

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20040813

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20061120

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20061121

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080305

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080310

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080404

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080410

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080502

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080512

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20080606

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080723

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110808

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110808

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120808

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130808

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees