JP4662657B2 - 統一データ型システムおよび方法 - Google Patents

統一データ型システムおよび方法 Download PDF

Info

Publication number
JP4662657B2
JP4662657B2 JP2001209530A JP2001209530A JP4662657B2 JP 4662657 B2 JP4662657 B2 JP 4662657B2 JP 2001209530 A JP2001209530 A JP 2001209530A JP 2001209530 A JP2001209530 A JP 2001209530A JP 4662657 B2 JP4662657 B2 JP 4662657B2
Authority
JP
Japan
Prior art keywords
value type
type
value
boxed
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.)
Expired - Fee Related
Application number
JP2001209530A
Other languages
English (en)
Other versions
JP2002073349A5 (ja
JP2002073349A (ja
Inventor
エイチ.ボスワース ジョージ
エイチ.ダサッド パトリック
エス.ミラー ジェームズ
ビー.オーランダー ダリル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US09/614,158 external-priority patent/US6738968B1/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2002073349A publication Critical patent/JP2002073349A/ja
Publication of JP2002073349A5 publication Critical patent/JP2002073349A5/ja
Application granted granted Critical
Publication of JP4662657B2 publication Critical patent/JP4662657B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • 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

Description

【0001】
【発明の属する技術分野】
本発明は、データ型を定義し、処理するためのシステムおよび方法に関し、さらに具体的には、コンパイラおよび/またはランタイム(実行時)環境で使用される型システムに関する。
【0002】
【従来の技術】
ほとんど当初から、コンピュータプログラミング言語には、データ型 (data type) の考え方が具現化されていた。データ型には、文字、ストリング(文字列)、整数、浮動 (float) などのような基本的概念が取り入れられている。その最も低いレベルでは、コンピュータにストアされたデータは、特定サイズのロケーション(例えば、32ビットのメモリロケーション)にストアされた単純ビットパターンになっている。データ型は、このビットパターンがどのように解釈されるかという考え方を定義したものである。例えば、特定サイズのストレージロケーション(記憶位置)に置かれた特定のビットパターンは、ストレージロケーションに文字が置かれているとした場合と、ストレージロケーションに「整数」が置かれているとした場合とでは、解釈の仕方が異なっている。
【0003】
いくつかのコンピュータ言語では、データ型の考え方は存在していても、異なるデータ型をコンピュータプログラムの式の中に混在させるためにコンパイラまたはいずれかの関連ランタイムによって適用されるルールは、ほとんど存在していない。そのために、例えば、Cプログラミング言語では、整数値が浮動小数点数値で乗算されることがあっても、コンパイラエラーが引き起こされることがない。種々タイプのエラーを最小限にするために、この種の言語の多くでは、型ルールが組み込まれていて (built-in type rules)、ある種のデータ型を黙示的に変換することを可能にしている。他の場合には、あるデータ型を別のデータ型に「強制変換」または変換するための明示的構文 (construct) が組み込まれている言語もある。言うまでもなく、この種の言語にはかなりの柔軟性があるが、種々のプログラミング式の中でデータ型を混在させるときに配慮を欠くと、ある種のプログラミングエラーが引き起こされることがある。
【0004】
強く型付けされた言語 (strongly typed language) では、厳格な型付けルール (strict typing rules) を提供することによって、プログラミングエラーの発生を低減化することが試みられている。強く型付けされた言語では、データ型の不一致が検出されると、コンパイラエラーが引き起こされるようになっている。例えば、Pascalでは、プログラマが文字値を整数変数に割り当てようすると、コンパイラエラーが引き起こされるようになっている。このようにすると、ある種のプログラミングエラーを低減化する効果があるが、ルールが余りに限定的になっている。
【0005】
オブジェクト指向プログラミング言語の出現に伴い、データ型の考え方は別の意味をもつようになった。オブジェクト指向言語では、オブジェクトは、オブジェクトクラス階層 (object class hierarchy) で表現されるのが代表的であり、そこでは、あるオブジェクトは、他の「基底クラス(base class)」のオブジェクトからのフィールド(プロパティとも呼ばれる)とメソッドから派生されている(またはこれらを継承している)。これらの言語におけるオブジェクトは、フィールド(特定データ型の変数で表されているのが代表的)と、これらのフィールドの操作を可能にする、あるいはある種の機能性をもつメソッド (method) または関数 (function) とが混在することが可能になっている。さらに、オブジェクト指向言語には、浮動 (float)、整数 (integer)、文字 (character)、ストリング (string) といったような、いくつかの組み込みデータ型 (built-in data types) が用意されており、これらは、オブジェクトの中で基本変数としても、フィールドとしても使用できるのが代表的になっている。従って、例えば、Java(登録商標)では、プログラマは、整数型の変数を定義し、その1つが「整数」データ型になっているフィールドをもつオブジェクトを定義することが可能になっている。
【0006】
オブジェクト指向プログラミング言語では、オブジェクトと基本データ型は、異なった扱い方をすることが可能になっている。例えば、単一プロパティが整数型であるオブジェクトと整数型の変数は、実際には、どちらも整数を表しているのにすぎないのに、多くのオブジェクト指向言語では、同じデータ型でないものと扱われることになる。整数型の変数は、特定ストレージロケーションにビットパターンとして存在しているのにすぎず、追加情報が置かれていないのに対し、オブジェクトは、同じサイズのストレージロケーションと、そのストレージロケーションに置かれた値がどのように解釈されるかを記述している追加情報(つまり、メタデータ(metadata))をもっている。
【0007】
オブジェクト表現と基本データ型表現の間にある種の等価性をもたせるために、「ボックス化(boxing)」という考え方が考案された。基本データ型表現にメタデータを追加してオブジェクト表現を得るためのプロセスは、「ボックス化」と呼ばれている。同様に、オブジェクト表現からメタデータを取り除いて基本データ型表現を得るためのプロセスは「アンボックス化(unboxing)」と呼ばれている。しかし、ボックス化とアンボックス化が開発されたとしても、現存のコンパイラおよび/またはランタイムシステムはデータ型を分割した考え方を採用し、オブジェクトの考え方と基本データ型表現の考え方が厳格に区別されている。この区別には多くの意味合いがあるが、その意味合いが叙述に現れている1つの分野は、これらの言語がユーザ定義型 (user-defined types) をどのように扱うか、という点にある。
【0008】
オブジェクト指向プログラミング以前であっても、大部分ではないが、多くのプログラミング言語は、ユーザ定義データ型の考え方を取り入れていた。これらのプログラミング言語によれば、プログラマは、その言語の基本組み込み型から新しい「データ型」を作ることを可能にしていた。例えば、プログラマは、新しい型である"data_point"(データポイント)を、浮動型のx座標値と浮動型のy座標値からなるものとして定義することが可能であった。しかし、Java(登録商標)のような、ある種のオブジェクト指向プログラミング言語では、基本組み込み型を上記のように拡張することを許していない。この種の、いくつかの実装 (implementation) では、ユーザ定義型が許されているのは、オブジェクトの形体にあるときだけである。ランタイム時に適用可能な統一データ型システム (unified data type system) が要望されているにもかかわらず、既存の解決方法はこの要望に十分に応えていない。
【0009】
【発明が解決しようとする課題】
本発明は、なかんずく、データ型を分割するという、現在の見方を避けるメカニズムを取り扱うことを課題にしている。また、本発明は、オブジェクト型の方が効率的であるような場合に基本データ型を使用し、基本データ型の方が効率的であるような場合にオブジェクト型を使用すると起こる非効率性を解決することも課題にしている。
【0010】
【課題を解決するための手段】
本発明によれば、上記およびその他の課題は、ユーザ定義のデータ型を効率的に処理するシステムおよび方法を提供することによって解決されている。本発明によれば、プログラミング言語、特にオブジェクト指向プログラミング言語の型システムがより統一化された見方で提供されている。本発明の型システムでは、基本データ型には2つの表現(二重表現(dual representation))が用意されている。一方の表現は、基本組み込みデータ型に共通する基本データ型表現である。本明細書では、この表現は、値型 (value type) 表現、もっと簡単には、値型と呼ぶことにする。しかし、他の型システムと異なり、基本データ型の各々には、型システム自身のオブジェクト階層に存在するボックス化表現 (boxed representation) も用意されている。この二重表現は、ユーザ定義型 (user-defined types) にも拡張できるので、ユーザ定義型は、型システムのオブジェクト階層内に値型としても、オブジェクトとしても存在することが可能になっている。そのため、コンパイラおよび/またはランタイムは、コンパイル(ランタイム)時の特定の要求に応じて、最も効果的で、最も効率的なデータ型の表現を選択することが可能になっている。
【0011】
データ型の二重表現のほかに、本発明の別の形態によれば、あるデータ型のボックス化表現をいつ使用するか、そのデータ型の値型(またはアンボックス化)表現をいつ使用するかを判断するためのルールの適用が可能になっている。これらのルールは、例えば、コンパイラによって適用できるので、なかんずく、ある特定データ型のボックス化表現とアンボックス化表現の間で黙示的に変換することが可能になっている。
【0012】
本発明の別の形態によれば、統一化された型システムの見方は、オブジェクトの仮想メソッド (virtual method) の振る舞い(behavior 作用ともいう)に反映されている。オブジェクトの基本的特徴の1つは、「親」オブジェクトからメソッドを継承できることである。そのようなメソッドとして、オブジェクトを引数 (argument) として受け取るメソッドがある。値型が、階層内に値型としても、オブジェクトとしても表現できること(二重表現)は、値型がメソッドをもつことができ、ある場合にはオブジェクトとして、他の場合には値型として振る舞うことができることを意味している。詳細は、以下でもっと詳しく議論するが、その実用的効果は、値型がボックス化表現になっているとき、他のオブジェクトと同じように型情報をもつことができることである。さらに、値型がアンボックス化表現になっているとき、メソッドがオブジェクト型(ボックス化表現など)を予想しているときでも、値型がそのメソッドに対して有効な引数となることができることである。このアプローチによると、完全に新規で、強力なプログラミングパラダイムが開発者に提供されることになる。さらに、ボックス化表現とアンボックス化表現の両方が用意されているので、どちらのバージョンの値型(つまり、ボックス化表現かアンボックス化表現か)を使用するか、あるいは一方の型から他方の型に変換することを、開発者がソースコードの中で明示的に指定しなくても、この機能のすべてが利用可能になっている。
【0013】
本発明の一実現形態では、統一型システムは、ランタイム環境で提供されている。ソースコードファイルには、アンボックス化値型表現が含まれている。アンボックス化値型表現には、アンボックス化値表現をボックス化値型表現に変換するためのメタデータが関連付けられている。出力コードは、ランタイムオペレーション時に異なる型が検出されると、コンパイラがアンボックス化値型表現とボックス化値型表現の間で変換を行うことにより生成される。
【0014】
本発明の別の実現形態では、少なくとも1つのアンボックス化値型表現を含んでいるソースファイルを変換するための方法が提供されている。この方法によれば、ソースファイルがアンボックス化値型表現を含んでいるかが判断される。この判断オペレーションに応じて、メタデータがアンボックス化値型表現に関連付けられている。異なる型をもつオペランドのあるオペレーションは、ソースファイルの中に指定されている。一方のオペランドはアンボックス化値型表現に、他方のオペランドはボックス化値型表現になっている。出力コードは、オペランドの一方が他方のオペランドの型と一致するようにコンパイラが変換することによって得られる。
【0015】
本発明のその他の実現形態では、製造物品がコンピュータプログラムプロダクトとして提供されている。コンピュータプログラムプロダクトの一実施形態では、コンピュータシステムによって読み取り可能であるコンピュータプログラム記憶媒体が提供され、そこには、少なくとも1つのアンボックス化値型表現を収めているソースファイルをコンパイルするためのコンピュータプログラムがコーディングされている。コンピュータプログラムプロダクトの別の実施形態はコンピュータデータシグナルの形で提供され、このシグナルは、コンピューティングシステムによって搬送波で具現化され、少なくとも1つのアンボックス化値型表現を収めているソースファイルをコンパイルするためのコンピュータプログラムがコーディングされている。コンピュータプログラムプロダクトは、少なくとも1つのアンボックス化値型表現を収めているソースファイルをコンパイルするためのコンピュータプロセスを、コンピュータシステム上で実行するためのコンピュータプログラムをコーディングしている。ソースファイルがアンボックス化値型表現を含んでいるかどうかが判断される。この判断オペレーションに応じて、メタデータがアンボックス化値型表現に関連付けられている。異なる型をもつオペランドのあるオペレーションは、ソースファイルの中に指定されている。一方のオペランドはアンボックス化値型表現に、他方のオペランドはボックス化値型表現になっている。出力コードは、オペランドの一方が他方のオペランドの型と一致するようにコンパイラが変換することによって得られる。
【0016】
本発明のさらに別の形態では、上記考え方はランタイムまたは実行環境と結合され、値型、オブジェクトクラス、およびインタフェースをサポートするユニークなランタイム環境が得られるようにしている。
【0017】
本発明を特徴付けている、上記およびその他の種々特徴と利点を分かりやすくするために、添付図面を参照して以下で詳しく説明する。
【0018】
【発明の実施の形態】
本発明の例示実施形態によれば、プログラミング言語、特にオブジェクト指向プログラミング言語の型システムが、より統一化された見方で提供されている。例示の型システムでは、基本データ型には2つの表現(二重表現)が用意されている。一方の表現は、アンボックス化値型、単純には値型と呼ばれる基本データ型表現である。アンボックス化値型には、コンパイラから出力される出力コードの中で型情報が付いていないのが一般的である。しかるに、本発明の実施形態では、基本データ型の各々はボックス化表現ももち、これは型システムのオブジェクト階層に置かれ、コンパイラから出力された出力コードの中で型情報が付けられている(例えば、メタデータで指定されている)。この二重表現はユーザ定義型にも拡張可能であるので、ユーザ定義型は、型システムのオブジェクト階層内にアンボックス化値型としても、オブジェクト(つまり、ボックス化値型)としても存在することが可能になっている。そのため、コンパイラおよび/またはランタイムは、コンパイル(ランタイム)時の特定要求に応じて、最も効果的で、最も効率的な値型表現を選択することが可能になっている。
【0019】
図1は、本発明の実施形態において型システムを統一化された見方で提供するように動作するコンパイラの論理的表現を示す図である。ソースファイル100は、ある特定のプログラミング言語規格に準拠するように作成されたソースプログラムを表しており、この中には、C言語やC++言語、その他の高水準プログラム言語または中間言語に関する規格も含まれるが、これらに限定されないことは勿論である。ソースファイル100は、ランタイム環境で1つまたは2つ以上のオペレーション(演算、操作など)を実行するための命令とデータを含むことも可能である。図示の実施形態では、ソースファイル100はコンパイラ104によって受け取られ、そこでソースコードは出力コード(例えば、オブジェクトコードまたは実行可能コード)に変換される。本発明の代替実施形態では、当然に理解されるように、コンパイラ104は、図6に示すようにライタイム環境102(例えば、Just-In-Time (JIT) コンパイラとして)に組み込んでおくことも可能である。
【0020】
本発明の代替実施形態では、ソースファイル100のソースコードは、中間言語コードファイル106で示すように、中間言語に変換されてからコンパイラ104に渡されるようにすることも可能になっている。以下の説明で扱っている実施形態では、ソースファイル100がコンパイラ104に入力されるようになっているが、当然に理解されるように、本発明の実施形態では、ソースコードでも、中間コードでもコンパイラ104に入力できことを目的としている。同様に、ソースコードと中間コードは、データおよび関連データ型を定義するための構造と構文に互換性をもたせることが可能であり、これは本発明の範囲に属するものである。
【0021】
一般的に、コンパイラは、ソースコード(または中間言語コード)をオブジェクトコードまたは実行可能コードに変換するプログラムである。コンパイラという名前の由来はその働き方にある。すなわち、コンパイラはソースコードの断片全体を調べていき、そこに含まれる命令とデータを収集し、再編成する。ある実装では、第2のステージには、コンパイルされたオブジェクトコードを他のオブジェクトコードとリンクして、実行可能プログラムを生成するリンカが含まれている。他の実装では、このリンキングプログラムは、ランタイム直前またはランタイム時に実行されるので、これは「実行時バインディング (late binding)」とも、「ランタイムバインディング (runtime binding)」とも呼ばれている。
【0022】
上述したように、プログラミング言語は、データ型の考え方を採用しているのが代表的である。ソースコード100内のデータは、一般的に、2つのデータ型からなっている。(1) 値型 (value type) 110と (2) オブジェクト112である。理解しやすくするために、以下に説明するクラスとオブジェクト名は、大文字の名前で示され、値型と値型変数名は小文字の名前が付けられている。データは、変数名および関連の型インジケータを使用して「値型」としてソースファイルに定義することが可能である。例えば、インデックス(指標)を表すデータは、"int index" として定義することができる。ここで、"int" はデータ型インジケータ、"index" は変数名である。別の方法として、データは、オブジェクト名、クラスインジケータ、およびクラス定義を使用して「オブジェクト」としてソースファイルに定義することも可能である。例えば、下に記述されている例示のソースコードは、Rectと名付けたクラスを定義しており、そこには、矩形の4隅を定義している4つのデカルト座標 (Cartesian coordinate) が含まれている。
【0023】
【数1】
Figure 0004662657
【0024】
ステートメント"Rect RectObject"は、クラス"Rect"(クラスインジケータ)のオブジェクト"RectObject"(オブジェクト名)を定義している。なお、RectObjectは、オブジェクト"UpperLeft"、"UpperRight"、"LowerLeft"、および"LowerRight"のように、クラスCartesian(これのクラス定義は示されていない)の他のオブジェクトと値型、およびデータ型"float"の値型"area"を含むことも可能である。また、当然に理解されるように、上記説明は、ソースファイル内のデータの定義例を示したものにすぎず、データ定義の他のデータ構造と構文も本発明の範囲に含まれるものである。
【0025】
組み込みデータ型114と基本オブジェクトクラス階層を含む、種々の組み込みデータ型の1つまたは2つ以上、および種々データ型相互間で変換し、データ型相互間の関係を定義するための型ルール (type rules) 118を、コンパイラ104に組み入れておくこともできるが、コンパイラにこれらにアクセスさせるようにすることも可能である。一般的に、組み込み値型とは、整数を表す"int"、文字を表す"char"、浮動小数点数を表す"float"のように、プログラミング言語に基本的なものであり、プログラムによって共通に使用されると考えられている値型のことである。
【0026】
同様に、基本オブジェクトクラス階層116には、基本的で、共通に使用されるクラスが継承階層に用意されている。例えば、階層内のルート (root) クラスは、"BasicObject"を定義することが可能であり、そこには、プログラミング言語における基本オブジェクトの基本的特性(例えば、データと関数)が含まれている。ルートクラスの子供は、その用途をさらに具体化するためにBasicObjectクラスを「継承」または「拡張」するように定義することができる。例えば、"Shape"クラスと"Point"クラスはBasicObjectクラスから継承することができ、"Rect"クラスと"Circle"クラスは"Shape"クラスから継承することができる。基本クラスを結合したものが、オブジェクトクラス階層を構成している。オブジェクトクラス階層の別の例は図4に示されているが、これについては以下で説明する。
【0027】
多くのプログラミング言語では、組み込み値型と基本クラスは共に拡張可能またはカストマイズ可能になっている。例えば、C言語では、開発者はキーワード"typedef"を使用して、新しい値型を定義することができる。例えば、値型"coordinate"は、以下に示すように、デカルト平面 (Cartesian plane) 上のX-Y座標を表している、2つの浮動小数点数を含んでいる構造として定義することができる。
【0028】
【数2】
Figure 0004662657
【0029】
同様に、ソースコードは、基本クラスの1つまたは2つ以上を継承または拡張することによって基本オブジェクトクラス階層を拡張することができる。例えば、ユーザ定義のオブジェクトは、"CustomShape"クラスを定義するように基本Shapeクラスを拡張することができる。図1に戻って説明すると、組み込み値型とユーザ定義の値型は共に、値型110によってソースコードに表すことが可能であり、基本オブジェクトとユーザ定義のオブジェクトは共に、オブジェクト112によってソースコードに表すことが可能である。
【0030】
本発明の実施形態では、コンパイラ104は、異なる値型間の変換を正しく行うための命令をコンパイラに与える型ルール118を備えることが可能である。例えば、C言語では、ソースコード命令は整数値を浮動小数点変数に割り当てることが可能になっている(例えば、"float amount = total;"。ここで、"total"は整数型のデータ値であり、"amount"は浮動小数点数変数である)。Cコンパイラは、型ルール118を適用して、整数"total"を浮動小数点数値に自動変換してから値を変数"amount"に割り当てる命令を生成するようにしている。これとは別に、値型とオペレーションの組み合わせが与えられているとき、該当の型ルールがコンパイラ104に用意されていない場合もある(例えば、"integer"値を"coordinate"変数に割り当てる)。このような場合には、コンパイラはコンパイラエラーを出すか、あるいはランタイム例外を引き起こしてエラーを通知することになる。
【0031】
本発明の実施形態では、オペランドの一方または両方をボックス化および/またはアンボックス化することによって値型とオブジェクトの間でオペレーションを実行するためのソースコード命令は、開発者から見えないようにコンパイルされ、実行されることが可能になっている。第1の例では、ソースコード命令は、値型をもつ値が、オブジェクトに割り当てられることを示している(例えば、"integer"値型をもつ値は"Integer"クラスのオブジェクトに割り当てられる)。ボックス化なしでこの割り当てを行うと、オペランドの型が等価でないのでコンパイラエラーになるのが代表的である(つまり、この割り当ては型ルールに従っていない)。ボックス化/アンボックス化していないと、コンパイラが割り当てを行わないのは、"integer"値型が、Integerオブジェクトのメタデータ部分に移植 (populate) するために必要なメタデータと関連付けられていないからである(図5を参照)。
【0032】
その代わりに、コンパイラ104は型間に不一致があることを検出し、メタデータと、"integer"値を「ボックス化」するためのコンパイラコードを生成することにより、値型をオブジェクトに変換し、ボックス化値型がIntegerオブジェクトに割り当てられるようにする。型に組み込み値型が含まれている場合は、その値型をボックス化するために必要なメタデータでコンパイラを構成し直すことが可能である。型にユーザ定義の値型が含まれている場合は、ユーザは必要とされるメタデータを用意し、ボックス化オペレーションでコンパイラに使用させることができる。ユーザ定義の型を定義するメタデータは、ビット列(つまり、値)を記述することができ、その中には、型名、型に含まれるすべてのフィールドのフィールド名、すべてのフィールドのフィールドタイプ、およびその型に関連して実行できるオペレーション(例えば、メソッド)が含まれている。ユーザ定義の型を定義するメタデータには、その型がボックス化形式で実装しているインタフェースのリストを含めることも可能である。最後に、メタデータには、値型のボックス化バージョンが、オブジェクトクラス階層116内のどこに収まるかを示す標識を含めることができる。なお、これについては、図4を参照して以下で説明する。そのあと、コンパイラ104は、「ボックス化値型」(またはオブジェクト)をIntegerオブジェクトに割り当てるためのオブジェクトコードを生成する。
【0033】
値型をボックス化し、アンボックス化するコードをコンパイラで生成するのではなく、他の実施形態によれば、二重表現の考え方をいくつかの異なる方法で実現することも可能である。例えば、コードのターゲットであるランタイム環境(例えば、ランタイム環境102など)が値型をボックス化し、アンボックス化できる場合には、コンパイラは、ボックス化またはアンボックス化コマンドのうち該当する方を出力するだけで済むので、ランタイムは実際の作業を行うことができる。他の実現形態では、ボックス化表現とアンボックス化表現は同時に存在できるので、値型をボックス化またはアンボックス化するコードをコンパイラにも、ランタイム環境にも生成させる必要がなくなる。また、他の実現形態では、アンボックス化バージョンが望ましいときメタデータ部分をバイパスまたは無視するメカニズムを使用することで、ボックス化表現だけを生成させることができる。
【0034】
コンパイラ104によって生成される出力コード108は、コンパイルされたオブジェクト120と、ソースファイル100の中で定義された値型のボックス化表現とアンボックス化表現(122と124)の両方を論理的に含んでいる。ある実施形態では、すべての値型は、ボックス化表現とアンボックス化表現の両方を論理的に生成するようにコンパイルされる。値型の二重表現自体は、事実上同じストレージロケーションに置いておくことができるが、代替実施形態では、別々のストレージロケーションに置いておくことも可能になっている。別の実施形態では、オブジェクトと作用し合う値型だけがボックス化されるので、出力コードのサイズが低減されることになる(つまり、不要なメタデータが省かれることになる)。さらに、本発明の別の実施形態では、一度に値型の1つのバージョン(つまり、ボックス化またはアンボックス化)を残しておくことができるので、2バージョン間の変換を必要時に動的に行うことができる。従って、値型の1つのバージョンだけを、いつでも残しておけばよいので、値型バージョンは、ある特定オペレーション(例えば、割り当て、オブジェクトパラメータを使用した関数コールなど)に従ってコンパイラによって生成されたコードで動的に変換されることになる。
【0035】
さらに、出力コード108は、値型と関連付けられたメタデータを含むことが可能である。別の方法として、ボックス化オペレーションで作成されたオブジェクトのマシンまたは実行可能コード表現を出力108に含めておくことも可能である。さらに別の代替方法では、マシンまたは実行可能コード表現は、以下で説明するように、ランタイム時に生成することも可能である。
【0036】
ボックス化および/またはアンボックス化によって値型とオブジェクト間のオペレーションを実行するソースコード命令の別の例に示すケースでは、ボックス化値型が、アンボックス化値型をもつ値に割り当てられるようになっている(例えば、Integerクラスのオブジェクトはinteger値型をもつ値に割り当てられる)。この種の割り当てをアンボックス化なしで行うと、オペランドの型が等価でないのでコンパイラエラーになる。しかるに、本発明の実施形態では、コンパイラ104は型間が不一致であることを検出し、ボックス化値型と関連付けられたメタデータを削除または無視することによってオブジェクトをアンボックス化値型に変換するコードを生成して、アンボックス化値型が"integer"値型に割り当てられるようにする。
【0037】
図2と以下の説明は、本発明を実現するのに適しているコンピューティング環境の概要を要約して説明することを目的としている。本発明は、パーソナルコンピュータと併用してオペレーティングシステム上で実行されるアプリケーションプログラムを中心に説明されているが、この分野の精通者ならば当然に理解されるように、本発明は他のプログラムモジュールと組み合わせて実現することも可能である。一般的に、プログラムモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装しているルーチン、プログラム、コンポーネント、データ構造などが含まれている。さらに、この分野の精通者ならば理解されるように、本発明は、他のコンピュータシステム構成で実施することも可能であり、その中には、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースのコンシューマエレクトロニックスやプログラマブルコンシューマエレクトロニックス、ミニコンピュータ、メインフレームコンピュータなどが含まれている。本発明は、コミュニケーションネットワークを通してリンクされたリモートの処理デバイスによってタスクが実行されるような、分散コンピューティング環境で実施することも可能である。分散コンピューティング環境では、プログラムモジュールはローカルとリモートの両方のメモリストレージデバイスに置いておくことが可能である。
【0038】
図2を参照して説明すると、本発明を実現するための例示のシステムは従来のパーソナルコンピュータ20を含み、パーソナルコンピュータには、処理ユニット21、システムメモリ22、およびシステムメモリを処理ユニット21に結合するシステムバス23が搭載されている。システムメモリ22には、リードオンリメモリ (read only memory (ROM)) 24とランダムアクセスメモリ (random access memory (RAM)) 25が含まれている。スタートアップ時のように、パーソナルコンピュータ20内のエレメント間で情報を転送するのを支援する基本ルーチンを収めている基本入出力システム (basic input/output system (BIOS)) 26は、ROM24に格納されている。パーソナルコンピュータ20は、さらに、ハードディスクドライブ27、例えば、取り外し可能ディスク29との間で読み書きを行う磁気ディスクドライブ28、および例えば、CD-ROMディスク31を読み取ったり、他の光媒体との間で読み書きを行ったりする光ディスクドライブ30を搭載している。ハードディスクドライブ27、磁気ディスクドライブ28、および光ディスクドライブ30は、それぞれハードディスクドライブインタフェース32、磁気ディスクドライブインタフェース33、および光ディスクドライブインタフェース34を通してシステムバス23に接続されている。これらのドライブとそれぞれに関連するコンピュータ読み取り可能媒体は、不揮発性ストレージとしてパーソナルコンピュータ20に利用されている。上記のコンピュータ読み取り可能媒体の説明では、ハードディスク、取り外し可能磁気ディスクおよびCD-ROMディスクが挙げられているが、この分野の精通者ならば理解されるように、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイ (Bernouilli) カートリッジなどのように、コンピュータによって読み取り可能である他のタイプの媒体を、例示の動作環境で使用することも可能である。
【0039】
複数のプログラムモジュールをドライブとRAM25に格納しておくことができる。その中には、オペレーティングシステム35、ソースファイル100、ランタイムシステム102、およびコンパイラ104が含まれる。ユーザは、キーボード40およびマウス42などのポインティングデバイスを通して、コマンドと情報をパーソナルコンピュータ20に入力することができる。その他の入力デバイス(図示せず)としては、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどがある。上記および他の入力デバイスは、システムバスに結合されたシリアルポートインタフェース46を通して処理ユニット21に接続されていることが多いが、ゲームポートやユニバーサルシリアルバス (universal serial bus (USB)) などの、他のインタフェースを通して接続することも可能である。モニタ47や他のタイプのディスプレイデバイスも、ビデオアダプタ48などのインタフェースを通してシステムバス23に接続されている。モニタのほかに、パーソナルコンピュータは、スピーカやプリンタのような、他の周辺出力デバイス(図示せず)を装備しているのが代表的である。
【0040】
パーソナルコンピュータ20は、リモートコンピュータ49などの、1つまたは2つ以上のリモートコンピュータとの論理的コネクションを使用して、ネットワーキング環境で動作することができる。リモートコンピュータ49は、サーバ、ルータ、ピアデバイスまたは他の共通ネットワークノードである場合があり、図2にはメモリストレージデバイス50だけが示されているが、パーソナルコンピュータ20に関連して上述したエレメントの多くまたは全部を搭載しているのが代表的である。図2に示す論理的コネクションには、ローカルエリアネットワーク (local area network (LAN)) 51と広域ネットワーク (wide area network (WAN)) 52が含まれている。この種のネットワーキング環境は、オフィス、企業内 (enterprise-wide) コンピュータネットワーク、イントラネットおよびインターネット (the Internet) では日常的になっている。
【0041】
LANネットワーキング環境で使用されるときは、パーソナルコンピュータ20は、ネットワークインタフェース53を通してLAN51に接続されている。WANネットワーキング環境で使用されるときは、パーソナルコンピュータ20は、インターネットのような、WAN52上のコミュニケーションを確立するためのモデムや他の手段を搭載しているのが代表的である。モデム54は内蔵されている場合と、外付けの場合があるが、シリアルポートインタフェース46を介してシステムバス23に接続されている。ネットワーキング環境では、パーソナルコンピュータ20に関連して説明したプログラムモジュールまたはその一部は、リモートメモリストレージデバイスに格納しておくことができる。当然に理解されるように、図示のネットワークコネクションは例示であり、コンピュータ間の通信リンクを確立する他の手段を使用することも可能である。
【0042】
パーソナルコンピュータ20のようなコンピューティングデバイスは、少なくともなんらかの形のコンピュータ読み取り可能媒体を具備しているのが代表的である。コンピュータ読み取り可能媒体としては、パーソナルコンピュータ20がアクセスできる、利用可能な媒体ならば、どの媒体でも可能である。一例として、コンピュータ読み取り可能媒体としては、コンピュータ記憶媒体と通信媒体があるが、これに限定されるものではない。コンピュータ記憶媒体には、コンピュータ読み取り可能命令やデータ構造、プログラムモジュール、その他のデータなどの情報を格納しておくために、なんらかの方法またはテクノロジで実現されている揮発性、不揮発性、取り外し可能および取り外し不能(固定)媒体がある。コンピュータ記憶媒体としては、RAM、ROM、EEPROM、フラッシュメモリや他のメモリテクノロジ、CD-ROM、デジタルバーサタイルディスク (digital versatile disk (DVD))や他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージや他の磁気ストレージデバイス、あるいは必要とする情報を格納しておくために利用でき、パーソナルコンピュータ20がアクセスできる他の媒体があるが、これらに限定されるものではない。通信媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュールまたは他のデータを、搬送波や他のトランスポートメカニズムなどの変調データ信号で具現化しているのが代表的であり、その中には、すべての情報伝達媒体が含まれている。ここで、「変調データ信号(modulated data signal)」という用語は、信号に含まれる情報をエンコード(符号化)するような形で設定または変更された特性の1つまたは2つ以上をもつ信号を意味している。一例を挙げると、通信媒体には、有線ネットワーク (wired network) や直接有線コネクション (direct-wired connection) などの有線媒体 (wired media)、および音響やRF、赤外線、その他のワイヤレス(無線)媒体などのワイヤレス(無線)媒体があるが、これらに限定されない。上記に挙げたものを任意に組み合わせたものも、当然にコンピュータ読み取り可能媒体の範囲に含まれている。コンピュータ読み取り可能媒体は、コンピュータプログラムプロダクトと呼ばれることもある。
【0043】
図1に関連して上述したように、コンパイラ104は、ランタイム環境102または他の任意の実行環境用に書かれたソースファイル100を受け取り、コンパイルする。図3は、その言語でソースファイル100が書かれているコンピュータ言語に対する値型分類システム (value type classification system) 300の例を示す図である。ソースファイル100は、組み込み値型302とユーザ定義の値型304の両方を利用することができる。一般的に、値型は、コンピュータにストアされたデータのビットパターンがどのように解釈されるかという考え方を定義したものである。例えば、値は、整数または浮動小数点数を表した単純なビットパターンである場合がある。各値は、値が占有しているストレージのサイズだけでなく、値表現内のビットの意味も記述している型をもっている。例えば、"2"の値は"int16"という型にすることができる。型"int16"は、値が整数であることを値表現のビットが意味していることを示している。さらに、型"int16"は、値が符号付き16ビット整数をストアするために必要なストレージを占有することを示している。また、型は、値表現に対して実行できるオペレーションを、コンパイラに対して記述している。一般的に、アンボックス化値型については、型情報は出力コードに出力されない。型"int16"は、本発明の実施形態における組み込み値型の例である。値型に関する既述の説明はユーザ定義の値型にも、組み込み型にも適用できるので、ランタイム時に効率的に処理することができる。コンパイラが、ある特定の値型、特にユーザ定義の値型のメタデータにアクセスできるようになっていなければ、ユーザはソースコードファイルまたはコンフィギュレーション(構成)ファイルの中でメタデータを与えることができる。
【0044】
データ型のリスト例は図3に示されている。このリストには、組み込み値型のグループ302とユーザ定義値型のグループ304が含まれている。ユーザ定義値型304には、ほとんどすべて種類のデータ構造を含めることができる。ほとんどのソース言語では、ユーザは、組み込み型の組み合わせを利用することによってユーザ定義の値型を作成することができる。この作成は、例えば、型名、その型に含まれる各フィールドのフィールド名、および各フィールドのフィールドタイプを定義することによって行われている。この図示の例では、pointデータ型306は2値データ型であり、2次元空間の点 (point) のデカルト座標を定義している。circleデータ型308は2値データ型であり、円の中心点を定義するpointデータ型の値と、円の半径の大きさを定義するintegerデータ型の別の値を含んでいる。rectangleデータ型は4値データ型であり、矩形の4隅の各々に対するpointデータ型の値を含んでいる。特に、circleデータ型308とrectangleデータ型310はpointデータ型306を利用できる。従って、circleデータ型308とrectangleデータ型310はpointデータ型306から「継承」していると言うことができる。これが真の継承であるとする実装もあれば、ある値型は他の値型を作るために利用されるにすぎないとする実装もある。
【0045】
ユーザは、ボックス化形式の値型を記述するためにメタデータを作成することができる。例えば、ユーザ定義の値型を作成するプロセスには、値型をボックス化するために必要とされる、その型のメタデータを指定するステップを含めることができる。代表例として、ユーザ定義の型304を定義するメタデータはビット列(つまり、値)を記述しており、その中には、型名、その型に含まれるすべてのフィールドのフィールド名、すべてのフィールドのフィールドタイプ、およびその型に関連して実行できるオペレーション(つまり、メソッド)が含まれている。ユーザ定義の型を定義するメタデータには、その型がボックス化形式で実装しているインタフェースのリストを含めることもできる。最後に、メタデータは、その型のボックス化バージョンがオブジェクトクラス階層116内のどこに収められるかを示す標識を含むことができる。これについては、図4を参照して以下で説明する。このメタデータは、型の安全性を検証し、値型のボックス化バージョンを管理するためにコンパイラ、ローダおよび/またはランタイム環境によって使用することができる。
【0046】
図4は、オブジェクトクラス階層350の例を示す図である。一般的に、クラス階層350のオブジェクトは値型300よりも複雑なデータ型である。各オブジェクトは、各オブジェクトの型が出力コードの中にその表現で明示的にストアされるという意味で、自己型付け (self-typing) である。オブジェクトは、そのオブジェクトを他のすべてのオブジェクトと区別するID(例えば、オブジェクト名、クラス名)をもっている。また、各オブジェクトは、値(関連の値型をもつ)とそのオブジェクトに関連するメソッドを含む、他のデータをストアするために使用できるフィールド(またはデータメンバ)をもっている。当然のことであるが、オブジェクト内のフィールドは、それ自身がオブジェクトになることができる。オブジェクトは、ロケーション情報(例えば、ポインタ)とインタフェース情報を含むこともできる。クラス階層350のような、クラス階層のオブジェクトは、基底ルートオブジェクト (base root object) から派生しているのが代表的である。図4に示すように、この基底ルートオブジェクトはBaseObject320で示されている。従って、他のオブジェクトはオブジェクトクラス階層350内のBaseObject320の下に示されているので、BaseObject320から継承している。
【0047】
図4のオブジェクトクラス階層は、本発明の一形態では値型の二重表現を示している。図4は代表的なクラス階層を示し、そこには、図3に示す値型のボックス化表現が含まれている。オブジェクトクラス階層350では、組み込み値型352(例えば、integer325、floats326、およびBoolean328)およびユーザ定義の値型354(例えば、point330、rectangle332、circle334)は、オブジェクトクラス階層内に他の任意のオブジェクトしてストアされている。図4に示す組み込み値型352とユーザ定義の値型354はボックス化値型である。従って、組み込み値型352とユーザ定義の値型354は、階層内の、他の任意のオブジェクトと同じ基準でランタイム時に処理することができる。上述したように、ボックス化値型は、アンボックス化値型をメタデータと関連付け、オブジェクトライクの属性をもつボックス化値型を得ることによって、アンボックス化値型から作成される。メタデータは、図5を参照して以下に詳しく説明されている。
【0048】
特に、Object yのような、「子(child)」オブジェクトは、Object xのような、「親(parent)」の属性を継承している。例えば、メソッドがObject xに関連付けられていれば、そのメソッドは継承によってObject yにも関連付けられる。図4に示す一形態では、値型のボックス化表現は、値型に親子関係の考え方がない場合でも、親子関係を含むことが可能になっている。例えば、図4において、circleとrectangleは共にpointから派生している。同様に、子のボックス化値型(例えば、circle値型334)は、親のボックス化値型(例えば、point値型330)からメソッドと他の属性を継承している。このように継承されたメソッドは仮想メソッド(virtual method) と呼ばれている。本発明では、値型とオブジェクト型の二重表現になっているので、開発者は、どちらの形体がメソッドに渡されるかについて気にする必要がない。従って、アンボックス化値型を、ボックス化表現が期待されていオブジェクトメソッドに渡す場合があり、その逆の場合も同じである。コンパイラおよび/またはランタイムは、特定の実装に該当するものとしてコンパイル時にも、ランタイム時にも、該当する表現を選択することができる。
【0049】
値型をオブジェクトクラス階層の中でアンボックス化値型とボックス化値型として二重表現するということは、値型がメソッドをもつことができ、ある場合にはオブジェクトとして振る舞い、他の場合にはアンボックス化値型として振る舞うことができることを意味している。実際には、値型がボックス化表現にあるとき、値型は他のオブジェクトと同じようにメソッドをもつことができるという効果が得られる。値型がアンボックス化表現にあるときは、メソッドがオブジェクト型(例えば、ボックス化表現)を予想している場合でも、有効な引数としてメソッドに渡すことができるという効果が得られる。ボックス化値型表現とアンボックス化値型表現の両方が利用できるので、開発者は、どちらのバージョンを使用するか、一方の形体から他方の形体への変換といったことを明示的に指定しなくても、この機能を得ることができる。
【0050】
データ型による値の記述は、その値の表現と、その値に対して実行できるオペレーションが完全に定義されている場合に行われる。データ型では、値の表現の定義は、その値の表現を構成するビット列を記述することによって行われる。データ型に対して実行できるオペレーション群の定義は、オペレーションごとに名前付きメソッド (named method) を指定することによって行われる。名前付きメソッドは、データ型に関連して実行できるオペレーションを記述している。
【0051】
オブジェクトについては、オブジェクトの表現の定義は、そのオブジェクトのロケーションと、オブジェクトの表現を構成するビット列を記述することによって行われる。従って、オブジェクトには、オブジェクトのコンテンツ(内容)の定義と、そのオブジェクトに対して実行できるオペレーションが含まれている。あるオブジェクトが値を含んでいるとき、その定義には、その値の表現と、その値に関連して有効に実行できるオペレーション(例えば、メソッド)が含まれている。オブジェクトの定義は、値の表現を構成するビット列(自己記述データ (self-describing data))、オブジェクトのロケーション(ポインタデータ)、およびオブジェクトに対する少なくとも1つの名前付きメソッド(インタフェースデータ)を記述することによって行われる。
【0052】
従って、オブジェクトとアンボックス化データ型の違いは、オブジェクトが生データ(つまり、値表現)だけでなく、オブジェクトのロケーションを含む他のデータも含んでいる点にある。上記の他のデータは、メタデータとしてオブジェクトにストアされている。メタデータは、どの特定プログラミング言語からも独立した形でストアできるという利点がある。従って、メタデータは、オブジェクトを操作するツール(例えば、コンパイラやデバッガ)の間で共通にやりとりするメカニズムとして利用することができる。
【0053】
次に図5を参照して説明すると、アンボックス化値型400は、図示のように、生の値データ401(つまり、値表現)だけを含んでいる。ボックス化値型402は、図示のように、生の値データ401だけでなく、メタデータ404も含んでいる。値型(組み込みまたはユーザ定義)ごとに、対応するボックス化値型を作成することができる。ボックス化データ型が、上述したようにオブジェクトの特性をもっているのは、ボックス化データ型は、メタデータを通して値記述データ、ロケーションデータ、およびメソッドデータと関連付けられるからである。従って、メタデータはボックス化値型と関連付けられているので、ボックス化値型は図4のオブジェクトクラス階層320にストアしておくことができる。本発明の例示の実施形態では、図5に示すボックス化値型とアンボックス化値型は、出力コード108(図1)にストアすることができる。当然に理解されるように、図5はボックス化値型の論理的表現を示し、メタデータが値型のストレージロケーション(記憶場所)と関連付けられていることを示している。
【0054】
本発明の形態を取り入れている別のシステム500の機能ソフトウェアコンポーネントは図6に示されている。システム500には、コンパイラ502、504および506のように、少なくとも1つのフロントエンドコンパイラが組み入れられているが、これは本発明の要求条件を示すのではなく、複数のまたは結合されたフロントエンドシステムに適用される本発明の考え方を示すことだけを目的としている。フロントエンドコンパイラ502、504および506は、ソースファイル508、510および512のように、異種タイプのソース言語ファイルを、それぞれ構文解析 (parse) し、分析する機能を備えている。これらのソースファイル508、510および512には、組み込み値型、ユーザ定義の値型、およびオブジェクトを含めることができる。この実施形態では、フロントエンドコンパイラ502、504および506は、各々が共通言語出力ファイル514、516および518を生成する。一般的に、コンパイラ502、504および506は、図1を参照して上述したコンパイラ104と機能的に類似している。
【0055】
本発明の例示の実施形態では、共通言語出力ファイル514、516および518は、異種タイプの、複数のソース言語、例えば、手続き型、機能型およびオブジェクト指向プログラミングの概念を表現するのに適している「共通」(汎用的であるという意味である)中間言語の実行可能命令をもっているので、どのソース言語が使用されるかに関係なく、1つのタイプの中間言語を使用するだけで済むことになる。共通言語出力ファイル514、516および518内の実行可能命令は、プロセッサによって直接に実行可能な命令(例えば、オブジェクトまたはネイティブマシンコード)にすることも、あるタイプの実行環境内で実行される「中間」型命令(例えば、Java(登録商標)のバイトコード、pコード、その他の中間言語)にすることも可能である。
【0056】
フロントエンドコンパイラ502、504および506は、それぞれのソースファイル508、510および512を読み取って、解析する機能を備えているほかに、共通言語で表されたファイルを読み取って、解析する機能も備えている。さらに、共通言語で表された関数のライブラリ宣言ファイル520が用意されているので、フロントエンドコンパイラ502、504および506で利用可能になっている。
【0057】
共通言語ファイル514、516および518は、コンパイルされたあと、実行環境またはランタイム環境522に送ることができる。本明細書では、実行環境とランタイム環境は同じ意味で使用されている。実行環境は、直接実行環境にすることも、管理されたランタイム環境にすることも、管理されていないランタイム環境にすることもできる。アンボックス化値型をボックス化値型に変換する(またはその逆に)必要があるとき、その変換をコンパイルステージで行うと、ランタイム環境の状況が管理されているか、管理されていないかに関係なく、変換された値型を使用できるという利点があるが、ランタイム環境で行うことも可能である。実際には、環境は、コンパイルされたファイルを読み取り、実行できる環境ならば、どのタイプの環境であっても構わない。図6に示すランタイム環境522は、以下で説明するように、複数の特徴、関数およびサービスをもつ、管理された環境を示している。
【0058】
ランタイム環境522に渡される前に、各出力ファイル514、516および518は、図示のようにオプションの独立処理セクション524またはオプションの内蔵処理セクション526でオプションの処理を行っておくことも可能である。一般的に、オプションの処理では、検証、型チェック、および/または共通言語をランタイム環境522で使用するのに適した形に変換することが行われる。従って、オプションの処理は、受け取った共通出力ファイル514、516および518を翻訳(変換)し、解釈し、さもなければ、実行環境522で実行可能な出力コードに変換するために使用できる。
【0059】
実行環境522が、図6に示すように管理されたランタイム環境である場合には、ランタイム環境自身がファイルを実行のためにロードするローダ530をもっている。ローダ530は実行可能ファイルを受け取り、必要な参照を解決した後、コードをロードする。この環境には、スタックウォーカ (stack walker) 53、すなわち、メソッドコールを管理し、任意の時点にスタックに置かれているメソッドコールのシーケンスを特定できるようにするコード部分が用意されていることがある。レイアウトエンジン (layout engine) 53が用意されていることもあり、これは、種々のオブジェクトと他のエレメントの、メモリ内のレイアウトを実行されるアプリケーションの一部として設定する。さらに、実行環境には、あるコードがあるシステムリソースにアクセスする許可(あるいは、いやしくも実行する許可)をもっているかどうかを判断することによって、リソースの無許可使用を防止するセキュリティモジュール53が用意されていることもある。ランタイム環境は、ガーベッジコレク (garbage collector) 53のようなメモリ管理サービスと、デバッガとプロファイリング (profiling) のような、他の開発サービス540を備えていることもある。管理された実行環境によって提供できる、他のタイプのサービスとしては、特に、コードを検証してから実行されるようにするサービスがある。
【0060】
実行環境522は、さらに、共通ライブラリプログラムファイル528を利用することが可能であるが、そこには、共通ライブラリ宣言520の機能を実行するための実際の実装情報が入っている。
【0061】
ランタイム時に、出力ファイル514、516および518はランタイム環境522にロードされる。重要なことは、図5に示すボックス化またはアンボックス化値型のように、ランタイム環境に渡される情報は、ランタイムに先立ってオブジェクトを形成するためにランタイム環境によって使用されることである。レイアウトエンジンは、該当のメソッドとフィールド情報を含んでいるデータ構造を、クラスのタイプ別に作成するためにこの情報を使用するのが一般である。
【0062】
図7は、本発明の例示の実施形態において個々の値型をボックス化し、アンボックス化するときのオペレーションの流れ(フロー)を示す図である。ボックス化とアンボックス化は自動的に行うことができるので、特定データ型のどちらのバージョンも、ランタイム時に常に利用可能にしておくことができる。従って、状況(例えば、アンボックス化値型をオブジェクトに割り当てる)に応じて、最も効率的な形体の値型を選択的に使用することができる。当然のことであるが、コンパイラ104が、変換された形体の値型は不要であると判断した場合には、変換を回避することも可能である。
【0063】
図7の論理的オペレーションは、(1) コンピュータシステム上で実行されるコンピュータ実装ステップのシーケンスまたはプログラムモジュールとして、および/または (2) コンピュータシステム内の相互接続ロジック回路またはマシンロジックモジュールとして実装されている。どのような実装にするかは選択の問題であり、本発明を実現するコンピュータシステムに要求されるパフォーマンスによって決まる。従って、本明細書で説明している本発明の実施形態を構成する論理的オペレーションは、オペレーションとも、ステップとも、モジュールとも呼ばれる。この分野の精通者ならば理解されるように、これらのオペレーション、ステップおよびモジュールは、特許請求の範囲に記載されている本発明の精神と範囲から逸脱しない限り、ソフトウェアでも、ファームウェアでも、特殊目的デジタルロジックでも、あるいはこれらの任意の組み合わせでも、実現することが可能である。
【0064】
本発明の一実施形態では、図7のオペレーションはステップ600からスタートし、アンボックス化テストオペレーション602に進む。テストオペレーション602は、アンボックス化からボックス化への変換を要求するトリガが、ソースファイルに含まれているかどうかを検出する。アンボックス化からボックス化への変換トリガ (unboxed to boxed conversion trigger) は、ソースファイル内のエンティティで、アンボックス化からボックス化への変換が必要であると示しているものがトリガとなる。アンボックス化からボックス化への変換の例としては、アンボックス化値型がボックス化値型に割り当てられる場合や、ボックス化値型または別のオブジェクトを予想しているオブジェクトにアンボックス化値型が渡される場合がある。どちらの例の場合も、アンボックス化からボックス化への変換が必要になる。アンボックス化からボックス化への変換を要求するトリガが、ソースファイルに含まれていることがテストオペレーション602で検出されると、オペレーションフローはYESにブランチして、アンボックス化値型出力オペレーション604に移る。アンボックス化値型出力オペレーション604は、アンボックス化からボックス化への変換を実行するためのコンパイラからのコード、アンボックス化値型、およびアンボックス化値型に関連するメタデータを、出力コードを通してランタイム環境に出力する。次に、オペレーションフローは変換オペレーション608に移り、そこで、出力コード、アンボックス化値型、およびそのアンボックス化値型に関連するメタデータから、ボックス化値型がランタイム時に変換または構築される。オペレーションフローはオペレーション619に進み、変換された値型に対して終了する。
【0065】
ボックス化値型は、型名の定義、フィールド名、フィールドタイプ、およびボックス化値型に関連して実行できるオペレーション(例えば、メソッド)を含むことが可能である。ボックス化値型の作成には、ボックス化値型がオブジェクトクラス階層に置かれている該当位置および他のボックス化値型との関係を表しているメタデータの作成を含めることもできる。
【0066】
特に注目すべきことは、アンボックス化からボックス化への変換を要求するトリガがソースファイルに含まれていないと、アンボックス化テストオペレーション602で判断された場合にも、ボックス化テストオペレーション610に移ることである。ボックス化テストオペレーション610は、ボックス化からアンボックス化への変換を要求する変換トリガがソースファイルに含まれているかどうかを検出する。ボックス化からアンボックス化への変換を要求する変換トリガがソースファイルに含まれていなければ、オペレーションフローはNOにブランチしてステップ612に移り、変換された値型に対して終了する。
【0067】
他方、ボックス化からアンボックス化への変換を要求する変換トリガがソースファイルに含まれているとボックス化テストオペレーション610で検出されると、オペレーションフローはYESにブランチしてボックス化値型出力オペレーション614に移る。ボックス化値型出力オペレーション614は、ボックス化からアンボックス化への変換を行うコード、ボックス化値型、およびそのボックス化値型に関連するメタデータを、出力コードを通してランタイム環境に出力する。そのあと、オペレーションフローは変換オペレーション616に進み、出力コードに入っている、ボックス化からアンボックス化への変換を実行するコード、ボックス化値型、およびそのボックス化値型に関連するメタデータからアンボックス化値型を変換または作成する。
【0068】
ボックス化からアンボックス化への変換トリガは、ソースファイル内にあって、変換が必要であることを示しているエンティティならば、どのエンティティであっても構わない。変換トリガの例としては、ボックス化値型がアンボックス化値型に割り当てられる場合およびアンボックス化値型を予想しているオブジェクトにボックス化値型が渡される場合がある。どちらの例の場合も、ボックス化からアンボックス化への変換が必要になる。オペレーションフローはステップ618に進み、変換された値型に対して終了する。
【0069】
以上から理解されるように、図7のオペレーションは、ソースファイルの中で見つかった各々の値型に対して、必ずしも変換が行われないように変更することができる。変換が適切かどうかの判断は、予備段階で行われるようにすることもできる。例えば、ボックス化組み込み値型は、ソースファイルではアンボックス化フォーマットで書かれることはないとコンパイラが認識する場合がある。そのような場合には、変換は、不要であるものとして回避されることになる。
【0070】
上述したように、図7に関連して説明したプロセスは、個別的値型を論理的に処理することに関係している。しかし、代表例としては、複数の値型がソースファイルに含まれているので、ボックス化かアンボックス化のどちらかが必要になる場合がある。本発明の一実施形態では、検出オペレーション602と610および出力オペレーション604と614は、コンパイルステージで複数の値型に対して実行されてから、ランタイム時の変換オペレーション608と616に移るようになっているのが一般である。このようにすると、必要とされる変換コードは、その大部分(または全部)が出力コードに出力され、ランタイム時に実行されることになる。
【0071】
しかるに、本発明の代替実施形態では、検出オペレーション602と610および出力オペレーション604と614は、ランタイム時にも実行されるようになっている。「出力」オペレーションは、ランタイム時のボックス化またはアンボックス化コードへのコールによって実現されている。このような実施形態としては、例えば、図8と図に示すものがある。
【0072】
オブジェクトコード106(図1)の実行時に、ランタイム環境522(図6)のようなランタイム環境は、仮想メソッドの実装の場合と同じように、特定データ型のボックス化バージョンを使用するか、アンボックス化バージョンを使用するかを判断することができる。一実施形態では、フロー700はある特定の場合を示し、そこでは、コンパイラとは対照的に、ランタイム環境が選択オペレーションを実行するようになっている。初期には、フローは、定義オペレーション702からスタートするのが一般であり、そこで、関数コールの中で使用される特定の値型が定義される。値型の定義は、その値型がボックス化であるか、アンボックス化であるかといった、ある種の情報を与えることによって行われるのが一般である。一実施形態では、値型にビットを関連付けることが可能であり、そのビットは、値型がボックス化であるか、アンボックス化であるかに応じてセットまたはクリアされるようになっている。
【0073】
値型が定義されると、パス(引き渡し)オペレーション704は、定義された値型を特定の関数に引き渡す。基本的には、コンパイル時に、コンパイラは、ランタイム時に値型を関数に渡せるようにする出力コードを出力している。この種のパラメータを関数に渡すことは直接的であり、パラメータを渡すことにより、必要な値型情報が関数に与えられてオペレーションが行われることになる。
【0074】
定義された値型を受け取る特定の関数は、ボックス化かアンボックス化のどちらかの値型を予想している。従って、パスオペレーション704に続いて、判断オペレーション706は、渡された値型が、予想の値型と同じであるかどうかを判断する。この判断は、値型に関連するビットを単純にテストするだけにすることも、関数に渡されたデータの型を別のオペレーションで評価するようにすることも可能である。
【0075】
渡された値型が予想の値型と同じでないと判断オペレーション706で判断されると、フローはNOにブランチして変更 (modify) オペレーション708に移る。変更オペレーションは渡された値型をボックス化するか、アンボックス化し、新しい値型を関数に引き渡す。関数がボックス化値型を予想していたが、受け取った値型がアンボックス化であるような実施形態では、ステップ708は値型をボックス化する。他方、関数がアンボックス化値型を予想していたが、受け取った値型がボックス化であれば、オペレーション708は値型をアンボックス化することになる。ボックスオペレーション708の結果は、アンボックス化値型を記述しているオブジェクトを指しているポインタである。変更オペレーション708に続いて、フローはコールオペレーション710へ進む。このオペレーションは以下で説明する。
【0076】
渡された値型が予想の値型と同じであると判断ステップ706で判断されたときは、フローはYESにブランチしてコールオペレーション710に移る。基本的には、関数が受け取った値型が予想していた通りであれば、変更オペレーション708のような変更は不要になる。従って、フローはコールオペレーション710を続ける。
【0077】
コールオペレーション710は、定義された関数に関連付けられたメンバメソッドをコールする。例えば、ス−パクラスの場合や、関数がボックス化とアンボックス化の両バージョンの値型を受け取る可能性のある場合のように、コンパイラがコンパイル時にどのメソッドをコールすべきか判断できず、従って、複数のバージョンが実装されている場合には、メソッドを仮想メソッドにすることができる。メンバメソッドは、渡された値型に対してオペレーションを行う、ユーザ定義のメソッドと関係付けられている。コンパイル時に、コンパイラは関数内で種々のメソッドを実行するためのコードを出力する。しかし、関数は異なる型を受け取ることがあるので、コンパイラは、各々の型ごとに特定のコードを関数内に挿入することはしない。その代わり、コンパイラは仮想メソッドテーブル (virtual method table) を作成する。仮想メソッドテーブルには、関数が受け取る可能性のある、特定の値型の各々に対してメソッドを実行するために必要な情報が収められている。
【0078】
従って、メソッドが710でコールされると、ランタイム環境は、仮想メソッドテーブル内にある該当メソッドへの参照を使用してメソッドコールを実行する。さらに具体的には、ルックアップオペレーション712は、渡された値型に関係する特定メソッドを探し出す。その型に対する特定メソッドが見つかると、実行オペレーション714はその値型に対するメソッドを実行する。
【0079】
すでに述べたように、上述したオペレーションのフローは、ボックス化とアンボックス化のどちらのパラメータでも処理することができる。重要な特徴は、特定の関数に渡すことができる、異種の値型に対するメソッドを得るために仮想テーブルを使用していることである。関数は異種の型を受け取ることがあるため、またコンパイラは関数がどの型を受け取るかを知らないので、ランタイム環境は必要な解析を実行し、値型の間に不一致があればそれを解決する。
【0080】
図8に代わる代替実施形態のオペレーションフロー800は図9に示されている。フロー800の最初の2オペレーションである、定義オペレーション802とパスオペレーション804は、図8を参照して説明したオペレーション702および704に類似している。つまり、定義オペレーション802は値型をボックス化またはアンボックス化として定義し、パスオペレーション804はその値を関数に渡している。
【0081】
値が渡されると、コールオペレーション806はメンバ関数をコールする。このオペレーションは上述したコールオペレーション710に類似し、実際のメソッドがコールされる。コールオペレーション806に続いて、ルックアップオペレーション808は、渡された値型に対する、コールされたメソッドを仮想メソッドテーブルから探し出す。ルックアップオペレーション808は、上述したオペレーション712に類似している。
【0082】
コールオペレーション806とルックアップオペレーション808に続いて、判断オペレーション810は、渡された値型が予想の値型と同じであるかどうかを判断する。判断オペレーション810は、渡された値型が予想の値型形式と突き合わせて解析される点で、上述した判断オペレーション706に類似している。ただし、1つの違いは、判断オペレーションを実行するコードが、実際には、以下で説明するように、コールされたメソッドコードの先頭部分に置かれていることである。
【0083】
渡された値型が予想形式と異なっていると判断オペレーション810で判断されると、フローはNOにブランチして変更オペレーション812に移る。変更オペレーション812は、図8を参照して上述した変更オペレーション708に類似している。基本的に、変更が必要であれば、変更オペレーション812は、値型を必要に応じてボックス化またはアンボックス化するために必要なオペレーションを実行する(例えば、該当するボックス化またはアンボックス化コードをコールする)。変更が行われると、実行オペレーション814は、変更された値型を使用してメソッドを実行する。
【0084】
他方、渡された値型が予想形式と同じであると判断オペレーション810で判断されると、実行オペレーション814は、渡された値型を使用してメソッドを実行する。渡された値型は予想の値型と同じであったので、オペレーション812のような変更オペレーションは、実行前に必要でない。
【0085】
図9に示す実施形態によれば、コーラ(呼び出し側)オブジェクトは、メソッドをコールし、そのメソッドを実行する関数に値型を渡すだけで済むことになる。コーラは、値型が正しいかどうかの判断を行わないで済むことになる。このようなコーラオブジェクトはストリームライン化されているので、実行するオペレーションは少なくなっている。しかし、判断オペレーションはメソッドまたは他のなんらかのモジュールに実行させる必要があるとのトレードオフがある。基本的には、プラミング (plumbing) は、メソッドの実行に先立って実行されるコードの小さな部分として置いておくことができる。コーラの数がコールされるメソッドの数より多いときは、コーラオブジェクトのストリームライン化を利用すると、便利である。
【0086】
以上のように、本発明は、種々のプログラミング言語のオブジェクトを処理し、ユーザ定義のデータ型をボックス化し、アンボックス化するために、メソッドとしても、装置としても、あるいはコンピュータプログラムを収容しているコンピュータ読み取り可能媒体やプログラムプロダクトのような製造物品としても実現することが可能である。本発明の好ましい実施形態に関連して、本発明を具体的に示し、説明してきたが、この分野の精通者ならば理解されるように、本発明の精神と範囲から逸脱しない限り、その形体と細部において種々態様に変更することが可能である。
【図面の簡単な説明】
【図1】本発明の実施形態による型システムを統一化された見方で提供するように動作する、例示コンパイラの論理的表現を示す図である。
【図2】本発明の例示実施形態のための動作環境を提供するコンピュータシステムを示す図である。
【図3】データ型をカテゴリ化するために本発明の例示実施形態で使用される例示データ型を示す図である。
【図4】オブジェクトを編成するために本発明の例示実施形態で使用される例示オブジェクトクラス階層を示す図である。
【図5】ボックス化データ型とアンボックス化データ型のセットを示す図である。
【図6】図1の例示コンパイラシステムの論理的表現を示す詳細図である。
【図7】本発明の例示実施形態において値型をボックス化し、アンボックス化するための方法を示す図である。
【図8】本発明の実施形態においてランタイムに値型のボックス化とアンボックス化を実現するための方法を示す図である。
【図9】本発明の他の実施形態においてランタイムに値型のボックス化とアンボックス化を実現するための方法を示す図である。
【符号の説明】
100 ソースファイル
102 ランタイム環境
104 コンパイラ
106 中間言語コードファイル
108 出力コード
110 値型
112 オブジェクト
114 組み込み値型
116 基本オブジェクトクラス階層
118 型ルール
120 オブジェクト
122 ボックス化値型
124 値型
302 組み込み型
304 ユーザ定義の型

Claims (6)

  1. 異なるプログラム記述言語で記述された複数のソースコードファイルを、システム上に実装されたコンパイラを用いて出力コードに変換して実行するコンピューティングデバイスであって、
    前記デバイスは、前記デバイスに接続されたコンピュータ読み取り可能な記憶媒体から、一のソースコードファイルを読み出し、
    前記コンピューティングデバイスは、読み出したソースコードファイルを、前記コンパイラに受け渡し、
    前記コンパイラは、前記ソースコードファイルを分析し、
    前記ソースコードファイル中で定義されている値型を、前記コンピュータ読み取り可能な記憶媒体に記憶された、型ルールを用いて識別し、
    前記ソースコードファイル中で定義されている値型がアンボックス化値型表現である場合、型ルールに含まれるメタデータを前記アンボックス化値型表現に追加してボックス化値型表現を生成し、前記値型がボックス化値型表現の場合、前記ボックス化値型表現からメタデータを取り除いて、アンボックス化値型表現を生成し、
    前記ソースコードファイルを、前記アンボックス化値型表現と前記ボックス化値型表現の両方を含む出力コードに変換して出力し、
    前記出力コードを実行することを特徴とするコンピューティングデバイス。
  2. 異なるプログラム記述言語で記述された複数のソースコードファイルを、システム上に実装されたコンパイラを用いて出力コードに変換して実行するコンピューティングデバイスにおいて実行される方法であって、
    前記デバイスが、前記デバイスに接続されたコンピュータ読み取り可能な記憶媒体から、一のソースコードファイルを読み出すステップと、
    読み出したソースコードファイルを、前記コンピューティングデバイスから前記コンパイラに受け渡すステップと、
    前記コンパイラが、前記ソースコードファイルを分析するステップと、
    前記コンパイラが、前記ソースコードファイル中で定義されている値型を、前記コンピュータ読み取り可能な記憶媒体に記憶された、型ルールを用いて識別するステップと、
    前記コンパイラが、前記ソースコードファイル中で定義されている値型がアンボックス化値型表現である場合、型ルールに含まれるメタデータを用いてボックス化値表現を生成し、前記値型がボックス化値型表現の場合、前記ボックス化値型表現からメタデータを取り除いてアンボックス化値型表現を生成するステップと、
    前記コンパイラが、前記ソースコードファイルを、前記アンボックス化値型表現と前記ボックス化値型表現の両方を含む出力コードに変換して出力するステップと、
    前記コンピューティングデバイスが、前記出力コードを実行するステップと
    を含むことを特徴とする方法。
  3. 請求項に記載の方法であって前記メタデータは前記ボックス化値型インタフェースのリストを含むことを特徴とする方法。
  4. 請求項に記載の方法であって、前記コンピューティングデバイスは入力デバイスをさらに備え、前記メタデータは、前記入力デバイスからの信号によって定義されることを特徴とする方法。
  5. 請求項に記載の方法であって、前記コンピュータ読み取り可能な記憶媒体は、複数のオブジェクトクラスを含むオブジェクトクラス階層をさらに有し、前記ボックス化値型表現は、前記オブジェクトクラス階層の基本オブジェクトクラスから一つまたはそれ以上インタフェースを継承することを特徴とする方法。
  6. 請求項に記載の方法であって、前記方法はランタイムに実行されることを特徴とする方法。
JP2001209530A 2000-07-10 2001-07-10 統一データ型システムおよび方法 Expired - Fee Related JP4662657B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US61328900A 2000-07-10 2000-07-10
US09/613289 2000-07-10
US09/614158 2000-07-11
US09/614,158 US6738968B1 (en) 2000-07-10 2000-07-11 Unified data type system and method

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2007287939A Division JP4668971B2 (ja) 2000-07-10 2007-11-05 データ型を処理するためのシステムおよびメソッドのコールを実行する方法

Publications (3)

Publication Number Publication Date
JP2002073349A JP2002073349A (ja) 2002-03-12
JP2002073349A5 JP2002073349A5 (ja) 2007-02-22
JP4662657B2 true JP4662657B2 (ja) 2011-03-30

Family

ID=27086987

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2001209530A Expired - Fee Related JP4662657B2 (ja) 2000-07-10 2001-07-10 統一データ型システムおよび方法
JP2007287939A Expired - Fee Related JP4668971B2 (ja) 2000-07-10 2007-11-05 データ型を処理するためのシステムおよびメソッドのコールを実行する方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2007287939A Expired - Fee Related JP4668971B2 (ja) 2000-07-10 2007-11-05 データ型を処理するためのシステムおよびメソッドのコールを実行する方法

Country Status (3)

Country Link
US (3) US8065668B2 (ja)
EP (1) EP1174791B1 (ja)
JP (2) JP4662657B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106415488A (zh) * 2014-04-22 2017-02-15 甲骨文国际公司 将泛型类分解成层

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4662657B2 (ja) 2000-07-10 2011-03-30 マイクロソフト コーポレーション 統一データ型システムおよび方法
US7043722B2 (en) * 2002-07-31 2006-05-09 Bea Systems, Inc. Mixed language expression loading and execution methods and apparatuses
US7810077B2 (en) * 2005-04-18 2010-10-05 Oracle America Inc. Reifying generic types while maintaining migration compatibility
US7735070B2 (en) * 2005-06-30 2010-06-08 Oracle America, Inc. Allowing non-generified methods to override generified methods
US7810073B2 (en) * 2006-09-05 2010-10-05 International Business Machines Corporation Method of translating n to n instructions employing an enhanced extended translation facility
US20080282238A1 (en) * 2007-05-10 2008-11-13 Microsoft Corporation Static type for late binding
US7840597B2 (en) * 2008-01-31 2010-11-23 Intuit Inc. Method and apparatus for managing metadata associated with entities in a computing system
US8788542B2 (en) 2008-02-12 2014-07-22 Oracle International Corporation Customization syntax for multi-layer XML customization
US8966465B2 (en) 2008-02-12 2015-02-24 Oracle International Corporation Customization creation and update for multi-layer XML customization
US8875306B2 (en) 2008-02-12 2014-10-28 Oracle International Corporation Customization restrictions for multi-layer XML customization
US8996658B2 (en) 2008-09-03 2015-03-31 Oracle International Corporation System and method for integration of browser-based thin client applications within desktop rich client architecture
US8799319B2 (en) 2008-09-19 2014-08-05 Oracle International Corporation System and method for meta-data driven, semi-automated generation of web services based on existing applications
US9122520B2 (en) 2008-09-17 2015-09-01 Oracle International Corporation Generic wait service: pausing a BPEL process
US8799877B2 (en) * 2009-03-27 2014-08-05 Optumsoft, Inc. Interpreter-based program language translator using embedded interpreter types and variables
US9104484B2 (en) 2010-04-21 2015-08-11 Salesforce.Com, Inc. Methods and systems for evaluating bytecode in an on-demand service environment including translation of apex to bytecode
US8510530B1 (en) * 2010-12-09 2013-08-13 Google Inc. Memory management for programs operating asynchronously
US9081893B2 (en) * 2011-02-18 2015-07-14 Microsoft Technology Licensing, Llc Dynamic lazy type system
US20130086565A1 (en) * 2011-09-29 2013-04-04 Benedict R. Gaster Low-level function selection using vector-width
US8954942B2 (en) * 2011-09-30 2015-02-10 Oracle International Corporation Optimizations using a BPEL compiler
JP5818695B2 (ja) * 2012-01-04 2015-11-18 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation コード変換方法、プログラム及びシステム
US8924927B2 (en) * 2012-06-01 2014-12-30 Google Inc. Representation and conversion of dynamically-typed arrays
US9342334B2 (en) 2012-06-22 2016-05-17 Advanced Micro Devices, Inc. Simulating vector execution
US9557974B2 (en) 2012-07-10 2017-01-31 Oracle International Corporation System and method for supporting compatibility checking for lambda expression
US8930920B2 (en) * 2012-12-31 2015-01-06 Oracle International Corporation Self-optimizing interpreter and snapshot compilation
US9600136B1 (en) * 2013-03-11 2017-03-21 Workday, Inc. Data object extensibility
US10705802B2 (en) * 2013-03-20 2020-07-07 Microsoft Technology Licensing, Llc Extensible and queryable strong types
US10296313B2 (en) * 2014-11-18 2019-05-21 Roger James Poon Safely consuming dynamically-typed code from a statically-typed programming language
US10001978B2 (en) 2015-11-11 2018-06-19 Oracle International Corporation Type inference optimization
US11880683B2 (en) 2017-10-31 2024-01-23 Advanced Micro Devices, Inc. Packed 16 bits instruction pipeline
US10802965B2 (en) 2019-02-05 2020-10-13 Microsoft Technology Licensing, Llc Reducing synchronization reliance in garbage collection marking
US11422932B2 (en) 2019-12-20 2022-08-23 Microsoft Technology Licensing, Llc Integrated reference and secondary marking
US11392427B2 (en) 2020-01-06 2022-07-19 Microsoft Technology Licensing, Llc Lock-free reading of unitary value sets
CN113495731B (zh) * 2020-03-19 2022-06-07 阿里巴巴集团控股有限公司 代码执行方法、装置、电子设备及存储介质
US11740880B2 (en) 2021-09-08 2023-08-29 International Business Machines Corporation Partial data type promotion to exploit efficient vectorization in microprocessors
US20240004616A1 (en) * 2022-06-29 2024-01-04 Microsoft Technology Licensing, Llc Runtime support for role types that extend underlying types

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS4847737A (ja) 1971-10-12 1973-07-06
CA1248238A (en) * 1985-10-17 1989-01-03 Francis D. Lawlor Compiler including retargetable data generation
JPH03102427A (ja) 1989-09-14 1991-04-26 Fujitsu Ltd 利用者変数の強制型変換処理方式
US5361351A (en) * 1990-09-21 1994-11-01 Hewlett-Packard Company System and method for supporting run-time data type identification of objects within a computer program
IL100990A (en) 1991-02-27 1995-10-31 Digital Equipment Corp Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
US5659753A (en) 1991-02-27 1997-08-19 Digital Equipment Corporation Interface for symbol table construction in a multilanguage optimizing compiler
IL100989A (en) 1991-02-27 1995-10-31 Digital Equipment Corp Analysis of inductive expressions in multilingual mehadoptimization
JP2811990B2 (ja) 1991-04-19 1998-10-15 三菱電機株式会社 プログラム処理装置及びプログラム処理方法
US5581760A (en) 1992-07-06 1996-12-03 Microsoft Corporation Method and system for referring to and binding to objects using identifier objects
US5873097A (en) 1993-05-12 1999-02-16 Apple Computer, Inc. Update mechanism for computer storage container manager
US5375242A (en) 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization
CA2136154C (en) 1994-11-18 1999-08-24 Jay William Benayon User control of multiple memory heaps
US5923882A (en) 1995-08-29 1999-07-13 Silicon Graphics, Inc. Cross-module optimization for dynamically-shared programs and libraries
US6336161B1 (en) 1995-12-15 2002-01-01 Texas Instruments Incorporated Computer configuration system and method with state and restoration from non-volatile semiconductor memory
US5815415A (en) * 1996-01-19 1998-09-29 Bentley Systems, Incorporated Computer system for portable persistent modeling
US5909580A (en) 1996-02-08 1999-06-01 Inprise Corporation Development system and methods with direct compiler support for detecting invalid use and management of resources and memory at runtime
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
US6260074B1 (en) * 1996-03-30 2001-07-10 Sun Microsystems, Inc. Method and apparatus for passing generic objects in a distributed system
US6067413A (en) 1996-06-13 2000-05-23 Instantations, Inc. Data representation for mixed-language program development
US5987247A (en) 1997-05-09 1999-11-16 International Business Machines Corporation Systems, methods and computer program products for building frameworks in an object oriented environment
US6058455A (en) 1997-07-02 2000-05-02 International Business Corporation RAID system having a selectable unattended mode of operation with conditional and hierarchical automatic re-configuration
US5937409A (en) * 1997-07-25 1999-08-10 Oracle Corporation Integrating relational databases in an object oriented environment
CA2304517A1 (en) 1997-09-26 1999-04-08 Robert A. Huebner Object model mapping and runtime engine for employing relational database with object oriented software
JP3272281B2 (ja) * 1997-10-20 2002-04-08 インターナショナル・ビジネス・マシーンズ・コーポレーション データアイテム表示方法及び表示装置、データアイテムの表示を制御するプログラムを格納した記憶媒体
US6061690A (en) 1997-10-31 2000-05-09 Oracle Corporation Apparatus and method for storage of object collections in a database system
US6110226A (en) 1998-02-19 2000-08-29 Cygnus Solutions Java development environment using optimizing ahead-of-time compiler
US6381735B1 (en) * 1998-10-02 2002-04-30 Microsoft Corporation Dynamic classification of sections of software
US6246403B1 (en) * 1998-10-08 2001-06-12 Hewlett-Packard Company Method and apparatus for generating a graphical user interface
EP1135727A1 (en) 1998-11-25 2001-09-26 Sun Microsystems, Inc. A method for enabling comprehensive profiling of garbage-collected memory systems
US8479251B2 (en) * 1999-03-31 2013-07-02 Microsoft Corporation System and method for synchronizing streaming content with enhancing content using pre-announced triggers
US6457172B1 (en) * 1999-04-13 2002-09-24 International Business Machines Corporation Compiler for supporting multiple runtime data representations
US6915457B1 (en) 1999-04-23 2005-07-05 Nortel Networks Limited Apparatus and method for monitoring messages forwarded between applications
JP3102427B1 (ja) 1999-05-18 2000-10-23 住友電気工業株式会社 多結晶ダイヤモンド工具
US6601233B1 (en) * 1999-07-30 2003-07-29 Accenture Llp Business components framework
US6523027B1 (en) * 1999-07-30 2003-02-18 Accenture Llp Interfacing servers in a Java based e-commerce architecture
US6609128B1 (en) * 1999-07-30 2003-08-19 Accenture Llp Codes table framework design in an E-commerce architecture
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6370682B1 (en) * 1999-09-15 2002-04-09 Siemens Atkiengesellschaft System and method for developing reusable flexible and platform independent software using components
US6560699B1 (en) 1999-10-20 2003-05-06 Cisco Technology, Inc. Constraint-based language configuration files for updating and verifying system constraints
US6457142B1 (en) 1999-10-29 2002-09-24 Lucent Technologies Inc. Method and apparatus for target application program supervision
US6915324B1 (en) * 2000-04-21 2005-07-05 Sun Microsystems, Inc. Generic and dynamic mapping of abstract syntax notation (ASN1) to and from interface definition language for network management
GB2367642B (en) 2000-05-27 2004-05-05 Ibm Performance profiling tool
US6836883B1 (en) 2000-06-21 2004-12-28 Microsoft Corporation Method and system for compiling multiple languages
JP4662657B2 (ja) 2000-07-10 2011-03-30 マイクロソフト コーポレーション 統一データ型システムおよび方法
US6738968B1 (en) * 2000-07-10 2004-05-18 Microsoft Corporation Unified data type system and method
US6834385B2 (en) 2001-01-04 2004-12-21 International Business Machines Corporation System and method for utilizing dispatch queues in a multiprocessor data processing system
US20030033443A1 (en) 2001-03-01 2003-02-13 Nikolay Igotti Virtual machine integration application program interface
CA2350735A1 (en) 2001-03-14 2002-09-14 Ibm Canada Limited-Ibm Canada Limitee A method for providing open access to application profiling data
US6941437B2 (en) 2001-07-19 2005-09-06 Wind River Systems, Inc. Memory allocation scheme
US20030093433A1 (en) 2001-11-14 2003-05-15 Exegesys, Inc. Method and system for software application development and customizible runtime environment
US7243267B2 (en) 2002-03-01 2007-07-10 Avaya Technology Llc Automatic failure detection and recovery of applications
US7707563B2 (en) 2003-01-10 2010-04-27 Nexaweb Technologies Inc System and method for network-based computing
US7406699B2 (en) 2003-04-02 2008-07-29 Microsoft Corporation Enhanced runtime hosting

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106415488A (zh) * 2014-04-22 2017-02-15 甲骨文国际公司 将泛型类分解成层
CN106415488B (zh) * 2014-04-22 2020-02-14 甲骨文国际公司 将泛型类分解成层

Also Published As

Publication number Publication date
US20170228223A1 (en) 2017-08-10
US9690554B2 (en) 2017-06-27
US20120072890A1 (en) 2012-03-22
US8065668B2 (en) 2011-11-22
JP2002073349A (ja) 2002-03-12
EP1174791A3 (en) 2007-12-19
JP4668971B2 (ja) 2011-04-13
EP1174791B1 (en) 2017-09-27
US20040216094A1 (en) 2004-10-28
EP1174791A2 (en) 2002-01-23
JP2008084339A (ja) 2008-04-10
US20160124726A9 (en) 2016-05-05

Similar Documents

Publication Publication Date Title
JP4668971B2 (ja) データ型を処理するためのシステムおよびメソッドのコールを実行する方法
JP5021805B2 (ja) データ型を処理するシステムおよび方法
US11175896B2 (en) Handling value types
US6286134B1 (en) Instruction selection in a multi-platform environment
JP4994580B2 (ja) 動的ランタイム環境でタグ付き型を用いるシステム及び方法
US7086041B2 (en) Extensible type system for representing and checking consistency of program components during the process of compilation
US5761511A (en) Method and apparatus for a type-safe framework for dynamically extensible objects
US7627594B2 (en) Runtime support for nullable types
US20120110559A1 (en) Processing method
US7512938B2 (en) Typed intermediate representation for object-oriented languages
US7788652B2 (en) Representing type information in a compiler and programming tools framework
US11782774B2 (en) Implementing optional specialization when compiling code
Läufer et al. Safe structural conformance for Java
Marevac et al. Design and Implementation of a Virtual Machine for a Dynamic Object-Oriented Programming Language
Beevi et al. MetaJC++: A flexible and automatic program transformation technique using meta framework
Lin et al. Bypassing portability pitfalls of high-level low-level programming
Hicks Types and Intermdiate Representations
Liblit Local Qualification Inference for Titanium
To Fictitious imperative language system
Shemitz NET 2.0 for Delphi Programmers
Lee et al. Object-Oriented Programming
Cortonesi Objective-C frameworks to Eiffel converter
Henderson et al. The Haskell 98 Foreign Function Interface 1.0 An Addendum to the Haskell 98 Report
Bandyopadhyay et al. Compiling dynamic languages via typed functional languages
Kastinger Piero Ploner (pploner@ cosy. sbg. ac. at), Michael Wallner (mwallner@ cosy. sbg. ac. at) University of Salzburg, Department of Computer Sciences

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061227

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061227

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20061227

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20061227

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20070118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070302

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070604

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070706

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20071005

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20071005

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071105

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

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20071113

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

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20080201

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20100519

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100519

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101108

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110104

R150 Certificate of patent or registration of utility model

Ref document number: 4662657

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20140114

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees