(58)【調査した分野】(Int.Cl.,DB名)
型システムに関連付けられる前記少なくとも1つの型は、オペレーティングシステムに関連付けられるアプリケーション・プログラミング・インタフェース(API)を備える、
請求項15に記載のシステム。
前記1つ以上のプロセッサは、型システムに関連付けられる型の名前空間に合致するファイル名を有するファイルについて、前記1つ以上の出力メタデータファイルを検索するように更に構成される、
請求項15に記載のシステム。
【発明を実施するための形態】
【0013】
概要
本発明に係るさまざまな実施形態は、複数の異なる型システム同士の間における型解決の仕組みを抽象化するための機能を実現する。1つの型システムを使用するアプリケーションは、そのアプリケーションがどのように異なる型システム同士の間をブリッジするかについての知識を有する場合、もう1つの型システム中において呼び出しを実行し得る。例えば型システムの特性(例えばデータ型、データ型の振る舞い、関数呼び出しパラメータ、イベント、等)が、プログラムに基づいてアクセス可能な1つ以上のファイルに記述され得る。アプリケーションは、そのようなファイルにアクセスすることによって、異なる型システムを使用した型解決を実行し得る。本発明に係るいくつかの実施形態においては、型解決の仕組みが抽象化され得るので、アプリケーションは、どのファイルにアクセスするか、及び/又は、どこにファイルが存在するか、といった予備知識なしに上述した型システムの特性記述にアクセスすることができる。
【0014】
以下の説明では、「動作環境」と題するセクションが提供され、1つ以上の実施形態が用いられ得る複数の環境を説明する。これに続き、「型解決アーキテクチャ」と題するセクションにおいて、プログラムに基づいて上述した型解決を実行するシステムを実現可能にするアーキテクチャを説明する。次に、「型記述の格納」と題するセクションにおいて、型記述を格納するための柔軟性の高い仕組みを実現可能にするために使用され得るさまざまな方法を説明する。最後に、「例示的なシステム」と題するセクションにおいて、1つ以上の実施形態を実現するために利用され得る例示的なシステムを説明する。
【0015】
本発明に関し、以下に後述するさまざまな実施形態についての概要を提供したので、ここでは、本発明に係る1つ以上の実施形態が実現され得る基盤となる例示的な動作環境を考慮する。
【0016】
動作環境
図1A及び
図1Bは、1つ以上の実施形態に係る動作環境を示し、
図1A及び
図1Bにおいては、当該動作環境はそれぞれ、100a及び100bとして一般化した形で示されている。
図1Aは、以下において後述するとおり、1つ以上のメタデータファイルの生成に関連して利用され得る例示的な動作環境を示す。
図1Aの環境は、「ビルド段階」の環境とみなされ得る。
図1Bは、柔軟性の高い型システムを使用した型解決に関連して利用され得る例示的な動作環境を示す。
図1Bの環境は、ランタイム時の環境とみなされ得る。本発明に係るいくつかの実施形態において、動作環境100a及び100bは、少なくともいくつかの同様のコンポーネントを有する。したがって、簡潔化のために、
図1A及び
図1Bは一緒に説明される。
図1Aに関連付けられたコンポーネントが、「1XXa」との命名規則に従って命名されるコンポーネントとして特定される場合、
図1Bに関連付けられる同様のコンポーネントは、「1XXb」との命名規則に従って命名されるコンポーネントとして特定される。同様に、動作環境特有のコンポーネントは、単に「1XX」として特定される。
【0017】
動作環境100a及び100bはそれぞれ、1つ以上のプロセッサ104a、104bを有するコンピューティング・デバイス102a、102b、及び1つ以上のコンピュータ読み取り可能な記憶媒体106a、106bを含む。コンピュータ読み取り可能な記憶媒体は、コンピューティング・デバイスに典型的に関連付けられる全ての形態の揮発性及び不揮発性のメモリ及び/又は記憶媒体を含み得る。そのような媒体の具体例を限定目的ではなく単に例示目的で挙げるならば、当該媒体は、ROM、RAM、フラッシュ・メモリ、ハードディスク、リムーバブル・メディア、等を含み得る。コンピューティング・デバイスの1つの特定の例が、
図6において以下に示され説明される。
【0018】
加えて、コンピューティング・デバイス102a、102bは、オペレーティングシステム(OS)108a、108b、及びアプリケーション110a、110bを含む。オペレーティングシステム108a、108bは、コンピューティング・デバイス102a、102bのソフトウェア・リソース及び/又はハードウェア・リソースを管理するように構成された機能を表す。これは、メモリ管理、ファイル管理、サービス、関数、リソース管理、周辺機器管理、等を含み得る。アプリケーション110a、110bは、コンピューティング・デバイス102a、102b上で、典型的にはオペレーティングシステム108a、108bにより支援されて、実行するように構成されたソフトウェアを表す。アプリケーション110a、110bは、以下においてさらに説明されるように、オペレーティングシステム108a、108bの型システムと同一の及び/又は異なる型システムで実現され得る。
【0019】
コンピューティング・デバイス102a、102bはまた、1つ以上のソフトウェア・インターフェース112a、112bを含み、1つ以上のソフトウェア・インターフェース112a、112bは、ソフトウェア及び/又はアプリケーションによって提供される関数、サービス、データ、等への、プログラムに基づいたアクセス手段を表す。ソフトウェア・インターフェース112a、112bは、オペレーティングシステム108a、108b及び/又はアプリケーション110a、110bへの、プログラムに基づいたアクセスを可能にし得る。例えばアプリケーション110a、110bは、ソフトウェア・インターフェース112a、112bを呼び出すことにより、オペレーティングシステム108a、108bによって提供される機能にアクセスし得る。いくつかの実施形態において、ソフトウェア・インターフェースを介して提供される型システムとは異なる型システムを使用するアプリケーション112a、112bは、以下においてさらに説明するように、型の相違をプログラムに基づいて解決し得る。
【0020】
加えて、コンピューティング・デバイス102a、102bはまた、1つ以上のメタデータファイル114a、114bを含み、1つ以上のメタデータファイル114a、114bは、ソフトウェア・インターフェース112a、112b、オペレーティングシステム108a、108b、及び/又はアプリケーション110a、110bに関連付けられた、入力パラメータの型、パラメータの呼び出し順序、インターフェース間の関係、等といった情報を含む、1つ以上の機械読み取り可能なファイルを表す。あるいは、又は加えて、ソフトウェア・インターフェースは、コンピューティング・デバイス102a、102bに接続された周辺機器、例えばプリンタ、スキャナ、スマートフォン、等に関連付けられ得る。いくつかの実施形態において、メタデータファイル114a、114bは、以下においてさらに説明されるように、任意の適切な手法でインターフェースを記述するように構成され得る。
【0021】
コンピューティング・デバイス102aはまた、マージ・モジュール116を含む。マージ・モジュール116は、1つ以上のメタデータファイルを読み出し、ファイルの内容を分析し、再構成された内容を含む1つ以上の新たなメタデータファイルを出力し得る機能を表す。本発明に係るいくつかの実施形態において、内容は、型記述に少なくとも部分的に基づいて再編成され得る。
【0022】
コンピューティング・デバイス102bは、型解決モジュール118を含む。型解決モジュール118は、関連付けられた型データにアクセスするための要求を受信し、型解決情報の場所を特定するように構成された機能を表す。本発明に係るいくつかの実施形態において、型解決モジュール118は、情報が場所を変えても無関係に、ユーザ入力なしで型解決情報の場所を特定し得る。例えば型解決モジュール118は、以下においてさらに説明されるように、情報が第1のファイルから第2のファイルに移動した場合、ユーザ入力なしでインターフェース記述情報の場所を特定し得る。
【0023】
コンピューティング・デバイス102a、102bの具体例を限定目的ではなく、例示目的で挙げるならば、これらは、例えばデスクトップ型コンピュータ、ポータブル型コンピュータ、ノートブック型コンピュータ、携帯情報端末(PDA)のようなハンドヘルド型コンピュータ、携帯電話、等といった任意の適切なコンピューティング・デバイスとして具現化され得る。
【0024】
例示的な動作環境を説明したので、ここでは、場所のファイル名及び/又は場所とは無関係に型解決を可能にするように構成された型解決アーキテクチャの説明を考慮する。
【0025】
型解決アーキテクチャ
プログラミング言語が技術的に進歩するにつれ、それらの能力も進歩する。例えば第1のプログラミング言語で書かれたアプリケーションが、第2のプログラミング言語で書かれたソフトウェアから呼び出され得る。本来、プログラミング言語は、異なる型システムを有する。したがって、異なる型システムの下に存在するソフトウェアを首尾よく呼び出すために、第1のプログラミング言語は、自身の型システムとは異なる型を解決するための技法を使用する。例えばプログラマは、型を変換するためのラッパー・コードを手作業で書くことが可能である。あるいは、型システムの定義がファイルに格納され、プログラムに基づいてアクセスされ得る。
【0026】
型の定義を含むファイルにプログラムに基づいてアクセスすることは、機能及び記述をアプリケーションがランタイムに決定することを可能にする。しかしながら、ファイルにアクセスするということは、どのファイルにアクセスするべきであるかだけでなく、ファイルの格納場所も知っていなければならないことを暗に意味する。ファイルの内容が変わった場合及び/又はファイルの格納場所が変わった場合、ファイルにアクセスしようと試みるアプリケーションは、適切に更新されない限り、場合によっては失敗し得る。これは時に、アプリケーションとファイルとの間の意図しない結合を生じさせる可能性がある。
【0027】
本発明に係るさまざまな実施形態は、複数の型システム同士の間における型解決の仕組みを抽象化するための機能を実現する。型解決に関連付けられた情報は、プログラムに基づいてアクセス可能なファイルに格納され得る。いくつかの実施形態において、1つの型システムを使用するアプリケーションは、ファイルへのアクセスを通じて、もう1つの型システムを使用することにより動的に型解決を実行し得る。あるいは、又は加えて、アプリケーションは、どのファイルにアクセスするのか、及び/又は、どこにファイルが存在するのかに関する知識を持つことなしに、ファイルにアクセスし得る。
【0028】
図2を見ると、1つ以上の実施形態に係る例示的なアーキテクチャ200が示されている。アーキテクチャ200は、オペレーティングシステム202を含み、オペレーティングシステム202は、コンピューティング・デバイス上で実行するように構成され得る。簡潔化のためにオペレーティングシステム202の全体が示されていないことが理解されるべきである。オペレーティングシステム202は、コンピューティング・デバイスに関連付けられたリソースを管理するように構成された1つ以上のオペレーティングシステム・コンポーネント204を含む。いくつかの実施形態において、オペレーティングシステム・コンポーネント204は、リソースを管理することに関連付けられた1つ以上のサービス及び/又は特徴だけでなく、リソースへのプログラムに基づいたアクセスをも提供し得る。オペレーティングシステム・コンポーネント204はまた、オペレーティングシステム202に関連付けられた基本的な要素だけでなく、基本的な要素から構築された複合的な要素をも含み得る。この例はオペレーティングシステム202によって提供される機能を外部からアクセス可能とする(エクスポーズする)アーキテクチャを示しているが、このアーキテクチャが、特許請求の主題の精神から逸脱することなく、他の適切なタイプのアプリケーションによって提供される機能を外部からアクセス可能とするために適用され得ることが認められ、理解されるべきである。
【0029】
本発明に係るいくつかの実施形態において、オペレーティングシステム・コンポーネント204は、ここではオペレーティングシステム・インターフェース206として示されている1つ以上のインターフェースを介して外部からアクセス可能とされ得る(エクスポーズされ得る)。このようなインターフェースは、任意の適切な形態のインターフェース、例えばアプリケーション・プログラミング・インターフェース(API)とすることが可能である。アプリケーションは、以下においてさらに説明されるように、呼び出し中及び/又は実行中のオペレーティングシステム・インターフェース206により、オペレーティングシステム・コンポーネント204によって提供される機能にアクセスし得る。本実施形態に係るいくつかのケースにおいて、アプリケーションは、オペレーティングシステム・インターフェース206を記述するために使用される型システムとは異なる型システムを利用する。いくつかのケースにおいて、オペレーティングシステム・インターフェース206は、アプリケーション・バイナリ・インターフェース(ABI)を含み得る。ABIは、機械により解釈実行可能な命令語レベルで、関数、方法、API、等を呼び出すためのバイナリ・コントラクトを記述する。バイナリ・コントラクトは、関数に関連付けられた識別子又は名前、関数を呼び出すために使用され得るシグネチャ、関数に受け渡されるパラメータの順序、及び/又は、パラメータに関連付けられたデータ型、等を含み得る。あるいは、又は加えて、バイナリ・コントラクトは、型システムの少なくとも1つの型に関連付けられたエクスポーズ動作の挙動に関する定義及び/又は規則を含み得る。
【0030】
オペレーティングシステム202はまた、さまざまなメタデータ208を含む。メタデータ208は、関連付けられたオペレーティングシステム・インターフェース206のさまざまな態様を記述する型解決情報、例えばバージョン情報、どの方法が利用可能か、インターフェースがどのパラメータを採用するか、パラメータのデータ型、パラメータを受け渡す順序、データ型の振る舞い、及び/又は解決情報、等を含み得る。本発明に係るいくつかの実施形態において、メタデータは、インターフェースに関連付けられた階層情報、例えばインターフェース間の関係を記述した、及び/又は、オブジェクト指向でインターフェースを記述した情報、を含み得る。メタデータはまた、クラスの記述、クラスの関連付けられた方法及びパラメータ、等を含み得る。本実施形態に係るいくつかのケースにおいて、メタデータは、抽象型システム(例えば特定のプログラミング言語と無関係の型システム)を使用してインターフェースを記述し得る。あるいは、又は加えて、メタデータは、特定の型システム、例えば抽象型システムの記述を含み得る。すると、特定のプログラミング言語は、特定の型システム(例えば抽象型システム)の記述を特定のプログラミング言語にマッピングし得る。さらに、どのインターフェースが利用可能かを決定することを望むプログラマは、手作業で、及び/又はプログラムに基づいて、各インターフェースの記述にアクセスすることができる。例えばどのインターフェースがオペレーティングシステム・コンポーネント204のアクセス手段として存在するか、インターフェースがどの型システムで記述されているか、どのようにそれらを呼び出すか、を決定するために、プログラマは、関連付けられたメタデータ208にアクセスし得る。
【0031】
アーキテクチャ200はまた、1つ以上のアプリケーション210を含む。アプリケーション210は、1つ以上のプログラミング言語、例えばHTML、JavaScript(登録商標)、Visual Basic、C#、C++、等から生成された1つ以上のアプリケーションを含み得る。いくつかの実施形態において、アプリケーション210は、オペレーティングシステム・コンポーネントへの1つ以上の呼び出しを含む。いくつかのケースにおいて、アプリケーション210は、まず、どのインターフェースが利用可能かをプログラムに基づいて決定し、次に、決定されたインターフェースのうちの1つ以上への呼び出しを行うように構成され得る。いくつかのケースにおいて、アプリケーション210は、以下においてさらに説明するように、1つ以上の生成された言語投影モジュール212からの支援を受けて、インターフェースにアクセスする。
【0032】
1つ以上の実施形態において、生成された言語投影モジュール212は、抽象型の定義を特定のプログラミング言語にマッピングする。任意の適切なプログラミング言語がマッピングされることができ、それらの例は上述したとおりである。いくつかの実施形態において、生成された言語投影モジュールは、プログラミング言語ごとに一意であり得る。本発明に係る他の実施形態において、生成された言語投影モジュールは、多目的な機能モジュールであり、複数のプログラミング言語によって利用され得る。上述したマッピングは、抽象型システムを使用して記述される現在及び未来のインターフェースが、追加のプログラミング・ステートメント(例えばラッパー関数)なしに特定のプログラミング言語にアクセスできるようにすることができる。上述したマッピングはさらに、特定のプログラミング言語にとってネイティブの手法で、当該特定のプログラミング言語がインターフェースを呼び出すことを可能にする。任意の適切なタイプの情報、例えばクラス、データ型、関数ポインタ、構造、等が、マッピングされ得る。
【0033】
インターフェースの記述は、アプリケーションがどのようにインターフェースを呼び出すべきかを記述するだけでなく、インターフェースに関連付けられた型システムの挙動を記述するためにも使用され得る。記述の情報格納場所が特定されたことに応答して、アプリケーションは、どのようにインターフェースを呼び出すかを動的に決定し、アプリケーションとインターフェースとの間における型システムの相違を解決し得る。本発明に係るいくつかの実施形態において、異なる型システムを使用するアプリケーションは、型記述が存在する情報格納場所の知識なしに、プログラムに基づいて、インターフェースによって利用される型にアクセスし、その型の型解決を実行し得る。あるいは、又は加えて、以下においてさらに説明するように、どのような方法で記述がグループ化されるかを特定することにより、自動的な型解決を実現可能にすることができる。
【0034】
以下の実施例においては、JavaScriptを使用してアプリケーションを書くプログラマがいると仮定する。この例はJavaScriptを使用した実装形態を説明するが、任意のプログラミング言語が特許請求の範囲に記載された技術思想から逸脱することなく使用され得ることが当業者にとって自明なものとして認められ理解されるべきである。外部の機能にアクセスするために、プログラマは、機能に関連付けられた名前空間及び/又は型を識別するように構成されたステートメントをソースコード中に含めることができる。例えば外部の型は、ソースコード内に以下のようにして含められ、及び/又は、以下のソースコードで記述され得る。
OperatingSystem.Foo.Bar.Type1
【0035】
この特定の例において、Type1は、アクセスされる機能を表現する。これは、任意の適切なタイプの機能であることができ、その例は、上述及び後述されるとおりである。上記シンタックスは、Type1の情報格納場所を特定するために横断的に走査することができる多層構造の名前空間階層を表現する。最も高い階層レベルにおいては、Type1は、「OperatingSystem」として識別された名前空間に存在する。「OperatingSystem」内に「Foo」として識別された名前空間が存在する。同様に、「Foo」内には「Bar」として識別された名前空間が存在し、「Bar」にはType1が存在する。したがって、シンタックスは、Type1の論理的な情報格納場所を識別するために使用され得る。しかしながら、Type1の物理的な情報格納場所(例えばどのファイルにType1情報が存在するか、及び/又は、どのディレクトリにファイルが存在するか)は時間の経過に従って変わる可能性がある。従来、物理的な情報格納場所は、アプリケーション内においてパス及びファイル名を(直接的又は間接的に)ハード・コーディングすることによって決定されることができた。したがって、Type1情報のファイル名及び/又はパスが変わった場合、アプリケーションによって利用されるファイル名及び/又はパスの任意の直接的又は間接的な参照は、更新されるまで不適切であろう。さらに、直接的又は間接的な参照が更新されるまで、アプリケーションは、場合によっては適切に機能することができなかった。
【0036】
本発明に係るさまざまな実施形態は、型解決の仕組みを抽象化するための機能を実現する。例えば型は、関連付けられた型解決情報の情報格納場所に関する完全な知識なしに、アプリケーションにより、プログラムに基づいて解決されることができる。本発明に係るいくつかの実施形態において、型解決情報は、情報格納場所を表している新たな情報によって、解決情報を利用するアプリケーションを更新せずに、再配置され得る。アプリケーションは、どのファイル中に型解決情報が存在するかに関わらず、型解決情報の場所を特定するように構成されることが可能となる。
【0037】
図3を見ると、本発明の1つ以上の実施形態に係る方法を実施するための一連の処理ステップを説明したフローチャートが示されている。当該方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせによって実行され得る。本発明に係る少なくともいくつかの実施形態において、当該方法の実施態様は、1つ以上のコンピューティング・デバイス上で実行中の1つ以上の適切に構成されたソフトウェア・モジュール(例えば
図1Bの型解決モジュール118)によって実現され得る。本発明に係るいくつかの実施形態において、当該方法は、ユーザによる介入なしに実行され得る。
【0038】
ステップ302は、解決される型と一致するファイル名を有するファイルを検索する。これは、上述した複数のメタデータファイルの検索を含み得る。上記シンタックスの例を参照すると、アプリケーションがOperatingSystem.Foo.Bar.Type1にアクセスすることに応答して、ステップ302は、「OperatingSystem.Foo.Bar.Type1」という名前を有するファイルを検索する。任意の適切なタイプの検索が実行され得る。例えば検索は、型とファイル名との間の完全一致、型とファイル名との間の部分一致、等を探すように構成され得る。あるいは、又は加えて、検索は、1つのディレクトリ、複数のディレクトリ、及び/又はサブディレクトリ、又はそれらの任意の組み合わせの中を検索するように構成され得る。
【0039】
ステップ304は、ファイルが存在するかどうかを決定する。ファイルが存在するとの決定に応答して、ステップ306は、型が名前空間であることを示す情報を送信する。ファイルが存在しないとの決定に応答して、ステップ308は、解決される型に関連付けられた名前空間と一致するファイル名を検索する。いくつかのケースにおいて、これは、どの名前空間上を検索するかを決定するために、名前空間の階層を表す情報を含むストリングを操作することを含み得る。上述した例において、Type1は、名前空間の階層において3階層下に配置されるものとして示されている。ストリングに対する操作は、型(例えばType1)を表す部分を削除し、名前空間の階層を表す部分を残すように実行され得る。ここで、ステップ308は、名前空間の階層「OperatingSystem.Foo.Bar」に関連付けられた名前を検索するだろう。上記と同様に、この検索は、完全一致又は部分一致の検索方法に従って検索を実行し、1つのディレクトリの中を検索し、さらにそのサブディレクトリの中を検索する、といった具合に構成され得る。
【0040】
ステップ310は、ファイル名に関連付けられたファイルが存在するかどうかを決定する。ファイルが存在するとの決定に応答して、ステップ312は、型に関連付けられた情報のためにファイルを処理する。
【0041】
ステップ314は、型に関連付けられた情報がファイル内に配置されているかどうかを決定する。型に関連付けられた情報がファイル内にあるとの決定に応答して、ステップ316は、情報を戻す。例えば情報は、呼び出しているプログラムに戻され得る。しかしながら、型に関連付けられた情報がファイル内にないとの決定に応答して、処理はステップ318に進む。
【0042】
ステップ318においては、より高い階層レベルの名前空間と一致するファイル名が検索される。ステップ318におけるこの検索動作は、例えばステップ310の実行時におけるファイルが存在しないとの決定に応答する形で、又は、ステップ314の実行時に、型に関連付けられた情報の格納場所をファイル内において特定することができないことに応答する形で実行することが可能である。より高い階層レベルの名前空間は、任意の適切な手法で決定され得る。例えば上記の例では、ストリングが、名前空間階層における1つ上のレベル(例えば「OperatingSystem.Foo」)を反映させるようにさらに操作され得る。ステップ318は、より高い階層レベルの名前空間を決定し、関連付けられた名前を有するファイルを検索する。
【0043】
ステップ320は、ファイル名に関連付けられたファイルが存在するかどうかを決定する。ステップ310のケースのように、ファイルが存在すると決定された場合、処理は、ステップ312、314、及び/又は316に進み、ファイルが、関連付けられた型情報のために処理される。
【0044】
ファイルが存在しないとの決定に応答して、ステップ322は、さらに別の名前空間階層レベルが存在するかどうかを決定する。これは、任意の適切な手法で決定され得る。例えばレベル分離文字についてストリングを検索することができる。上記の例では、シンタックス「.」が、名前空間階層のレベルを区別する。
【0045】
さらに別の名前空間階層レベルが存在するとの決定に応答して、上述した処理が繰り返され、処理はステップ318に戻り、新たに決定された名前空間を有するファイルを検索する。ステップ318、320、及び322は、適切なファイルが見つかるまで、又は、名前空間階層の最上部に到達し、最上部が検索されるまで、繰り返し実行される。さらに別の名前空間階層レベルが存在しないとの決定に応答して、ステップ324はエラーを戻す。これは、例外処理を実行すること、ポップアップ・ダイアログ・ボックスを表示すること、等を含み得る。
【0046】
上述した方法の使用により、複数のファイル及び/又は情報格納場所が、型解決情報について検索され得る。説明したように、型の検索は、階層名前空間情報に少なくとも部分的に基づき得る。
図3は、より低い名前空間階層レベル(例えば「OperatingSystem.Foo.Bar.Type1」)から始まり、型の格納場所が特定されるか又は最上部の名前空間階層レベル(例えば「OperatingSystem」)に到達するまで、名前空間の各階層レベルを上に向かって横断的に走査するように実行される型の検索動作を説明する。しかしながら、この検索動作は、任意の適切な順序で実行され得る。本発明に係るいくつかの実施形態では、型の検索動作は、より高い名前空間階層レベル(例えば「OperatingSystem」)から始まり、型の格納場所が特定されるか最下部の名前空間階層レベル(例えば「OperatingSystem.Foo.Bar.Type1」)に到達するまで、名前空間の各階層レベルを下に向かって横断的に走査し得る。名前空間階層上の検索は、型解決情報がどこに存在し得るかを抽象化することができ、さらに、型解決情報にアクセスするアプリケーションに影響を及ぼさずに型解決情報の情報格納場所を変更することを可能にする。
【0047】
場所のファイル名及び/又は場所とは無関係に型解決を可能にするように構成された型解決アーキテクチャが考慮されたので、ここでは、1つ以上の実施形態に係るフレキシブルな型記述の格納の説明を考慮する。
【0048】
型記述の格納
メタデータファイルが、ソフトウェア・インターフェースのさまざまな態様を記述するために使用され得る。上述したように、メタデータファイルは、クラス階層、抽象型システム、関連付けられた方法、プロパティ、及びイベント、等によってインターフェースを記述する情報を含み得る。本実施形態に係るいくつかのケースにおいて、関連付けられた情報は、複数のファイル内に存在し得る。例えば異なるメタデータファイルが、同一の名前空間に関連する情報を含み得る。複数のメタデータファイルは、メタデータファイルの開発者に高い柔軟性を与え得る一方で、それは時に、メタデータファイルをユーザが検索する際の妨げとなり得る。以下の例では、各名前空間が、それ独自の関連付けられたメタデータファイルを有する例を考慮する。分割の観点からは、各名前空間のための別個のファイルは、名前空間に対する変更を、関連付けられたファイルに分離することができる。しかしながら、検索の観点からは、情報について複数のファイルを検索しなくてはならないことは、ランタイムでの検索時の性能を低下させ得る。さらに、知識の観点からは、何の情報が何のファイルの中にあるかの追跡を維持することは、ファイル数が増加すると複雑化し得る。
【0049】
本発明に係るさまざまな実施形態は、型解決情報が存在するファイル名及びファイル格納場所の予備知識なしの型解決を実現可能にする。複数の入力ファイルから成るファイル群の内容が分析され、少なくとも部分的には合成規則に基づいて分割され得る。複数の出力ファイルから成るファイル群を生成することができ、分割された内容を含むように構成される。出力ファイルは、内容がどこに存在するかの予備知識なしに内容の格納場所を特定することを可能にし得る。
【0050】
例として、
図4を見ると、1つ以上の実施形態に係る、記述言語ファイル、メタデータファイル、及びマージ・モジュール間の関係が示されている。本発明に係る少なくともいくつかの実施形態において、この関係図に示されたモジュールは、ソフトウェア、ハードウェア、又はそれらの任意の組み合わせ、例えば
図1Aのマージ・モジュール116として実現され得る。
【0051】
例示され説明された実施形態において、Foo.idl 402は、1つ以上のインターフェースを記述するように構成された記述言語ファイルを表す。本発明に係るいくつかの実施形態において、インターフェースは、
図1のオペレーティングシステム・インターフェース108及び/又はアプリケーション110といった、オペレーティングシステム及び/又はアプリケーションに関連付けられ得る。記述言語ファイルは、任意の適切な記述、マーク付け言語、及び/又はシンタックスを使用して、例えばインターフェース定義言語(IDL)、拡張可能なマーク付け言語(XML)、等を用いて、インターフェースを記述し得る。この特定の例において、Foo.idlは、IDLファイルを表す。
【0052】
Foo.idl 402は、3つの型の記述、Type Foo.Bar.Type1 404、Type Foo.Bar.Type2 406、及びType Foo.Bar.Type3 408を含む。3つのエントリを用いて説明するが、任意の適切な数の記述、ならびに型の記述が、特許請求の範囲に記載された発明の技術思想から逸脱することなく、Foo.idl 402に含まれ得ることが認められ理解されるべきである。例えば型は、クラス、インターフェース、方法、プロパティ、イベント、等の記述を含み得る。この例では、型404、406、及び408は、「Foo.Bar」の階層名前空間に含まれるものとして記述される。
【0053】
図4はまた、第2の記述言語ファイル、Bar.idl 410を示す。Foo.idl 402と同様に、Bar.idl 410は、3つの型、Type Foo.Bar.Type4 412、Type Foo.Quux.Type1 414、及びType Foo.Quux.Type2 416を含む記述言語ファイルを表す。型412、414、及び416のシンタックスを参照すると、Bar.idl 410は、名前空間「Foo.Bar」における少なくとも1つの型、及び、名前空間「Foo.Quux」における少なくとも2つの型を含む。
【0054】
Foo.metadata 418は、Foo.idl 402に少なくとも部分的に基づいた機械読み取り可能なメタデータファイルを表す。説明は省略するが、本発明に係るいくつかの実施形態において、Foo.metadata 418は、Foo.idl 402からコンパイラによって生成され得る。Foo.idl 402と同様に、Foo.metadata 418は、メタデータファイルにネイティブなフォーマットの型の記述、Foo.Bar.Type1 420、Foo.Bar.Type2 422、及びFoo.Bar.Type3 424を含む。Bar.metadata 426もまた、Bar.idl 410に少なくとも部分的に基づいた機械読み取り可能なメタデータファイルを表す。Foo.metadata 418のケースのように、Bar.metadata 426は、型の記述、Foo.Bar.Type4 428、Foo.Quux.Type1 430、及びFoo.Quux.Type3 432を含む。
【0055】
図4に含まれるのは、マージ・モジュール434である。マージ・モジュール434は、1つ以上の入力ファイルを受け取ると、判定基準及び/又は規則のセットに基づいて1つ以上の出力ファイルを生成し得る。例えば入力ファイルを検索する入力ディレクトリ、出力ファイルを置く出力ディレクトリ、適用する検査のレベル、どの名前空間階層レベルで統合及び/又は分割するか、どのようにして出力ファイルに命名するか、出力ファイルをいくつ生成するか、どの深度でメタデータファイルが生成されるべきか、等を指定する入力コマンド及び/又は規則が、マージ・モジュール434に適用され得る。判定基準及び/又は規則は、任意の適切な手法、例えば1つ以上の規則を含むコマンド・ライン及び/又は「makefile」によって、マージ・モジュール434に与えられ得る。
【0056】
この例では、Foo.metadata 418及びBar.metadata 426が、マージ・モジュール434への入力である。マージ・モジュール434は、入力ファイルをオペランド解析し、指示どおりに出力ファイルを生成する。ここで、マージ・モジュール434は、2つの出力ファイル、Foo.Bar.metadata 436及びFoo.Quux.metadata 438を生成する。Foo.Bar.metadata 436は、「Foo.Bar」の名前空間に関連する型(例えばFoo.Bar.Type1 440、Foo.Bar.Type2 442、Foo.Bar.Type3 444、及びFoo.Bar.Type4 446)を含む。同様に、Foo.Quux.metadata 438は、「Foo.Quux」の名前空間に関連する型(例えばFoo.Quux.Type1 448、Foo.Quux.Type2 450)を含む。上記の例におけるように、Foo.Bar.metadata 436及びFoo.Quux.metadata 438は、場合によっては関連付けられた入力ファイルから再編成及び/又は再グループ化されたデータを含む、機械読み取り可能なメタデータファイルを表す。したがって、マージ・モジュール434は、複数のファイルからの内容を分析し、判定基準のセットに従って内容を再構築し得る。
【0057】
本発明に係るいくつかの実施形態において、ファイルの命名規則が、抽象型解決を可能にするために利用され得る。例えば名前空間階層が命名規則として使用され得る。
図4において、ファイルFoo.Bar.metadata 436及びFoo.Quux.metadata 438は、それらのファイル名に、関連付けられた名前空間階層(例えばそれぞれ、「Foo.Bar」及び「Foo.Quux」)を含む。この命名規則を利用することにより、型情報は、特定のファイル名ではなく、それに関連付けられた名前空間に基づいて、検索されることが可能である。あるいは、又は加えて、出力ファイルは、複数の名前空間階層レベルのデータを含み得る。
図4において、Foo.Bar.metadata 436は、「Foo.Bar」の名前空間にデータを含むものとして示されている。しかしながら、Foo.Bar.metadata 436はまた、「Foo.Bar.Level1.Level2.Level3」という名前空間階層レベルに存在する型情報を含むように構成され得る。したがって、命名規則は、ファイル内に含まれ得る最も高いレベルの名前空間を示す。
【0058】
加えて、適切な型を格納している格納場所が特定されるまで、
図3において説明されたような検索アルゴリズムが、異なる階層レベルの名前空間(及び関連付けられたファイル)を横断的に走査するために用いられ得る。同一の名前空間階層レベルにおける全ての型情報を同一のファイル内に存在するように構成することにより、特定のレベルに関連付けられた情報は、情報を利用するアプリケーションに影響を及ぼさずにファイルからファイルへ移動させられることが可能となる。名前空間階層に関連付けられた情報は、任意の適切な手法で分割され得る。例えば複数の階層レベルが同一のファイル内に存在する(例えばFoo.Bar、Foo.Bar.Level1、及びFoo.Bar.Level2がすべて、「Foo.Bar.metadata」と命名されたファイル内に存在する)ようにすることも可能であるし、又は、各ファイルがそれ独自の関連付けられたファイルを有する(例えばFoo.Barのレベルにおける情報が、「Foo.Bar.metadata」内に存在し、Foo.Bar.Level1における情報が、「Foo.Bar.Level1.metadata」ファイル内に存在する)ようにすることも可能である、といった具合である。情報がそれに関連付けられた名前空間階層に従って置かれる場合、型解決は、特定のファイル名への依存を除くことによって、抽象化され得る。
【0059】
ここで
図5を見ると、本発明の1つ以上の実施形態に係る方法を実施するための一連の処理ステップを説明したフローチャートが示されている。この方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせによって実行され得る。本発明に係る少なくともいくつかの実施形態において、この方法の実施態様は、
図1Aのマージ・モジュール116のような、1つ以上のコンピューティング・デバイス上で実行中の、適切に構成された1つ以上のソフトウェア・モジュールによって実現され得る。
【0060】
ステップ502は、1つ以上の出力ファイルを生成することに関連付けられた1つ以上の入力判定基準を受信する。本発明に係るいくつかの実施形態において、当該入力判定基準は、情報をどのようにして1つ以上の出力ファイルへと分割するかを指定する規則を含み得る。例えば当該入力判定基準は、出力ファイルに一緒にグループ化する1つ以上の名前空間階層レベルを指定し得る。あるいは、又は加えて、当該入力判定基準は、例えばどのファイル及び/又はどのディレクトリから情報を引き出すかを指定することによって、どこで情報を見つけるかを記述し得る。
【0061】
1つ以上の入力判定基準を受信することに応答して、ステップ504は、1つ以上のソフトウェア・インターフェースと関連付けられた情報を含む1つ以上の入力ファイルを受信する。当該情報は、抽象型システムを使用するソフトウェア・インターフェースの記述、オブジェクト指向の関連付け、方法、プロパティ、関数ポインタ、入力及び/又は出力パラメータ、型システム情報、等といった、任意の適切なタイプの情報とすることが可能である。本発明に係る実施形態において、型情報は、名前空間の階層情報を含み得る。
【0062】
1つ以上の入力ファイルを受信することに応答して、ステップ506は、1つ以上の入力判定基準に少なくとも部分的に基づいて情報を分析する。これは、どの名前空間階層の型情報が各ファイル内に存在するかを決定するために入力ファイルを分析することを含み得る。
【0063】
情報を分析することに応答して、ステップ508は、当該情報を含む少なくとも1つの出力ファイルを生成する。本発明に係るいくつかの実施形態において、当該出力ファイルは、上述した入力判定基準に少なくとも部分的に基づいて異なるファイルに再分割された情報を含み得る。当該出力ファイルは、任意の適切な手法で構成されることができ、そのような手法の例は、上述されたとおりである。例えば当該出力ファイルは、メタデータファイルに含まれる名前空間階層に基づいた命名規則を用いて命名されたメタデータファイルとして構成され得る。あるいは、又は加えて、当該出力ファイルは、複数のレベルの名前空間階層を含むように構成され得る。名前空間階層情報を出力ファイル中に一緒にグループ化することによって、アプリケーションは、特定のファイル名ではなく、名前空間階層レベルに基づいて情報を検索することができる。これは、アプリケーションに影響を及ぼさない形で情報の分割を柔軟に実行することを可能にする。アプリケーションがどの名前空間階層レベルに特定の型が存在するのかを知っている限り、どのように名前空間階層レベルがグループ化されるかに関わらず、関連付けられた型情報の情報格納場所が出力ファイル中で特定され得る。
【0064】
柔軟性の高い型記述情報の格納方法を説明したので、以下の説明においては、本発明の1つ以上の実施形態に係る例示的なシステムの説明を考慮する。
【0065】
例示的なシステム
図6は、上述したさまざまな実施形態を実現するために使用され得る例示的なコンピューティング・デバイス600を示す。コンピューティング・デバイス600は、例えば
図1A及び
図1Bのコンピューティング・デバイス102a及び/又は102b、又は任意の他の適切なコンピューティング・デバイスとすることが可能である。
【0066】
コンピューティング・デバイス600は、1つ以上のプロセッサ又は処理ユニット602、1つ以上のメモリ及び/又はストレージ・コンポーネント604、1つ以上の入力/出力(I/O)デバイス606、及び、さまざまなコンポーネント及びデバイスに互いに通信することを可能にさせるバス608を含む。バス608は、メモリ・バス又はメモリ・コントローラ、周辺機器用バス、アクセラレイティッド・グラフィックス・ポート、及び、さまざまなバス・アーキテクチャのうちのいずれかを使用するプロセッサ又はローカル・バスを含む、いくつかのタイプのバス構造のうちのいずれかの1つ以上を表す。バス608は、有線及び/又は無線バスを含み得る。
【0067】
メモリ/ストレージ・コンポーネント604は、1つ以上のコンピュータ・ハードウェア記憶媒体を表す。コンポーネント604は、揮発性媒体(例えばランダム・アクセス・メモリ(RAM))及び/又は不揮発性媒体(例えば読み出し専用メモリ(ROM)、フラッシュ・メモリ、光学ディスク、磁気ディスク、等)を含み得る。コンポーネント604は、固定媒体(例えばRAM、ROM、固定ハード・ドライブ、等)だけでなく、取り外し可能な媒体(例えばフラッシュ・メモリ・ドライブ、リムーバブル・ハードドライブ、光学ディスク、等)を含み得る。
【0068】
1つ以上の入力/出力デバイス606は、ユーザによるコンピューティング・デバイス600へのコマンド及び情報の入力を可能にし、また、ユーザ及び/又は他のコンポーネント又はデバイスへの情報の提示を可能にする。入力デバイスの例は、キーボード、カーソル操作用デバイス(例えばマウス)、マイクロフォン、スキャナ、等を含む。出力デバイスの例は、ディスプレイ装置(例えばモニタ又はプロジェクタ)、スピーカー、プリンタ、ネットワーク・カード、等を含む。
【0069】
さまざまな技法が、ソフトウェア又はプログラム・モジュールの一般的なコンテキストで、本明細書において説明され得る。一般的に、ソフトウェアは、特定のタスクを実行するか、又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、等を含む。これらのモジュール及び技法の実現は、何らかの形態のコンピュータ読み取り可能な媒体上に記憶されるか、又はそのような媒体によって伝送され得る。コンピュータ読み取り可能な媒体は、コンピューティング・デバイスによってアクセス可能な、任意の利用可能な単数の媒体又は複数の媒体とすることが可能である。限定ではなく例として、コンピュータ読み取り可能な媒体は、「コンピュータ読み取り可能な記憶媒体」を備え得る。
【0070】
「コンピュータ読み取り可能な記憶媒体」は、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、又は他のデータ、といった情報の記憶のための、任意の方法又は技術において実現される、揮発性及び不揮発性の、取り外し可能及び取り外し不可能な、ハードウェア媒体を含む。コンピュータ読み取り可能なハードウェア記憶媒体は、RAM、ROM、EEPROM、フラッシュ・メモリ、又は他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)、又は他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、又は他の磁気ストレージデバイス、又は、所望の情報を記憶するために使用可能かつコンピュータによってアクセス可能な任意の他の媒体を含むが、これらに限定されない。
【0071】
結論
さまざまな実施形態は、複数の型システム間の型解決を抽象化するための能力を提供する。少なくとも1つの型が、プログラムに基づいてアクセス可能な1つ以上のファイルに記述され得る。いくつかの実施形態において、異なる型システムを使用するアプリケーションは、型の記述が存在する場所の知識なしに、少なくとも1つの型システムの型に、プログラムに基づいてアクセスし、その型を解決することができる。あるいは、又は加えて、プログラムに基づいてアクセス可能な1つ以上のファイルに含まれる型の記述は分析され、型の記述に少なくとも部分的に基づいて、プログラムに基づいてアクセス可能な1つ以上の新たなファイルへと再構築されることができる。
【0072】
主題は、構造上の特徴及び/又は方法の動作特有の表現で説明されたが、添付の請求項において定義される主題は、必ずしも上述した特定の特徴又は動作に限定されるものではないことが理解されるべきである。そうではなく、上述した特定の特徴及び動作は、請求項を実現する例示的な形態として開示されている。