JP6592009B2 - 動的に生成されたパターンベースクラスの構造識別 - Google Patents

動的に生成されたパターンベースクラスの構造識別 Download PDF

Info

Publication number
JP6592009B2
JP6592009B2 JP2016564078A JP2016564078A JP6592009B2 JP 6592009 B2 JP6592009 B2 JP 6592009B2 JP 2016564078 A JP2016564078 A JP 2016564078A JP 2016564078 A JP2016564078 A JP 2016564078A JP 6592009 B2 JP6592009 B2 JP 6592009B2
Authority
JP
Japan
Prior art keywords
generator function
class
parameters
description
compiler
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.)
Active
Application number
JP2016564078A
Other languages
English (en)
Other versions
JP2017516210A5 (ja
JP2017516210A (ja
Inventor
ゲーツ,ブライアン
ローズ,ジョン・アール
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2017516210A publication Critical patent/JP2017516210A/ja
Publication of JP2017516210A5 publication Critical patent/JP2017516210A5/ja
Application granted granted Critical
Publication of JP6592009B2 publication Critical patent/JP6592009B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/4492Inheritance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • 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/449Object-oriented method invocation or resolution
    • 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/4498Finite state machines
    • 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
    • G06F9/45516Runtime code conversion or optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Description

背景
本発明は概してソフトウェア開発に関し、より具体的には、一例としてプラットフォームに依存しないオブジェクト指向プログラミング言語などの様々なプログラミング言語のうちのいずれかにおける言語開発の様々な局面に関する。
オブジェクト指向プログラミングでは、クラスは従来より名前で参照される。2つのクラス参照が同じ名前を有する(かつ同じクラスローダまたはリポジトリからローディングされるなどの同じ出所を有する)場合、それらは同じと考えられる。加えて、パターンまたはテンプレートをインスタンス化することによってクラスを生成することは一般的な開発技術である。たとえば、そのようなインスタンス化は、デベロッパーによるハンドコーディング、またはツールによる機械的なテンプレート拡張の形態を取り得る。パターンまたはテンプレートに基づいて生成されるクラスはより高い表現性およびリーダビリティを提供し得るが、機械的なテンプレートのインスタンス化は、(たとえば、クラスAccount$ImmutableWrapperは「不変ラッパー」テンプレートを型「Account」に適用した結果であるという)プロセスにおける情報を無駄にすると同時に、クラスが何を行うかについての記述と、見苦しい、機械生成された「支離滅裂な(mangled)」名前を頻繁にユーザに公表するクラスの名前との間の脆いマッピングに依拠することが多い。記述とクラス名との間のマッピングが変化した場合、同じ名前を有する2つのクラス参照は、同じことを行なわなくなり得るため、バイナリ非互換となり得る。
概要
動的に生成されたパターンインスタンス化クラスの構造識別は、ランタイム環境においてクラスが記述される方法を拡張するように、構造記述を用いて利用され得る。名前のみによってクラスを記述し、かつその名前を用いてそのクラスを(たとえばデスク上のクラスファイルに)特定する代わりに、クラスを、コードジェネレータ関数と場合によってはいくつかの引数との組合せと称してもよい。換言すると、いくつかの実施形態では、クラスは、ジェネレータ関数を指定する構造記述と、場合によってはそのジェネレータ関数への1つ以上のパラメータとによって記述され得る。構造記述は、いくつかの実施形態では、クラス名が用いられ得る事実上いずれの状況についてもクラス名と考えられ得る(たとえばクラス名の代わりに用いられ得る)(たとえば、引数型、戻り値型、フィールドタイプ、スーパータイプ、instanceof、またはキャスト演算子のオペランドなど)。
たとえば、コンパイラおよび/または仮想化ランタイム環境は、構造記述を用いたクラスの記述を可能にするように構成され得る。加えて、構造記述は、クラスを生成するためのレシピを符号化するものと考えられ得る。クラスは、それらの構造記述を用いて比較され得る。より一般的には、構造的、機械的なやり方で同一性について2つのクラスの記述を比較することができる。
様々な実施形態に係る、高水準なオブジェクト指向で指定され、クラスの構造記述をサポートするように構成されたコンピュータプログラムをコンパイルし実行するためのワークフローを例示する論理ブロック図である。 一実施形態に係る、本明細書に記載されるクラスの構造記述を例示する論理ブロック図である。 一実施形態に係る、構造記述に基づくクラスの生成を例示する論理ブロック図である。 本明細書に記載されるように、クラスの構造記述に基づいてクラスを生成するための方法の一実施形態を例示するフローチャートである。 本明細書に記載されるように、2つのクラスをそれらの構造記述に基づいて比較するための方法の一実施形態を例示するフローチャートである。 一実施形態に係る、再帰的に用いられる構造記述を例示する論理図である。 一実施形態に係る、構造記述を用いて動的に生成されたパターンインスタンス化生成クラスの構造識別を実施するのに好適なコンピュータシステム例を例示する論理ブロック図である。
実施形態の詳細な説明
Java(登録商標)TMプログラミング言語などのプラットフォームに依存しないオブジェクト指向言語を用いて、クラスの構造記述を用いて動的に生成されたパターンインスタンス化生成クラスの構造識別などの様々な特徴をサポートするためのソフトウェア開発に対する改良の様々な実施形態が本明細書に記載される。
いくつかの実施形態によれば、動的に生成されたパターンインスタンス化クラスの構造識別は、ランタイム環境においてクラスが記述されるやり方を拡張するように、構造記述を用いて利用され得る。名前のみによってクラスを記述し、その名前を用いてそのクラスを(たとえばデスク上のクラスファイルに)見つける代わりに、クラスを、バイトコードジェネレータ関数といくつかの静的引数との組合せと称してもよい。換言すると、いくつかの実施形態では、クラスは、ジェネレータ関数を指定する構造記述(たとえば、「TからUへの機能」、「Tのアレイ」、「TおよびUのTuple」、「インターフェイスIのためのリモートプロキシ」など)と、場合によってはそのジェネレータ関数への1つ以上のパラメータとによって記述され得る。構造記述は、いくつかの実施形態では、クラス名が用いられる事実上いずれの状況についてもクラス名と考えられ得る(たとえば、クラス名として用いられ得る)。
たとえば、クラスについての構造記述は、(名前、またはそれを実施するクラスもしくはメソッドへの参照のいずれかによる)パターンへの参照と、パターンのインスタンス化へのパラメータとを含み得る。いくつかの実施形態では、構造記述は、ジェネレータ関数を示す情報と、そのジェネレータ関数への1つ以上のパラメータとを含み得る。いくつかの実施形態では、2つの構造参照は、それらが同じパターンおよびパラメータを有する場合は同じクラス(または同じクラスへの参照)と考えられ得る。したがって、いくつかの実施形態では、クラスは、それぞれのクラス名を用いてクラスが従来から比較されているのと同じようにそれぞれの構造記述を用いて比較され得る。実際、いくつかの実施形態では、クラスの構造記述はクラスの名前と考えられてもよく、クラスの名前の代わりに使用されてもよく、したがって構造記述であり得るそれらのクラス名を用いて、クラスを比較してもよい。
いくつかの実施形態では、クラスの構造記述において識別されるジェネレータ関数は、2つのクラスの比較に関与し得る。たとえば、ジェネレータ関数は、2つのインスタンス化が同じであるかどうかをジェネレータ関数が判定することを可能にし得るように利用(たとえば実行)され得る。したがって、いくつかの実施形態では、ジェネレータ関数は、「私は彼と同じインスタンス化であるか」という判断に関係するように構成され得る。なぜなら、インスタンス化へのパラメータが可換(たとえば、複数のインターフェイスのためのダイナミックプロキシ)であり得る場合もあれば、そうでない場合もあるからである。クラスの構造記述は、いくつかの実施形態に従って、純粋に名前だけのVM(たとえば、クラス名として構造記述をサポートするように構成されていないVM)においてクラス名が他の方法で出現することができるあらゆる場所に出現し得る。たとえば、クラスの構造記述は、引数型、戻り値型、フィールドタイプ、スーパータイプ、instanceofもしくはキャスト演算子のオペランドとして、またはそれらの代わりに、クラス名が用いられ得る概ねあらゆる場所に出現し得る。
以下の詳細な説明では、請求項に記載の主題の十分な理解をもたらすために多くの具体的な詳細について記載する。しかしながら、請求項に記載の主題はこれらの具体的な詳細なしに実施され得ることが当業者によって理解されるであろう。他のインスタンスでは、方法、装置またはシステムは、当業者によって知られているため、請求項に記載の主題を不明瞭にしないために以下では詳細に説明しない。
いくつかの実施形態および例示的な図面の例として本明細書に様々な実施形態を記載するが、当業者は、記載されている実施形態または図面に実施形態は限定されないと認識するであろう。図面およびそれについての詳細な説明は、開示されている特定の形態に実施形態を限定するものとは意図されておらず、逆に、開示の精神および範囲内にある変更、均等物および代替案をすべて包含する意図であることが理解されるべきである。本明細書で用いられるいずれの標題も体系化するためのものにすぎず、説明の範囲を限定するために用いられることを目的としていない。本願の全体にわたって用いられる限りにおいて、「may」という単語は、義務的な意味(つまり、しなければならないという意味)ではなく、任意の意味(つまり、可能性を有するという意味)で用いられる。同様に、「include」、「including」および「includes」という単語は、含むが限定されないことを意味する。
以下の詳細な説明のいくつかの部分は、特定の装置または専用計算装置もしくはプラットフォームのメモリ内に格納されたバイナリデジタル信号に対する動作のアルゴリズムまたは記号表現によって表される。この特定の明細書のコンテキストでは、特定の装置などの用語は、プログラムソフトウェアからの命令に従って特定の機能を行なうようにプログラミングされた場合の汎用コンピュータを含む。アルゴリズム記述または記号表現は、信号処理において当業者によって用いられる技術、または彼らの作業の趣旨を他の当業者に伝えるための関連技術の例である。アルゴリズムは、本明細書では、かつ一般には、所望の結果に至るセルフコンシステントな一連の動作または同様の信号処理であると考えられる。このコンテキストにおいて、動作または処理は、物理量の物理的な操作を伴う。典型的には、必ずしもそうではないが、そのような量は、格納されるか、転送されるか、組合せられるか、比較されるか、または他の方法で操作されることが可能な電気または磁気信号の形態を取り得る。主として通常の用法の理由から、ビット、データ、値、要素、シンボル、文字、用語、数字、数詞などの信号を参照することが場合によっては好都合であることが分かっている。しかしながら、これらまたは同様の用語のすべては適切な物理量と関連付けられるべきであり、便宜的なラベルに過ぎないと理解されるべきである。特に別記しない限り、以下の検討から明らかなように、本明細書の全体にわたって、「処理する」、「計算する」、「算出する」、「判定する」などといった用語を利用した検討は、専用計算機または同様の専用電子計算装置などの特定の装置の行為または処理を指すと認識される。本明細書のコンテキストでは、したがって、専用計算機または同様の専用電子計算装置は、専用計算機または同様の専用電子計算装置のメモリ、レジスタ、もしくは他の情報記憶装置、伝送装置、または表示装置内の物理的、電子的、または磁気的な量として典型的に表される信号を操作するかまたは変換することが可能である。
本明細書に記載される方法および/または特徴は、様々な実施形態に係る、(たとえば)Java仮想マシン(JVM)において動的に導出されたクラスを記述するためのベースサポート、言語レベルの概念をJVMが実行することができるバイトコードに翻訳するためのJavaコンパイラにおける翻訳メカニズム、および以前は表現することができなかったものを表現するためにJava言語で明らかにされる特徴を含むような言語開発の様々な局面を包含し得る。本明細書に記載される方法、技術、特徴、および/または改良の様々な実施形態は、Javaプログラミング言語に関して、かつ/またはJavaプログラミング言語を用いたソフトウェア開発の特徴を用いて、検討される。しかしながら、本明細書に記載される方法、技術、特徴、および他の改良は、様々な実施形態に従って、C、C++、C#、Scala(登録商標)、Pythonなどの他のプログラミング言語と使用されてもよい。
図1を参照して、様々な実施形態に従って、高水準なプラットフォームに依存しないオブジェクト指向言語で指定されるコンピュータプログラム、ならびに本明細書に記載されるクラスの構造記述に関する様々な方法、特徴、および改良をコンパイルし実行するためのワークフローを例示する。例示の目的で、以下の説明の大部分はJavaTMプログラミング言語を用いるコンテキストで提供される。しかしながら、記載される技術は、名前で記述されるユーザ定義クラスをサポートする事実上いずれのプログラミング言語と用いられてもよい。一般に、クラスは、特殊な型のプログラミングオブジェクトを作成するために、データ、変数、関数、メソッド、および/または他の属性をメンバーとして含んでもよく、かつ定義、ブループリント、またはテンプレートを表わすユーザ定義型またはデータ構造と考えられ得る。クラスは、メンバー関数およびメソッドのためのデータメンバーおよび実装例に初期値を提供し得る。クラスは、しばしばライブラリに含まれる。ライブラリは、ソフトウェアプログラムまたはアプリケーションによって使用されるリソースの集合と考えられ得る。ライブラリは、いくつかの実施形態に従って、限定はされないがデータ、ドキュメンテーション、クラス、サブルーチン、および/または型指定を含む様々な種類のリソースのうちのいずれかを含み得る。ライブラリは、2つ以上のアプリケーションによって(場合によっては同時に)利用されるように体系化されてもよく、アプリケーションが同じ挙動を実施(または再実施)しなくてもよいようにリソースを提供することによって再利用性を促進し得る。
例示される実施形態によれば、ソースコードファイル110などの、コンピュータプログラムのためのソースコードをコンパイラ120などのコンパイラが受信すると、ワークフローが開始し得る。様々な実施形態において、ソースコードファイル110は、JavaTMおよび/または他の言語などの、様々な高水準の、かつ/またはプラットフォームに依存しないオブジェクト指向プログラミング言語で指定され得る。たとえば、ソースコードは、JavaTMが用いられている実施形態において一組の.javaファイルとして提供され得る。いくつかの実施形態では、ソースコードファイル110は、1つ以上の低水準な、かつ/または中間言語(たとえばアセンブリ)を含み得る言語の組合せを用いて指定され得る。いくつかの実施形態では、ソースコードの少なくとも一部は初めにPythonまたはRuby(登録商標)などの動的型付き高水準言語で書かれ得るが、他の実施形態では、ソースコードのすべてがJavaTMなどの静的型付き言語であり得る。
コンパイラ120は、ソースコードファイル110を分析して、図示の実施形態においてクラスファイル130(たとえば、JavaTMの場合は.classファイルまたは.jarファイル)などの実行可能なバージョンのプログラムまたはバイトコードファイルを生成し得る。異なる種類の実行可能なコードフォーマットを様々な実施形態において使用してもよい。たとえば、バイナリ機械語をバイトコードの代わりに使用してもよい。いくつかのシナリオでは、クラスファイル130における実行可能コードの一部はバイトコードであり得るが、他のものは固有のバイナリ機械語であり得る。
プログラムソースコードファイル110をクラスファイル130にコンパイルすることの一部として、コンパイラ120は、いくつかの実施形態に従って、一連の解析動作を行ない、クラスの構造記述を適用するかまたは実施するように、実行可能なバージョンを生成する前に様々な中間データ構造を生成し得る。たとえば、コンパイラは、クラスファイル130を作成する際、クラスの1つ以上の構造記述を追加するかまたは含み得る。上記のように、構造記述は、ジェネレータ関数を示す情報とそのジェネレータ関数への1つ以上のパラメータとを含み得る。
図1に例示されるように、クラスファイル130は、実行プラットフォーム102上でコードを実行する、仮想化ランタイム環境140などの実行環境に送られ、それによって様々な出力データおよび/または挙動を作成し得る。仮想化ランタイム環境140は、ひいては、様々な実施形態に従って、クラスローダ150、メモリマネージャ160、(たとえば実行可能コードの有効性をチェックするための)バイトコードベリファイヤ170、および/またはインタープリタおよび/またはジャストインタイム(JIT)コンパイラ180などの多くの異なるコンポーネントを含み得る。JITコンパイラは、いくつかの実施形態では、バイトコードの一部またはすべて(たとえばバイトコードのよく使用される部分)をプラットフォーム固有のマシンコードに翻訳して、プログラム実行のパフォーマンスを向上させる役割を担い得る。仮想化ランタイム環境140は、いくつかの実施形態では、多くのアプリケーションプログラミングインターフェイス(API)ライブラリ190を実施するためのコードも含み得る。仮想化ランタイム環境140は、いくつかの実施形態では、オペレーティングシステム192などの下位レベルソフトウェア上で動作し得る。
異なる実施形態では、コンパイルされたコードの実行の結果として生成される出力または挙動は、様々なレベルのシステムメモリ(たとえばメモリ内オブジェクトおよび/またはデータ構造)、永続ストレージ(たとえばファイルシステム上のファイル)などに格納されたデータを含み得る。挙動は、出力をスクリーン上に表示する、ネットワークによってメッセージを送信する、かつ/または他の方法で様々なユーザおよび/またはコンポーネントと相互作用するなどの様々なプログラム機能性も含み得る。
いくつかの実施形態では、仮想化ランタイム環境140は、コンパイラ120によって生成されたクラスファイル130を用いたクラスの構造記述を実施し得る。いくつかの実施形態によれば、クラスの構造記述を実施する仮想化ランタイム環境140は、クラスをローディングする際、(構造記述へのパラメータと共に)クラスファイル130からの構造記述を使用してもよく、(構造記述において指定された)ジェネレータ関数を(同じく構造記述に指定されている)パラメータに適用した結果であり得る新しいクラスを生成してもよい。
動的に生成されたパターンインスタンス化の構造識別
いくつかの実施形態によれば、動的に生成されたパターンインスタンス化クラスの構造識別は、ランタイム環境においてクラスが記述されるやり方を拡張するように構造記述を用いて利用され得る。名前によってのみクラスを記述し、その名前を用いてクラスを(たとえばディスク上のクラスファイルにおいて)見つける代わりに、クラスを、コードジェネレータ関数といくつかの静的引数との組合せと称してもよい。換言すると、いくつかの実施形態では、ジェネレータ関数を指定する構造記述と、場合によってはそのジェネレータ関数への1つ以上のパラメータとによってクラスを記述してもよい。構造記述は、いくつかの実施形態では、クラス名が用いられる事実上いずれの状況についてもクラス名と考えられ得る(たとえばクラス名として使用され得る)。
したがって、いくつかの実施形態によれば、ソフトウェアシステム(たとえばコンパイラおよび/または仮想ランタイム環境)を増強して、クラスを生成するためのレシピまたは公式を符号化し得る構造記述を用いることによってクラスを記述することを可能にし得る。構造記述は、(たとえば、名前による、またはそれを実施するクラスもしくは方法の参照による)パターンの参照などのジェネレータ関数の識別と、あるとすればジェネレータ関数についてのパラメータ(たとえばパターンのインスタンス化へのパラメータ)とを含み得る。
このように、いくつかの実施形態に従って、何らかのジェネレータ関数をいくつかの引数に適用した結果であるクラスは、ジェネレータ関数を指定する構造記述と(場合によっては)1つ以上の引数とを用いて参照され得る。たとえば、特殊化の場合には、そのジェネレータ関数は、特殊化されるべきクラスとその特殊化引数とを引数として取り得る。したがって、コンスタントプールにおける「合成クラス」はTuple(たとえば、generator=JavaGenericSpecializer, args=ArrayList, int)により参照され得る。いくつかの実施形態によれば、合成クラスについての構造記述は、ソースコード、クラスファイル、および/または生成コード内で利用され得る。
いくつかの実施形態では、合成クラスについてのコードの生成は、クラスが解消される時などにランタイム環境によって行なわれる。その結果、そのクラスが参照される時はいつでも合成クラスがコードに出現し得る。構造記述は、様々な実施形態に従って、ほぼいずれの機械的な変換またはクラスの生成にも用いられ得る。構造記述が使用され得る状況のいくつかは(とりわけ)、
・特殊化(たとえば、List<T>をT=intに特殊化すること)
・インターフェイスIについてのダイナミックプロキシ
・その方法はIの背景にあるインスタンスに権限を委任し得る、インターフェイスIについての転送プロキシ
・指定されたコンポーネント型を有するタプル型
・指定された引数を有する関数型および戻り値型
を含み得る。
ソースコード(たとえば手書きコード)は、「パラメータA,BおよびCでXYZパターンをインスタンス化する」形態の記述から機械的に(たとえば自動的に)生成されることができていた既存パターンのインスタンス化を含み得ることが多い。
パターンへのパラメータは、他の型またはクラス(たとえば「Decorator around ActionListener」)であってもよく、このコードを機械的に(たとえば自動的に)生成することは、いくつかの実施形態では、パターンを手でインスタンス化するよりも単純であり、エラーを起こしにくいが、より重要なことには、断定的に結果を参照すること(「インターフェイスListについてのダイナミックプロキシ」)は、(たとえばコードを読む人に対する)読み手の明瞭性)と、(たとえば、VMまたはプラットフォームライブラリコード内の)他のコンポーネントがクラスの構造記述を吟味し、かつそのセマンティクスについての情報を判定することができることとの両方の面から、より明確である。
クラスを記述するための基本的な方法として構造記述を用いることにより、クラスの生成が可能となり得るだけでなく、型がクラスファイルに出現する限りどこでも構造記述の使用も可能となり得る。たとえば、構造記述は、他の例の中でも、class foo extends Tuple<int, int>、instanceofテスト(たとえば特定の要素がTuple<int, int>かどうかを判定すること)を実施するため、またはTuple<int, int>にキャストするために使用され得る。したがって、VMは、従来のプログラミング言語とは対照的に、ソース言語において用いられるものと同じクラス記述を用いてもよく、ランタイムにおいて使用するための、名前が支離滅裂なコードを生成しつつ、ソース言語において1つの表現を用いてもよい。
したがって、構造記述は、いくつかの実施形態では、クラスを記述する(かつ生成する)ための全般的なメカニズムと考えられ得る。加えて、クラス名がクラスファイルに出現し得るいずれの場所でも構造記述が使用され得るため、構造記述を用いることでランタイム環境の表現性も上昇し得る。
いくつかの実施形態では、構造記述の使用は、ローディングされるべきクラスを記述するための間接層と考えられ得る。たとえば、ファイルシステムにおけるパスとして、またはデータベースにおけるキーとして、クラス名を用いてローディングされるべきクラスファイルを生成すると述べる代わりに、あるパラメータによる特定のジェネレータの実行に起因するクラスとして、または特定のやり方でのクラスの変形に起因するクラスとして(構造記述を用いて)クラスが記述される。
したがって、(たとえばクラス名によって)ファイルシステム内で検索することでどのようにクラスを見つけるかを記述することによってクラスを識別するのではなく、公式(またはレシピ)を用いて、次いで公式のインスタンス化を用いてどのようにクラスを生成するかという記述によってクラスが識別される。いくつかの実施形態では、特定の公式(たとえばジェネレータ関数)と、その公式へのパラメータとの組合せが、クラスファイルにおいてクラスの実際の名前の代わりに用いられる。したがって、クラスを名前によって参照することができることに加え、クラスは公式またはレシピによって(たとえば構造記述を用いることによって)も参照され得る。換言すると、クラスは、名前でまたは構造的に識別され、かつ/または参照され得る。
構造記述によって識別されたクラスがローディングされる時に、クラスが構造記述によって識別されるという事実が認識されてもよく、次いで、クラスを生成するために特定のジェネレータ関数が用いられてもよい。いくつかの実施形態では、クラスの構造記述は、そのクラスについての唯一の(たとえば正式な)クラス名と考えられ(かつ用いられ)得る。したがって、2つの異なるクラスにおける2つの構造記述が両方ともListについてダイナミックプロキシを指定する場合、コンパイラまたは仮想化ランタイム環境は、2つの構造記述が同じクラスについてのものであると認識し得、構造記述の一方を用いて先に生成されたクラスを再使用することになる。換言すると、クラスの構造記述は、いくつかの実施形態に従って、他の構造記述と比較され得るクラスの具体的な記述と考えられ得る。
たとえば、動的なクラスは、入力として0以上のパラメータを取り得る1つのジェネレータ関数(または公式/レシピ)であり得る。いくつかの実施形態では、ジェネレータ関数への1つのパラメータは、新しいクラスを生成するためにコードが適合される(たとえばジェネレータ関数によって変形される)ことになる既存クラスのクラス名であり得る。加えて、いくつかの実施形態では、クラスの構造記述は別の構造記述についての引数として機能することができ、したがってジェネレータ関数に引数として送られてもよい。一般にジェネレータ関数は、様々な実施形態に従って、限定はしないがメソッド名、値、数字、定数、クラス名、および/またはクラスについての構造記述を含む様々な種類のパラメータを取り得る。ジェネレータ関数への入力引数の厳密な性質および型は、ジェネレータ関数ごとに、かつ実施形態ごとに変動し得る。
したがって、いくつかの実施形態では、構造記述は、必ずしも記述の個々の部分の特定の意味ではなく、それらの構造に基づいていくつかのコンポーネントによって用いられ得る。たとえば、一実施形態では、コンパイラは、言語のランタイムライブラリの一部として特定のジェネレータ関数を発することによって、構造記述に特定の意味を与え得る(たとえば、構造記述は特定のクラスを生成するためのものであることをコンパイラは知っている)。しかし他のコンポーネントは、記述の個々の部分の特定の意味の知識を必要とすることなく、単に構造記述により作動する。たとえば、ある状況において、かついくつかの実施形態に従って、仮想化ランタイム環境の1つ以上のコンポーネントは、生成されているクラスの詳細に関して特に知識がなくても、構造記述によって指定されるジェネレータ関数を特定し実行するように構成され得る。
したがって、実施形態では、構造記述の使用は、高水準言語のユーザがランタイム表現とは何かを知る必要なしに、コンパイラがソース構造体を合理的なランタイム表現にマッピングすることを可能にする仮想化ランタイム環境によって提供される特徴と考えられ得る(たとえば、プログラマはランタイム表現ではなく言語の型システムだけを見ればよい)。
いくつかの実施形態では、構造記述の使用は、ユーザのプログラムの表現がランタイム環境が効率的に管理することができるものにマッピングすることができるようにコンパイラを展開するために用いられる特徴のツールボックスの一部と考えられ得る。構造記述の実施は、複数の関係者および複数の間接層を伴い得る。たとえば、ランタイム環境は、プログラマが高水準言語でコードを書くと、場合によっては良好な性能および予測可能な挙動を保証するように簡単な描写的マッピングがあり得るように、構造記述を利用して言語コンパイラに自然な表現を提供し得る。
いくつかの実施形態では、仮想化ランタイム環境は動的にリンクされてもよい。したがって、特定のクラスXからのコードが別のクラスYの方法を呼び出す場合、コンパイラはクラスYについてのクラスファイルを検索し、クラスYへの通話を生成し、Xについてのクラスファイルに署名を入れてもよい。しかしながら、コードが適切に実行するために、ランタイムにおいて、同じクラスYは、コンパイラが使用したのと同じ署名を有することが必要となる。同様に、構造記述を利用する際、(たとえば構造記述を用いて)まずクラスが生成され、次いでコンパイル時間において検査され得る。次いで、いくつかの実施形態では、構造記述がコードに保持されつつ、生成されたクラスが廃棄され得る。コードが適切に実行するために、ランタイムにおいて、同じジェネレータ関数が、互換性のあるクラスについて同じ署名を生成することが必要となる。したがって、構造記述を実施する際、コンパイラは、クラス全体を生成する必要はなく、構造記述だけを用いることによってクラスを発行することが可能であり得る。
いくつかの実施形態では、言語ランタイムライブラリの一部などの、1つ以上のあらかじめ生成されたジェネレータ関数が利用可能であり得る。1つのJavaベースの例では、いくつかの実施形態に従って、Tupleを生成するために構造記述が用いられてもよく、したがって適切なランタイムライブラリにおいてTupleジェネレータ関数が提供されてもよい。いくつかの実施形態では、ランタイムライブラリは、Tupleクラスが生成される必要がある場合に用いられ得るTupleジェネレータクラスを含み得る。そのような例では、Javaコンパイラは、Tupleジェネレータ関数が何を生成しようとしているかを正確に知り得る。しかし他の実施形態では、クラスを生成する(次いで、生成されたクラスを標準として用いる)ために構造記述で指定された特定のジェネレータ関数をどのように呼び出すか以外のことについて(何らかの詳細を)特定のコンパイラが知らなくてもよい別の言語のランタイムの一部である他のジェネレータ関数があり得る。
同様に、いくつかの実施形態に従って、言語は構造記述を用いて特殊化を実施してもよく、したがって、スペシャライザジェネレータ関数(および/またはスペシャライザジェネレータクラス)がランタイムライブラリ内に設けられてもよい。
いくつかの実施形態では、仮想化ランタイム環境140などのランタイム環境は、ジェネレータ関数のセマンティクスまたは用いられている個々のレシピ、公式もしくはパターンに関して何も知らなくてもよい。その代わり、ランタイム環境は、クラスがローディングされる必要がある時には、構造記述によって指定されたジェネレータ関数をコードジェネレータとして単に用いればよい。たとえば、一実施形態では、ランタイム環境はまずコードジェネレータ(たとえばジェネレータ関数)を実行してクラスを作成し、次いでクラスローダ150などのクラスローダを用いてそのクラスをローディングし得る。他の実施形態では、ランタイム環境は、クラスローダに依拠して、ジェネレータ関数を実行し、かつ結果として生じるクラスをローディングし得る。
したがって、いくつかの実施形態では、構造記述の使用は、ランタイム環境が、特定のクラスおよび/またはジェネレータ関数の詳細を理解することなく、どのようにクラスを生成するかのみを恐らく理解している状態での(たとえば構造記述に基づく)クラスの生成に関するコンパイラとランタイムライブラリとの一致と考えられ得る。
Listについてのダイナミックプロキシを実施するコードを作成するかまたは把握することよりも、「Listについてのダイナミックプロキシ」と述べ理解する方が容易であり得るため、(たとえばパターンのパラメータ化されたインスタンス化などの)構造記述としてクラスを表わすことは、より高い表現性およびリーダビリティをプログラマに提示し得る。さらに、その同じパターンを手動でインスタンス化するよりもよりコンパクトで読取り可能であるパターンを用いるためのコードであるだけではなく、変化に対してよりロバストであり得る。たとえば、クラスCについてのプロキシが手書きされ、新しいメソッドを有するようにCがその後修正された場合、手書きのプロキシはそのメソッドを含まないであろう。しかしながら、ランタイムにおいて目標クラスを検討することによってどのメソッドをプロキシするかを選択するランタイムに生成されたプロキシは、クラスCと同期したままであろう。
図2は、一実施形態に係る、本明細書に記載されるクラスの構造記述を例示する論理ブロック図である。上記のように、クラス名は構造記述200などの構造記述によって表わされ得る。たとえば、仮想化ランタイム環境140などのランタイム環境は、いくつかの実施形態においてクラスを生成するためのレシピの符号化と考えられ得る構造記述200によってクラスが記述されることを可能にするように構成され得る。たとえば、図2に示されるように、構造記述200は、ジェネレータ関数識別子210とジェネレータ関数についての1つ以上のパラメータ220とを含み得る。
ジェネレータ関数識別子210は、異なる実施形態によれば、ジェネレータ関数を識別する様々なやり方のうちのいずれかを表わし得る。たとえば、一実施形態では、ジェネレータ関数識別子210は、パラメータ220を用いて特定型のクラスを生成するように構成されたジェネレータ関数の名前を表わし得る。別の実施形態では、ジェネレータ関数識別子210は、特定のジェネレータ関数を実施するように構成されたクラスまたはメソッドへの参照を表わし得る。したがって、ジェネレータ関数識別子210によって識別されたジェネレータ関数は、様々な実施形態によれば、論理ジェネレータ関数または実際のプログラム関数(またはメソッド)を表わし得る。
たとえば、一実施形態では、構造記述200は、(たとえば、名前による、またはそれを実施するクラスもしくはメソッドへの参照による)パターンへの参照と、パターンのインスタンス化へのパラメータとを含み得る。仮想化ランタイム環境は、クラスを名前で(たとえばクラス名によって)参照し得る。たとえば、同じ名前を有する場合、2つのクラス参照は同じと考えられ得る。いくつかの実施形態では、クラスは、パターンのインスタンス化に基づいて生成され得る。そのようなインスタンス化は、様々な種類の引数を取り得る。
たとえば、「Xインターフェイスのための転送プロキシ」または「Yインターフェイスのためのファクトリ」は各々、パターンのインスタンス化に基づいて生成されることになるクラスを表わし得る。例示的な一実施形態に従って、「Xインターフェイスのための転送プロキシ」のパターン例のインスタンス化に基づいて生成されることになるクラスについての構造記述200は、転送プロキシジェネレータ関数を識別するジェネレータ関数識別子210を含んでもよく、特定のXインターフェイスを表わすパラメータ220を含んでもよい。同様に、「Yインターフェイスのためのファクトリ」のパターン例のインスタンス化に基づいて生成されることになるクラスについての構造記述200は、例示的な一実施形態によれば、ファクトリジェネレータ関数を識別するジェネレータ関数識別子210を含んでもよく、特定のYインターフェイスを表わすパラメータ220を含んでもよい。
上記のように、いくつかの実施形態では、ジェネレータ関数(たとえばパターンのインスタンス化)に基づいてクラスが生成され得る。図3は、一実施形態に係る、構造記述に基づくクラスの生成を例示する論理ブロック図である。図3に例示されるように、仮想化ランタイム環境140などの仮想化ランタイム環境(またはクラスローダ150などの、仮想化ランタイム環境140のコンポーネント)は、クラスファイル300における構造記述310などの構造記述に遭遇(たとえば識別、発見など)し得る。たとえば、仮想化ランタイム環境140は、クラスファイル300からのコードを実行していてもよいし、クラスファイル300のコード内の構造記述310を識別してもよい。
構造記述310によって記述されるクラスを生成するために、仮想化ランタイム環境140は、ジェネレータ関数330などの適切なジェネレータ関数を識別し、特定し得る。いくつかの実施形態では、仮想化ランタイム環境140は、上述のジェネレータ関数識別子などの構造記述310内の情報に基づいてジェネレータ関数330を識別し得る。ジェネレータ関数は、いくつかの実施形態によれば、仮想化ランタイム環境140にアクセス可能なランタイムライブラリ内などの様々な場所のいずれかに配置され得る。いくつかの実施形態では、ジェネレータ関数330は、構造記述に基づいてクラスを生成するように構成されたメソッドまたはクラスを表わし得る。
仮想化ランタイム環境140は、構造記述310に対応するクラスを生成するためにジェネレータ関数330を実行するように構成されてもよく、構造記述310からジェネレータ関数330に1つ以上のパラメータを(たとえば実行されたメソッドへの引数として)送ってもよい。一実施形態では、ジェネレータ関数330に個々のパラメータを送るのではなく、仮想化ランタイム環境140は、構造記述310を引数としてジェネレータ関数330に送るように構成されてもよい。ジェネレータ関数330は、その場合、構造記述310に対応する(たとえば構造記述310によって記述される)クラスを生成する際に構造記述310の情報を利用し得る。たとえば、ジェネレータ関数330は、構造記述310からの1つ以上のパラメータを使用してもよい。
ジェネレータ関数330は、様々な実施形態によれば、構造記述310によって記述されるクラスに対応する、または該クラスを生成するのに使用可能な、ジェネレータ関数結果340などの結果または出力を生成し得る。たとえば、一実施形態では、ジェネレータ関数結果340は、クラスを規定するかまたは宣言するソースコードであってもよく、ソースコードは、仮想化ランタイム環境140によってコンパイルされ、かつ/または他の方法で用いられるのに好適であり得る。別の実施形態では、ジェネレータ関数結果340は、構造記述310によって記述されるクラスについての、すでにコンパイルされたコード(たとえばバイトコード)を含み得る。たとえば、構造記述310は、別のすでにコンパイルされたクラスからのバイトコードの単純な変換によって生成され得るクラスを記述してもよく、したがってジェネレータ関数330は、クラスの実行可能なバイトコード形式を仮想化ランタイム環境140に提供することが可能であり得る。
仮想化ランタイム環境140は、異なる実施形態に従って、様々なやり方のいずれかでジェネレータ関数結果340を利用するように構成されてもよい。たとえば、一実施形態では、仮想化ランタイム環境140は、生成されたクラスを(たとえばジェネレータ関数結果340に基づいて)メモリまたはディスクのいずれかのクラスファイルに格納するように構成されてもよい。
仮想化ランタイム環境によって行なわれると上記したが、様々な実施形態によれば、ソフトウェア開発および/または実行環境の他のコンポーネントによってクラスが生成されてもよい。たとえば、一実施形態では、コンパイラは、図4に関してより詳細に以下で述べられるように、構造記述に基づいてクラスを生成するように構成されてもよい。
図4は、本明細書に記載されるように、クラスの構造記述に基づいてクラスを生成するための方法の一実施形態を例示するフローチャートである。ブロック400に示されるように、構造記述はクラスファイルにおいて識別されてもよく、構造記述は、ジェネレータ関数を識別する情報とジェネレータ関数についての1つ以上のパラメータとを含んでもよい。たとえば、一実施形態では、コンパイラ120は、両方とも図3に関して上記したクラスファイル300の構造記述310などの構造記述によって記述されたクラスを、識別するように構成されてもよい。図3は仮想化ランタイム環境140によるクラスの生成を例示したが、いくつかの実施形態では、コンパイラ120も仮想化ランタイム環境140を参照して上記したようにクラス生成を行なうように構成されてもよい。一般に、ソフトウェア開発および/または実行環境の様々なコンポーネントのうちのいずれも、本明細書に記載されるように、かつ様々な実施形態に従って、クラスの構造記述を利用するように構成され得る。
図4に戻り、ブロック400に示されるように、一実施形態では、コンパイラ120は、クラスファイル300内の構造記述310を識別し得る。構造記述310は、ジェネレータ関数を識別する情報とジェネレータ関数についての1つ以上のパラメータとを含み得る。たとえば、それぞれ転送プロキシクラスおよびインターフェイスファクトリクラスを生成するように構成された2つのジェネレータ関数は各々、実施形態例によれば、結果として生じるクラスと共に用いられることになる特定型のインターフェイスを表わす1つ以上の引数を取り得る。
いくつかの実施形態では、コンパイラ120はクラス名として構造記述を利用するように構成されてもよく、構造記述によって記述される(たとえばクラスファイル中の)クラスを識別した後、ブロック410によって例示されるように、構造記述において指定されたジェネレータ関数を実行し、入力引数として1つ以上のパラメータをジェネレータ関数に提供し得る。たとえば、コンパイラ120は、ジェネレータ関数330を実行し、かつ引数として1つ以上のパラメータをジェネレータ関数330に送るように構成され得る。一般に、異なる実施形態に従って構造記述を実施する一部としてジェネレータ関数を実行する場合には、入力パラメータを提供する任意の好適な方法を利用してもよい。
いくつかの実施形態では、ジェネレータ関数に個々のパラメータを提供するのではなく、構造記述自体をジェネレータ関数に入力として提供してもよく、ジェネレータ関数はそこから個々のパラメータを取得してもよい。たとえば、一例によれば、ジェネレータ関数330を実行する際、コンパイラ120は、構造記述310を入力引数として提供してもよい。
識別されたジェネレータ関数を実行した後、コンパイラは、ブロック420に示されるように、ジェネレータ関数からの結果(たとえば出力)に少なくとも部分的に基づいて、構造記述によって記述されたクラスに対応するクラスを生成するように構成されてもよい。たとえば、ジェネレータ関数330は、様々な実施形態によれば、クラスを作成するのに使用可能な情報を含むジェネレータ関数結果340を生成してもよく、コンパイラ120は、ジェネレータ関数結果340を得て、ジェネレータ関数結果340をクラスファイル350に保存することなどによって、対応するクラスを作成してもよい。
上記のように、構造記述の一使用例は、特定のデータ型について特殊化された(たとえばパラメータ化された)クラスを生成することである。たとえば、ジェネレータ関数は、特殊化されることになるクラスおよびその特殊化引数を引数として取り得る。たとえば、以下のBoxクラス例は、構造記述を用いてT=intにより特殊化され得る。
コンパイラ(および/または仮想化ランタイム環境のコンポーネント)は、BoxクラスがT=intについて特殊化されるべきであることを示す構造記述を含むソースコードに遭遇し得る、たとえばソースコード例によって表わされ得る:
コンパイラが上記のソースコードに遭遇すると、特殊化ジェネレータ関数を指定する構造記述を用いてBoxクラスおよび型Integer(たとえばint)をパラメータとして用いてT=intについてBoxクラスが特殊化されるべきであることを認識し得る。したがって、コンパイラは、Boxクラス(場合によっては一例としてクラス名「Box」)を指定するパラメータとデータ型intとを(引数として)送るスペシャライザジェネレータ関数を特定し実行し得る。応答して、スペシャライザジェネレータ関数は、以下の例などにおいてT=intについて特殊化されたBoxクラスを実施するソースコードを生成し得る:
次いで、コンパイラは、ジェネレータ関数(たとえば生成クラスソースコード)の結果を得て、必要とされるように使用し得る(たとえば、クラスファイルなどにそれをコンパイラおよび/または保存する)。
同様に、コンパイラ120は、以下のコード例によって表されるようなTupleジェネレータ関数および2つのパラメータを指定する構造記述にソースコード内で遭遇し得る:
上記の例では、構造記述は、カッコ内の2つのパラメータの型(たとえばT1およびT2)と共にキーワード「Tuple」を含む。構造記述との遭遇に応じて、コンパイラは、入力パラメータとして2つの型を送るTupleジェネレータ関数を実行し得る。ジェネレータ関数の結果は、2つの型についてTupleクラスを実施する追加的なソースコードを含み得る。たとえば、上記の例におけるT1が整数型を表わし、上記の例におけるT2が文字列型を表わす場合、Tupleジェネレータ関数は、以下のソースコード例のように、整数および文字列を有するTupleを実施するためのソースコードを生成し得る:
上記の特殊化された例と比較して、Tuple例は、入力として供給されたクラスを単純に特殊化するのではなく、ジェネレータ関数がどのように新しいソースコードを生成し得るかを例示する。しかし他の実施形態では、上記のTuple例はスペシャライザジェネレータ関数の特殊なケースとして実施されてもよい。
ジェネレータ関数によるコード出力(たとえばジェネレータ関数の結果)は次いでコンパイラによって利用されてもよい(たとえばクラスファイル内などにコンパイルされ、かつ/または保存され得る)。いくつかの実施形態では、構造記述の使用によって生成される結果として生じるクラスは、デベロッパーには見られない(または利用可能ではない)かもしれない。その代り、システムの内部にあり、構造記述の代わりに用いられると考えられ得る。たとえば、上記のTuple例では、デベロッパーはTuple<T1, T2>クラス(またはオブジェクト)を使用し参照してもよいが、構造記述の使用に応じて生成された内部のTuple$98456表現は見てはならない。
コンパイラに関して上記したが、図4に例示される方法は、ソフトウェア開発または実行環境の様々なコンポーネントのいずれかによって、たとえば仮想化ランタイム環境、および/または仮想化ランタイム環境内のクラスローダによって行なわれてもよい。
Javaベース仮想マシン(VM)などの仮想化ランタイム環境は、クラスを名前で(たとえば名前によって)参照し得る。従来から、クラスは以下の例の部分的なコンスタントプールダンプのように名前のみによって参照され得る:
コンスタントプール:
上記の例では、「Class」定数は、クラス名を記述する文字列定数を参照する。バイトコードにおける様々な用途(スーパークラス名、呼び出されるべきメソッドを所有するクラスの名前、およびinstanceofオペランド))は、このやり方でクラスを名前で参照し得る。
同じ名前を有する場合、2つのクラス参照は同じと考えられ得る。これは、各クラスが固有で、既知の、安定した名前を有すると想定し得るし、各クラスが(手または機械によって)静的に生成され、ファイルシステムに格納されることも通常は必要とし得るが、特定のジェネレータ関数(たとえば特定の生成、変換、および/またはパターン)を特定の入力もしくはパラメータに適用するインスタンスとしてよりよく記述(および比較)され得る多くのクラスがある。
したがって、いくつかの実施形態では、(たとえばクラスファイル中の)クラスは、その引数に適用されると、クラスおよび(場合によっては)所望のインスタンス化を記述する一組の引数を生成するジェネレータ関数を含む構造記述を用いて記述され得る。それらの名前によって同一性が比較されるのではなく、そのような構造クラスは、同じジェネレータ関数および引数を有することによって同一性が比較されてもよい。
いくつかの実施形態では、結果として生じるクラスを生成するためにジェネレータ関数を呼び出すことなく構造記述を比較してもよい。その代わり、構造記述は、それらの個々の要素の比較などによって構造的に比較されてもよい。たとえば、Listクラス上のダイナミックプロキシジェネレータを用いて1つの構造記述が指定し、Listクラス上のダイナミックプロキシジェネレータを用いて別のものが指定する場合、それらは、指定されたジェネレータ関数をまず比較し、それらが同じであれば、それぞれのジェネレータ関数に送られている特定のパラメータを比較することによって、比較され得る。
加えて、いくつかの実施形態によれば、2つのクラスはそれぞれの構造記述に基づいて比較されてもよい。図5は、本明細書に記載されるように、2つのクラスをそれらの構造記述に基づいて比較するための方法の一実施形態を例示するフローチャートである。たとえば、2つの構造記述(たとえばパターンへの2つの構造参照)は、それらが同じジェネレータ関数およびパラメータ(たとえば同じパターンおよびパラメータ)を利用する場合、同じクラスである(または表わす)と考えられ得る。
ブロック500に示されるように2つのクラスをそれらの構造記述に基づいて比較することは、ブロック510に示されるように2つのクラスについてのジェネレータ関数を比較することを含み得る。たとえば、一実施形態では、コンパイラ120は、ジェネレータ関数を識別する構造記述の情報を比較することによって、2つのクラスのジェネレータ関数を比較するように構成され得る。たとえば、一実施形態によれば、2つの構造記述がジェネレータ関数の名前を含み、両者が同じ名前を含む場合、2つの構造記述は同じジェネレータ関数を識別すると考えられ得る。
決定ブロック520の肯定的な出力によって示されるように、2つのジェネレータ関数が同じである(たとえば、両方の構造記述が同じジェネレータ関数を識別する)場合は、ブロック530に示されるように、ジェネレータ関数についてのパラメータが比較され得る。たとえば、いくつかの実施形態によれば、2つのクラスは、それらが異なるパラメータを同じジェネレータ関数に送ることに基づく場合は、異なると考えられ得る。たとえば、両方ともTupleジェネレータ関数に基づく2つのクラスは、それらが異なるパラメータをジェネレータ関数に送る(たとえば一方が2つの整数を指定し、他方はパラメータとして文字列および整数を指定する)場合は、異なると考えられ得る。
決定ブロック540の肯定的な出力によって示されるように、2つの構造記述によって指定されるパラメータが同じである場合は、ブロック550でのように、2つの構造記述は同じクラスを表わすと考えられ得る。しかし、決定ブロック520の否定的な出力によって示されるようにジェネレータ関数が同じでないか、または決定ブロック540の否定的な出力によって示されるようにパラメータが一致しない場合、ブロック560でのように、2つの構造記述は2つの異なるクラスを表わすと考えられ得る。
いくつかの実施形態によれば、構造記述の個々の部分(たとえばジェネレータ関数識別子、パラメータ)が比較されてもよいが、結果として生じるクラスは生成されなくてもよい。いくつかの実施形態では、2つの構造記述の比較の一部としてなされる個々の比較は、物事を名前で(たとえば原文どおりに、名前によって)比較することを包含し得るが、他の実施形態では含まなくてもよい。たとえば、一実施形態では、ジェネレータ関数は構造記述内の名前によって指定されてもよく、したがって、ジェネレータ関数識別子は、(たとえば、ジェネレータ関数識別名であるため)名前で比較され得る。他の実施形態では、構造記述の個々の部分は他のやり方で(たとえば、数、参照などを比較することによって)比較され得る。
いくつかの実施形態では、2つの構造記述の個々の部分の比較は、構造記述の個々の一部をプログラマ/デベロッパーに比較させるのではなく、ライブラリ機能および/またはライブラリクラスによってのみ行なわれ得る。
いくつかの実施形態では、ジェネレータ関数は、それらの構造記述を用いたクラスの比較に関係することが可能とされ得る。たとえば、構造記述において示されたジェネレータ関数は、2つのクラスが同じかどうかの判断に関係することが可能とされ得る。したがって、いくつかの実施形態において、それらの構造記述に基づいて2つのクラスを比較する場合、コンパイラ120は、比較されているクラスについての構造記述の1つにおいて識別されるジェネレータ関数に関連付けられるメソッドを呼び出すように構成され得る。コンパイラは、比較されている構造記述のうち1つ以上を呼び出されたメソッドに送り得る。次いでメソッドは、(たとえば、構造記述の情報を比較するなどによって)構造記述が同じクラスを表わすか否かを判定し得る。
たとえば、いくつかの場合には、ジェネレータ関数への(たとえばパターンのインスタンス化への)パラメータは可換(たとえば複数のインターフェイスのためのダイナミックプロキシ)であり得るが、他の場合にはそうではないかもしれない。(たとえばパターンインスタンス化の)そのような構造記述は、他の方法でクラス名が出現することができるいかなる場所に出現してもよい。たとえば、クラスの構造記述は、引数型、戻り値型、フィールドタイプ、スーパータイプ、instanceofもしくはキャスト演算子のオペランド、またはクラス名が用いられ得る事実上あらゆる場所として、またはその一部として出現し得る。
いくつかの実施形態では、構造記述の使用は再帰的であり得る。たとえば、クラスを生成する際にジェネレータ関数への入力として用いられることになるパラメータのうちの1つ以上は、クラスについての構造記述であり得る。図6は、一実施形態に係る、再帰的に用いられる構造記述を例示する論理図である。図2に示されるように、上記の構造記述200などの構造記述は、ジェネレータ関数識別子および識別されたジェネレータ関数についての1つ以上のパラメータを含んでもよい。いくつかの実施形態では、ジェネレータ関数へのパラメータのうちの1つ以上はクラスであり得、それらのクラスは、構造記述によって表わされ(たとえば記述され)得る。したがって、構造記述200のパラメータ220は、1つの例示的な実施形態によれば、構造記述600であり得る(または表し得る)。構造記述600は、ジェネレータ関数識別子610と1つ以上のパラメータとを含み得る。
ジェネレータ関数識別子610は、異なる実施形態によれば、ジェネレータ関数識別子210によって識別されたものと同じかまたは異なるジェネレータ関数を識別し得る。したがって、いくつかの実施形態では、ジェネレータ関数(またはジェネレータ関数を表わすクラス)は再帰的に実行されるように構成され得る。
構造記述200によって表されるクラスを生成する際、コンパイラ120は、まず構造記述600によって表されるクラスを生成し、次いでそのクラスを構造記述200についてのジェネレータ関数に入力として送るように構成され得る。したがって、いくつかの実施形態では、コンパイラ120は、生成されることになるクラスをそれらのうちいずれかが表わしているかどうかを判定するために、構造記述のすべてのパラメータを調べるように構成され得る。他の実施形態では、ジェネレータ関数自体が、入力パラメータが構造記述であり得ると認識するように構成されてもよく、さらに、その構造記述に基づいてクラスを生成し、かつ生成したクラスをそれ自身のクラスを生成するための入力として使用するように構成されてもよい。
図6に例示されるような一連の構造記述は、複数の反復層を含んでもよい。たとえば、構造記述600のパラメータ620は、ジェネレータ関数識別子650およびパラメータ660を含み得る構造記述640であり得る(または参照し得る)。ジェネレータ関数識別子650は、ジェネレータ関数識別子210によって識別されるのと同じジェネレータ関数を表わしてもよいし、ジェネレータ関数識別子610によって識別されるのと同じジェネレータ関数を表わしてもよいし、異なるジェネレータ関数を表わしてもよい。同様に、構造記述600のパラメータ630は、ジェネレータ関数識別子680およびパラメータ690を含み得る構造記述670であり得る(または参照し得る)。
さらに、構造記述を用いたクラスの比較は、様々な実施形態によれば、複数の構造記述の層を介した反復を伴い得る。たとえば、構造記述の1つ以上によって指定された個々のパラメータは、それら自体が構造記述であり得る。したがって、比較は、個々のパラメータ自体が構造記述でなくなるまで複数の構造記述の層を介した反復を必要とし得る。比較されている2つの当初の構造記述が各反復層において同じジェネレータ関数とパラメータとを指定する構造記述の同じ層を含む場合は、比較されている2つの当初の構造記述(と、したがって2つの当初のクラスと)は同じと考えられ得る。
一般に、構造記述は、ある種類から別の種類への、事実上いずれの機械的な変換にも用いられ得る。たとえば、様々な実施形態によれば、構造記述は、T=intについてのジェネリッククラスList<T>を特殊化し、1つ以上のインターフェイスのためのダイナミックプロキシを実施し、1つ以上のインターフェイスのためのプロキシの転送を実施し、所与のコンポーネント型を有するTupleを表わすクラスを実施するため、かつ所与の引数および戻り値型についての構造機能型を表わすクラスを実施するために利用され得る。
様々な実施形態に係る構造記述を用いるのに好適な状況の例は、次のものを含み得る:
包括的な特殊化
構造記述を用いるのに好適な変形の1つの例は、包括的な特殊化を実施することを含み得る。構造記述を用いて特殊化を実施する際、ジェネレータ関数は、(部分的にまたは全体的に)特殊化されることになるクラスおよび特殊化に用いられることになる特殊化された型の引数を引数として取り得る。たとえば、List<T>がT=intにより特殊化されると指定する構造記述は、特殊化ルールに従って注釈された署名および命令を変更し、ほかのすべては変更しないことによってクラスList<T>を変形した結果であるクラスを生成し得る。
したがって、ランタイムライブラリによって提供される1つのジェネレータ関数は、その引数が特殊化されるべきクラスおよびタイプ引数の特殊化を指定し得るスペシャライザ関数であり得る。たとえば、intのArrayListが生成されることになる場合、構造記述は、ArrayListおよびintを引数としてスペシャライザジェネレータ関数を実行したことに起因するダイナミッククラスの生成を指定する。いくつかの実施形態では、スペシャライザジェネレータ関数は、特殊化されるべきクラスのクラスファイルを読出し、かつ新しいクラスファイルを生成し得る。古いクラスファイルの構造を用いて、スペシャライザジェネレータ関数は、いくつかの実施形態に従って、メソッド署名、フィールドなどの型を特殊化するようにobjectの使用をintに置換しつつ、新しいクラスファイルにいくつかのアイテムを直接送ってもよい。
インターフェイスのためのダイナミックプロキシ
構造記述を用いるのに好適な変形の別の例は、いくつかの実施形態によれば、1つ以上のインターフェイスのためのダイナミックプロキシを実施することを含み得る。たとえば、ジェネレータ関数は、プロキシへの一組のインターフェイスを引数として取ってもよく、それらのインターフェイスをすべて実施するクラスを生成してもよく、そのメソッドは、結果として生じるクラスのコンストラクタに送られる呼出しハンドラに急送される。したがって、一実施形態によれば、ダイナミックプロキシの生成を指定する構造記述は、ダイナミックプロキシジェネレータ関数の識別を含んでもよく、パラメータとして1つ以上のインターフェイス型を指定してもよい。
たとえば、デベロッパーは、クラスのgetメソッドが呼び出されると、getメソッドへの呼出のどこでどのパラメータが用いられるかを示すハンドラメソッドも呼び出されるように(たとえばgetメソッド呼出が遮断され得るように)、Listインターフェイスを実施するクラスのインスタンスを実施したい場合がある。換言すると、デベロッパーは、Listインターフェイスのためのダイナミックプロキシを実施したい場合がある。
ダイナミックプロキシを実施するために、構造記述は、ダイナミックプロキシジェネレータ関数を実行する際にパラメータとして使用されることになるインターフェイス(たとえばList interface)を指定し得る。
インターフェイスのためのプロキシの転送
同様に、いくつかの実施形態によれば、構造記述を用いて1つ以上のインターフェイスのための転送プロキシを実施してもよい。たとえば、ジェネレータ関数はプロキシへの一組のインターフェイスをパラメータとして取ってもよく、(たとえば、Corba、またはEnterprise Java Beans、またはRemote Method Invocationなどとの使用のために)ネットワークまたはリモートプロキシクラスを実施するようにこれらのインターフェイスをすべて実施するクラスを生成してもよい。
ダイナミックプロキシに関して上記したように呼出しハンドラに急送するのではなく、メソッド呼出は、これらのインターフェイスを実施し、かつ結果として生じるクラスのコンストラクタに提供され得る背景にあるオブジェクトに転送されてもよい。したがって、構造記述は、転送プロキシジェネレータ関数および1つ以上のインターフェイスをパラメータとして指定し得る。
Tuple型
構造記述を用いるのに好適な変形の別の例は、いくつかの実施形態によれば、指定されたコンポーネント型を有するタプル型を含み得る。たとえば、フィールドの型を引数として取り、その特定のTupleを表わすクラスを出力し、指定された型の要素を有するTupleジェネレータ関数が提供され得る。
たとえば、デベロッパーは、以下の例などの2つのデータ型T1およびT2についてTupleを実施するソースコードを書込んでもよい。
コンパイラは、Tupleジェネレータ関数および型T1およびT2をパラメータとして指定する構造記述を用いてもよい。たとえば、構造記述は、2つのパラメータの型(たとえばT1およびT2)と共に、特定のジェネレータ関数(たとえば「Tuple」)を識別するキーワードを含んでもよい。ランタイムにおいて、構造記述が用いられると、ランタイム環境は、2つのデータ型を送るジェネレータ関数を引数として識別し、特定し、実行し得る。Tupleジェネレータ関数は次いで、以下のコード例のように、2つの指定されたデータ型を用いて、Tupleクラスを規定するバイトコードを出力し得る:
プロキシの縮小
構造記述を用いるのに好適な変形の別の例は、縮小プロキシを含み得る。たとえば、クラスCはインターフェイスIを実施してもよい。クラスCは何らかの他のメソッドに送られ得るが、インターフェイスIのメソッドのみが可視であることが望ましい場合がある(つまりCが何らかの他の型にダウンキャストされることが望ましくない場合がある)。
従来は、以下のコード例のように、手動アダプタが書込まれるであろう:
いくつかの実施形態では、引数としてクラスIを取り、IAdapterを生成するジェネレータ関数が書込まれてもよい。このメカニズムによって、各Iについてアダプタを手で書込む必要性がなくなり得、その代わり、構造記述を用いて必要に応じて生成され得る。たとえば、構造記述は、縮小プロキシジェネレータ関数およびクラスIをパラメータとして指定し得る。実行されると、生成された縮小プロキシは、上記の例のようにIAdapterクラスを生成し得る。
コンパイル時間における生成されたクラスの内観
加えて、いくつかの実施形態では、コンパイル時間においてクラスが内観され得る。たとえば、「class Foo extends List<int>」の時、List<int>が動的に生成され、コンパイラは次いでList<int>の要素を識別するためにジェネレータを実行しなければならない場合があり、コンパイル決定を下すためにそれを使用する。同じクラスは、その後のランタイムで再度特殊化されてもよい。
加えて、「class Foo extends List<int>」の場合/時、構造記述を用いてList<int>が実施される(たとえば、名前だけのクラスではなくパターンのインスタンス化として表される)場合、コンパイラは、いくつかの実施形態では、スーパークラスの構造および要素を知る必要があり得る。たとえば、コンパイラ120は、その場合、対応するジェネレータ関数を実行してList<int>クラスを生成し、それに対して反射的に内観し、必要とされるデータを収集し得る。特殊化されたクラスは次いで、実際に用いられるランタイムにおいて再生成され得る。
生成されたクラスに対する反映
生成されたクラスは、「見苦しい」(たとえば複雑な)名前を有する(または名前を有さない)場合がある。しかしながら、ユーザはこのクラスに対して反映させたい場合がある。したがって、いくつかの実施形態では、生成された(たとえば複雑な、または「見苦しい」)名前を、コンパイル型の静的な型システムの反映図に再度接続してもよい。さらに、クラスがたとえばGenerated$List$$23$T=intなどの、より複雑な名前を実際に有する場合であっても、生成されたクラスの名前の人間が読取り可能な(たとえば人にやさしい)記述が復元され得る。
いくつかの実施形態では、構造記述の実施は、生成されたクラスを、それを作成するために用いられた特定のジェネレータ(たとえば特定の変形、レシピ、公式など)に接続し返す方法を提供し得る。したがって、いくつかの実施形態では、構造記述は、人間が読取り可能なテキスト形式で、用いられた特定のジェネレータをレンダリングするやり方を提供し得る。加えて、いくつかの実施形態では、構造記述の実施は、特定の構造記述を、当初用いられた言語の型システムにマッピングし返すためのメカニズムも提供し得る。たとえば、ランタイム環境がクラスを参照するための低水準メカニズムとして構造記述を提供する一方、高水準言語(たとえばJava)は、型システムを提供してもよく、様々な種類の高水準言語を表わすやり方として構造記述を用いてもよい。
反映メカニズムを利用する場合、高水準言語のあらゆる種類を、(ランタイム環境によって用いられる型システムとは異なり得る)高水準言語の型システムにマッピングするやり方で反射層に記述可能とすることが望ましい場合がある。したがって、いくつかの実施形態では、構造記述の型が(たとえば高水準言語の)当初の型システムに接続し返され得るように、言語の固有の型システムの、構造記述への言語固有のマッピングが逆転されてもよい。
上記の検討は、クラス、メソッドなどになされる手作業による変更について記載しているが、両者とも上記したコンパイラ120などのコンパイラ、または仮想化ランタイム環境140などの仮想化ランタイム環境は、手作業で行なわれるものとして上記した特徴を、理解し、分析し、または他の方法で処理するように構成されてもよい。たとえば、クラスおよびメソッドの手作業による改良に関する上記の節は、クラスまたは方法を手作業で追加するかまたは修正することを指し得るが、コンパイラまたは仮想は、たとえばクラスを適切に特殊化するように、手作業で修正されたコード(またはバイトコード)を受付けて処理するように構成されてもよい。一般に、コードに対する手作業の修正を用いた様々な方法、特徴および/または改良が本明細書に記載され得るが、そのような記載は説明を簡単にするためであり、そのような方法、特徴および/または改良の実施は、コンパイラおよび/または仮想マシンも伴い得る。
主として静的なだけの型を参照して上記したが、本明細書に記載した方法、特徴および/または改良は、静的なだけの型には限定されない。いくつかの実施形態では、本明細書に記載した方法、特徴および/または改良は、動的な型に適用されてもよい。たとえば、
などの(たとえば、リストの型パラメータが型境界を侵害した場合、何らかの種のランタイム例外が適用されるであろう)チェックされたが不十分に特殊化された式が本明細書に記載される方法、特徴および/または改良によって行なわれてもよい。
少なくともいくつかの実施形態では、本明細書に記載される技術の1つ以上の一部分またはすべてを実施するコンピュータシステムは、1つ以上のコンピュータ読取可能媒体を含むかまたはアクセスするように構成される汎用コンピュータシステムを含み得る。図7は、本明細書に記載される方法、特徴および改良を実施するのに好適なそのような汎用の計算装置3000を例示する。例示される実施形態では、計算装置3000は、入力/出力(I/O)インターフェイス3030を介してシステムメモリ3020に結合された1つ以上のプロセッサ3010を含む。計算装置3000は、I/Oインターフェイス3030に結合されたネットワークインターフェイス3040をさらに含む。
様々な実施形態において、計算装置3000は、1つのプロセッサ3010を含むユニプロセッサシステム、またはいくつかのプロセッサ3010(たとえば2つ、4つ、8つ、または別の好適な数)を含むマルチプロセッサシステムであり得る。プロセッサ3010は、命令を実行することが可能な任意の好適なプロセッサを含み得る。たとえば、様々な実施形態では、プロセッサ3010は、x86、PowerPC、SPARC、もしくはMIPS ISAなどの様々な命令セットアーキテクチャ(ISA)のうちいずれか、または任意の他の好適なISAを実施する、汎用または埋込みプロセッサであり得る。マルチプロセッサシステムでは、プロセッサ3010の各々は、必ずではないが一般に、同じISAを実施し得る。
システムメモリ3020は、プロセッサ3010によってアクセス可能なプログラム命令およびデータを格納するように構成され得る。様々な実施形態では、システムメモリ3020は、静的ランダムアクセス記憶装置(SRAM)、シンクロナスダイナミックRAM(SDRAM)、不揮発性/フラッシュ型メモリ、または任意の他の種類のメモリなどの任意の好適なメモリ技術を用いて実装され得る。例示される実施形態では、上記したそれらの方法、技術、およびデータなどの1つ以上の所望の機能を実施するプログラム命令およびデータは、コード(つまりプログラム命令)3025およびデータ3026としてシステムメモリ3020内に格納されるように示される。たとえば、メモリ3020ならびにコード3025およびデータ3026は、一実施形態では、上記のコンパイラ120および/または仮想化ランタイム環境140を実施するためのプログラム命令およびデータを格納し得る。
様々な実施形態では、コンパイラ120および/または仮想化ランタイム環境140(および/またはその任意の個々のサブモジュール)は各々、様々なプログラミング言語または方法のいずれかで実施され得る。たとえば、一実施形態において、コンパイラ120および/または仮想化ランタイム環境140はC、C++、アセンブリ、JAVA、または他の汎用プログラミング言語のいずれかで書かれてもよいが、別の実施形態では、それらの1つ以上は、異なる、より特殊化されたプログラミング言語で書かれてもよい。また、いくつかの実施形態では、コンパイラ120および/または仮想化ランタイム環境140(および/またはその様々なサブモジュール)は、同じプログラミング言語を用いて実施されなくてもよい。
一実施形態では、I/Oインターフェイス3030は、プロセッサ3010、システムメモリ3020、およびネットワークインターフェイス3040または他の周辺インターフェイスを含む装置内の任意の周辺機器の間のI/Oトラフィックを調整するように構成され得る。いくつかの実施形態では、I/Oインターフェイス3030は、1つのコンポーネント(たとえばシステムメモリ3020)からのデータ信号を別のコンポーネント(たとえばプロセッサ3010)による使用に好適なフォーマットに変換するために、任意の必要なプロトコル、タイミングまたは他のデータ変換を行ってもよい。いくつかの実施形態では、I/Oインターフェイス3030は、たとえば周辺コンポーネント相互接続(PCI)バス規格またはユニバーサル・シリアル・バス(USB)規格の変形例などの様々な種類の周辺バスによって取付けられた装置のためのサポートを含み得る。また、いくつかの実施形態では、システムメモリ3020へのインターフェイスなどのI/Oインターフェイス3030の機能性のうちのいくつかまたはすべてがプロセッサ3010に直接組込まれてもよい。
ネットワークインターフェイス3040は、計算装置3000とネットワーク3050に取付けられた他の装置3060との間でデータが交換されることを可能にするように構成され得る。様々な実施形態では、ネットワークインターフェイス3040は、たとえばイーサネット(登録商標)ネットワークの種類などの任意の好適な有線または無線の一般的なデータネットワークによる通信をサポートし得る。
いくつかの実施形態では、システムメモリ3020は、対応する方法および装置の実施形態を実施するために図1〜図6を参照して上記したようにプログラム命令およびデータを格納するように構成されたコンピュータ読取可能(たとえばコンピュータアクセス可能な)媒体の一実施形態であり得る。しかし、他の実施形態では、プログラム命令および/またはデータは、異なる種類のコンピュータ読取可能媒体上で受信されても、送信されても、格納されてもよい。概して言えば、コンピュータ読取可能媒体は、磁気または光媒体、たとえばI/Oインターフェイス3030を介して計算装置3000に結合されたディスクまたはDVD/CDなどの非一時的な記憶媒体を含み得る。非一時的なコンピュータ読取可能記憶媒体は、システムメモリ3020または別の種類のメモリとして計算装置3000のいくつかの実施形態において含まれ得るRAM(たとえばSDRAM、DDR SDRAM、RDRAM、SRAMなど)、ROMなどといった任意の揮発性または不揮発性媒体も含み得る。
さらに、コンピュータ読取可能媒体は、ネットワークインターフェイス3040によって実施され得るような、ネットワークおよび/または無線リンクなどの通信媒体によって伝達される電気、電磁気、またはデジタル信号などの伝送媒体または信号を含み得る。図7に例示されるような複数の計算装置の部分またはすべてを用いて、様々な実施形態において記載した機能性を実施してもよい。たとえば、、様々な異なる装置およびサーバ上で動作するソフトウェアコンポーネントが協働して機能性を提供してもよい。いくつかの実施形態では、記載した機能性の部分は、汎用コンピュータシステムを用いて実施されることに加えて、またはその代わりに、記憶装置、ネットワークデバイスまたは専用計算機システムを用いて実施されてもよい。本明細書で用いられる限りにおいて、「計算装置」という用語は少なくともすべてのこれらの種類の装置を指し、これらの種類の装置に限定されない。
様々な実施形態は、コンピュータ読取可能媒体についての前述の記載に従って実施される命令および/またはデータを受信すること、送信すること、または格納することをさらに含み得る。概して言えば、コンピュータ読取可能媒体は、磁気または光学媒体、たとえばディスクまたはDVD/CD−ROM、RAM(たとえばSDRAM、DDR、RDRAM、SRAMなど)、ROMなどといった揮発性または不揮発性媒体などの記憶媒体またはメモリ媒体を含み得る。いくつかの実施形態では、コンピュータ読取可能媒体は、ネットワークおよび/または無線リンクなどの通信媒体によって伝達される電気、電磁気、またはデジタル信号などの伝送媒体または信号も含み得る。
図に例示され、本明細書に記載された様々な方法は、方法の典型的な実施形態を表わす。方法は、ソフトウェア、ハードウェアまたはその組合せで実施され得る。様々な方法において、ステップの順序を変更してもよく、様々な要素を追加、並べ替え、組合せ、省略、修正などしてもよい。様々なステップを自動的に(たとえばユーザ入力によって直接促されることなく)、かつ/またはプログラムによって(たとえばプログラム命令に従って)行なわれてもよい。
具体的な実施形態を参照して、かつそれらのコンテキストにおいて様々なシステムおよび方法を本明細書に記載したが、これらの実施形態は例示的なものであり、開示の範囲はこれらの具体的な実施形態に限定されないことが理解されるであろう。多くの変形、修正、追加、および改善が可能である。たとえば、説明において識別されたブロックおよび論理単位は、記載した実施形態を理解するためのものであり、開示を限定することは意図していない。たとえば、コンパイラ120によって行なわれると本明細書で記載された作用、プロセス、方法、タスク、または機能は、いくつかの実施形態では仮想化ランタイム環境140によって行われてもよいし、逆もまた同様である。加えて、機能性は、本明細書に記載したかまたは異なる用語で記載したシステムおよび方法の様々な実現において違ったやり方でブロックに分離されても組合せられてもよい。
これらの実施形態は、例示的であって限定しないことを意図している。したがって、単一のインスタンスとして本明細書に記載したコンポーネントに複数のインスタンスを提供してもよい。様々なコンポーネント、動作、およびデータストアの間の境界線はやや恣意的であり、特定の動作は具体的な例示的な構成のコンテキストにおいて例示される。機能性の他の割当てが想定され、後続する例の範囲内にあり得る。最後に、典型的な構成における個別部品として提示された構造および機能性は、組合せられた構造またはコンポーネントとして実施され得る。
上記の実施形態は詳細に記載したが、上記の開示が十分に認識されれば、多くの変形および修正が明らかとなるであろう。そのような変形および修正をすべて包含するように以下の請求項が理解されることが意図される。

Claims (14)

  1. 1つ以上の計算装置上で実施されるコンパイラまたはプラットフォームに依存しないオブジェクト指向ランタイム環境によって、クラスファイルにおけるクラス名を識別することを含み、前記クラス名は構造記述を含み、前記構造記述はジェネレータ関数を識別する情報と前記ジェネレータ関数についての1つ以上のパラメータとを含み、さらに、
    前記コンパイラまたは前記プラットフォームに依存しないオブジェクト指向ランタイム環境によって前記ジェネレータ関数を実行することを含み、前記実行することは、前記ジェネレータ関数に入力として前記1つ以上のパラメータを提供することを含み、さらに、
    前記コンパイラまたは前記プラットフォームに依存しないオブジェクト指向ランタイム環境によって、前記クラス名に対応するクラスを生成することを含み、前記生成することは、前記実行することによる結果に少なくとも部分的に基づく、方法。
  2. 前記識別すること、前記実行すること、および前記生成することは、前記コンパイラによってコンパイル時間に行なわれ、前記クラスファイルは、プラットフォームに依存しないオブジェクト指向言語に基づく、請求項1に記載の方法。
  3. 前記識別すること、前記実行すること、および前記生成することは、プラットフォームに依存しないオブジェクト指向ランタイム環境において行なわれる、請求項1に記載の方法。
  4. 前記実行することは、ランタイムライブラリから前記ジェネレータ関数をローディングすることを含む、請求項1〜3のいずれか1項に記載の方法。
  5. 前記1つ以上のパラメータのうちの1つは別の構造記述を含み、前記別の構造記述は、別のジェネレータ関数を識別する情報と前記別のジェネレータ関数についての1つ以上の他のパラメータとを含み、前記実行することはさらに、
    前記コンパイラまたは前記プラットフォームに依存しないオブジェクト指向ランタイム環境によって、前記別のジェネレータ関数を実行することを含み、前記別のジェネレータ関数を実行することは、前記1つ以上の他のパラメータを前記別のジェネレータ関数に入力として提供することを含み、さらに、
    前記コンパイラまたは前記プラットフォームに依存しないオブジェクト指向ランタイム環境によって、前記別のジェネレータ関数を実行することからの結果を前記ジェネレータ関数に入力として提供することを含む、請求項1〜4のいずれか1項に記載の方法。
  6. 前記構造記述は、前記1つ以上のパラメータのうちの少なくとも1つに適用されることになる特殊化動作を指定し、
    前記ジェネレータ関数を実行することは、前記コンパイラまたは前記プラットフォームに依存しないオブジェクト指向ランタイム環境によって、前記指定された特殊化動作を前記少なくとも1つのパラメータに適用することをさらに含む、請求項1〜5のいずれか1項に記載の方法。
  7. 前記コンパイラまたは前記プラットフォームに依存しないオブジェクト指向ランタイム環境によって、別の構造記述を識別することをさらに含み、前記別の構造記述は、別のジェネレータ関数を識別する情報と前記別のジェネレータ関数についての1つ以上の他のパラメータとを含み、さらに、
    前記構造記述と前記別の構造記述との比較、および前記1つ以上のパラメータと前記1つ以上の他のパラメータとの間の比較に少なくとも部分的に基づいて、前記構造記述および前記別の構造記述が2つの等価なクラスを表わすかどうかを、前記コンパイラまたは前記プラットフォームに依存しないオブジェクト指向ランタイム環境によって判定することを含む、請求項1〜6のいずれか1項に記載の方法。
  8. 計算装置であって、
    プロセッサと、
    プログラム命令を含むメモリとを備え、前記プログラム命令は、前記プロセッサ上で実行されると、前記プロセッサに、
    構造記述を含むクラス名をクラスファイルにおいて識別させ、前記構造記述は、ジェネレータ関数を識別する情報と前記ジェネレータ関数についての1つ以上のパラメータとを含み、さらに前記プロセッサに、
    前記ジェネレータ関数を実行させ、前記ジェネレータ関数を実行するために、前記プログラム命令は、さらに前記プロセッサに、前記1つ以上のパラメータを前記ジェネレータ関数に入力として提供させ、
    前記ジェネレータ関数の実行の結果に少なくとも部分的に基づいて、前記クラス名に対応するクラスを生成させる、計算装置。
  9. 前記プログラム命令は、プラットフォームに依存しないオブジェクト指向言語のためのコンパイラを実施するようにプロセッサ上で実行可能であり、前記コンパイラは、前記識別すること、前記実行すること、および前記生成することをコンパイル時間において行なうように構成される、請求項8に記載の計算装置。
  10. 前記プログラム命令は、プラットフォームに依存しないオブジェクト指向ランタイム環境を実施するように前記プロセッサ上で実行可能であり、前記識別すること、前記実行すること、および前記生成することは、前記プラットフォームに依存しないオブジェクト指向ランタイム環境のランタイムにおいて行なわれる、請求項8に記載の計算装置。
  11. 前記1つ以上のパラメータのうちの1つは別の構造記述を含み、前記別の構造記述は、別のジェネレータ関数を識別する情報と前記別のジェネレータ関数についての1つ以上の他のパラメータとを含み、前記ジェネレータ関数を実行するために、前記プログラム命令は、さらに前記プロセッサに、
    前記別のジェネレータ関数を実行させ、前記別のジェネレータ関数を実行するために、前記プログラム命令は、さらに前記プロセッサに、前記1つ以上の他のパラメータを前記別のジェネレータ関数に入力として提供させ、
    前記別のジェネレータ関数を実行することからの結果を前記ジェネレータ関数に入力として提供させる、請求項8〜10のいずれか1項に記載の計算装置。
  12. 前記構造記述は、前記1つ以上のパラメータのうちの少なくとも1つに適用されることになる特殊化動作を指定し、
    前記ジェネレータ関数を実行するために、前記プログラム命令は、さらに前記プロセッサに、前記指定された特殊化動作を前記少なくとも1つのパラメータに適用させる、請求項8〜11のいずれか1項に記載の計算装置。
  13. 前記プログラム命令は、さらに前記プロセッサに、
    別の構造記述を識別させ、前記別の構造記述は、別のジェネレータ関数を識別する情報と前記別のジェネレータ関数についての1つ以上の他のパラメータとを含み、さらに、
    前記構造記述と前記別の構造記述との比較、および前記1つ以上のパラメータと前記1つ以上の他のパラメータとの間の比較に少なくとも部分的に基づいて、前記構造記述および前記別の構造記述が2つの等価なクラスを表わすかどうかを判定させる、請求項8〜12のいずれか1項に記載の計算装置。
  14. 請求項1〜7のいずれか1項に記載の方法をコンピュータに実行させる、プログラム。
JP2016564078A 2014-04-22 2015-04-22 動的に生成されたパターンベースクラスの構造識別 Active JP6592009B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461982802P 2014-04-22 2014-04-22
US61/982,802 2014-04-22
US14/660,177 2015-03-17
US14/660,177 US9772828B2 (en) 2014-04-22 2015-03-17 Structural identification of dynamically generated, pattern-instantiation, generated classes
PCT/US2015/026966 WO2015164439A1 (en) 2014-04-22 2015-04-22 Structural identification of dynamically-generated, pattern-based classes

Publications (3)

Publication Number Publication Date
JP2017516210A JP2017516210A (ja) 2017-06-15
JP2017516210A5 JP2017516210A5 (ja) 2018-05-31
JP6592009B2 true JP6592009B2 (ja) 2019-10-16

Family

ID=53059453

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016564078A Active JP6592009B2 (ja) 2014-04-22 2015-04-22 動的に生成されたパターンベースクラスの構造識別

Country Status (6)

Country Link
US (9) US9910680B2 (ja)
EP (5) EP3134808B1 (ja)
JP (1) JP6592009B2 (ja)
CN (6) CN106233251B (ja)
BR (1) BR112016024522B1 (ja)
WO (5) WO2015164436A1 (ja)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9910680B2 (en) 2014-04-22 2018-03-06 Oracle International Corporation Decomposing a generic class into layers
US9792094B2 (en) * 2014-09-04 2017-10-17 Home Box Office, Inc. Factory identification system
JP6621470B2 (ja) 2014-09-25 2019-12-18 オラクル・インターナショナル・コーポレイション 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法
US9575750B2 (en) * 2014-12-11 2017-02-21 Successfactors, Inc. Generic annotation seeker
US9921859B2 (en) * 2014-12-12 2018-03-20 The Regents Of The University Of Michigan Runtime compiler environment with dynamic co-located code execution
US10146515B1 (en) * 2015-03-10 2018-12-04 Twitter, Inc. Live code updates
US9594904B1 (en) * 2015-04-23 2017-03-14 Fireeye, Inc. Detecting malware based on reflection
US10129361B2 (en) * 2015-07-01 2018-11-13 Oracle International Corporation System and method for multi-version remote function execution control in a distributed computing environment
US9471285B1 (en) * 2015-07-09 2016-10-18 Synopsys, Inc. Identifying software components in a software codebase
US10120661B2 (en) * 2015-07-16 2018-11-06 Sugarcrm Inc. Multi-flavored software execution from a singular code base
US10055208B2 (en) * 2015-08-09 2018-08-21 Oracle International Corporation Extending a virtual machine instruction set architecture
US10083014B2 (en) * 2015-09-08 2018-09-25 Oracle International Corporation Generating dynamic modular proxies
US10466975B2 (en) 2015-10-23 2019-11-05 Oracle International Corporation Execution of parameterized classes on legacy virtual machines to generate instantiation metadata
US9904543B2 (en) * 2015-10-26 2018-02-27 Hewlett-Packard Development Company, L.P. Setting a build indicator to enable or disable a feature
US10853380B1 (en) 2016-07-31 2020-12-01 Splunk Inc. Framework for displaying interactive visualizations of event data
US10459939B1 (en) 2016-07-31 2019-10-29 Splunk Inc. Parallel coordinates chart visualization for machine data search and analysis system
US10459938B1 (en) 2016-07-31 2019-10-29 Splunk Inc. Punchcard chart visualization for machine data search and analysis system
US11037342B1 (en) * 2016-07-31 2021-06-15 Splunk Inc. Visualization modules for use within a framework for displaying interactive visualizations of event data
US10861202B1 (en) 2016-07-31 2020-12-08 Splunk Inc. Sankey graph visualization for machine data search and analysis system
US20180074797A1 (en) * 2016-09-09 2018-03-15 Hewlett Packard Enterprise Development Lp Transform a data object in a meta model based on a generic type
US10083029B2 (en) * 2016-11-09 2018-09-25 Red Hat, Inc. Detect application defects by correlating contracts in application dependencies
KR102471221B1 (ko) * 2016-11-14 2022-11-28 삼성에스디에스 주식회사 애플리케이션 변환 장치 및 방법
US10228957B2 (en) * 2017-01-20 2019-03-12 International Business Machines Corporation Online method handle deduplication
US10417036B2 (en) * 2017-02-24 2019-09-17 Oracle International Corporation Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation
US10572275B2 (en) 2017-06-15 2020-02-25 Microsoft Technology Licensing, Llc Compatible dictionary layout
US11360976B2 (en) 2017-08-31 2022-06-14 Oracle International Corporation Deployment of javascript and typescript stored procedures and user-defined functions into database management systems
US11662719B2 (en) * 2017-09-29 2023-05-30 Rockwell Automation Technologies, Inc. Classification modeling for monitoring, diagnostics optimization and control
WO2019071601A1 (zh) * 2017-10-09 2019-04-18 华为技术有限公司 一种类卸载方法及电子设备
CN110119274A (zh) * 2018-02-05 2019-08-13 北京智明星通科技股份有限公司 一种数据编译的方法、装置以及电子终端、计算机可读存储介质
CN108446113B (zh) * 2018-03-28 2021-06-15 武汉斗鱼网络科技有限公司 类名称获取方法、装置及电子设备
CN110347372B (zh) * 2018-04-08 2022-07-05 福建省天奕网络科技有限公司 一种遍历数据的方法及终端
CN109117142B (zh) * 2018-07-19 2020-11-24 北京理工大学 一种基于变量关联树的基本类型重构方法
US11425002B1 (en) * 2018-11-26 2022-08-23 Amazon Technologies, Inc. Infrastructure managing framework for serverless architecture
CN114153521A (zh) * 2019-03-25 2022-03-08 华为技术有限公司 类加载方法和装置
US11068543B2 (en) * 2019-06-11 2021-07-20 Dell Products L.P. Component and object management of information handling systems
US11030066B2 (en) * 2019-10-30 2021-06-08 EMC IP Holding Company LLC Dynamic application decomposition for execution in a computing environment
US20210405982A1 (en) * 2020-06-25 2021-12-30 Red Hat, Inc. Bytecode transformations using virtual artifacts
CN111857662B (zh) * 2020-07-15 2023-06-30 曹蕤 基于map和接口来描述对象特定构成的程序设计方法
US20220134222A1 (en) * 2020-11-03 2022-05-05 Nvidia Corporation Delta propagation in cloud-centric platforms for collaboration and connectivity
CN114706619A (zh) * 2020-12-16 2022-07-05 武汉斗鱼鱼乐网络科技有限公司 配置信息的处理方法、装置、电子设备及存储介质
US20220300352A1 (en) 2021-03-19 2022-09-22 Oracle International Corporation Determining a resolution state of an anchor constant associated with an application programming interface (api) point
US11947931B2 (en) * 2021-10-12 2024-04-02 Sap Se Generic factory class
US20240045669A1 (en) * 2022-08-08 2024-02-08 Capital One Services, Llc Computer-based systems configured to decouple delivery of product configuration changes associated with continuous integration/continuous delivery programming pipelines and methods of use thereof

Family Cites Families (126)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5421016A (en) * 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation
WO1994005289A1 (en) 1992-09-09 1994-03-17 Vanderbilt University Method and compositions for maintaining glomerular filtration rate while inhibition extracellular matrix accumulation
US6378003B1 (en) * 1993-04-05 2002-04-23 International Business Machines Corporation Method and system for deriving metaclasses in an object oriented system
US5379432A (en) * 1993-07-19 1995-01-03 Taligent, Inc. Object-oriented interface for a procedural operating system
US5628016A (en) 1994-06-15 1997-05-06 Borland International, Inc. Systems and methods and implementing exception handling using exception registration records stored in stack memory
US5630131A (en) * 1994-11-14 1997-05-13 Object Technology Licensing Corp. Method and apparatus for importing and exporting archive files for a graphical user interface
US6360360B1 (en) 1996-02-08 2002-03-19 International Business Machines Corporation Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects
US5940616A (en) * 1996-05-31 1999-08-17 International Business Machines Corporation Tracker class for object-oriented programming environments
US6067577A (en) * 1996-09-30 2000-05-23 Apple Computer, Inc. Dynamic method resolution for native methods in a dynamic object-oriented programming language
US5923878A (en) 1996-11-13 1999-07-13 Sun Microsystems, Inc. System, method and apparatus of directly executing an architecture-independent binary program
US6513152B1 (en) * 1997-07-23 2003-01-28 International Business Machines Corporation Object oriented framework mechanism for customization of object oriented frameworks
US6230314B1 (en) * 1997-10-02 2001-05-08 International Business Machines Corporation Method and device for program transformation using class hierarchy transformation based upon type constraint analysis
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6279008B1 (en) 1998-06-29 2001-08-21 Sun Microsystems, Inc. Integrated graphical user interface method and apparatus for mapping between objects and databases
US6138269A (en) * 1998-05-20 2000-10-24 Sun Microsystems, Inc. Determining the actual class of an object at run time
US6018628A (en) * 1998-06-16 2000-01-25 Sun Microsystems, Inc. Method of implementing parameterized types to be compatible with existing unparameterized libraries
US6769124B1 (en) * 1998-07-22 2004-07-27 Cisco Technology, Inc. Persistent storage of information objects
US6226788B1 (en) * 1998-07-22 2001-05-01 Cisco Technology, Inc. Extensible network management system
US8418131B2 (en) * 1998-11-25 2013-04-09 Helmut Emmelmann Interactive server side components
AU5025600A (en) * 1999-05-17 2000-12-05 Foxboro Company, The Process control configuration system with parameterized objects
US7089530B1 (en) * 1999-05-17 2006-08-08 Invensys Systems, Inc. Process control configuration system with connection validation and configuration
US6484313B1 (en) * 1999-06-30 2002-11-19 Microsoft Corporation Compiling and persisting of intermediate language code
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6484276B1 (en) * 1999-10-25 2002-11-19 Lucent Technologies Inc. Method and apparatus for providing extensible object-oriented fault injection
US6907546B1 (en) 2000-03-27 2005-06-14 Accenture Llp Language-driven interface for an automated testing framework
US7334216B2 (en) * 2000-04-04 2008-02-19 Sosy, Inc. Method and apparatus for automatic generation of information system user interfaces
US6901588B1 (en) * 2000-04-17 2005-05-31 Codemesh, Inc. Sharing components between programming languages by use of polymorphic proxy
AU2001259108A1 (en) * 2000-04-21 2001-11-07 Togethersoft Corporation Methods and systems for generating source code for object-oriented elements
US7577834B1 (en) * 2000-05-09 2009-08-18 Sun Microsystems, Inc. Message authentication using message gates in a distributed computing environment
GB0011954D0 (en) * 2000-05-17 2000-07-05 Univ Surrey Protocol stacks
JP4662657B2 (ja) * 2000-07-10 2011-03-30 マイクロソフト コーポレーション 統一データ型システムおよび方法
DE60011479T2 (de) * 2000-08-02 2005-06-09 Philipp Kutter Xml-roboter
US6701501B2 (en) * 2000-10-16 2004-03-02 Simon Joshua Waters Structured algorithmic programming language approach to system design
US6968540B2 (en) * 2000-10-25 2005-11-22 Opnet Technologies Inc. Software instrumentation method and apparatus
WO2002037261A2 (en) 2000-11-03 2002-05-10 Wilde Technologies Limited A software development process
US6757890B1 (en) 2000-12-28 2004-06-29 Sun Microsystems, Inc. Methods and apparatus for enabling local Java object allocation and collection
US7277836B2 (en) * 2000-12-29 2007-10-02 Exxonmobil Upstream Research Company Computer system and method having a facility network architecture
US7761270B2 (en) * 2000-12-29 2010-07-20 Exxonmobil Upstream Research Co. Computer system and method having a facility management logic architecture
US7243346B1 (en) * 2001-05-21 2007-07-10 Microsoft Corporation Customized library management system
US7162716B2 (en) 2001-06-08 2007-01-09 Nvidia Corporation Software emulator for optimizing application-programmable vertex processing
US7117489B2 (en) 2001-06-20 2006-10-03 Sun Microsystems, Inc. Optional attribute generator for customized Java programming environments
US7149734B2 (en) * 2001-07-06 2006-12-12 Logic Library, Inc. Managing reusable software assets
US7017162B2 (en) * 2001-07-10 2006-03-21 Microsoft Corporation Application program interface for network software platform
US7853933B2 (en) * 2001-09-29 2010-12-14 Siebel Systems, Inc. Computing system and method to perform compile-time extension for world wide web application
US6948156B2 (en) 2001-10-24 2005-09-20 Sun Microsystems, Inc. Type checking in java computing environments
US6961933B2 (en) 2001-10-24 2005-11-01 Sun Microsystems, Inc. Representation of Java data types in virtual machines
US7353502B2 (en) 2002-07-03 2008-04-01 The Mathworks, Inc. System and method for creation of software components
US7127709B2 (en) * 2002-09-25 2006-10-24 Microsoft Corporation System and method for jointly managing dynamically generated code and data
US8032860B2 (en) * 2003-02-26 2011-10-04 Oracle International Corporation Methods for type-independent source code editing
US20040221228A1 (en) 2003-04-30 2004-11-04 International Business Machines Corporation Method and apparatus for domain specialization in a document type definition
US7496892B2 (en) * 2003-05-06 2009-02-24 Andrew Nuss Polymorphic regular expressions
US7380242B2 (en) 2003-05-14 2008-05-27 Mainsoft Israel Ltd. Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
US7240327B2 (en) * 2003-06-04 2007-07-03 Sap Ag Cross-platform development for devices with heterogeneous capabilities
US7219330B2 (en) * 2003-06-26 2007-05-15 Microsoft Corporation Extensible metadata
US7707566B2 (en) * 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7086041B2 (en) * 2003-06-27 2006-08-01 Microsoft Corporation Extensible type system for representing and checking consistency of program components during the process of compilation
US7634763B2 (en) * 2003-07-15 2009-12-15 Microsoft Corporation Extensible multi-language compilation
US7890928B2 (en) * 2003-07-26 2011-02-15 Pilla Gurumurty Patrudu Mechanism and system for representing and processing rules
US20050055682A1 (en) 2003-09-08 2005-03-10 Microsoft Corporation Authoring and using generic classes in JAVA language code
US7318216B2 (en) * 2003-09-24 2008-01-08 Tablecode Software Corporation Software application development environment facilitating development of a software application
US7669193B1 (en) * 2003-09-25 2010-02-23 Lantronix, Inc. Program transformation using flow-sensitive type constraint analysis
US7496908B2 (en) * 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7448022B1 (en) * 2004-02-10 2008-11-04 Prasad Ram Dynamic software composition in a component-based software system
US7644402B1 (en) * 2004-03-17 2010-01-05 Sun Microsystems, Inc. Method for sharing runtime representation of software components across component loaders
US8677312B1 (en) 2004-03-30 2014-03-18 Synopsys, Inc. Generation of compiler description from architecture description
US7343379B2 (en) * 2004-05-21 2008-03-11 Bea Systems, Inc. System and method for controls
US7665062B1 (en) * 2004-07-02 2010-02-16 Borland Software Corporation System and methodology for design-time dynamic class type construction
JP4745238B2 (ja) * 2004-08-12 2011-08-10 富士通株式会社 Javaアプレット、JARファイル生成方法、JARファイル生成プログラム、JARファイル生成装置
US7657874B2 (en) * 2004-08-24 2010-02-02 Microsoft Corporation Pattern types as constraints on generic type parameters
US7676476B2 (en) * 2004-08-25 2010-03-09 Microsoft Corporation Data types with incorporated collation information
US7475150B2 (en) * 2004-09-07 2009-01-06 International Business Machines Corporation Method of generating a common event format representation of information from a plurality of messages using rule-based directives and computer keys
US7614045B2 (en) * 2004-09-24 2009-11-03 Sap (Ag) Sharing classes and class loaders
US7530051B1 (en) * 2004-10-21 2009-05-05 Sun Microsystems, Inc. Method and apparatus for dimensional analysis encoded in metatypes and generics
DE102004057490B4 (de) * 2004-11-29 2007-02-22 Infineon Technologies Ag Vorrichtung und Verfahren zum Verarbeiten eines Programmcodes
US8250528B2 (en) 2004-12-15 2012-08-21 Microsoft Corporation Static inheritance systems and methods
US7493605B2 (en) * 2004-12-29 2009-02-17 Mainsoft R&D Ltd Method and a software product for adapting a .Net framework compliant reflection mechanism to a java environment
US7571430B2 (en) * 2005-01-24 2009-08-04 Lsi Logic Corporation Adaptive dispatch table based on templates
US7844958B2 (en) * 2005-03-11 2010-11-30 Aptana, Inc. System and method for creating target byte code
CA2504333A1 (en) * 2005-04-15 2006-10-15 Symbium Corporation Programming and development infrastructure for an autonomic element
US7983209B2 (en) * 2005-04-18 2011-07-19 Research In Motion Limited System and method for producing notification based web services
EP1910920A4 (en) 2005-06-27 2011-03-09 Quipoz Pty Ltd CODE TRANSFORMATION
US7716630B2 (en) * 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
US7992140B2 (en) * 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
EP1934782A4 (en) * 2005-09-15 2009-01-07 Invixa Llc APPARATUS, METHOD AND SYSTEM FOR CONSTRUCTING SOFTWARE BY THE COMPOSITION
US8121985B2 (en) * 2005-10-24 2012-02-21 Sap Aktiengesellschaft Delta versioning for learning objects
US20070168926A1 (en) * 2005-12-16 2007-07-19 Raghuram Rajah Software customization framework
US7966602B1 (en) * 2006-03-16 2011-06-21 Oracle America, Inc. Incremental modification detector, and methods, systems, and apparatus for implementing the same
US8572138B2 (en) * 2006-03-30 2013-10-29 Ca, Inc. Distributed computing system having autonomic deployment of virtual machine disk images
US8225294B2 (en) * 2006-04-27 2012-07-17 Oracle America, Inc. Method and apparatus for expressing and checking relationships between types
US7836440B2 (en) * 2006-04-27 2010-11-16 Oracle America, Inc. Dependency-based grouping to establish class identity
US20080033968A1 (en) 2006-08-07 2008-02-07 Quan Dennis A Methods and apparatus for input specialization
US20080040360A1 (en) 2006-08-14 2008-02-14 Microsoft Corporation Design pattern for choice types in object oriented languages
US8370818B2 (en) * 2006-12-02 2013-02-05 Time Warner Cable Inc. Methods and apparatus for analyzing software interface usage
US20080154950A1 (en) * 2006-12-21 2008-06-26 Sap Ag Object constructors for generic frameworks
WO2008115553A1 (en) * 2007-03-20 2008-09-25 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for automatically generating customizable user interfaces using proagramming patterns
US8079023B2 (en) 2007-03-22 2011-12-13 Microsoft Corporation Typed intermediate language support for existing compilers
US7654413B2 (en) 2007-04-17 2010-02-02 Kuei-Tang Chang Supporting device for package water dispenser
US8806324B2 (en) * 2007-08-03 2014-08-12 Sap Ag Annotation data filtering of computer files
CN101251795A (zh) * 2007-11-01 2008-08-27 中国地质大学(武汉) 泛型空间网络分析模型及其算法
US8615734B2 (en) * 2007-11-09 2013-12-24 Oracle International Corporation System and method for dynamically redefining class files in an application server environment
CN101520733B (zh) * 2008-02-27 2014-04-16 国际商业机器公司 装载类的方法和装置及重组类存档文件方法
US9063765B2 (en) 2008-04-28 2015-06-23 Kaazing Corporation System and methods for distributed execution of computer executable programs utilizing asymmetric translation
US8935293B2 (en) 2009-03-02 2015-01-13 Oracle International Corporation Framework for dynamically generating tuple and page classes
US9075667B2 (en) * 2009-05-21 2015-07-07 Microsoft Technology Licensing, Llc Dynamic binding directed by static types
US8484614B2 (en) * 2009-05-29 2013-07-09 Red Hat, Inc. Fast late binding of object methods
US8843920B2 (en) 2009-09-15 2014-09-23 Advanced Micro Devices, Inc. Systems and methods for deferring software implementation decisions until load time
CA2678095C (en) * 2009-09-25 2012-05-01 Ibm Canada Limited - Ibm Canada Limitee Object level compatibility and class resizing utilizing semantic values
WO2011042228A1 (en) * 2009-10-06 2011-04-14 International Business Machines Corporation Method and system to handle java class versioning
US8549506B2 (en) * 2010-04-27 2013-10-01 Microsoft Corporation Resumable methods
US8645490B2 (en) * 2010-06-08 2014-02-04 Microsoft Corporation Web site implementation by mapping expression evaluation
US8813049B2 (en) 2010-06-30 2014-08-19 Oracle International Corporation Type inference of partially-specified parameterized types
US8533695B2 (en) * 2010-09-28 2013-09-10 Microsoft Corporation Compile-time bounds checking for user-defined types
US8959501B2 (en) * 2010-12-14 2015-02-17 Microsoft Corporation Type and length abstraction for data types
US9207935B2 (en) * 2011-04-07 2015-12-08 Infosys Limited Early analysis of software design diagrams
US8997070B2 (en) * 2011-12-15 2015-03-31 Sap Se Extension mechanism for scripting language compiler
US9411560B2 (en) * 2012-01-26 2016-08-09 Oracle International Corporation Error propagation
JP2013235386A (ja) 2012-05-08 2013-11-21 Internatl Business Mach Corp <Ibm> 最適化装置、最適化方法、及び最適化プログラム
CN103491111B (zh) * 2012-06-08 2016-12-14 阿里巴巴集团控股有限公司 无线应用发布、实现方法与装置
US8863079B2 (en) 2012-07-31 2014-10-14 Oracle International Corporation Efficient and expansive conversions between reference and primitive
US8776031B1 (en) * 2012-08-09 2014-07-08 Noble Systems Corporation Manipulating resources embedded in a dynamic-link library
US8893082B2 (en) * 2012-08-31 2014-11-18 Oracle International Corporation Type inference of generic type parameters in overloaded functions using type intervals and inference directions
US9170908B2 (en) * 2012-12-14 2015-10-27 Salesforce.Com, Inc. System and method for dynamic analysis bytecode injection for application dataflow
US9817804B2 (en) * 2013-09-12 2017-11-14 Wix.Com Ltd. System for comparison and merging of versions in edited websites and interactive applications
US9606783B2 (en) * 2013-10-14 2017-03-28 International Business Machines Corporation Dynamic code selection based on data policies
US9329985B1 (en) * 2014-04-04 2016-05-03 Xoom Corporation Using emulation to disassociate verification from stimulus in functional test
US9910680B2 (en) 2014-04-22 2018-03-06 Oracle International Corporation Decomposing a generic class into layers

Also Published As

Publication number Publication date
CN106462414B (zh) 2020-05-19
EP3134806A1 (en) 2017-03-01
EP3134809B1 (en) 2020-06-03
CN106415488A (zh) 2017-02-15
BR112016024522A2 (pt) 2017-08-15
CN106233251A (zh) 2016-12-14
CN111813389A (zh) 2020-10-23
US9678729B2 (en) 2017-06-13
US9524152B2 (en) 2016-12-20
US9910680B2 (en) 2018-03-06
US9477450B2 (en) 2016-10-25
WO2015191165A1 (en) 2015-12-17
US20160202961A1 (en) 2016-07-14
WO2015164438A1 (en) 2015-10-29
BR112016024522B1 (pt) 2023-02-23
EP3134809A1 (en) 2017-03-01
CN106462414A (zh) 2017-02-22
EP3134810A1 (en) 2017-03-01
US20150301840A1 (en) 2015-10-22
EP3134811A1 (en) 2017-03-01
US20150301825A1 (en) 2015-10-22
US20150301807A1 (en) 2015-10-22
US20150301837A1 (en) 2015-10-22
CN106462412B (zh) 2020-07-07
US9891900B2 (en) 2018-02-13
WO2015164436A1 (en) 2015-10-29
US20150301808A1 (en) 2015-10-22
US20150301809A1 (en) 2015-10-22
US20180024844A1 (en) 2018-01-25
CN106415488B (zh) 2020-02-14
EP3134811B1 (en) 2024-03-13
CN106462412A (zh) 2017-02-22
WO2015164439A1 (en) 2015-10-29
US10740115B2 (en) 2020-08-11
EP3134808B1 (en) 2020-06-10
US9772828B2 (en) 2017-09-26
WO2015164426A1 (en) 2015-10-29
US20170364339A9 (en) 2017-12-21
US9785456B2 (en) 2017-10-10
US20150301812A1 (en) 2015-10-22
US9483242B2 (en) 2016-11-01
EP3134810B1 (en) 2020-06-10
CN106233251B (zh) 2019-12-31
EP3134808A1 (en) 2017-03-01
CN106716349A (zh) 2017-05-24
EP3134806B1 (en) 2021-12-29
CN106716349B (zh) 2020-08-11
JP2017516210A (ja) 2017-06-15

Similar Documents

Publication Publication Date Title
JP6592009B2 (ja) 動的に生成されたパターンベースクラスの構造識別
US11733985B2 (en) Accessing a migrated member in an updated type
US8869177B2 (en) Decoupling components of a software system at compile time and load time

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180416

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180416

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190311

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190409

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190417

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190820

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190919

R150 Certificate of patent or registration of utility model

Ref document number: 6592009

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250