JP2002536744A - トークンに基づいたリンクステップ - Google Patents

トークンに基づいたリンクステップ

Info

Publication number
JP2002536744A
JP2002536744A JP2000597682A JP2000597682A JP2002536744A JP 2002536744 A JP2002536744 A JP 2002536744A JP 2000597682 A JP2000597682 A JP 2000597682A JP 2000597682 A JP2000597682 A JP 2000597682A JP 2002536744 A JP2002536744 A JP 2002536744A
Authority
JP
Japan
Prior art keywords
token
package
class
interface
virtual
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2000597682A
Other languages
English (en)
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2002536744A publication Critical patent/JP2002536744A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Abstract

(57)【要約】 【課題】 【解決手段】 システムは、リソースの限られたコンピュータにダウンロードされたアーキテクチャニュートラルなコードをリンクする。そのコードは、1つまたは複数の参照可能なアイテムを持つ1つまたは複数のパッケージに分割することができる。そのシステムは、1つまたは複数の参照可能なアイテムを対応する1つまたは複数のトークンにマッピングし、ランタイムモードに一致するようトークンを配列し、リソースの限られたコンピュータにパッケージをダウンロードし、配列されたトークンを用いてパッケージをリンクして実行可能なコードにする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】
本発明は一般に、スマートカードなどリソースの限られたデバイスと共に用い
るためのオブジェクト指向、アーキテクチャニュートラルなプログラムに関する
【0002】
【従来の技術】
バーチャルマシンとは、プロセッサによって実行されるソフトウェアもしくは
命令のシーケンスにより生成された抽象的な計算機である。「アーキテクチャニ
ュートラル」という用語は、様々な異なるコンピュータアーキテクチャを持つ様
々なコンピュータプラットフォーム上のバーチャルマシンによって実行すること
ができるプログラムを意味する。例えば、Java(登録商標)プログラミング
言語で書かれたプログラムが当てはまる。それ故、例えば、Windows(登録商標
)ベースのパーソナルコンピュータシステム上で実行されているバーチャルマシ
ンは、UNIX(登録商標)ベースのコンピュータシステム上で実行されている
バーチャルマシンと同一の命令セットを用いることになる。バーチャルマシンの
命令のシーケンスをプラットフォームに依存せずにコーディングできることによ
り、複数のバイトコードのストリームを生成することができる。例えば、各バイ
トコードは1バイト長の数値コードである。
【0003】 Javaプログラミング言語を用いることにより、例えばウェブブラウザに関
するアプリケーションなどを含む多くのアプリケーションを利用できるようにな
った。
【0004】 Javaプログラミング言語は、オブジェクト指向である。オブジェクト指向
のシステムでは、「クラス」とは、データ上で動作するデータやメソッドのコレ
クションを示す。総合すれば、データとメソッドは、オブジェクトの状態と動作
とを示す。
【0005】 また、Javaプログラミング言語は、Javaプログラミング言語で書かれ
たアプリケーションの実行前にプログラムの命令シーケンスがバイトコードに対
して不適切な型のデータの処理を試みるか、プログラムのバイトコード命令の実
行がオペランドスタックのオーバフロもしくはアンダフロを引き起こすか、につ
いて決定できるように検証可能である。
【0006】 Java(登録商標)バーチャルマシンは、Javaプログラミング言語で書
かれたバーチャルマシンコードを実行し、32ビットアーキテクチャと共に用い
るように設計されている。しかしながら、スマートカードなどのリソースの限ら
れた様々なデバイスは、8ビットもしくは16ビットのアーキテクチャを有して
いる。
【0007】 インテリジェントなデータ携帯用カードとしても知られているスマートカード
は一般に、プラスチックもしくは金属でできていて、プログラムやメモリを実行
するマイクロプロセッサとプログラムやデータを記憶するメモリが組み込まれた
電子チップを備えている。そのようなデバイスは、クレジットカードほどのサイ
ズにすることができるのだが、メモリの容量が限られているのが通例である。例
えば、いくつかのスマートカードでは、リードオンリメモリ(ROM)や電気的
消去可能リードオンリメモリ(EEPROM)などの不揮発性メモリだけでなく
、ランダムアクセスメモリ(RAM)の容量も1キロバイト未満である。
【0008】 一般に、スマートカードのプロセッサで動作するプログラムが、カードの提供
する機能を決定する。時がたつと、例えば新しい機能を追加したり既存の機能を
改善したりするために、カードのプログラムをアップデートする必要が生じるこ
とがある。このためには、カードが、他のプログラムに取って代わる新しいプロ
グラムを受け入れられる必要がある。
【0009】 通例、バイトコードを実行するバーチャルマシン(例えば完全なJavaバー
チャルマシン)は、バイトコードをロードし、参照をリゾルブする際にかなりの
大きさの容量をもつメモリを必要とする。特に、Javaバーチャルマシンでは
、クラス、メソッド、フィールドのようなプログラムの要素を参照するために、
記号参照が用いられる。これらのプログラム要素への参照は、その記号名を用い
て要素の位置を特定することによりリゾルブされる。そのような演算には、比較
的大容量のランダムアクセスメモリ(RAM)が必要である。RAM容量が小さ
い環境では、それが実行できない場合もある。スマートカードはコストに敏感な
ので、高価でない低性能のプロセッサと低容量のメモリに依存している。コスト
と性能の理由から、そのようなリソースの限られたコンピュータには低性能のプ
ロセッサと低容量のメモリが組み込まれているので、そのようなリソースの限ら
れたデバイスでのJavaバーチャルマシンの動作を可能にするのは困難である
が望まれている。
【0010】
【発明の概要】
第1の態様では、リソースの限られたコンピュータにコードをダウンロードす
る。コードは、少なくとも1つの参照可能なアイテムを含む少なくとも1つのパ
ッケージに分割可能である。その方法は、パッケージを形成するステップと、対
応するトークンに対して参照可能なアイテムのマッピングを形成するステップと
、パッケージとマッピングを提供するステップとを含んでいる。
【0011】 第2の態様では、リソースの限られたコンピュータにダウンロードされたコー
ドをリンクする。その方法は、パッケージを受け取るステップと、対応するトー
クンに対して参照可能なアイテムのマッピングを受け取るステップと、マッピン
グを用いてパッケージをリンクするステップとを含む。
【0012】 本発明には、以下の利点がある。本発明は、独自のトークン識別子によって格
納スペースを小さくすることにより、リソースが限られたデバイスにおけるリソ
ースを効率的に利用する。さらに本発明は、リソースの限られたデバイス上にエ
クスポートされたアイテムに対する参照をリンクおよびリゾルブすることができ
る。本発明は、エクスポートファイルなどのメタデータを通して、エクスポート
された要素を発行できる。発行はされるが、アプレットや関連するライブラリの
秘密または専有の要素や詳細を、開示はされない。それ故、別個に開発された様
々なアプリケーションが、リソースの限られたデバイスにロードされても、専有
の情報を侵害することなしに互いにその構成要素を共有することができる。
【0013】 さらに、Javaのようにアーキテクチャニュートラルな言語の利点は、リソ
ースの限られたデバイス上での言語を準備する際に実現される。内部もしくは専
有の要素に対してトークンを用いてもよい。それ故、トークンは、packag
e visibleバーチャルメソッドだけでなく、専有およびpackage
visibleインスタンスフィールドにも割り当てることができる。本発明は
トークンの割り当てにほとんど制限を課さないので、特定の用途に対してトーク
ンの種類を定義もしくは最適化することができる。そのように、本発明は、いっ
たん書かれたら、どのプラットフォーム、記憶容量の限られたスマートカードの
ようなリソースの限られたデバイス上でも動作する可搬性でアーキテクチャニュ
ートラルなコードをサポートするものである。
【0014】
【発明の実施の形態】
コンパクトで安全なフォーマット内でオブジェクト指向のプログラムをリンク
するステップを示すための方法を説明する。この方法を用いると、前記プログラ
ムをダウンロード、リンクし、リソースの限られたデバイス上で実行することが
できる。リソースの限られたデバイスは一般に、メモリまたは計算性能すなわち
計算速度に制限があるデバイスと考えられる。以下に示す実装については、スマ
ートカードを参照して説明するが、本発明は、他の小さいすなわち小型のデバイ
スはもちろん、携帯電話、境界スキャンデバイス、フィールドプログラマブルデ
バイス、パーソナルデータアシスタント(PDA)、ポケットベル(登録商標) を含み、それらに限定されない、リソースが限られた他のデバイスでも用いるこ とができる。リソースの限られたデバイスのRAMが1K、ROMが16Kしか ない場合もある。同様に、リソースの限られたデバイスには、32ビット未満で 設計されたアーキテクチャに基づいているものもある。例えば、本発明と共に用 いることのできるリソースの限られたデバイスには、32ビットのアーキテクチ ャでなく、8ビットもしくは16ビットのアーキテクチャに基づいているものも ある。
【0015】 図1によると、スマートカード40のようなリソースの限られたデバイスのた
めのアプレットの開発は、Javaプログラムの開発と同様の方法で始まる。換
言すると、開発者は、1つまたは複数のJavaクラスを書き、Javaコンパ
イラでソースコードをコンパイルして1つまたは複数のクラスファイル10を生
成する。例えばアプレットは、カード40の環境をエミュレートするシミュレー
ションツールを用いるワークステーション上で実行、試験、デバックを行うこと
ができる。アプレットがカード40にダウンロードされる準備がなされると、ク
ラスファイル10は、コンバータ14によって変換アプレット(CAP)ファイ
ル16にコンバートされる。コンバータ14は、デスクトップコンピュータによ
って実行されるJavaアプリケーションでよい。コンバータ14は、コンバー
トされるクラスファイル10に加えて、1つまたは複数のエクスポートファイル
12をインプットとして受け入れることができる。エクスポートファイル12は
、コンバートされたクラスによってインポートされたパッケージの内容のための
名前情報やリンク情報を含む。
【0016】 一般に、CAPファイル16は、1つのJavaパッケージ内で定義されたク
ラスとインターフェースすべてを含み、8ビットバイトのストリームによって表
される。16ビットと32ビットのクオンティティは、2もしくは4つ連続した
8ビットバイトで読み込むことにより、それぞれ構築される。特に、CAPファ
イル16は、メソッドコンポーネント20とは別個にパッケージングされた定数
プールコンポーネント(すなわち「定数プール」)を含む。定数プール18は、
プログラムがスマートカード40にリンクされるかダウンロードされる際、もし
くはスマートカードによる実行時にリゾルブされるメソッドおよびフィールドリ
ファレンスを含む様々な種類のコンスタントを含むことができる。メソッドコン
ポーネント20は、スマートカード40にダウンロードされた後にスマートカー
ドによって実行されるアプリケーションの命令を特定する。
【0017】 コンバートの後、CAPファイル16は、ハードドライブ、フロッピディスク
、光記憶媒体、フラッシュメモリもしくはその他の適切な媒体などのコンピュー
タ読み取り可能な媒体17に記憶させることができる。また、コンピュータ読み
取り可能な媒体は、例えばネットワークデータ伝送などの搬送波や無線(RF)
データリンクの形態を取っていてもよい。
【0018】 次に、CAPファイル16は、周辺のカードアクセプタンスデバイス(CAD
)24を備えたデスクトップコンピュータなどのターミナル22にコピーもしく
は転送することができる。CAD24により、スマートカード40に情報を書き
込むこと、およびそこから取り出すことが可能となる。CAD24は、スマート
カード40を挿入することのできるカードポート(示さない)を備える。挿入す
ると、スマートカード40の接触表面とコネクタとの接触により電圧が供給され
、スマートカードとの通信が可能となるのだが、他の実装として遠隔通信も可能
である。また、ターミナル22は、伝送のためのCAPファイル16をカード4
0にロードするインストレーションツール26を含む。スマートカード40は、
プログラム、データ、その他の通信を供給するための接触を可能とする入出力(
I/O)ポート42を備える。また、カード40は、CAPファイル16の内容
を受信し、カード40での実行のためにアプレットを準備するためのインストレ
ーションツール46を含む。インストレーションツール46は、例えば、Jav
aプログラムとして実装し、カード40上で実行することができる。また、カー
ド40は、RAM50のような揮発性メモリなどのメモリを備える。また、カー
ド40は、ROM52や、EEPROM54のような不揮発性メモリを備える。
コントローラ44によって準備されたアプレットは、EEPROM54に記憶す
ることができる。
【0019】 1つの実装では、マイクロプロセッサ48上で実行されているバーチャルマシ
ン49によって、アプレットが実行される。バーチャルマシン49は、Java
カードバーチャルマシンと呼ぶことができ、CAPファイル16のロードや処理
をする必要はない。Javaカードバーチャルマシン49は、どちらかといえば
CAPファイル16の一部として以前に記憶されたアプレットを実行する。Ja
vaカードバーチャルマシン49とインストレーションツール46との間で機能
を分けることにより、バーチャルマシンとインストレーションツールの両方を比
較的小型にすることが可能である。
【0020】 一般に、スマートカード40のようにリソースの限られたプラットフォームの
ために書かれた実装やアプレットは、Javaプラットフォームパッケージのた
めの標準の規則に従う。JavaバーチャルマシンとJavaプログラミング言
語については、T.Lindholm et al.「The Java Vi
rtual Machine Specification(Javaバーチャ
ルマシン仕様)」(1997)、K.Arnold et al.「The J
ava Programming Language Second Edit
ion(Javaプログラミング言語 第2版)」(1998)に記述されてお
り、それらは完全に参照することによりここに組み込まれる。スマートカードプ
ラットフォームのためのアプリケーションプログラミングインターフェース(A
PI)のクラスは、パッケージ指定を含むJavaソースファイルとして書くこ
とができる。パッケージは、多数のコンパイルユニットを含み、独自の名前を持
つ。クラス、フィールド、メソッドへのアクセスを確認、制御するために、パッ
ケージメカニズムが用いられる。JavaカードAPIにより、Javaカード
が使用可能なあるプラットフォーム用に書かれたアプリケーションをJavaカ
ードが使用可能な他のプラットフォームで動作させることが可能となる。さらに
、JavaカードAPIは、ISO7816などの正式な国際基準やEurop
ay/Master Card/Visa(EMV)などの業界基準と互換性が
ある。
【0021】 マイクロプロセッサ48上で動作するバーチャルマシン49は、スマートカー
ド40上でバイトコードを実行するための1つの実装として説明されているが、
他の実装では、特定用途向け集積回路(ASIC)またはハードウェアとファー
ムウェアの組み合わせを代わりに用いることができる。
【0022】 図1によると、コントローラ44は、CAPファイル16の内容を受け取り、
プロセッサ48によって実行されるアプレットを準備するためにインストレーシ
ョンツール46を用いる。インストレーションツール46は、例えば、カード4
0上で実行するために適切にコンバートされたJavaプログラムとして実装す
ることができる。以下の説明では、コントローラ44が、マイクロプロセッサ4
8上で実行されているバーチャルマシンプログラム49からなることとする。バ
ーチャルマシン9はCAPファイル16のロードや処理をする必要はない。どち
らかといえばJavaカードバーチャルマシン49は、CAPファイル16内の
アプレットコードを実行する。バーチャルマシン49とインストレーションツー
ル46との間で機能を分けることにより、バーチャルマシンとインストレーショ
ンツールの両方を比較的小型にすることが可能である。他の実装では、例えば、
特定用途向け集積回路(ASIC)としてコントローラ44をハードウェアに組
み込んだり、ハードウェアとファームウェアの組み合わせとして実装したりする
ことができる。
【0023】 スマートカードプラットフォームは、リソースの限られた他のデバイスにも同
様に用いることが可能であり、クラスインスタンスとクラスアレイ両方を含む動
的に作られたオブジェクトをサポートする。クラスは、単一の既存クラスのエク
ステンションまたはサブクラスとして実装され、フィールドと呼ばれる変数だけ
でなくメソッドもそのメンバである。メソッドは、呼び出すことができ、決まっ
た数の値を引数として通過させる実行可能なコードを記述している。また、クラ
スはJavaインターフェースを実装することができる。インターフェースは、
メンバがコンスタントメソッドとabstractメソッドである参照型である
。バーチャルマシン49は、JavaカードAPIと支援機能を含むランタイム
システムへのアクセスを提供するインタープリタやネイティブな実装を含んでい
てもよい。
【0024】 図2に示すように、図1のカード40を受けるカードアクセプタンスデバイス
24がコンピュータ221に備えられている。コンピュータ22は、サーバ47
など複数の他の計算機と通信するネットワーク45に接続されていてもよい。カ
ードを備えたデバイスによりネットワークを通じてスマートカードにデータやソ
フトウェアをロードすることが可能である。このようなダウンロードには、様々
な電子商取引やその他の用途に関するデジタルキャッシュやその他の情報だけで
なく、スマートカードにロードされるアプレットやその他のプログラムも含まれ
る。カードアクセプタンスデバイスやスマートカードの処理エレメントを制御す
るのに用いられる命令やデータは、揮発性もしくは不揮発性のメモリに記憶して
もよいし、例えば命令やデータを含む搬送波などの通信リンクから直接受信して
もよい。さらに、例えば、ネットワーク45は、インターネットやその他のネッ
トワークのようなLANもしくはWANであってもよい。
【0025】 図3は、スマートカード40にロードされたプログラムパッケージ(アプリケ
ーションプログラムインターフェース(API)とプログラムアプレット両方を
含む)の間の典型的な階層の従属関係を示す図である。アプリケーションは、ス
マートカード40に漸次ロードされ、カード上でリンクされて実行される。その
結果、スマートカード40には、工場でプログラムされた機能に加えて追加の機
能がアップデートされる。図では、Java言語フレームワーク50とJava
カードフレームワーク52は、JavaカードAPIのレベルに存在する。Ja
vaカードAPIレベルより上には、1つもしくは複数のカスタムフレームワー
ク54の存在するカスタムAPIレベルがある。カスタムフレームワーク54は
、様々なソフトウェア開発キット(SDK)により価値を付加された1つもしく
は複数のプロバイダによって供給され、既存のフレームワークまたはその他のA
PIを拡張することができる。最高レベルは、様々なアプレット56,58,6
0が存在するアプリケーションレベルである。
【0026】 図3に示すように、パッケージは、同じAPIレベルの他のパッケージに依存
したり、低いAPIレベルのパッケージから依存されたりしてもよい。例えば、
アプレット58は、アプレット58のプログラムエレメントを参照することが可
能であり、Javaカードフレームワーク52は、Java言語フレームワーク
50から依存されることが可能である。さらに、カスタムAPIレベルのカスタ
ムフレームワーク54とアプレット58および60は、Javaカードフレーム
ワークから依存される参照を持っていてもよい。同様に、アプレット56および
58は、カスタムフレームワーク54から依存される参照を持っていてもよい。
また、アプレット56とカスタムフレームワーク54は、Java言語フレーム
ワーク50から依存されてもよい。図3の例は線形的な依存を示しているが、適
切なコンバータ14とインストレーションツール46を用いて循環的な依存のよ
うな非線形的な依存をサポートしてもよい。
【0027】 例えばJavaアプリケーションからCAPファイル74への一連のクラスフ
ァイルのコンバートは一般に、スマートカード40でのインストールの準備の際
にデスクトップコンピュータ上で行うことができる。デスクトップコンピュータ
22は一般に、典型的なスマートカード40ほどリソースは限られていない。さ
らに、コンバートの演算は、他の適切なプラットフォームでも同様に行うことが
できる。
【0028】 図4は、パッケージをコンバートするためのシステムを示す。そのシステムは
、スマートカード40にダウンロードするための準備を行う際にアプレットやラ
イブラリを定義することができる。コンバータ72は、アプレットの機能を定義
する1つまたは複数のクラスファイル70からデータ入力を受け取る。次に、コ
ンバータ72は、ダウンロードに適したJavaCAPファイル74を生成する
【0029】 以下でさらに詳細に論じているように、CAPファイル74は、そのパッケー
ジ内のエレメントへの参照をリゾルブするためのエクスポートコンポーネント8
2を含む。それらのエレメントは、他のパッケージによって参照されてもよい。
エクスポートコンポーネント82は、クラス、メソッド、フィールドなどのst
aticアイテムのためのエントリを含む。インスタンスフィールド、バーチャ
ルメソッド、インターフェースなどのダイナミックなアイテムへの参照は、エク
スポートコンポーネント内に与えられる必要はないが、以下に説明するプロセス
にしたがって処理することができる。
【0030】 リソースの限られたデバイスでは、アイテムを表すためにユニコード文字列を
用いるため、メモリとプロセッサのリソースが消費される。ストリングにより、
エクスポートコンポーネント82は、トークンすなわち単一の数値をCAPファ
イル74内の他のコンポーネントに定義されたエレメントに対してマッピングす
る。エクスポートコンポーネント内のこれらのエレメントを表すのに用いられる
トークン値は、対応するエクスポートファイル80内で発行された数値と一致す
る。
【0031】 さらに詳細には、CAPファイル74は特に、ヘッダコンポーネント76、定
数プール78、メソッドコンポーネント80、エクスポートコンポーネント78
を含む。定数プール78は通例、1つまたは複数のクラス、フィールド、メソッ
ド参照を含み、その結果、一般に、パッケージの定数プール78を通じて間接的
にプログラムエレメントやアイテムへの参照がなされる。メソッドコンポーネン
ト80は、CAPファイル74を代表とするアプレットパッケージによって実装
されたメソッドすべてを含む。メソッド参照は、メソッドコンポーネントに位置
するメソッドになる。クラスとstaticフィールドの参照はそれぞれ、クラ
スコンポーネントとstaticフィールドコンポーネント内のロケーションに
なる。
【0032】 エクスポートコンポーネント78は、トークン値84を持つ1つまたは複数の
エントリと、CAPファイルA74に定義されたパッケージ内でそのプログラム
エレメントが検索される場所を記述するプログラムエレメントリンク情報86と
を含む。リンク情報は、カードの内部表現ではなく、CAPファイル74の内容
に固有のものである。それ故、このコンポーネントは、カード固有の専用もしく
は保護情報を記述しない。
【0033】 また、コンバータ72は、クラスファイルをCAPファイル74にコンバート
する際に、エクスポートファイル80を生成することができる。CAPファイル
各々に対して1つのエクスポートファイルが生成される。エクスポートファイル
80は通例、CAPファイル74のプログラムエレメントのための記号名90を
持つ1つまたは複数のエントリとそれに対応するトークン値92を含む。エクス
ポートファイル80は、クラスファイルのパッケージの外部アクセス可能なプロ
グラムエレメント各々についての情報とCAPファイル74内のプログラム情報
を提供する。それらの情報は、第2のパッケージによって第2のCAPファイル
(以下で説明する)に参照(インポート)されることが可能である。例えば、エ
クスポートファイル80は、1つのJavaパッケージに定義されたpubli
cクラスおよびインターフェースすべてに対する参照と、それらのクラスとイン
ターフェースに定義されたpublicおよびprotectedフィールドお
よびメソッドすべてを含む。また、エクスポートファイル80は、トークンに対
するこれらのプログラムエレメントまたはアイテムのマッピングを含む。それは
、パッケージのコンバートの際に、トークンにインポートされたアイテムの名前
のマッピングに用いることができる。エクスポートファイルは、アプレットやそ
れに関するライブラリの専有または独自の詳細を開示しない。それ故、別個に開
発された様々なアプリケーションをリソースの限られたデバイスにロードし、専
用の保護情報を侵害することなしに互いにコンポーネントを共有できる。エクス
ポートファイル80は、アプレットやそれに関するライブラリの専有または独自
の詳細を開示しないので、別個に開発されたアプリケーションをカード40にロ
ードし、専用の保護情報を侵害することなしにエクスポートされたエレメントを
互いに共有できる。
【0034】 図3および4を参照すると、JavaカードフレームワークAPI52を含む
多数のクラスファイル70がコンバートされていた場合には、コンバート中に生
成されたエクスポートファイル80により、別個にコンバートされた他のアプレ
ットプログラムは、JavaカードフレームワークAPIのアイテムを外部参照
するためにどのトークンを用いるかを認識することができる。例えば、アプレッ
トがフレームワーククラスPINを参照する場合、Javaカードフレームワー
クのためのエクスポートファイル80は、それぞれのトークンと共にクラスJa
vaカードフレームワークPINのためのエントリを含む。コンバータ72は、
新しいアプレットのCAPファイルの定数プール内にトークンを配置し、フレー
ムワーク内のそのクラスへのリゾルブされていない参照を表す。以下に説明する
ように、アプレットの実行中、フレームワークAPIパッケージのエクスポート
コンポーネント78内に参照されたアイテムを位置指定してエレメントリンク情
報を取り出すために、トークンを用いることができる。例えば、メソッドのリン
ク情報は、パッケージのメソッドコンポーネント80に含まれる適切なメソッド
を位置指定するための情報を提供することができる。
【0035】 図5は、クラスファイル94の第2のパッケージをコンバートするコンバータ
72を示している。それらのクラスファイル94は、第1のパッケージ70(図
4)のクラスファイルからエレメントをインポートする。例えば、第2のパッケ
ージは、例えば以前にコンバートされたJavaカードフレームワークライブラ
リパッケージに含まれるクラスに依存する一連のアプレットクラスでよい。コン
バータ72は、クラスファイル94と、以前にコンバートされたパッケージの1
つまたは複数のエクスポートファイル80からデータを入力される。コンバータ
72は、例えばスマートカード40へのダウンロードに適したCAPファイル1
00を生成する。
【0036】 第2のパッケージのためのCAPファイルB100は、アプレットクラスによ
って参照される全パッケージのリストを含むインポートコンポーネント104を
含む。そのような外部のパッケージ参照それぞれは、内部パッケージトークンと
そのパッケージのための外部単一アプリケーション識別子(AID)との間のマ
ッピング106を含む。参照された外部パッケージを簡単に識別し、その結果と
してアプレットの表現のフットプリントサイズを削減するために、CAPファイ
ル100内の他のコンポーネントで、各パッケージトークンが用いられる。
【0037】 また、CAPファイル100は特に、ヘッダコンポーネント102、インポー
トコンポーネント104、定数プール108を含む。定数プール108は、1つ
または複数のクラス参照110を含む。クラス参照は、対応するパッケージトー
クンとクラストークンを持つ各クラス参照をマッピングし、それによって、対応
する外部パッケージとそのパッケージ内のクラスに対して指定されたクラスをマ
ッピングする。これらのトークンの使用については、以下でさらに説明する。ま
た、定数プール108は、対応するパッケージトークン、クラストークン、メソ
ッドトークンを持つ各メソッド参照を同様にマッピングする1つまたは複数のメ
ソッド参照112を含む。また、定数プール108は、各々がそのパッケージト
ークン、クラストークン、フィールドトークンをそれぞれ持つフィールド参照1
14を含む。
【0038】 一般に、プログラムエレメントもしくはアイテムへの参照は、各パッケージの
定数プール108を通じて間接的になされる。他のパッケージ内でのアイテムへ
の参照は、外部のものとしてみなされ、トークンで表される。同じCAPファイ
ルのアイテムへの参照は、内部のものとしてみなされ、トークンもしくは(CA
Pファイル内のロケーションへのポインタなどの)別の内部フォーマットのいず
れかで表すことができる。例えば、クラスへの外部参照110は、パッケージト
ークンとクラストークンから成っている。それらのトークンが合わさって、ある
外部パッケージのあるクラスを指定する。クラスへの内部参照は、CAPファイ
ル内のクラス構造のロケーションへのポインタでよい。あるいは、外部トークン
システムを内部的に同じように用いてもよい。外部参照112〜114は、パッ
ケージトークン、クラストークン、staticフィールドもしくはstati
cメソッドのためのトークンを持つstaticクラスメンバ(フィールドもし
くはメソッド)を参照する。staticクラスメンバへの内部参照は、CAP
ファイル内のアイテムのロケーションへのポインタでよいが、トークンシステム
を用いることもできる。インスタンスフィールド、バーチャルメソッド、インタ
ーフェースメソッドへの参照は、クラス参照と適切な型のトークンから成る。そ
のクラス参照は、参照が外部参照であるか内部参照であるかを示す。
【0039】 CAPファイル内の外部参照は、カード上でトークンの形からJavaカード
バーチャルマシンで用いられる内部表現へとリゾルブされることが可能である。
トークンは、それを定義するパッケージに照らしてのみリゾルブすることができ
る。エクスポートファイルがexternally visibleパッケージ
名からトークンへマッピングすると、トークンからリゾルブされた参照へマッピ
ングするカード上の各パッケージのための一連のリンク情報が生成される。この
ように、コンバータ97は、クラスファイル92とエクスポートファイル94の
両方を処理し、リソースの限られたデバイスにアプレットをダウンロードするの
に適切なイメージを作成し、第1のパッケージへの参照(リンク)をリゾルブす
る。
【0040】 図4および図5で実行された前処理の後、図4のCAPファイルを含むスマー
トカード40もしくはリソースの限られたデバイスに、図5のCAPファイルを
ダウンロードすることができる。図6および図7は、スマートカード40もしく
は小型のデバイス上のstaticエレメントに対して、トークンに基づくリン
クがなされる方法を、より詳細に示したものである。staticエレメントは
、コンバート処理中にその正確な表現がコンバータによって識別可能なエレメン
トを含む。
【0041】 図6において、パッケージP2のイメージ200を、例えばCAPファイルB
100からカード40にロードし、実行前もしくは実行中に前のパッケージP1
にリンクさせることができる。パッケージP2(200)内のプログラムエレメ
ントは、すでにイメージ174として(CAPファイルA74の)カード40上
に存在する外部パッケージP1内のメソッドや他のデータへの参照を含むことが
できる。イメージ174は特に、ヘッダコンポーネント176、定数プール17
8、メソッドコンポーネント180、エクスポートされたstaticアイテム
185すべてに対するトークンのリストを含むエクスポートコンポーネント18
2を含む。外部パッケージへの参照のリゾリューションを支援するために、パッ
ケージレジストリ120がカード40上で作成され、パッケージP2のイメージ
200が必要とするメソッドを含むパッケージP1のイメージ174を含めて、
1つまたは複数のパッケージを位置指定するのに用いられる情報を提供する。
【0042】 パッケージP2のイメージ200は特に、ヘッダコンポーネント202、イン
ポートコンポーネント204、定数プール208、メソッドコンポーネント21
6、CAPファイルB100内のそれぞれのコンポーネント102、104、1
08、116に関するすべてのコンポーネントを含む。これらのコンポーネント
の一般的な構成は、CAPファイルに関して上述している。通例、メソッドコン
ポーネント216は、「new」(218)、「invokestatic」(
220)、「getstatic」(222)のようなプログラム参照を、それ
ぞれの呼び出されたクラス参照、メソッド参照、フィールド参照と共に含む。
【0043】 図7は、図6のパッケージP2(200)のためのリンクプロセス140を示
す。メソッドコンポーネント216内の実行メソッドが、外部パッケージ(パッ
ケージ1)内に位置指定されたメソッドコンポーネント180内で、例えばMe
thod Tなどのメソッドを呼び出す際には、リンクが必要になる(ステップ
142)。オペランドとして命令に提供されたインデックスを用いて、プロセス
140は、定数プール208にマッチングメソッド参照212を位置指定して取
り出す(ステップ144)。以下に説明するように、メソッド参照は、外部パッ
ケージのメソッドを位置指定するのに用いられるパッケージトークン、クラスト
ークン、メソッドトークンからなる。次に、プロセス140は、インポートコン
ポーネント204を試験し、取り出されたパッケージトークンに基づいて外部パ
ッケージP1の単一のAIDを検索する(146)。次に、パッケージレジスト
リ120が試験され、AIDに基づいてパッケージP1のロケーションが検索さ
れる(ステップ148)。パッケージP1のイメージ174がパッケージレジス
トリから検索されると、イメージ174のエクスポートコンポーネント182が
検索され、指定されたクラストークンを持つクラスが位置指定される(ステップ
150)。次に、要求されたメソッド、例えばMethod Tのためのプログ
ラムリンク情報が、ステップ150で検索されたクラスに関するメソッドのリス
トを検索することにより検索され、指定されたメソッドトークン(ここでは、パ
ッケージP1(174)のMethod Tに関するメソッドトークンY)を持
つメソッドが位置指定される(ステップ152)。最後に、指定されたメソッド
、例えばMethod Tのメソッドコンポーネント180内でのロケーション
が、エクスポートコンポーネント182のメソッドに提供されたリンク情報に基
づいて決定される(ステップ154)。
【0044】 図7のプロセスを用いて、パッケージをカードにダウンロードし、バーチャル
マシンによって実行される準備を行うことができる。このプロセスは、「インス
トレーション」と呼ばれる。(カード上でデータを受け取る際やデータを記憶す
る際に)処理やリンクの実行命令が異なる様々なインストレーションプロセスを
用いることができる。これらのインストレーションプロセスは、カード上の利用
可能なリソースに基づいて最適化することができる。1つの実装では、リンクが
起こらず、データが受け取られると、直ちに記憶される。コードの変換もしくは
実行時に、外部参照のリゾリューションが起こる。そのように、すべての一時リ
ンク情報が永久的に記憶されるため、この実装は、比較的大きい(制限の少ない
)小型デバイスで用いられる。
【0045】 上で論じたように、CAPファイル内のアイテムを識別し、リソースの限られ
たデバイス上の参照をリゾルブするために、Javaクラスファイルで用いられ
るユニコードストリングの代わりに、トークンが用いられる。APIのためのト
ークンは、APIのデベロッパによって割り当てられ、そのAPIのためのパッ
ケージエクスポートファイル内で発行される。名前対トークンのマッピングが発
行されるので、APIデベロッパは、本発明の制約内でトークン用の任意の配列
を選ぶことができる。
【0046】 図6および図7は、staticアイテム、すなわちクラス、staticフ
ィールド、staticメソッドへの参照のリゾリューションを示している。こ
れらのアイテムの実装は、コンパイルおよびコンバート中に完全に位置指定可能
である。逆に、コンパイルおよびコンバート中に、インスタンスフィールドへの
参照、バーチャルメソッド、インターフェースメソッドは、その実装に静的に束
縛されない。それらのアイテムは、実行時にインスタンスへの参照と共にのみ用
いることができる付加的な情報を必要とする。これらのタイプへの参照のリゾリ
ューションは、図32〜36の参照に記述されている。
【0047】 バーチャルメソッドのためのトークンの割り当てにより、オブジェクト指向の
クラス階層内の関係が準備される。バーチャルメソッドテーブル、インターフェ
ーステーブルへのインデックスとして、バーチャルメソッドとインターフェース
のためのトークンが用いられる。そのカードプラットフォームは、リソースの限
られたデバイスVMの実装に最も有用な内部表現へトークンをリゾルブすること
ができる。
【0048】 いくつかのトークンは、インデックスにリゾルブされてもよい。例えば、イン
スタンスフィールドトークンは、クラスインスタンスへのインデックスにリゾル
ブされてもよい。そのようなクラスでは、トークン値は、リゾルブされたインデ
ックスの値と異なりそれに関連がないことがある。
【0049】 パケージ内の各種のアイテムは、その種類のトークン用の独自の独立したスコ
ープを持っている。各種の参照のためのトークンレンジのサンプルと割り当てル
ールを以下の表に示す。トークンのレンジと割り当ては他のものでもよい。
【0050】
【表1】
【0051】 図8〜図16は、参照を表現した図である。図8〜図10はインポートされた
エレメントへの参照を示し、図11〜図16は内部アイテムへの参照を示してお
り、トークンを使用したものもある。
【0052】 図8は、外部クラスへのクラス参照180を示している。図8のクラス参照は
、パッケージトークンとクラストークンとを備える。図9は、外部フィールド参
照の表現を示している。外部フィールド参照182は、パッケージトークンと、
クラストークンと、フィールドトークンとを備える。図10は、外部メソッド参
照184の表現を示している。外部参照184は、パッケージトークンと、クラ
ストークンと、メソッドトークンとを備える。ここで、バーチャルメソッドでは
メソッドトークンのハイビットがゼロに設定されることに注意が必要である。ハ
イビットを設定するということは、このメソッドが、定義されるパッケージの外
側からアクセス可能であることを示している。ハイビットは最も重要なビットで
良く、例えばバイト中の7番目のビット、ワード中の15番目のビット、あるい
は3バイトユニット中の23番目のビット等で良い。
【0053】 パッケージトークンのハイビットは、インポートされたパッケージを示すよう
に設定される。これは、外部と内部の参照を区別するために使用される。図11
〜図16に示されるように、外部エレメントへの参照のハイビットはゼロに設定
される。図11〜図16のフォーマットは、特定の場合にトークンの使用を内部
アイテムまで拡張させた例である。
【0054】 図11は、内部クラス参照186の表現を示している。内部クラス参照186
は、クラスコンポーネント内のクラス情報構造へのオフセットを備える。図12
は、内部フィールドのためのstaticフィールド参照188の表現を示して
いる。このように、staticフィールド参照188は、ゼロに設定されたフ
ィールドと、staticフィールドイメージ内のstaticフィールドへの
オフセットを含むフィールドとを備える。図13は、内部メソッドのためのst
aticメソッド参照190の表現を示している。Staticメソッド参照1
90は、ゼロに設定された埋め込みのフィールドを備えることによって、参照と
、インポートされたメソッド参照とを同サイズにしている。Staticメソッ
ド参照190は、また、メソッドコンポーネント内のstaticメソッドへの
オフセットに関する情報を提供するフィールドも備える。
【0055】 図14は、内部フィールドのための、インスタンスフィールド参照192の表
現を示している。図14において、インスタンスフィールド参照192は、クラ
スコンポーネント内のクラス情報へのオフセットと、フィールドトークンとを備
える。図15は、内部メソッドのための、publicまたはprotecte
dなメソッドへのバーチャルメソッド参照194を示している。バーチャルメソ
ッド参照194は、クラスコンポーネント内のクラス情報構造へのオフセットを
備える。これは、外部からアクセス可能なバーチャルメソッドを示し、さらに図
10のフォーマットに一致させるために、クリアされる。バーチャルメソッド参
照194は、メソッドトークンも備える。
【0056】 最後に、図16は、内部メソッドのための、package visible
メソッドへのバーチャルメソッド参照196の表現を示している。バーチャルメ
ソッド参照196は、クラスコンポーネントおよびクラス情報構造へのオフセッ
トを備える。このフィールドは、参照のスコープがパッケージの内部であること
を示すように設定される。参照196は、メソッドトークンも備える。
【0057】 図17〜図31は、トークンを割り当てるため、そしてバーチャルメソッドテ
ーブルおよびインターフェースメソッドテーブルを構築するためのプロセスを示
したフローチャートである。これらのプロセスは、上述したように、コンバータ
72によって実行することができる。先ず、図17には、パッケージトークンを
割り当てるためのプロセス230が示される。一般に、CAPファイル内からの
パッケージ参照は、CAPファイル内でのみ使用される割り当てトークンである
【0058】 プロセス230は、先ず、インポートされたパッケージのリストを取得する(
ステップ231)。このリストはどんな順序であっても良い。次に、プロセス2
30は、インポートされているパッケージの数が、例えば127等の所定の閾値
を超えるか否かを決定する。この場合の127という限界値は、ハイビットを予
約した状態で、パッケージトークンを8ビットで表現するために使用される。イ
ンポートされたパッケージの数が、例えば127等の所定の閾値を超える場合、
このプロセスは失敗する(ステップ205)。
【0059】 あるいは、プロセス230は、カレントトークン値をゼロに初期化する(ステ
ップ233)。次に、プロセス230は、カレントパッケージをリスト中の第1
のパッケージに初期化する(ステップ234)。次いで、カレントパッケージが
nullであるか否かをチェックする(ステップ235)。カレントパッケージ
がnullでない場合、プロセス230は、カレントトークンをカレントパッケ
ージに割り当てる(ステップ236)。次に、プロセス230は、カレントトー
クン値を1だけ増分させ(ステップ237)、カレントパッケージをリスト中の
次のパッケージに設定する(ステップ238)。
【0060】 ステップ235では、カレントパッケージがnullであり、インポートされ
たパッケージはもう残されていないことが示された場合に、プロセス230は、
インポートコンポーネント内にトークンを記録して(ステップ239)終了する
。インポートされたパッケージ内のアイテムへの参照は、インポートコンポーネ
ント内に記録されたトークン値を使用して行われる。
【0061】 図18には、クラスおよびインターフェースのトークンを割り当てるためのプ
ロセス240が示される。プロセス240は、先ず、publicなクラスおよ
びインターフェースからなる任意順序のリストを取得する(ステップ241)。
次に、クラスおよびインターフェースの数が、8ビットで表現できる最大のクラ
ス数である256等の所定の値を超えるか否かをチェックする(ステップ242
)。所定の値を超える場合、プロセス240は失敗する(ステップ205)。そ
うでない場合、プロセス240は、カレントトークン値をゼロに初期化する(ス
テップ243)。また、カレントアイテムを、ステップ241で取得されたリス
ト中の第1のクラスまたはインターフェースに初期化する(ステップ244)。
次に、プロセス240は、カレントアイテムがnullであるか否かを決定する
(ステップ245)。Nullは、リストに、もうクラスまたはインターフェー
スが残されていないことを示す。カレントアイテムがnullでない場合、プロ
セス240は、クラスまたはインターフェースであるカレントアイテムに、カレ
ントトークン値を割り当てる(ステップ246)。次に、カレントトークン値を
1だけ増分させ(ステップ247)、カレントアイテムをリスト中の次のクラス
またはインターフェースに設定した後(ステップ248)、ステップ245にル
ープバックする。ステップ245では、カレントアイテムがnullであり、リ
ストにはもうクラスまたはインターフェースが残されていないことが示された場
合に、プロセス240は、エクスポートコンポーネントテーブル内にトークン値
を記録する(ステップ249)。プロセス240は、さらに、エクスポートファ
イル内でトークン値を発行して(ステップ251)終了する。
【0062】 図19および図20は、staticフィールドのトークンを扱ったものであ
り、このうち図20は、コンパイルタイムコンスタントをインラインすることに
よって、図19を最適化したものである。パッケージ内のexternally
visibleなstaticフィールドは、割り当てされたpublicト
ークンである。Package visibleでprivateなstati
cフィールドは、割り当てされたトークンではない。図20は、プロセス250
を最適化したものであるプロセス280を示す。この最適化において、トークン
は、コンパイルタイムコンスタントに初期化されたfinalなstaticフ
ィールドに割り当てられていない。この場合のフィールドは、カード上にはリン
クされない。
【0063】 図19には、staticフィールドのトークンをpublicなクラスまた
はインターフェース内で割り当てるためのプロセス250が示される。プロセス
250は、先ず、publicなクラスまたはインターフェース内のpubli
cおよびprotectedなstaticフィールドからなる任意順序のリス
トを取得する(ステップ252)。次に、プロセス250は、カレントトークン
値をゼロに設定し(ステップ254)、カレントフィールドをリスト中の第1の
staticフィールドに初期化する(ステップ256)。続いて、カレントフ
ィールドがnullであるか否かを決定する(ステップ258)。Nullとは
、もうフィールドが残されていないことを示す。カレントフィールドがnull
でない場合、プロセス250は、カレントトークン値をカレントフィールドに割
り当て(ステップ260)、カレントトークン値を1だけ増分させる(ステップ
262)。次いで、プロセス250は、カレントフィールドをリスト中の次のs
taticフィールドに設定した後(ステップ264)、ステップ258にルー
プバックする。
【0064】 ステップ258では、カレントフィールドがnullであり、もうフィールド
は残されていないことが示された場合に、プロセス250は、カレントトークン
が、8ビットで表現できる最大のトークン数である255等の所定の値を超える
か否かをチェックする(ステップ266)。所定の値を超える場合、プロセス2
50は失敗する(ステップ205)。そうでない場合、プロセス250は、もし
エクスポートコンポーネントが生成されるならば、エクスポートコンポーネント
テーブル内にトークン値を記録する(ステップ268)。最後に、プロセス25
0は、エクスポートファイル内でトークン値を発行する(ステップ270)。
【0065】 図20には、publicなクラスまたはインターフェース内におけるsta
ticフィールドトークンの割り当てを最適化するためのプロセス280が示さ
れる。この最適化では、コンパイルタイムコンスタントを排除し、バイトコード
内にインラインされているコンスタントで参照を置き換えることによって、メモ
リの消費量を減らす。プロセス280は、先ず、publicなクラスまたはイ
ンターフェース内のpublicおよびprotectedなstaticフィ
ールドのリストを取得する(ステップ282)。次に、プロセス280は、カレ
ントトークン値をゼロに設定し(ステップ284)、カレントフィールドをリス
ト中の第1のstaticフィールドに初期化する(ステップ286)。続いて
、カレントフィールドがnullである(もうフィールドは残されていない)か
否かを決定する(ステップ288)。カレントフィールドがnullでない場合
、プロセス280は、カレントフィールドがコンパイルタイムコンスタントであ
るか否かを決定する(ステップ290)。コンパイルタイムコンスタントである
場合、プロセス280は、カレントフィールドのトークン値として例えば0xFF等
の値を割り当てる(ステップ296)。あるいは、カレントフィールドがコンパ
イルタイムコンスタントでない場合、プロセス280は、カレントフィールドに
カレントトークン値を割り当てて(ステップ292)、カレントトークン値を1
だけ増分させる(ステップ294)。ステップ294および296からのプロセ
ス280では、カレントフィールドをリスト中の次のstaticフィールドに
設定した後(ステップ298)、ステップ288にループバックし、トークンの
処理を続行する。
【0066】 ステップ288では、カレントフィールドがnullであり、フィールドがも
う残されていないことが示された場合に、プロセスは、カレントトークンが、8
ビットで表現できる最大の数である255等の所定の値を超えるか否かをチェッ
クする(ステップ300)。所定の値を超える場合、プロセス280は失敗する
(ステップ205)。そうでない場合は、もしエクスポートするならば、トーク
ン値をエクスポートコンポーネント内に記録する(ステップ302)。次いで、
エクスポートファイル内で、コンパイルタイムコンスタントとともにトークン値
を発行し(ステップ304)、参照中のパッケージがそれぞれの値にインライン
できるようにした後、終了する。
【0067】 図21には、publicクラス内でstaticメソッドのトークンを割り
当てるためのプロセス310が示されている。プロセス310は、先ず、pub
licクラス内のpublicおよびprotectedなstaticメソッ
ドおよびコンストラクタのリストを取得する(ステップ312)。プロセス31
0は、次に、staticメソッドの数が、例えば256等の所定の値を超える
か否かを決定する(ステップ314)。所定の値を超えない場合、プロセスは、
トークン値をゼロに設定し(ステップ316)、カレンドメソッドをリスト中の
第1のstaticメソッドに初期化する(ステップ318)。次に、プロセス
310は、カレントメソッドがnullである(もう他のメソッドは残されてい
ない)か否かをチェックする(ステップ320)。カレントメソッドnullで
ない場合、プロセス310は、カレントトークン値をカレントstaticメソ
ッドに割り当てて(ステップ322)、カレントトークン値を1だけ増分させる
(ステップ324)。プロセス310は、次いで、カレントメソッドをリスト中
の次のstaticメソッドに設定した後(ステップ326)、ステップ320
にループバックする。
【0068】 ステップ320において、カレントフィールドがnullである(メソッドは
もう残されていない)場合、プロセスは、トークン値をエクスポートコンポーネ
ント内に記録し(ステップ328)、トークン値をエクスポートファイル内で発
行した後(ステップ330)、終了する。
【0069】 図22および図23は、インスタンスフィールドトークンの割り当てスキーム
に関する。図22は、フィールドトークンを割り当てるための一般的なプロセス
を示し、図23は、最適化されたプロセスの1つを示しており、トークンの割り
当てを、内部(またはpackage visibleおよびprivateな
)フィールドならびにタイプ参照のグループフィールドに拡張し、インスタンス
内のオフセットへと容易にトークンをマップすることを可能にしている。
【0070】 図22には、インスタンスフィールドトークンをpublicクラス内で割り
当てるためのプロセス340が示される。先ず、プロセス340は、publi
cクラス内のpublicおよびprotectedなインスタンスフィールド
のリストを取得する(ステップ342)。次いで、インスタンスフィールドの数
が例えば256等の所定値を超えるか否かをチェックし(ステップ344)、超
える場合は失敗する(ステップ205)。そうでない場合、プロセス340は、
カレントトークン値をゼロに設定し(ステップ346)、カレントフィールドを
リスト中の第1のフィールドに初期化する(ステップ348)。次に、プロセス
340は、カレントフィールドがnullであるか否かをチェックする(ステッ
プ350)。カレントフィールドがnullでない場合、プロセス340は、カ
レントトークン値をカレントインスタンスフィールドに割り当て(ステップ35
2)、カレントトークン値を1だけ増分させる(ステップ354)。ステップ3
54からは、カレントフィールドをリスト中の次のインスタンスフィールドに設
定した後(ステップ360)、ステップ350にループバックする。ステップ3
50からは、カレントフィールドがnullである場合に、エクスポートファイ
ル内でトークン値を発行して(ステップ362)終了する。
【0071】 図22の一般的なアプローチを最適化するに当たって様々な要因が考慮される
。トークンの順序は一般に柔軟であるので、トークンの配列は特定の実装形態に
適用することが可能である。図23は、以下の実施例で示されるように、コンス
トレインドな割り当てスキームを説明したものである。
【0072】
【表2】
【0073】 図23には、上述したインスタンスフィールトトークンの割り当てを最適化す
るためのプロセス370が示される。上述したように、プロセス370は、先ず
、クラス内の全インスタンスフィールドのリストを取得する(ステップ372)
。次に、プロセス370は、番号付けされたインスタンスフィールドの数が、例
えば256等の所定の値を超えるか否かをチェックする(ステップ374)。超
える場合、プロセス370は失敗し(ステップ205)、超えない場合は、第1
にpublicおよびprotectedなプリミティブ型を、第2にpubl
icおよびprotectedな参照型を、第3にpackageおよびpri
vateな参照型を、そして最後にpackageおよびprivateなプリ
ミティブ型を含むカテゴリに、リストをソートする(ステップ376)。トーク
ン値はゼロに設定され(ステップ378)、カレントフィールドはリスト中の第
1のインスタンスフィールドに初期化される(ステップ380)。次に、プロセ
ス370は、カレントフィールドがnullであるか否かをチェックする(ステ
ップ382)。カレントフィールドがnullでない場合、プロセスは、カレン
トトークン値をカレントフィールドに割り当て(ステップ384)、カレントト
ークン値を1だけ増分させる(ステップ386)。次に、プロセス370は、カ
レントフィールドがinteger型であるか否かを決定する(ステップ388
)。Integer型では、2つのスロットを使用することによって、インスタ
ンスに対してトークンを容易にマップすることを可能にしている。カレントフィ
ールドがinteger型である場合は、カレントトークン値が1だけ増分され
る(ステップ390)。ステップ388からは、カレントフィールドをリスト中
の次のインスタンスフィールドに設定した後(ステップ392)、ステップ38
2にループバックする。
【0074】 ステップ382からのプロセス370は、カレントフィールドがnullであ
る場合に、publicおよびprotectedなインスタンスフィールドの
トークン値をエクスポートファイル内で発行して(ステップ394)終了する。
【0075】 図24および図25では、バーチャルメソッドのためのトークンを割り当てる
。図24は、バーチャルメソッドトークンを割り当てるための一般的なスキーム
を示し、図25は、トークンの割り当てをpackage visibleバー
チャルメソッドに拡張した場合を示す。
【0076】 図24および図25には、バーチャルメソッドトークンを割り当てるためのプ
ロセスが示される。一般に、パッケージ内で定義されたバーチャルメソッドは、
エクスポート可能トークンまたは内部トークンのいずれかを割り当てられる。エ
クスポート可能なトークンは、publicおよびprotectedなバーチ
ャルメソッドに割り当てられ、この場合、トークンのハイビットはゼロである。
内部トークンは、package visibleバーチャルメソッドに割り当
てられ、この場合、トークンのハイビットは1である。ハイビットは保存される
ので、これらのトークンは0〜127の範囲(両端を含む)に渡る。
【0077】 あるクラス内における、導入されたexternally visibleバ
ーチャルメソッドのためのエクスポート可能トークンは、そのクラスのスーパー
クラスにおけるエクスポート可能バーチャルメソッドトークンの最大番号より1
つ大きい番号から順に番号付けられる。あるメソッドが、そのクラスのスーパー
クラス内に実装されたメソッドをオーバーライドする場合、そのメソッドは、そ
のスーパークラス内の対応するメソッドと同一番号のトークンを使用するので、
オーバーライドしたメソッドを、オーバーライドされた元のメソッドに関連して
いると識別することができる。
【0078】 内部のバーチャルメソッドトークンは、エクスポート可能なバーチャルメソッ
ドトークンとは異なる方法で割り当てられる。あるクラスおよびそのスーパーク
ラスが同一のパッケージ内で定義されている場合、そのクラスにおける、導入さ
れたpackage visibleバーチャルメソッドのためのトークンは、
そのクラスのスーパークラスにおける内部バーチャルメソッドの最大の番号より
1つ大きい番号から順に番号付けられる。そのクラスとスーパークラスとが異な
るパッケージ内で定義されている場合、そのクラスにおける導入されたpack
age visibleバーチャルメソッドは、ゼロから順に番号付けられる。
あるメソッドが、クラスのスーパークラス内に実装されたメソッドをオーバーラ
イドする場合、そのメソッドは、そのスーパークラス内における対応するメソッ
ドと同一番号のトークンを使用する。背景知識として、Javaプログラミング
言語は、package visibleバーチャルメソッドのオーバーライド
が、そのクラスとスーパークラスとがともに同じパッケージ内で定義されている
場合にのみ可能であることが指摘される。バーチャルメソッドトークンを含むバ
イトのハイビットは、それが内部トークンであることを示すように、常に1に設
定されている。クラス内における導入されたpackageバーチャルメソッド
トークンの順序は指定されていない。
【0079】 図24において、プロセス400は、先ず、クラス内のpublicおよびp
rotectedなバーチャルメソッドのリストを取得する(ステップ402)
。次いで、プロセス400は、このクラスがスーパークラスを有するか否かをチ
ェックする(ステップ404)。スーパークラスを有する場合、プロセス400
はさらに、そのスーパークラスが同一のパッケージ内にあるか否かをチェックす
る(ステップ406)。ステップ406において、スーパークラスが同一のパッ
ケージ内にある場合は、そのスーパークラスを検出し(ステップ408)、その
スーパークラスのバーチャルメソッドおよびトークンを取得する(ステップ41
2)。バーチャルメソッドのセットは、スーパークラスの全スーパークラスを定
義したものを含む。ステップ406において、スーパークラスが同一のパッケー
ジ内に含まれない場合は、プロセス400は、インポートされたパッケージのエ
クスポートファイル内でスーパークラスを検出し(ステップ410)、ステップ
412に進む。ステップ412からのプロセス400は、カレントトークン値を
最大のスーパークラスバーチャルメソッドトークンに初期化し、その値を1だけ
増分させる(ステップ414)ことによって、階層内でトークンが衝突しないよ
うにする。
【0080】 ステップ404において、クラスがスーパークラスを有さない場合、プロセス
400は、カレントトークン値をゼロに初期化する(ステップ416)。ステッ
プ414またはステップ416からのプロセス400は、カレントメソッドをリ
スト中の第1のバーチャルメソッドに初期化する(ステップ418)。次に、プ
ロセス400は、カレントメソッドがnullであるか否かを決定する(ステッ
プ420)。カレントメソッドnullでない場合、プロセスは、カレンドバー
チャルメソッドがスーパークラスによって定義されるか否かを決定する(ステッ
プ422)。カレントメソッドがnullである場合、メソッドはオーバーライ
ドメソッドであり、スーパークラス内のオーバーライドされた元のメソッドに割
り当てられたものと同一のトークン値をカレントメソッドに割り当てた後(ステ
ップ424)、ステップ420にループバックする。
【0081】 ステップ422において、カレントバーチャルメソッドがスーパークラスによ
って定義されない場合、そのメソッドは導入されたメソッドである。この場合の
プロセス400は、カレントトークン値をカレントメソッドに割り当て(ステッ
プ426)、カレントトークン値を1だけ増分させる(ステップ428)。プロ
セス400は、次いで、カレントメソッドをリスト中の次のメソッドに設定した
後(ステップ430)、ステップ420にループバックする。ステップ420に
おいて、カレントメソッドがnullである場合、プロセス400は、カレント
トークン値が例えば127等の所定の値を超えるか否かを決定する(ステップ4
32)。所定の値を超える場合、プロセス400は失敗する(ステップ205)
。そうでなくてトークン値が127以下である場合、プロセス400は、継承さ
れたメソッドおよびそれらのトークン値とともに、トークン値をエクスポートフ
ァイル内で発行した後(ステップ434)、終了する。図24のプロセスは、図
25に示すように、package visibleクラス内でpublicお
よびprotectedなバーチャルメソッドにトークンを割り当てる際にも使
用することができる。
【0082】 図25には、トークンの割り当てをクラス内のpackage visibl
eバーチャルメソッドに拡張するためのプロセス440が示される。プロセス4
40は、先ず、クラス内のpackage visibleバーチャルメソッド
のリストを取得する(ステップ442)。次いで、そのクラスがスーパークラス
を有するか否かをチェックする(ステップ444)。スーパークラスを有する場
合、プロセスはさらに、そのスーパークラスが同一のパッケージ内にあるか否か
をチェックする(ステップ446)。同一のパッケージ内にある場合は、その同
一のパッケージからスーパークラスを検出して(ステップ448)、そのスーパ
ークラスのpackage visibleバーチャルメソッドおよびトークン
を取得した後(ステップ450)、カレントトークン値を、そのスーパークラス
における最大のバーチャルメソッドトークンに1を加えた値に初期化することに
よって(ステップ452)、パッケージにスコープされた階層内でトークンが衝
突することを回避する。こうすることによって、スーパークラス内で既に割り当
てられたトークン値が、導入されたメソッドで再使用されないようにする。ここ
で、ステップ450は、同一パッケージ内の全スーパークラスに対して再帰的で
あることに注意が必要である。
【0083】 ステップ444からは、クラスがスーパークラスを有さない場合に、またはス
テップ446からは、スーパークラスが同一のパッケージ内にない場合に、プロ
セス440は、カレントトークン値をゼロに設定する(ステップ454)。特に
、スーパークラスが同一のパッケージ内にない場合、そのスーパークラスのpa
ckage visibleバーチャルメソッドはアクセス不可能であるので、
ステップ454には含まれない。これらの可能なメソッドは、図9D−2および
9D−3で述べたように、バーチャルメソッドへの参照をリゾルブする際に説明
される。
【0084】 ステップ452またはステップ454からのプロセス440は、カレントメソ
ッドをリスト中の第1のバーチャルメソッドに初期化する(ステップ456)。
次に、プロセス440は、カレントメソッドがnullであるか否かを決定する
(ステップ458)。カレントメソッドがnullでない場合、プロセス440
は、カレンドバーチャルメソッドがスーパークラスによって定義されるか否かを
決定する(ステップ460)。この場合のメソッドはオーバーライドメソッドで
ある。カレントメソッドがnullである場合、プロセス440は、スーパーク
ラス内のオーバーライドされた元のメソッドに割り当てられたものと同じトーク
ン値をカレントメソッドに割り当てた後(ステップ462)、ステップ458に
ループバックする。
【0085】 ステップ460において、カレントバーチャルメソッドがスーパークラスによ
って定義されない場合、そのメソッドは導入されたメソッドである。この場合の
プロセス440は、カレントトークン値をカレントメソッドに割り当てて、ハイ
ビットを1に設定する(ステップ464)。バーチャルメソッドトークンのハイ
ビットは、そのバーチャルメソッドトークンがpublicであるかpriva
teであるかを決定するために使用される。次に、プロセス440は、カレント
トークン値を1だけ増分させ(ステップ466)、カレントメソッドをリスト中
の次のメソッドに設定した後(ステップ468)、ステップ458にループバッ
クする。
【0086】 ステップ458においてカレントメソッドがnullである場合、プロセス4
40は、ステップ470において、カレントトークン値が例えば127(ハイビ
ットを保持した状態で8ビットで表現可能な最大の値)等の値を超えるか否かを
決定する上述した値を超える場合、プロセス440は失敗する(ステップ205
)。そうでなくてカレントトークン値が範囲内である場合、プロセス440は終
了する。ここで、package visibleバーチャルメソッドのための
トークンは、内部で使用されるのであってエクスポートはされないことに注意が
必要である。
【0087】 バーチャルメソッド参照は、実行中にのみリゾルブすることができる。バーチ
ャルメソッドテーブルによって、カードは、どのメソッドを呼び出すかをトーク
ンおよびメソッドクラスのインスタンスに基づいて決定することが可能になる。
トークン値は、バーチャルメソッドテーブルに対するインデックスとして使用さ
れる。図26は、クラス内でpublicバーチャルメソッドテーブルを構築す
るためのプロセス480を示している。先ず、クラス内のpublicおよびp
rotectedなバーチャルメソッドのリストが取得される(ステップ482
)。次に、プロセス480は、スーパークラスのバーチャルメソッドおよびトー
クンを取得する(ステップ484)。ステップ484は再帰的であり、このクラ
スの全スーパークラスを含む。次に、プロセス480は、テーブルを作成し、ト
ークン値によってバーチャルメソッドを順序付け(ステップ486)、重複した
バーチャルメソッドを排除する。重複は、オーバーライドされたメソッドに関し
て生成される。この場合、カレントクラス内で定義されたメソッドが、スーパー
クラス内で定義されたものに代わってメソッドテーブル内で表現される。次いで
、プロセス480は、ステップ488において、カウントを最大のバーチャルメ
ソッドトークンクラスに設定し、クラスコンポーネント内にテーブルおよびカウ
ントを記録した後(ステップ490)、終了する。
【0088】 図27には、クラス内のpublicバーチャルメソッドテーブルの構築を最
適化するプロセス500が示される。プロセス500は、スーパークラス内のバ
ーチャルメソッドテーブルのうち重複するエレメントを除去することによって、
バーチャルメソッドテーブルの格納に必要なサイズを小さくしている。
【0089】 プロセス500は、先ず、あるクラス内のpublicおよびprotect
edなバーチャルメソッドのリストを取得する(ステップ502)。次に、スー
パークラスのバーチャルメソッドおよびトークンを取得する(ステップ504)
。ステップ504は再帰的であり、このクラスの全スーパークラスを含む。次に
、プロセス500は、ステップ502および504において取得されたバーチャ
ルメソッドを、トークン値によって順序付けることによって、テーブルを初期化
する(ステップ506)。このプロセスは、少なくとも1つのエントリを有する
ことを想定している。次に、プロセス500は、カウントを、最大のバーチャル
メソッドトークンに1を加えた数に初期化する(ステップ508)。プロセス5
00は、また、ベースカウントをゼロに設定する(ステップ510)。次に、プ
ロセス500は、カウントが正であるか否かをチェックする(ステップ512)
。カウントが正である場合、プロセスは、テーブルの第1のエントリがカレント
クラスによって定義されるか否かをチェックする(ステップ514)。カウント
が正でない場合、プロセスは、そのメソッドをテーブルから除去し、残りのメソ
ッドをテーブルの上位へとシフトさせる(ステップ518)。次に、プロセス5
00は、カウントを1だけ減分させ(ステップ520)、ベースカウントを1だ
け増分させた後(ステップ522)、ステップ512にループバックする。
【0090】 ステップ514において、第1のエントリがカレントクラス内で定義される場
合、またはステップ512においてカウントがゼロである場合、プロセス500
は、そのクラスコンポーネントに、テーブル、カウント、およびベースを記録し
た後(ステップ516)、終了する。
【0091】 図28および図29は、publicインターフェース内でinterfac
eメソッドトークンを割り当てるためのプロセス524を示す。特に、図29は
、図28のステップ526をより詳細に示したものである。
【0092】 図28において、プロセス524は、publicインターフェース内でin
terfaceメソッドトークンを割り当てるものである。プロセス524は、
先ず、publicインターフェース内のinterfaceメソッドのセット
を取得する。次に、プロセス524は、このインターフェースのスーパーインタ
ーフェースのリストを取得する(ステップ526)。この動作は、図29におい
てより詳細に定義されている。プロセス524は、次いで、インターフェースお
よびそのスーパーインターフェースによって定義されるメソッドのセットをマー
ジする(ステップ527)。次に、プロセス524は、256を超える数のメソ
ッドが存在するか否かをチェックする(ステップ529)。256を超える場合
、プロセス524は失敗する(ステップ205)。そうでなくて256以下であ
る場合、プロセス524は、カレントトークン値をゼロに設定し(ステップ53
0)、カレントメソッドをメソッドセット中の第1のメソッドに初期化する(ス
テップ532)。次に、プロセス524は、カレントメソッドがnullである
か否かを決定する(ステップ533)。カレンドメソッドがnullでない場合
、プロセス524は、カレントトークン値をカレントインターフェースメソッド
に割り当てて(ステップ534)、カレントトークン値を1だけ増分させた後(
ステップ535)、カレントメソッドをセット中の次のメソッドに設定し(ステ
ップ536)、ステップ533にループバックする。
【0093】 ステップ533からのプロセス524は、カレントメソッドがnullである
場合に、インターフェースに関連付けられたスーパーインターフェースのリスト
と、メソッドトークン値とを、エクスポートファイル内で発行して(ステップ5
37)終了する。
【0094】 図29には、図28のステップ526によるプロセスがより詳細に示されてい
る。図29のプロセスでは、先ず、インターフェースを選択する(ステップ68
2)。次に、このインターフェースによって継承されたインターフェースのリス
トを取得し(ステップ684)、カレントインターフェースをリスト中の第1の
インターフェースに設定する(ステップ686)。図29のプロセスは、次に、
結果セットを空のセットに初期化する(ステップ688)。図29のプロセスは
、ステップ688からは、インターフェースを結果セットに繰り返し加えていく
。これは、カレントインターフェースがnullであるか否かをチェックするこ
とによって完了する(ステップ690)。カレントインターフェースがnull
であることは、すなわち、処理するべきインターフェースがもう存在しないこと
を示す。次に、プロセスは、カレントインターフェースのスーパーインターフェ
ースのセットを取得する(ステップ692)。ステップ692は、ステップ52
6のプロセスを再帰的に呼び出す。
【0095】 ステップ692を完了するに当たり、図29のプロセスは、スーパーインター
フェースのセットを結果セットに追加し(ステップ694)、カレントインター
フェースを結果セットに追加する(ステップ696)。プロセスは、次に、カレ
ントインターフェースを次のインターフェースに設定し(ステップ698)、ス
テップ690にループバックした後、全インターフェースの処理を続行する。ス
テップ690からの図29のプロセスは、カレントインターフェースがnull
である場合に、結果セットを戻して終了する。
【0096】 インターフェーステーブルは、クラスによって直接実装される各インターフェ
ースおよび直接実装されるこれらインターフェースの全スーパーインターフェー
スのためのエントリを含む。インターフェーステーブル内の各エントリは、イン
ターフェースの識別と、インターフェースメソッドテーブルとを含む。テーブル
は、インターフェースメソッド宣言を、クラス内での実装に対してマップする。
【0097】 図30および図31は、クラスのインターフェーステーブルを構築するための
プロセス700を示している。特に、図31は、図30のステップ708をより
詳細に示したものである。
【0098】 図30には、インターフェーステーブルを構築するためのプロセス700が示
されている。先ず、プロセス700は、カレントクラスによって実装される、ス
ーパーインターフェースを含む(ステップ526を参照)インターフェースのリ
ストを取得する(ステップ702)。次に、プロセス700は、カレントインタ
ーフェースをこのセット中の第1のインターフェースに設定する(ステップ70
4)。プロセス700は、次いで、カレントインターフェースがnullである
か否かをチェックする。カレントインターフェースがnullであることは、す
なわち、カレントインターフェースが終わったことを示す。カレントインターフ
ェースがnullでない場合、プロセス700は、図31で詳細に示すように、
カレントインターフェースのためのインターフェースメソッドテーブルを、この
クラスのために構築する(ステップ708)。次に、プロセス700は、カレン
トインターフェースを次のインターフェースに設定した後(ステップ710)、
ステップ706にループバックする。
【0099】 ステップ706からのプロセス700は、カレントインターフェースがnul
lである場合に、クラスコンポーネント内のインターフェースメソッドテーブル
とともにインターフェースを記録した後(ステップ712)、終了する。
【0100】 図31には、ステップ708によるプロセスがより詳細に示される。このプロ
セスは、先ず、クラスのためのバーチャルメソッドテーブルを取得し(ステップ
722)、継承されたメソッドを含む、インターフェースメソッドおよびそのイ
ンターフェースのためのトークンを取得する(ステップ724)。次に、図31
のプロセスは、トークン値によってメソッドを順序付けることによって、インタ
ーフェースメソッドテーブルを初期化する(ステップ726)。次に、プロセス
は、カレントメソッドをインターフェースメソッドテーブル中の第1のメソッド
に設定する(ステップ728)。プロセス728からのプロセスは、カレントメ
ソッドがnullであるか否かをチェックする(ステップ730)。カレントメ
ソッドがnullであることは、すなわち、カレントメソッドが終わったことを
示す。カレントメソッドがnullでない場合、図31のプロセスは、バーチャ
ルメソッドテーブル内でインターフェースメソッドの実装を検出する(ステップ
732)。次に、プロセスは、バーチャルメソッドのトークン値を、インターフ
ェースメソッドテーブル内のカレントメソッドの位置に記録する(ステップ73
4)。次いで、カレントメソッドをカレントインターフェース中の次のメソッド
に設定した後(ステップ736)、ステップ730にループバックする。ステッ
プ730では、カレントメソッドがnullである場合に、図31のプロセスを
終了する。
【0101】 続く図32〜9Cでは、実行中におけるエレメントのダイナミックバインディ
ング(動的束縛)を説明する。これらの図は、ダイナミックエレメントへの参照
のリゾリューションを示したものである。コンパイル、変換、およびトークンの
割り当て時においては、インスタンスフィールド、バーチャルメソッド、および
インターフェースメソッドへの参照を、特定の実装にリゾルブすることはできず
、そのアイテムのabstractディスクリプションにリゾルブすることしか
できない。
【0102】 インスタンスフィールドの場合は、クラス定義のスコープ内でトークンが割り
当てられる。クラスのインスタンスは、そのクラスによって定義されるフィール
ドだけでなく、そのクラスの全スーパークラスによって定義されるフィールドも
全て含む。トークンは、インスタンス内におけるフィールドのロケーションを示
すものではない。これは、トークンが、インスタンスの特定のレイアウトを反映
することも、スーパークラスによって定義されたprivateおよびpack
age visibleなフィールドのロケーションを説明することもできない
ためである。
【0103】 バーチャルメソッドの場合は、コンパイル時および変換時において、名前およ
び型シグネチャ、ならびにこのようなメソッドを実装する階層内のクラスが既知
である。しかしながら、厳密な実装は、実行時、すなわちメソッドが呼び出され
るインスタンスの特定のクラスを決定することが可能になる時まで知ることはで
きない。例えば、クラスAおよびそのスーパークラスBが、ともにメソッド定義
Mを実装するとする。この場合、コンパイルタイム型Bのインスタンス上にメソ
ッドMを呼び出した結果、クラスAまたはクラスBの実装の実行が引き起こされ
るか否かは、実行時まで知ることはできない。
【0104】 実行中において、バーチャルメソッドの呼び出しを適切にディスパッチする手
段を提供するため、バーチャルメソッドトークンの割り当てを、クラス階層内に
スコープして行う。すなわち、スーパークラス継承チェーンに事前に導入された
メソッドをオーバーライドするサブクラスのメソッドは、オーバーライドされる
元のメソッドと同じトークン値を有さなければならない。また、導入されたメソ
ッド(スーパークラス内で定義されたメソッドをオーバーライドするのではない
メソッド)は、継承チェーン内で固有のトークン値を有さなければならない。各
クラスに対してバーチャルメソッドテーブルを定義することによって、バーチャ
ルメソッドトークンを特定の実装へとマッピングするための手段が提供される。
【0105】 インターフェースメソッドは、特定の実装を実行時まで知ることができないと
いう点において、バーチャルメソッドと類似しているが、複数のインターフェー
スから継承可能であるという点が異なる。インターフェースの多重継承は、バー
チャルメソッドトークンの割り当て方に関して問題を生じる。複数の定義は全て
異なる値を有し得るので、2つ以上のインターフェースに導入されたメソッドを
オーバーライドするクラスメソッドは、オーバーライドされた元のメソッドと同
じトークン値を必ずしも有する必要はない。したがって、特定のインターフェー
スに対する各メソッドセットは、他のインターフェースのメソッドのトークン値
に関係なくトークン値を割り当てられる。
【0106】 インターフェース間ではトークン値を共有しないので、インターフェースメソ
ッドの呼び出しを特定のメソッドの実装へとディスパッチするためには、追加情
報が必要になる。インターフェースメソッドトークンは、1つのインターフェー
スのスコープ内において固有であるので、インターフェースメソッドトークンお
よびインターフェース識別は、ともに、実行時にインスタンスのクラスによって
実装されるメソッドを決定するために必要である。各クラスに関して、インター
フェース識別をインターフェースメソッドテーブルに対してマップするインター
フェーステーブルが定義される。インターフェースメソッドテーブルは、そのイ
ンターフェースのためのインターフェースメソッドトークンを、そのクラスにお
けるメソッドの実装に対してマップする。
【0107】 図32〜図36は、実行中にトークンをリゾルブするためのプロセスを示した
フローチャートである。図32には、インスタンスフィールドをリゾルブするた
めのプロセス580が示される。先ず、プロセス580は、フィールドを含むイ
ンスタンスをランタイムスタックから取得する(ステップ582)。次に、プロ
セス580は、そのフィールドに関連付けられたトークンを決定し、そのトーク
ンをインデックスに対してマップする(ステップ584)。インデックスに対す
るトークンのマッピングでは、インスタンスフィールド型情報の検査が必要とさ
れる。この動作は、さらに、スーパークラスのインスタンスのサイズによってト
ークン値を調整する必要もある。最後に、プロセス580は、インデックスを使
用してインスタンス内でフィールドの表現を検出した後(ステップ586)、終
了する。
【0108】 図33には、publicまたはprotectedなバーチャルメソッドへ
の参照をリゾルブするためのプロセス620が示される。先ず、プロセス620
は、あるクラスのインスタンスをランタイムスタックから取得し(ステップ62
1)、そのインスタンスのクラスを決定する(ステップ622)。次に、プロセ
ス620は、そのクラスのpublicバーチャルメソッドテーブルにアクセス
し(ステップ624)、メソッドトークンをインデックスとして使用して、メソ
ッドテーブルエントリを取得する(ステップ626)。最後に、プロセス620
は、エントリのコンテンツに基づいて、バーチャルメソッドテーブル内でメソッ
ドを検出および実行した後(ステップ628)、終了する。
【0109】 図34には、任意のバーチャルメソッド(package visibleの
ものを含む)への参照をリゾルブするためのプロセス600が示される。先ず、
プロセス600は、あるクラスのインスタンスをランタイムスタックから取得し
(ステップ601)、そのインスタンスのクラスを決定する(ステップ602)
。次に、プロセス600は、メソッドトークンのハイビットが1に設定されてい
るか否かを決定する(ステップ604)。1に設定されていない場合、プロセス
600は、publicバーチャルメソッドテーブルを取得し(ステップ606
)、バーチャルメソッドテーブルへのインデックスとしてメソッドトークンを使
用する(ステップ608)。ステップ604からのプロセス600では、メソッ
ドトークンのハイビットが1に等しい場合に、ハイビットをゼロに設定し(ステ
ップ610)、packageバーチャルメソッドテーブルを取得した後(ステ
ップ612)、ステップ608に進む。最後に、プロセス600は、エントリの
コンテンツに基づいて、バーチャルメソッドテーブル内でメソッドを検出および
実行した後(ステップ614)、終了する。
【0110】 図35には、図27で説明した最適化されたバーチャルメソッドテーブルを使
用し、任意のバーチャルメソッドへの参照をリゾルブするための、最適化された
プロセス670が示される。先ず、プロセス670は、あるクラスのインスタン
スをランタイムスタックから取得し(ステップ671)、カレントクラスを、そ
のインスタンスのクラスになるように設定する(ステップ672)。メソッドテ
ーブルインデックスは、メソッドトークン値に初期化される(ステップ674)
。次に、プロセス670は、メソッドトークンのハイビットが1に等しいか否か
を決定する(ステップ676)。ハイビットが1でない場合、プロセス670は
、ベース値を、カレントクラスのpublicメソッドテーブルのベースに設定
する(ステップ678)。次に、メソッドテーブルを、カレントクラスのpub
licバーチャルメソッドテーブルに設定する(ステップ680)。次に、プロ
セス670は、メソッドテーブルインデックスがベース値未満であるか否かを決
定し(ステップ682)、もしベース値未満である場合は、カレントクラスを、
そのカレントクラスのスーパークラスになるように設定する(ステップ684)
。プロセス670は、ステップ684からステップ676にループバックして処
理を続行する。
【0111】 ステップ676において、ハイビットが1に等しい場合、プロセス670は、
メソッドテーブルインデックスのハイビットをゼロに設定する(ステップ690
)。プロセスは、さらに、ベース値をカレントクラスのpackageメソッド
テーブルベースに設定し(ステップ692)、メソッドテーブルをカレントクラ
スのpackageメソッドテーブルに設定した後(ステップ694)、ステッ
プ682へと続く。
【0112】 ステップ682において、メソッドテーブルインデックスがベースより大きい
場合、プロセス670は、メソッドテーブルインデックスにベース値を加えたも
のを使用することによって、メソッドテーブルエントリを取得する(ステップ6
86)。次に、プロセス670は、エントリのコンテンツに基づいて、カレント
クラスのメソッドテーブル内でメソッドを検出する(ステップ688)。続いて
、プロセス670は終了する。
【0113】 図36には、インターフェースメソッド参照をリゾルブするためのプロセス6
50が示される。先ず、プロセス650は、あるクラスのインスタンスをランタ
イムスタックから取得し(ステップ651)、カレントクラスを、そのインスタ
ンスのクラスに設定する(ステップ652)。次に、プロセス650は、カレン
トクラスのインターフェーステーブル内で、所定のインターフェースをサーチす
る(ステップ654)。次に、プロセスは、インターフェースが検出されたか否
かを決定する(ステップ656)。検出されていない場合は、カレントクラスを
カレントクラスのスーパークラスに設定した後(ステップ660)、ステップ6
54にループバックする。
【0114】 ステップ656において、所定のインターフェースが検出された場合、プロセ
ス650は、カレントクラス内の対応するインターフェースメソッドテーブルを
取得する(ステップ662)。次に、テーブル内のエントリから、インデックス
がインターフェースメソッドトークンに等しいバーチャルメソッドトークンを取
得する(ステップ664)。次に、プロセス650は、このインスタンスのクラ
スのpublicバーチャルメソッドテーブルを取得する(ステップ666)。
プロセス650は、テーブル内のエントリから、バーチャルメソッドトークンに
関連付けられたバーチャルメソッドロケーションを取得する(ステップ668)
。次に、プロセス650は、エントリのコンテンツに基づいて、バーチャルメソ
ッドテーブル内でメソッドを検出する(ステップ669)。こうしてプロセス6
50は終了する。
【0115】 以上では、スマートカードの実装に関連して本発明を説明したが、本発明は、
メモリ、計算力、または計算速度が限られたデバイスなどの、フットプリントが
小さい他のデバイスにも適用される。リソースが限られたこのようなデバイスと
しては、境界スキャンデバイス、フィールドプログラマブルデバイス、ポケット
ベル、および携帯電話等を含むことができる。本発明は、オブジェクトを共有す
るサーブレットを使用する場合に有利であることがわかる。また、特定のデスク
トップシステムにおいて本発明の技術を利用しても良い。
【0116】 本発明は、また、これらの動作を実行するための装置に関する。この装置は、
必要な目的に応じて構築されても良いし、コンピュータに格納されたコンピュー
タプログラムによって選択的にアクティベイトまたは再構成される汎用コンピュ
ータであっても良い。ここで開示した手続きは、特定のコンピュータまたはその
他の装置のみに関連するものではない。ここで開示された内容にしたがって書か
れたプログラムとともに、様々な汎用マシンを使用しても良いし、必要なステッ
プを実行するために、より特殊化された装置を構築する方が好都合な場合もある
。これらの様々なマシンで必要とされる構造に関しては、本明細書の説明から知
ることができる。さらに、本発明に一致したバーチャルマシンが、『Java(登録
商標)Virtual Machine Specification(Java(登録商標)バーチャルマシ
ン仕様)』に記述されたバーチャルマシン等の従来のバーチャルマシンを超える
機能を提供できることがわかる。
【0117】 本発明には、Java(登録商標)プログラミング言語およびプラットフォー
ムが適しているが、一定の特徴を有したあらゆる言語またはプラットフォームが
本発明の実現に適している。上述した特徴は、型の安全性、ポインタの安全性、
オブジェクト指向性、ダイナミックリンクであること、そしてバーチャルマシン
ベースであることを含む。特定の実装にこれら全ての特徴が現われる必要はない
。実施形態によっては、これらの特徴のうち1つまたはそれ以上の特徴を欠く言
語またはプラットフォームを利用しても良い。「バーチャルマシン」は、ビット
(バーチャルマシン)またはシリコン(リアル/物理マシン/特注集積回路)の
いずれで実装することも可能である。また、以上では、オブジェクト単位のセキ
ュリティを示す形で本発明を説明したが、クラス単位のセキュリティ等の他のア
プローチを利用することもできる。
【0118】 本発明のシステムは、ハードウェアまたはコンピュータプログラム内で実装さ
れても良い。各コンピュータプログラムを、汎用または特殊目的のプログラマブ
ルなコンピュータによって読み出し可能なストレージメディアまたはデバイス(
例えば、CD−ROM、ハードディスク、または磁気ディスケット)に格納する
ことによって、このストレージメディアまたはデバイスが、ここで開示した手続
きを実行する目的でコンピュータによって読み出された際に、コンピュータを構
成して動作させることが可能になる。また、コンピュータプログラムとともに構
成されたコンピュータ読み出し可能ストレージメディアとして、システムを実装
しても良い。このように構成されたストレージメディアは、コンピュータを、事
前に定義された特殊な方法で動作させる。
【0119】 ここで言うプログラムとは、一般に、所望の結果を導く首尾一貫した一連のス
テップだと考えられる。これらのステップは、物理量の物理的操作を必要とする
。これらの量は、必然ではないものの、格納、転送、結合、比較、およびその他
の操作が可能な電気または磁気信号の形態をとるのが通常である。これらの信号
は、主に共通利用の理由から、ビット、値、エレメント、シンボル、文字、用語
、番号等々として引用されると好都合である。しかしながら、これらおよび類似
の用語は、適切な物理量に関連付けられるべきものであって、これらの物理量に
適用された便利なラベルに過ぎないことに、注意する必要がある。
【0120】 以上では、実施形態に関連させて本発明の説明を行ったが、当業者ならば、添
付した特許請求の範囲の趣旨および範囲から逸脱しない範囲内で、形態および詳
細に関する上述したおよびその他の変更が可能であることを、理解することがで
きる。
【0121】 その他の実施形態は、添付した特許請求の範囲の範囲に含まれる。
【図面の簡単な説明】
【図1】 ハードウェアプラットフォームに依存しないコードのスマートカードへの変換
とロードを示す図。
【図2】 図1のスマートカードと通信するコンピュータシステムを示す図。
【図3】 パッケージ間の依存を示す図。
【図4】 2つの変換器の動作を示す図。
【図5】 2つの変換器の動作を示す図。
【図6】 2つのパッケージとstatic参照を決定するためのパッケージレジストリ
を示す図。
【図7】 図6のパッケージに関するリンクプロセスを示すフローチャート。
【図8】 様々なクラス、フィールド、メソッドの参照を示す図。
【図9】 様々なクラス、フィールド、メソッドの参照を示す図。
【図10】 様々なクラス、フィールド、メソッドの参照を示す図。
【図11】 様々なクラス、フィールド、メソッドの参照を示す図。
【図12】 様々なクラス、フィールド、メソッドの参照を示す図。
【図13】 様々なクラス、フィールド、メソッドの参照を示す図。
【図14】 様々なクラス、フィールド、メソッドの参照を示す図。
【図15】 様々なクラス、フィールド、メソッドの参照を示す図。
【図16】 様々なクラス、フィールド、メソッドの参照を示す図。
【図17】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図18】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図19】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図20】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図21】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図22】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図23】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図24】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図25】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図26】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図27】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図28】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図29】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図30】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図31】 トークンと割り当て、テーブルをサポートするプロセスを示すフローチャート
【図32】 インスタンスフィールドおよびメソッドに対してトークンを決定するプロセス
を示すフローチャート。
【図33】 インスタンスフィールドおよびメソッドに対してトークンを決定するプロセス
を示すフローチャート。
【図34】 インスタンスフィールドおよびメソッドに対してトークンを決定するプロセス
を示すフローチャート。
【図35】 インスタンスフィールドおよびメソッドに対してトークンを決定するプロセス
を示すフローチャート。
【図36】 インスタンスフィールドおよびメソッドに対してトークンを決定するプロセス
を示すフローチャート。
【符号の説明】
9…バーチャルマシン 10…クラスファイル 12…エクスポートファイル 14…コンバータ 16…変換アプレットファイル 17…コンピュータ読み取り可能な媒体 18…定数プールコンポーネント 20…メソッドコンポーネント 22…ターミナル 24…カードアクセプタンスデバイス 26…インストレーションツール 40…スマートカード 42…入出力 44…コントローラ 45…ネットワーク 46…インストレーションツール 48…マイクロプロセッサ 49…Javaカードバーチャルマシン 50…Java言語フレームワーク 52…ROM 52…Javaカードフレームワーク 54…EEPROM 54…カスタムフレームワーク 56…アプレット1 58…アプレット2 59…RAM 60…アプレット3 70…クラスファイル 72…コンバータ 74…CAPファイル 78…定数プール 78…エクスポートコンポーネント 80…エクスポートファイル 80…メソッドコンポーネント 82…エクスポートコンポーネント 84…トークン値 86…プログラムエレメントリンク情報 90…記号名 92…トークン値 92…クラスファイル 94…クラスファイル 94…エクスポートファイル 97…コンバータ 100…CAPファイル 102…ヘッダコンポーネント 104…インポートコンポーネント 104…インポートコンポーネント 106…マッピング 108…定数プール 108…定数プール 110…クラス参照 112…メソッド参照 114…staticフィールド参照 120…パッケージレジストリ 140…リンクプロセス 174…P1のイメージ 176…ヘッダコンポーネント 178…定数プール 180…メソッドコンポーネント 180…外部クラス参照 182…エクスポートコンポーネント 182…外部フィールド参照 184…外部メソッド参照 185…トークンのリスト 186…内部クラス参照 188…staticフィールド参照 190…staticメソッド参照 192…インスタンスフィールド参照 194…バーチャルメソッド参照 196…バーチャルメソッド参照 200…P2のイメージ 202…ヘッダコンポーネント 204…インポートコンポーネント 208…定数プール 216…メソッドコンポーネント
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,SD,SL,SZ,TZ,UG,ZW ),EA(AM,AZ,BY,KG,KZ,MD,RU, TJ,TM),AE,AL,AM,AT,AU,AZ, BA,BB,BG,BR,BY,CA,CH,CN,C R,CU,CZ,DE,DK,DM,EE,ES,FI ,GB,GD,GE,GH,GM,HR,HU,ID, IL,IN,IS,JP,KE,KG,KP,KR,K Z,LC,LK,LR,LS,LT,LU,LV,MA ,MD,MG,MK,MN,MW,MX,NO,NZ, PL,PT,RO,RU,SD,SE,SG,SI,S K,SL,TJ,TM,TR,TT,TZ,UA,UG ,UZ,VN,YU,ZA,ZW (72)発明者 シュワーベ・ジュディス・イー. アメリカ合衆国 カリフォルニア州94401 サン・マテオ,#2708,イースト・サー ド・アベニュー,1600 (72)発明者 ササー・ジョシュア・ビー. アメリカ合衆国 カリフォルニア州94114 サン・フランシスコ,ドーランド・スト リート,216 Fターム(参考) 5B035 AA01 BB09 CA11 5B076 BA00 BA01 BA10 BB11 BB17

Claims (42)

    【特許請求の範囲】
  1. 【請求項1】 少なくとも1つの参照可能なアイテムを持つ少なくとも1つ
    のパッケージに分割可能なコードをリソースの限られたコンピュータにダウンロ
    ードするための方法であって、 前記パッケージを形成するステップと、 対応するトークンに対する前記参照可能なアイテムのマッピングを形成するス
    テップと、 前記パッケージと前記マッピングを提供するステップと、 を含む、方法。
  2. 【請求項2】 請求項1の方法であって、前記マッピングのステップはさら
    に、1つまたは複数のトークン型を生成するステップを含み、1つのトークン型
    はパッケージ、クラス、staticフィールド、staticメソッド、イン
    スタンスフィールド、バーチャルメソッドの1つに関連する内部トークン型であ
    る、方法。
  3. 【請求項3】 請求項1の方法であって、前記マッピングのステップはさら
    に、1つまたは複数のトークン型を生成するステップを含み、1つのトークン型
    はインスタンスフィールド、バーチャルメソッド、インターフェースメソッドの
    1つに関連する外部トークン型である、方法。
  4. 【請求項4】 前記いずれかの請求項に記載の方法であって、前記パッケー
    ジは1つまたは複数の参照型を含む、方法。
  5. 【請求項5】 請求項4の方法であって、前記参照型の1つは以下のグルー
    プから選択される、方法。 インポートされたクラスのためのクラス参照、 インポートされたフィールドのためのフィールド参照、 インポートされたメソッドのためのメソッド参照、 内部クラスのためのクラス参照、 内部フィールドのためのstaticフィールド参照、 内部メソッドのためのstaticメソッド参照、 内部フィールドのためのインスタンスフィールド参照、 バーチャルメソッド参照、 package visibleメソッドへのバーチャルメソッド参照。
  6. 【請求項6】 前記いずれかの請求項に記載の方法であってさらに、パッケ
    ージトークン、クラストークン、インターフェーストークン、staticフィ
    ールドトークン、staticメソッドトークン、インスタンスフィールドトー
    クン、publicバーチャルメソッドトークン、インターフェースメソッドト
    ークンの1つを割り当てるステップを含む、方法。
  7. 【請求項7】 請求項6の方法であって、staticフィールドトークン
    はコンスタントに割り当てられない、方法。
  8. 【請求項8】 請求項6の方法であって、前記割り当てられたトークンはフ
    ィールドトークンであり、前記方法はさらに、クラスのインスタンスフィールド
    のリストを決定するステップと、前記リストを1つもしくは複数のカテゴリに分
    類するステップとを含む、方法。
  9. 【請求項9】 請求項8の方法であって、前記リストは複数のカテゴリに分
    類され、少なくとも2つの前記カテゴリは以下のグループから選択される、方法
    。 private、protectedプリミティブ型、protected参
    照型、パッケージ、private参照型、privateプリミティブ型。
  10. 【請求項10】 請求項1の方法であってさらに、クラスインターフェース
    用のインターフェーステーブルとインターフェースメソッドテーブルの1つを構
    築するステップを含む、方法。
  11. 【請求項11】 請求項1の方法であってさらに、少なくとも1つのメタデ
    ータと1つまたは複数のトークンを含むエクスポートファイルを含む、方法。
  12. 【請求項12】 請求項1の方法であって、前記参照可能なアイテムはメタ
    データによって記述され、前記メタデータはパッケージ、クラス、フィールド、
    メソッドの1つに関連する、方法。
  13. 【請求項13】 請求項1の方法であって、前記パッケージは、 1つまたは複数のアイテムを参照する実行可能なコンポーネントと、 前記1つまたは複数のアイテムへの参照をリゾルブするためのエクスポートコ
    ンポーネントと、 を含む、方法。
  14. 【請求項14】 CAPファイルを生成するための方法であって、 少なくとも1つはクラスに属する1つまたは複数の前記CAPファイル内のア
    イテムへの参照をリゾルブするステップと、 前記CAPファイルに関するエクスポートコンポーネントを生成するステップ
    と、 前記クラスのためのインターフェーステーブルを構築するステップと、 を含む、方法。
  15. 【請求項15】 請求項50の方法であって、前記テーブルはバーチャルメ
    ソッド、インターフェース、フィールドの1つに関する情報を含む、方法。
  16. 【請求項16】 少なくとも1つの外部アイテムへの参照を持つ少なくとも
    1つのパッケージに分割可能であり、リソースの限られたコンピュータにダウン
    ロードされたコードをリンクするための方法であって、 前記パッケージを受け取るステップと、 トークンへの前記参照可能なアイテムの前記対応する参照されたアイテムに対
    するマッピングを受け取るステップと、 前記マッピングを用いて前記パッケージをリンクするステップと、 を含む、方法。
  17. 【請求項17】 スマートカードであって、 プロセッサと、 前記プロセッサに接続されたメモリと、 前記プロセッサに接続され、トークンを用いて第2のパッケージ内のアイテム
    を参照するバイトコードを含む第1のパッケージをダウンロードすることが可能
    であるインターフェースと、 前記アイテムへの前記参照をリゾルブし、前記第1および第2のパッケージの
    前記バイトコードをリンクするために、前記メモリに記憶されたインストーラと
    、 前記リンクされたバイトコードを実行するためのバーチャルマシンと、 を備える、スマートカード。
  18. 【請求項18】 リソースの限られたデバイスであって、 プロセッサと、 前記プロセッサに接続され、トークンを用いて第2のパッケージ内のアイテム
    を参照するコードを含む第1のパッケージをダウンロードすることが可能である
    メモリデバイスと、 前記トークンを用いて前記アイテムへの前記参照をリゾルブし、前記第1およ
    び第2のパッケージの前記コードをリンクするためのインストーラと、 前記リンクされたコードを実行するためのバーチャルマシンと、 を備える、デバイス。
  19. 【請求項19】 請求項17または18のスマートカードであって、前記ア
    イテムはテーブルに示されたクラスインターフェースを用いて参照される、スマ
    ートカード。
  20. 【請求項20】 請求項17〜19いずれか記載のスマートカードであって
    、前記アイテムはメソッドである、スマートカード。
  21. 【請求項21】 請求項17〜20いずれか記載のスマートカードであって
    さらに、前記プロセッサによって実行されるオペレーティングシステムを備える
    、スマートカード。
  22. 【請求項22】 請求項17〜21いずれか記載のスマートカードであって
    、前記パッケージはライブラリとアプレットの1つである、スマートカード。
  23. 【請求項23】 請求項17または18のスマートカードであってさらに、
    リモートプロセッサ上で動作し、前記インターフェースを通しての伝送に適合し
    た1つまたは複数のパッケージにアプレットを変換するコンバータを備える、ス
    マートカード。
  24. 【請求項24】 1つまたは複数の参照可能なアイテムを持つ1つまたは複
    数のパッケージに分割可能であり、リソースの限られたコンピュータにダウンロ
    ードされたアーキテクチャニュートラルなコードをリンクするための方法であっ
    て、 対応する1つまたは複数のトークンに前記1つまたは複数の参照可能なアイテ
    ムをマッピングするステップと、 ランタイムモードに該当する前記トークンを配列するステップと、 前記パッケージを前記リソースの限られたコンピュータにダウンロードするス
    テップと、 前記配列されたトークンを用いて前記パッケージを実行可能なコードにリンク
    するステップと、 を含む、方法。
  25. 【請求項25】 請求項24の方法であって、さらに、 遠隔のコンピュータに記憶されたエクスポートファイル内に前記マッピングを
    記述するステップと、 前記エクスポートファイルに基づき、前記遠隔のコンピュータ上で前記パッケ
    ージを生成するステップと、 を含む、方法。
  26. 【請求項26】 請求項25の方法であって、さらに、各パッケージにトー
    クンを割り当てるステップを含む、方法。
  27. 【請求項27】 請求項25の方法であって、さらに、1つまたは複数のp
    rivateインターフェースクラスとインターフェースに対してトークンを割
    り当てるステップを含む、方法。
  28. 【請求項28】 請求項27の方法であって、さらに、各々のpublic
    staticフィールド、staticメソッド、インスタンスフィールド、
    バーチャルメソッド、インターフェースメソッドに対してトークンを割り当てる
    ステップを含む、方法。
  29. 【請求項29】 請求項25の方法であって、さらに、前記エクスポートフ
    ァイル内で前記トークンを発行するステップを含む、方法。
  30. 【請求項30】 請求項27の方法であって、さらに、インプリメンテーシ
    ョンメソッドトークンに対してインターフェースメソッドトークンをマッピング
    するステップを含む、方法。
  31. 【請求項31】 請求項30の方法であって、前記アイテムはクラスインタ
    ーフェースであり、さらに、前記クラスに実装された各インターフェースのため
    のインターフェースメソッドのリストを生成するステップを含む、方法。
  32. 【請求項32】 請求項31の方法であって、さらに、 前記クラスもしくはスーパークラス内でのメソッドの実装を位置指定するステ
    ップと、 前記メソッドに関するトークンを取得するステップと、 前記インプリメンテーションメソッドと前記インターフェースメソッドトーク
    ンを関連付けるステップと、 を含む、方法。
  33. 【請求項33】 請求項25の方法であって、前記生成ステップは、さらに
    、クラスファイルと前記エクスポートファイルをダウンロード可能なファイルに
    変換するステップを含み、前記ダウンロードファイルは変換されたアプレットフ
    ァイルとライブラリファイルの1つである、方法。
  34. 【請求項34】 請求項33の方法であって、さらに、前記パッケージをイ
    ンストールするステップを含む、方法。
  35. 【請求項35】 請求項24の方法であって、前記リンクステップは前記ダ
    ウンロードステップ中に実行される、方法。
  36. 【請求項36】 請求項35の方法であって、前記リンクステップは部分リ
    ンクステップを含む、方法。
  37. 【請求項37】 請求項24の方法であって、前記リンクステップは1つの
    連続的な動作で実行される、方法。
  38. 【請求項38】 請求項24の方法であって、さらに、前記ランタイムモー
    ドで前記実行可能なコードを実行するステップを含む、方法。
  39. 【請求項39】 請求項38の方法であって、前記リンクステップは前記実
    行前に実行される、方法。
  40. 【請求項40】 請求項38の方法であって、前記実行ステップと前記リン
    クステップは同時に実行される、方法。
  41. 【請求項41】 1つまたは複数の参照可能なアイテムを持つ1つまたは複
    数のパッケージに分割可能であり、リソースの限られたコンピュータにダウンロ
    ードされたアーキテクチャニュートラルなコードをリンクするための命令を運ぶ
    搬送波であって、以下の命令を含む搬送波。 対応する1つまたは複数のトークンに前記1つまたは複数の参照可能なアイテ
    ムをマッピングする命令と、 ランタイムモードに該当する前記トークンを配列する命令と、 前記パッケージを前記リソースの限られたコンピュータにダウンロードする命
    令と、 前記配列されたトークンを用いて前記パッケージを実行可能なコードにリンクす
    る命令。
  42. 【請求項42】 1つまたは複数の参照可能なアイテムを持つ1つまたは複
    数のパッケージに分割可能であり、リソースの限られたコンピュータにダウンロ
    ードされたアーキテクチャニュートラルなコードをリンクするためのコンピュー
    タに実装されたシステムであって、以下の命令を含むシステム。 対応する1つまたは複数のトークンに前記1つまたは複数の参照可能なアイテ
    ムをマッピングする命令と、 ランタイムモードに該当する前記トークンを配列する命令と、 前記パッケージを前記リソースの限られたコンピュータにダウンロードする命
    令と、 前記配列されたトークンを用いて前記パッケージを実行可能なコードにリンク
    する命令。
JP2000597682A 1999-02-02 2000-02-02 トークンに基づいたリンクステップ Pending JP2002536744A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/243,108 US6880155B2 (en) 1999-02-02 1999-02-02 Token-based linking
US09/243,108 1999-02-02
PCT/US2000/002716 WO2000046667A2 (en) 1999-02-02 2000-02-02 Token-based linking

Publications (1)

Publication Number Publication Date
JP2002536744A true JP2002536744A (ja) 2002-10-29

Family

ID=22917385

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000597682A Pending JP2002536744A (ja) 1999-02-02 2000-02-02 トークンに基づいたリンクステップ

Country Status (11)

Country Link
US (2) US6880155B2 (ja)
EP (1) EP1145107B1 (ja)
JP (1) JP2002536744A (ja)
KR (1) KR100713739B1 (ja)
CN (2) CN1160626C (ja)
AT (1) ATE343172T1 (ja)
AU (2) AU771699B2 (ja)
BR (1) BRPI0007945B1 (ja)
CA (1) CA2362010A1 (ja)
DE (1) DE60031370T2 (ja)
WO (1) WO2000046667A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010050601A1 (ja) * 2008-10-31 2010-05-06 株式会社 東芝 フレームワークプログラム及びクライアント装置
JP2018533796A (ja) * 2015-12-04 2018-11-15 ジェムアルト エスアー セキュアエレメント内のパッケージを管理する方法

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0932865B1 (en) 1996-10-25 2002-08-14 SCHLUMBERGER Systèmes Using a high level programming language with a microcontroller
US6793143B2 (en) * 1998-03-12 2004-09-21 Giesecke & Devrient Gmbh Data carrier
US20010007146A1 (en) * 1999-12-23 2001-07-05 Uwe Hansmann Method for providing a set of software components
EP1247210A4 (en) * 1999-12-24 2009-04-29 Telstra Corp Ltd VIRTUAL TOKEN
US7506175B2 (en) * 2000-11-06 2009-03-17 International Business Machines Corporation File language verification
EP1207454A1 (en) * 2000-11-15 2002-05-22 International Business Machines Corporation Java run-time system with modified linking identifiers
TW552502B (en) * 2000-11-21 2003-09-11 Matsushita Electric Ind Co Ltd File management method and content recording/playback apparatus
TWI230858B (en) * 2000-12-12 2005-04-11 Matsushita Electric Ind Co Ltd File management method, content recording/playback apparatus and content recording program
US6850707B1 (en) 2001-01-30 2005-02-01 The Regents Of The University Of California Secure optical layer multicasting to effect survivability
US20020147907A1 (en) * 2001-04-06 2002-10-10 Bruce Ross System for authorizing transactions using specially formatted smart cards
US7152223B1 (en) * 2001-06-04 2006-12-19 Microsoft Corporation Methods and systems for compiling and interpreting one or more associations between declarations and implementations in a language neutral fashion
US7082597B2 (en) 2001-06-20 2006-07-25 Sun Microsystems, Inc. Representation of objects in a Java programming environment
US7036120B2 (en) 2001-07-31 2006-04-25 Sun Microsystems, Inc. Two tier clusters for representation of objects in Java programming environments
US7640361B1 (en) * 2001-08-24 2009-12-29 Mcafee, Inc. Systems and methods for converting infected electronic files to a safe format
US6779732B2 (en) * 2001-08-31 2004-08-24 Schulumberger Malco, Inc. Method and apparatus for linking converted applet files
US7155702B2 (en) * 2001-09-13 2006-12-26 Axalto Sa Interface and stub generation for code distribution and synthesis
FR2831684B1 (fr) * 2001-10-31 2004-03-05 Gemplus Card Int Installation de programme compile notamment dans une carte a puce
US6738969B2 (en) 2001-11-14 2004-05-18 Sun Microsystems, Inc. Non-intrusive gathering of code usage information to facilitate removing unused compiled code
US7131121B2 (en) * 2001-11-14 2006-10-31 Axalto, Inc. Method and apparatus for linking converted applet files without relocation annotations
NL1019876C2 (nl) * 2002-01-31 2003-08-04 Chess Embedded Technology B V Systeem en werkwijze voor het laden van een programmacode in een inrichting alsmede een werkwijze voor het voeden van een programmacode aan een inrichting.
US7167908B2 (en) * 2002-09-27 2007-01-23 Intel Corporation Facilitating operation of a multi-processor system via a resolved symbolic constant
US8121955B2 (en) * 2003-01-16 2012-02-21 Oracle America, Inc. Signing program data payload sequence in program loading
US7222331B2 (en) * 2003-01-16 2007-05-22 Sun Microsystems, Inc. Linking of virtual methods
US7165246B2 (en) * 2003-01-16 2007-01-16 Sun Microsystems, Inc. Optimized representation of data type information in program verification
US7272830B2 (en) * 2003-01-16 2007-09-18 Sun Microsystems, Inc. Ordering program data for loading on a device
US7281244B2 (en) * 2003-01-16 2007-10-09 Sun Microsystems, Inc. Using a digital fingerprint to commit loaded data in a device
US7484095B2 (en) * 2003-01-16 2009-01-27 Sun Microsystems, Inc. System for communicating program data between a first device and a second device
DE10357257A1 (de) * 2003-12-08 2005-06-30 Giesecke & Devrient Gmbh Java Smart Card Chip mit für globale Variablen reserviertem Speicherbereich
US7191288B2 (en) * 2004-02-24 2007-03-13 Sun Microsystems, Inc. Method and apparatus for providing an application on a smart card
US7140549B2 (en) * 2004-02-24 2006-11-28 Sun Microsystems, Inc. Method and apparatus for selecting a desired application on a smart card
US7165727B2 (en) 2004-02-24 2007-01-23 Sun Microsystems, Inc. Method and apparatus for installing an application onto a smart card
US7374099B2 (en) * 2004-02-24 2008-05-20 Sun Microsystems, Inc. Method and apparatus for processing an application identifier from a smart card
US7676839B2 (en) * 2004-03-15 2010-03-09 Xceedid Systems and methods for access control
FR2871590B1 (fr) * 2004-06-15 2006-08-04 Gemplus Sa Procede de chargement d'un logiciel en langage intermediaire oriente objet dans un appareil portatif.
US20060053308A1 (en) * 2004-09-08 2006-03-09 Raidy 2 Go Ltd. Secured redundant memory subsystem
CN101048898B (zh) * 2004-10-29 2012-02-01 麦德托尼克公司 锂离子电池及医疗装置
US7395269B2 (en) * 2004-12-20 2008-07-01 Microsoft Corporation Systems and methods for changing items in a computer file
US7383278B2 (en) * 2004-12-20 2008-06-03 Microsoft Corporation Systems and methods for changing items in a computer file
US7232073B1 (en) 2004-12-21 2007-06-19 Sun Microsystems, Inc. Smart card with multiple applications
US20070250812A1 (en) * 2006-04-24 2007-10-25 Microsoft Corporation Process Encoding
US7971187B2 (en) * 2006-04-24 2011-06-28 Microsoft Corporation Configurable software stack
US10838714B2 (en) 2006-04-24 2020-11-17 Servicenow, Inc. Applying packages to configure software stacks
US20080059949A1 (en) * 2006-09-01 2008-03-06 Sap Ag System and method for implementing a safe framework
US20090204622A1 (en) * 2008-02-11 2009-08-13 Novell, Inc. Visual and non-visual cues for conveying state of information cards, electronic wallets, and keyrings
US8151324B2 (en) 2007-03-16 2012-04-03 Lloyd Leon Burch Remotable information cards
US20090178112A1 (en) * 2007-03-16 2009-07-09 Novell, Inc. Level of service descriptors
US20090077655A1 (en) * 2007-09-19 2009-03-19 Novell, Inc. Processing html extensions to enable support of information cards by a relying party
US20090077627A1 (en) * 2007-03-16 2009-03-19 Novell, Inc. Information card federation point tracking and management
US8074257B2 (en) * 2007-03-16 2011-12-06 Felsted Patrick R Framework and technology to enable the portability of information cards
US20090077118A1 (en) * 2007-03-16 2009-03-19 Novell, Inc. Information card federation point tracking and management
US20080317042A1 (en) * 2007-06-22 2008-12-25 Palo Alto Research Center Incorporated Extensible framework for compatibility testing
US20090199284A1 (en) * 2008-02-06 2009-08-06 Novell, Inc. Methods for setting and changing the user credential in information cards
US20090217368A1 (en) * 2008-02-27 2009-08-27 Novell, Inc. System and method for secure account reset utilizing information cards
US8079069B2 (en) * 2008-03-24 2011-12-13 Oracle International Corporation Cardspace history validator
US20090272797A1 (en) * 2008-04-30 2009-11-05 Novell, Inc. A Delaware Corporation Dynamic information card rendering
US20100011409A1 (en) * 2008-07-09 2010-01-14 Novell, Inc. Non-interactive information card token generation
US20100031328A1 (en) * 2008-07-31 2010-02-04 Novell, Inc. Site-specific credential generation using information cards
US20100095372A1 (en) * 2008-10-09 2010-04-15 Novell, Inc. Trusted relying party proxy for information card tokens
US8083135B2 (en) * 2009-01-12 2011-12-27 Novell, Inc. Information card overlay
US8632003B2 (en) * 2009-01-27 2014-01-21 Novell, Inc. Multiple persona information cards
US20100251353A1 (en) * 2009-03-25 2010-09-30 Novell, Inc. User-authorized information card delegation
US8640115B2 (en) * 2010-04-30 2014-01-28 Oracle International Corporation Access control in modules for software development
CN101976211B (zh) * 2010-09-26 2013-03-13 北京握奇数据系统有限公司 一种在cap文件中替换函数的方法、装置及系统
US9075640B1 (en) 2010-12-21 2015-07-07 Amazon Technologies, Inc. Sharing applications in a java virtual machine
US9383448B2 (en) 2012-07-05 2016-07-05 Deca System Co., Ltd. Golf GPS device with automatic hole recognition and playing hole selection
US9455876B1 (en) * 2013-02-01 2016-09-27 Ingram Micro Inc. Method and standard for integrating applications into a cloud
CN104281790A (zh) * 2013-07-03 2015-01-14 钟丹东 电子文件水印保护系统
US9519466B2 (en) * 2013-12-20 2016-12-13 Oracle International Corporation Executable code for constrained computing environments
CN105426239A (zh) * 2015-11-03 2016-03-23 大唐微电子技术有限公司 一种在Java卡中实现本地方法调用的方法及装置
CN105511935B (zh) * 2015-12-09 2019-07-09 网易(杭州)网络有限公司 资源索引值的获取方法及装置
EP3208717A1 (en) * 2016-02-17 2017-08-23 Gemalto Sa Method for managing objects in a secure element
US10846417B2 (en) * 2017-03-17 2020-11-24 Oracle International Corporation Identifying permitted illegal access operations in a module system
CN110874213B (zh) * 2019-11-12 2021-02-12 广州银汉科技有限公司 一种静态强类型语言的运行时类型扩展与反射方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998019237A1 (en) * 1996-10-25 1998-05-07 Schlumberger Systemes Using a high level programming language with a microcontroller
JPH113269A (ja) * 1997-04-23 1999-01-06 Sun Microsyst Inc スタックの内容をサブスタックに分離することによる正確なガーベイジ・コレクションを補助するシステムと方法

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2204973A (en) 1987-05-19 1988-11-23 Gen Electric Co Plc Data processing system
US5579509A (en) 1991-02-08 1996-11-26 International Business Machines Corporation Apparatus and method for verifying compatibility of system components
US6131159A (en) * 1992-05-08 2000-10-10 Paradyne Corporation System for downloading programs
US5367685A (en) 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
AU6783394A (en) 1993-05-05 1994-11-21 Apple Computer, Inc. Method and apparatus for verifying compatibility between modular components in a computer system
ATE543349T1 (de) 1993-06-15 2012-02-15 Rpx Corp Telekommunikationssystem
US5619695A (en) * 1994-02-03 1997-04-08 Lockheed Martin Corporation Method and apparatus for scheduling resources
EP0666550B1 (en) 1994-02-08 1997-05-02 Belle Gate Investment B.V. Data exchange system comprising portable data processing units
CA2147536A1 (en) 1994-06-01 1995-12-02 Gerard Johan Holzmann On-the-fly model checking with partial-order state space reduction
US5841866A (en) * 1994-09-30 1998-11-24 Microchip Technology Incorporated Secure token integrated circuit and method of performing a secure authentication function or transaction
US5668999A (en) 1994-12-20 1997-09-16 Sun Microsystems, Inc. System and method for pre-verification of stack usage in bytecode program loops
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US6519767B1 (en) 1995-06-07 2003-02-11 Microsoft Corporation Compiler and method for automatically building version compatible object applications
US5701408A (en) 1995-07-10 1997-12-23 International Business Machines Corporation Method for testing computer operating or application programming interfaces
US6067575A (en) 1995-12-08 2000-05-23 Sun Microsystems, Inc. System and method for generating trusted, architecture specific, compiled versions of architecture neutral programs
US5692047A (en) 1995-12-08 1997-11-25 Sun Microsystems, Inc. System and method for executing verifiable programs with facility for using non-verifiable programs from trusted sources
US5778231A (en) * 1995-12-20 1998-07-07 Sun Microsystems, Inc. Compiler system and method for resolving symbolic references to externally located program files
US5734822A (en) 1995-12-29 1998-03-31 Powertv, Inc. Apparatus and method for preprocessing computer programs prior to transmission across a network
US6038551A (en) * 1996-03-11 2000-03-14 Microsoft Corporation System and method for configuring and managing resources on a multi-purpose integrated circuit card using a personal computer
US5887065A (en) * 1996-03-22 1999-03-23 Activcard System and method for user authentication having clock synchronization
US5889992A (en) 1996-03-28 1999-03-30 Unisys Corp. Method for mapping types stored in a model in an object-oriented repository to language constructs for A C binding for the repository
NZ335218A (en) 1996-11-08 2000-11-24 Huntsman Ici Chem Llc Process for making flexible polyurethane foams
US6141681A (en) * 1997-03-07 2000-10-31 Advanced Micro Devices, Inc. Method of and apparatus for transferring and interpreting a data package
US5905987A (en) 1997-03-19 1999-05-18 Microsoft Corporation Method, data structure, and computer program product for object state storage in a repository
WO1998043212A1 (en) * 1997-03-24 1998-10-01 Visa International Service Association A system and method for a multi-application smart card which can facilitate a post-issuance download of an application onto the smart card
US6092147A (en) 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
WO1998051035A1 (en) * 1997-05-09 1998-11-12 Neomedia Technologies, Inc. Method and system for accessing electronic resources via machine-readable data on intelligent documents
US6328217B1 (en) 1997-05-15 2001-12-11 Mondex International Limited Integrated circuit card with application history list
GB2326010A (en) * 1997-06-07 1998-12-09 Ibm Data processing system using active tokens
US6067558A (en) * 1997-09-18 2000-05-23 Wendt; James Gordon Method and apparatus for providing increased content from a resource constrained device
US6226744B1 (en) * 1997-10-09 2001-05-01 At&T Corp Method and apparatus for authenticating users on a network using a smart card
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US5974454A (en) * 1997-11-14 1999-10-26 Microsoft Corporation Method and system for installing and updating program module components
US6349344B1 (en) 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
US5937412A (en) * 1997-12-29 1999-08-10 Alcatel Usa Sourcing, L.P. Method and system for packaging service logic programs in an advanced intelligent network
US6145021A (en) * 1998-06-02 2000-11-07 International Business Machines Corporation Method and system for managing resource allocation for plug and play devices by providing only the resources required to the devices before system initialization
EP0964370B1 (en) * 1998-06-05 2003-08-20 International Business Machines Corporation Method and device for loading instruction codes to a memory and linking said instruction codes
WO2000000890A1 (de) 1998-06-26 2000-01-06 Deutsche Telekom Ag Verfahren zur prüfung von java-bytecode-programmen auf sicherheitseigenschaften
US6178546B1 (en) * 1998-08-31 2001-01-23 Alcatel Usa Sourcing, L.P. System and method of making software product deliverables
US6163811A (en) * 1998-10-21 2000-12-19 Wildseed, Limited Token based source file compression/decompression and its application
US6481632B2 (en) * 1998-10-27 2002-11-19 Visa International Service Association Delegated management of smart card applications
CA2255042C (en) 1998-11-30 2004-04-13 Leonard W. Theivendra Class loader
US6438550B1 (en) * 1998-12-10 2002-08-20 International Business Machines Corporation Method and apparatus for client authentication and application configuration via smart cards
US6272674B1 (en) 1998-12-14 2001-08-07 Nortel Networks Limited Method and apparatus for loading a Java application program
US7200842B1 (en) 1999-02-02 2007-04-03 Sun Microsystems, Inc. Object-oriented instruction set for resource-constrained devices
CA2289246C (en) * 1999-11-10 2001-04-24 George Edward Andrews Bicycle saddle

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998019237A1 (en) * 1996-10-25 1998-05-07 Schlumberger Systemes Using a high level programming language with a microcontroller
JPH113269A (ja) * 1997-04-23 1999-01-06 Sun Microsyst Inc スタックの内容をサブスタックに分離することによる正確なガーベイジ・コレクションを補助するシステムと方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010050601A1 (ja) * 2008-10-31 2010-05-06 株式会社 東芝 フレームワークプログラム及びクライアント装置
JP2010108370A (ja) * 2008-10-31 2010-05-13 Toshiba Corp フレームワークプログラム及びクライアント装置
JP2018533796A (ja) * 2015-12-04 2018-11-15 ジェムアルト エスアー セキュアエレメント内のパッケージを管理する方法

Also Published As

Publication number Publication date
US20030028686A1 (en) 2003-02-06
US6880155B2 (en) 2005-04-12
CN1324467C (zh) 2007-07-04
US7444631B2 (en) 2008-10-28
EP1145107B1 (en) 2006-10-18
BR0007945A (pt) 2002-05-28
KR20010093312A (ko) 2001-10-27
CN1346465A (zh) 2002-04-24
KR100713739B1 (ko) 2007-05-02
AU771699B2 (en) 2004-04-01
CA2362010A1 (en) 2000-08-10
AU3587200A (en) 2000-08-25
EP1145107A2 (en) 2001-10-17
DE60031370T2 (de) 2007-09-20
DE60031370D1 (de) 2006-11-30
CN1591338A (zh) 2005-03-09
WO2000046667A2 (en) 2000-08-10
ATE343172T1 (de) 2006-11-15
BRPI0007945B1 (pt) 2015-10-13
WO2000046667A3 (en) 2000-12-21
AU2004202909A1 (en) 2004-07-22
CN1160626C (zh) 2004-08-04
US20050097550A1 (en) 2005-05-05
AU2004202909B2 (en) 2007-07-12

Similar Documents

Publication Publication Date Title
JP2002536744A (ja) トークンに基づいたリンクステップ
US6651186B1 (en) Remote incremental program verification using API definitions
US6986132B1 (en) Remote incremental program binary compatibility verification using API definitions
US6883163B1 (en) Populating resource-constrained devices with content verified using API definitions
US6981245B1 (en) Populating binary compatible resource-constrained devices with content verified using API definitions
US7506175B2 (en) File language verification
US20030135792A1 (en) Language subset validation
JP2002536743A (ja) リソース制約デバイスのためのオブジェクト指向命令セット
US20020170033A1 (en) Computer program language subset validation
US20220300352A1 (en) Determining a resolution state of an anchor constant associated with an application programming interface (api) point
US6751790B2 (en) Frameworks for efficient representation of string objects in Java programming environments
US6934726B2 (en) Storing and retrieving of field descriptors in Java computing environments
WO2002023331A2 (en) Remote incremental program binary compatibility verification using api definitions
AU2001290842B2 (en) Remote incremental program binary compatibility verification using API definitions
AU2001290892B2 (en) Method for remote incremental program verification and installation on resource-constrained devices
EP1417573A2 (en) Method for remote incremental program verification and installation on resource-constrained devices
AU2001290842A1 (en) Remote incremental program binary compatibility verification using API definitions
AU2001290892A1 (en) Method for remote incremental program verification and installation on resource-constrained devices

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091119

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100217

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100225

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100319

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100329

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100416

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100423

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100518

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100610

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101104