JP4716681B2 - ソフトウェアを拡張するための方法、システムおよび記録媒体 - Google Patents

ソフトウェアを拡張するための方法、システムおよび記録媒体 Download PDF

Info

Publication number
JP4716681B2
JP4716681B2 JP2004194759A JP2004194759A JP4716681B2 JP 4716681 B2 JP4716681 B2 JP 4716681B2 JP 2004194759 A JP2004194759 A JP 2004194759A JP 2004194759 A JP2004194759 A JP 2004194759A JP 4716681 B2 JP4716681 B2 JP 4716681B2
Authority
JP
Japan
Prior art keywords
class
core
extension
definition
software
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 - Lifetime
Application number
JP2004194759A
Other languages
English (en)
Other versions
JP2005044347A (ja
Inventor
バーガー ジュリアン
リード ターディティ ジュニア デビッド
エル.ミッチェル チャールズ
エドワード エアーズ アンドリュー
ケー.グローバー ビノッド
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2005044347A publication Critical patent/JP2005044347A/ja
Application granted granted Critical
Publication of JP4716681B2 publication Critical patent/JP4716681B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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

Landscapes

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

Description

本技術分野は、拡張可能ソフトウェアシステムに関する。より詳細には、本技術分野は、拡張可能クラスの使用に関する。
コンピューティングの分野は、複数のプログラミング言語、多種多様なプロセッサ、および複数のオペレーティングシステム環境の普及によって、日ごとにますます複雑になりつつある。特別な機能を伴ういくつかのプログラミング言語(例えば、C++、Java(登録商標)、C#)が今や使用可能で、様々な計算機タスクをプログラムする際にプログラマに特別な利点を提供することができる。同様に、様々なプロセッサ(例えば、X86、IA−64、AMDなど)が使用可能で、特定のタスクを実行するための特別な利点を提供することができる。例えば、埋込みプロセッサは、特に電子装置内のよく定義されたタスクを処理するのに適しており、一方、インテル(Intel)(登録商標)ペンティアム(登録商標)(Pentium(登録商標))プロセッサなどの汎用プロセッサは、より柔軟性があり、複雑なタスクを処理することができる。したがって、計算機環境、計算機構成および計算機装置における多様性は、増大しつつある。
この多様性の必要性が増大することにより、コンパイラプログラムを構築するというすでにかなり複雑な分野がさらに複雑になってきている。従来、コンパイラプログラムは、特定のソースコード言語で書かれたソフトウェアをコンパイルするために書かれ、特定のタイプのプロセッサアーキテクチャ(例えば、IA−64、X86、AMD、ARMなど)をターゲットにしていた。より最近では、複数のソースコード言語で書かれたプログラムを単一の中間言語表現(例えば、CIL(C++中間言語)およびMSIL(ドットネット(.NET)用のマイクロソフト(Microsoft)(登録商標)中間言語))に変換するトランスレータプログラムが導入されてきている。しかし、1つのソースコードプログラムのコンパイルをいくつかの異なるタイプのターゲットアーキテクチャ間で再ターゲット化することは、依然として複雑で時間がかかるものになっている。
複数の言語および複数のターゲットなど複数のソフトウェア開発シナリオのためのコンパイラおよび他のソフトウェア開発ツール(例えば、分析ツール、オプティマイザ)を構築する複雑さを低減するための1つの適した方法は、ソフトウェアの拡張性を追加して特別に構成したコンパイラおよび他のソフトウェア開発ツールを構築することができる拡張可能なコアインフラストラクチャまたはコアフレームワークを開発することである。例えば、ユーザが、ある種のターゲットアーキテクチャ用に構成されたJIT(just−in−timeジャストインタイム)のコンパイラを構築したいと望む場合、コアコンパイラフレームワークのコードを再利用し、JITコンパイラタイプのシナリオに特有のコードを伴う拡張を追加することによりJITコンパイラを生成することによってユーザのタスクをより簡単にすることができる。最適化ツール、分析ツール、性能ツール、テストツールなど他のソフトウェア開発ツールについても同じことを想定することができる。
かかる拡張可能なコアコンパイラおよびツールフレームワークを使用してかかるカスタマイズされたコンパイラおよび他のソフトウェア開発ツールを構築することは、それ自体一連の複雑さを伴わないわけではない。以上は、言語、ターゲットアーキテクチャ、および構築すべきコンパイラタイプ(例えば、JIT、Pre−JIT、ネイティブ最適化コンパイラ(Native Optimizing Compiler)など)に依存する複数の異なるソフトウェアシナリオを反映する複数の異なる方法で構成することができる拡張可能なコンパイラおよびツールフレームワークの場合には、特に正しい。かかる複雑さの1つは、複数の異なるソフトウェアシナリオに依存した拡張フィールドを追加してそのコアフレームワークのデータ構造を拡張するようにした拡張可能な方法でコアフレームワークのデータ構造(例えば、オブジェクト指向言語におけるオブジェクトクラス)を定義することに関連している。クラス定義に拡張フィールドを追加する従来技法を使用することができるが、これは性能の低下およびコードの複雑さの増大による大幅な代償を支払うことによってのみ可能であり、開発コストおよびメンテナンスコストの増大がもたらされ得る。
したがって、複数の異なる可能なソフトウェア開発シナリオに依存する複数の異なるクラス拡張を使用してコアフレームワークソフトウェアシステムのオブジェクトクラスを拡張するための簡単ではあるが有効な方法が必要になっている。
本明細書中では、構成に依存する拡張クラス(extended class)を提供することによってソフトウェアプログラムを拡張するための方法およびシステムについて説明している。一態様では、様々なソフトウェア開発シナリオに依存するクラス拡張を提供し追加してコアクラス(core class)を拡張する。様々なクラス拡張を組み合わせて、特別に構成されたクラスを開発する。一態様では、コアソフトウェアプログラムのクラスを静的または動的に拡張可能であるものとして定義することができる。コアクラスを静的に拡張可能であると宣言する場合には、コアクラス定義およびそれらの対応するクラス拡張を組み合わせたヘッダファイルを生成し一緒にコンパイルして拡張クラスを生成することができる。かかる拡張クラスを使用してコアソフトウェアプログラムを構成に依存する方法で拡張することができる。
しかし、コアクラスを実行時に動的に拡張可能であると宣言する場合には、コアクラス宣言を含む別個のヘッダファイルと拡張宣言を含む別個のファイルを生成することができる。次いで、コアクラスに対応するヘッダファイルとクラス拡張に対応するヘッダファイルを別々にコンパイルして、実行時にクラス拡張を追加してコアクラスを拡張するようにして互いにリンクを有するコンピュータ実行可能なファイルを生成する。
さらに別の態様では、拡張ポイントをコアクラス宣言内で提供してクラス拡張を挿入すべきコアクラス宣言内にこのポイントを特に指し示すことができる。拡張可能クラスおよびクラス拡張を定義する適切な構文を伴うオブジェクト記述言語についても本明細書中で説明している。
また、オブジェクト記述言語による入力を受け取り、ソースコード表現による出力を生成してソフトウェアプログラムの拡張バージョンを生成することができるプリプロセッサプログラムについても本明細書中で説明している。他の態様では、このプリプロセッサは、最終的にコンピュータが実行可能な形式にコンパイルすることができる任意の言語による出力を生成することができる。
ソフトウェア開発ツールの例
本明細書中に説明した技法では、主としてコンパイラを使用した例を用いて示しているが、これらの技法はどれも、他のソフトウェア開発ツール(例えば、デバッガ、オプティマイザ、逆アセンブラ、シミュレータ、およびソフトウェア分析ツール)に関連して使用することもできる。
拡張可能ソフトウェア開発ツールフレームワーク
図1は、複数のソフトウェア開発シナリオを反映した複数の異なる構成のカスタムコンパイラおよび他のソフトウェア開発ツールを構築するように拡張することができるコアソフトウェアフレームワークの一例を示している。このコア110は、カスタマイズされたソフトウェア開発ツール111〜114を構築するビルディングブロックとして使用することができる拡張可能なアーキテクチャを提供する。このコア110のソフトウェアは、1つまたは複数のソフトウェア開発シナリオに関連するソフトウェア拡張を加えることによって拡張することができる。例えば、IA−64プロセッサ121をターゲットとするJIT(ジャストインタイム)コンパイラ111を、コア110に対するソフトウェア拡張を提供することによって構築することができる。このケースでは、コンパイラがJITコンパイラ111であり、特定のプロセッサアーキテクチャ(121におけるIA−64プロセッサ)をターゲットとしていることにより、コア110に対するソフトウェア拡張の形式および内容を決定することができる。したがって、JITコンパイラシナリオおよびIA−64ターゲットシナリオに関連するソフトウェア拡張を使用してカスタマイズされたソフトウェア開発ツールを構築するための構成を指定することができる。ソース言語101〜104や、特定のソフトウェア開発シナリオに基づいて作動させ停止させることができるツールの機能など他のシナリオファクタが、図1のフレームワークなど標準のコアフレームワークを拡張することによりカスタムソフトウェア開発ツールを構築するタスクをより複雑にすることもある。
ソフトウェア開発シナリオの例
コアフレームワーク110に組み入れるべきソフトウェア拡張の選択に影響を与える可能性がある多数のソフトウェア開発シナリオがあり得る。例えば、特定のソフトウェア開発ツールについてのソフトウェア開発シナリオは、ツールのターゲットとなる様々なプロセッサアーキテクチャ(例えば、IA−64、X86、AMD、ARMなど)を含み得る。また、実施されるコンパイルのタイプ(例えば、JIT、Pre−JIT、ネイティブ最適化コンパイラ)にソフトウェア開発シナリオを関係づけることもできる。分析、最適化、シミュレーション、デバッギング、コード生成などのタイプなどソフトウェア開発ツールが実施する他のタイプの機能にソフトウェア開発シナリオを関係づけることもできる。特定のプログラミング言語(例えば、Java(登録商標)、C++、C#など)にさらに他のソフトウェア開発シナリオを関係づけることもでき、その言語用にソフトウェア開発ツールを特別に構成することができる。さらに、管理実行環境(例えばマイクロソフトのドットネットフレームワークが提供するマイクロソフトCLR環境)と共にそのツールを使用すべきか否かにもソフトウェア開発シナリオを関係づけることもできる。上述の例は、コアフレームワーク110を適切に拡張するのに必要とされる拡張の選択に影響を与え得る限定された1組のソフトウェア開発シナリオまたはファクタを提供しているにすぎない。同様に、他のシナリオでも、カスタムソフトウェア開発ツールを構成するのに必要とされるソフトウェア拡張の選択に影響を与える可能性がある。かかるシナリオを一括して、構成と呼ぶことができる。しかし、カスタムソフトウェア開発ツールの特定の構成に、単一のシナリオが影響を与えることもある。
オブジェクトの例
オブジェクト指向プログラミングでは、オブジェクトを使用してデータを記憶しそのデータについての機能にアクセスすることができる。オブジェクトは、クラス定義を提供することによって定義され、次いでこれらのクラス定義を使用してそのクラスに属するオブジェクトをインスタンス化することができる。
図2Aは、変数またはデータメンバ(例えば、またはフィールド)201A〜Cおよびメソッド(method)202A〜Cを有する例示のタイプ「自転車(bicycle)」についてのクラス定義201を示している。クラス201の特定のインスタンスは、オブジェクト202である。一般的に言うと、データメンバは、オブジェクトの状態を記述することができるのに対して、メソッドを使用して振る舞い(behavior)をそのオブジェクトに帰している。この例では、変数201A〜Cには、クラス201のオブジェクト202をインスタンス化する場合、特定の値202A〜Cが付与される。データメンバおよびメソッドは、ときに一括して「クラスメンバ」と呼ばれる。
同様に、110など拡張可能なコアフレームワークについてのクラス定義を提供してコア110を実装するために必要とされるデータ構造を記述することができる。さらに、様々なソフトウェア開発シナリオに従ってコアフレームワーク110を拡張するために、かかるソフトウェア開発シナリオに応じてコアクラスを変更することができ、また拡張することができる。
ソフトウェア拡張の例
選択済みのソフトウェア開発シナリオに従ってコアソフトウェアフレームワークを拡張する一方法は、ソフトウェアクラスを拡張することである。ソフトウェアクラスは、オブジェクトクラスの定義を変更することにより拡張することができる。
クラス拡張の例は、1つまたは複数のクラス拡張メンバ(例えば、データメンバまたはメソッド)を含み得る。クラスを拡張する場合には、クラス定義を修正して指定されたクラス拡張メンバを含める。
したがって、追加のクラスメンバを定義しそれらのコアクラス定義に組み込むことによってコアクラスを拡張することができる。これら追加のクラスメンバは、コアクラスを拡張するクラス拡張メンバと呼ぶこともある。一括して、かかるクラス拡張メンバを「クラス拡張(class extension)」と呼ぶこともある。
これらのクラス拡張は、いくつかの異なる方式で大いに異なり得る。例えば、一部のクラス拡張では必要とされるある種のクラスメンバが、他のクラス拡張では必要とされないこともある。またある種のクラス拡張内のメソッド、ファンクション、およびインターフェースは、他のクラス拡張では全く存在しないこともあり、あるいは存在する場合にも異なるように定義することができる。かかるクラス拡張メンバは、ソフトウェア開発シナリオに関係することもある。例えば、JITコンパイラ111を構築するためにコンパイラフレームワークのコアクラスに追加すべき余分のフィールドまたはクラスメンバは、ネイティブ最適化コンパイラ113に関係するクラス拡張では必要とされ得るフィールドまたはクラスメンバの数に比べてずっと少ないこともある。
ソフトウェア開発シナリオクラス拡張セットの例
ソフトウェア開発ツールを構成するためのソフトウェア開発シナリオを開発者が決定した後、これらのそれぞれのクラス拡張を指定してコアソフトウェアフレームワークの拡張バージョンを開発することができる。次いで、適切なソフトウェア(例えば、プリプロセッサまたはコンパイラ)には、指定済みのシナリオを受け取りそのシナリオにとって適切な拡張セットを含めることができる。したがって、特定のソフトウェア開発シナリオについてのクラス拡張は、そのシナリオにとって適切な1つまたは複数のクラス拡張を有するソフトウェア開発シナリオクラス拡張セットにグループ化することができる。ソフトウェア開発ツールを開発する際に、このソフトウェア開発シナリオクラス拡張セットを呼び出して適切なクラスを拡張することができる。開発中または実行時にこれらのクラスを拡張することができる。
例えば、様々なソフトウェアクラスを使用してコア110を実装する。開発者が、JITコンパイルおよびIA−64ターゲットアーキテクチャのソフトウェア開発シナリオを指定する場合、JITコンパイラに関係するクラス拡張およびIA−64ターゲットアーキテクチャに関係するクラス拡張をコアクラス定義に組み込んでコアフレームワーク110のクラスを拡張してコアフレームワークの拡張バージョンを生成する際に使用する。
コアクラスとその拡張の間の関係を表現すること
図2Bは、コアクラス定義とそのクラス拡張の間の関係を示すブロック図である。コアノード210をコアクラスの定義に関係づけることができ、クラスメンバ1および2を有しているとして示している。220における拡張クラス定義が、特定のソフトウェア開発シナリオを実装するために必要なこともあり、この拡張定義は、拡張225を介して追加のクラスメンバ3および4を追加することができる。拡張クラス定義230は、220と同じであり、拡張225における同じ追加のクラスメンバ3および4をコアクラス定義210に追加することによって生成することができる。しかし、拡張クラス定義260は、異なっており、拡張265における追加のクラスメンバ5および6を追加することによって生成することができる。同様にして、拡張245および255をそれぞれクラス定義220および230に追加することによって拡張クラス定義240および250を拡張することができる。また、拡張255を拡張クラス定義260に追加することによって拡張クラス定義270を生成することができる。
図2Bの例では、クラス拡張は、複数のクラス拡張メンバを有するようにして示されている。しかし、クラス拡張は、1つまたは複数のクラス拡張メンバを有することもあり、コアクラス定義の1つまたは複数の既存のクラスメンバを置き換えることもあり得る。さらに、クラス拡張は、コアクラス定義中に見出されるメソッドメンバのファンクションの定義の形式のこともある。
したがって、コアソフトウェア開発ツールフレームワークについてのクラス定義の拡張は、図1の例示の拡張可能ソフトウェア開発ツールフレームワークの拡張バージョンの特定の構成に影響を与えることもある、コンパイルシナリオ(JIT、Pre−JIT、ネイティブ最適化コンパイラなど)、言語シナリオ(C#、Visual Basicなど)、ターゲットシナリオ(IA−64、X86、AMD、ARMなど)および他の変数に依存した追加のクラス拡張と共に図2Bに示すように表現することができる。
しかし、多数のソフトウェア開発シナリオ(すなわち、ターゲット、コンパイルなど)に依存し得る特定の構成を用いてコアフレームワークについてのクラス拡張を表現し、または表すことによって、すぐにも非常に複雑になってしまう可能性がある。例えば、図2Bは、一部の簡略化された拡張ケースを示しており、それによって、拡張クラス定義220、230、240および250は、どれか1つの拡張を使用して複数の親クラスを拡張することなく、以前に定義済みのクラスから順番に継承している。しかし、これは、ソフトウェア開発ツールの特定の構成についての拡張クラスを表現する際における、クラス階層の様々なレベルで複数の異なる方法で拡張する必要があり得るケースとは異なる可能性がある。
例えば、1つの親クラスを拡張する代わりに、同じ拡張の一部を使用して複数の親クラスを拡張する必要もある可能性がある。例えば、拡張255を使用してクラス定義230ならびにクラス定義260を拡張することができる。したがって、ソフトウェア開発シナリオによっては、同じ拡張を使用して異なる親クラスを拡張することができる。かかる多重継承の可能性は、ソフトウェア開発シナリオおよび関係する拡張構成の純然たる数と相まって、コンピュータプログラマに途方もなく大きな重荷を負わせることになる。
1つのアプローチでは、コアクラス定義と拡張コアクラス定義の間の関係を、基底クラスとそのサブクラスの間の継承チェーンとしてプログラムすることができる。しかし、かかるアプローチは、クラスの肥大化をもたらす傾向があり、すぐにもプログラマに対する重荷になり得る。このアプローチでは、プログラマには、拡張サブクラスを手操作で開発するというタスクがあるだけでなく、未使用のオブジェクトを消滅させて限られたメモリリソースの使用を管理するという追加のタスクも存在することになる。
基底クラス定義の拡張に対するさらに別の手作業のアプローチは、条件付きコンパイルを実装するためのIF−DEFステートメントまたは他の方法を使用したアプローチでもよい。かかるアプローチでは、プログラマは、基底クラス定義を提供することができ、また基底に対して拡張を条件付きで追加するためにその本体に拡張定義を含むIF−DEFステートメントまたは他の条件付きコンパイルステートメントを手操作で追加することができる。このアプローチには、必要な場合だけにクラスを拡張する利点があり、したがって、望ましくないオーバーヘッドをもたらし得る、拡張ごとに新しいサブクラスを生成するアプローチに比べて、より良いアプローチになり得るものである。しかし、このアプローチも本質的には手操作によるアプローチであり、プログラマがIF−DEFステートメントを可能な各構成ごとの多数のロケーションに含める必要があり、コードには多数のかかるIF−DEFステートメントが散乱することになってしまう。
クラス拡張の生成、およびクラス拡張のオブジェクト記述言語を使用したコアクラスへの関連付けのための全体的な方法の一例
図3Aは、コアフレームワークを拡張することによってコンパイラまたはツールを構築するためのコアクラス定義を拡張するための全体的な方法を示している。最初に302で、拡張を示すデータに出会い、304でソフトウェア開発ツールのクラスを拡張が指し示すように拡張する。
図3Bは、コアフレームワークを拡張するためのソフトウェアシナリオ依存の拡張を使用することによってコンパイラまたはソフトウェア開発ツールを構築するための全体的な方法を説明している。310で、簡略化されたODL(object definition languageオブジェクト定義言語)を使用してコアクラスを定義することができる。次いで、320で、そのコンパイラタイプシナリオおよび構築する対象の特定のターゲットシナリオを含むソフトウェア開発シナリオに基づく特定のソフトウェア開発ツールのための構成を決定することができる。次いで、330で、構成に影響を与える各シナリオファクタに基づいて、オブジェクト記述言語を使用して拡張を定義してコアクラスを拡張するために必要とされる追加のまたは異なるクラス拡張メンバを表現する。340で、この拡張をコアクラスに関連づけてそのコアクラス定義を適切に拡張することができる。オブジェクト記述言語用の構文は、拡張可能または不可能であるとしてコアクラスの定義を規定し、さらに特定の1組のクラス拡張メンバを選択済みのコアクラスの拡張として関連づけるために提供される。かかる記述言語のための適切な構文については、以下でさらに例を用いて説明する。さらに、プリプロセッサ変換プログラムを使用してデータまたはオブジェクト記述言語をプログラミング言語のソースコードに変換することができる。かかる前処理の後、350で、拡張クラス定義をさらに処理し、拡張クラス定義を使用してコアフレームワークを拡張することにより、特定の構成のコンパイラまたは他のソフトウェア開発ツールを実装することができる。
上述の方法を使用して、複数の異なる拡張定義を別々に提供することができ、各拡張により、複雑な継承関係を全く保持する必要なしに必要なだけコアクラスまたは基底クラスを簡単に拡張することができる。コアクラスの特定の拡張を提供するプログラマは、コアクラスの他の拡張については知る必要がない。これによって、拡張を定義するタスクが簡単になるだけでなく、拡張コアクラスのユーザには、この拡張コアクラスを使用するためにコアクラス名を知る必要があるだけである。したがって、拡張クラス定義を使用する際に、クラス定義間の複雑な階層関係を記憶に留めるタスクからプログラマを解放することができる。
実行時にコアフレームワークプログラムを動的に拡張し、コアプログラムをコンパイルするのに先立ってコアフレームワークプログラムを静的に拡張すること
コアフレームワークプログラムを拡張するための1つのアプローチは、そのコアプログラムのソースコードファイルに対するアクセスを取得するアプローチ、およびこのオブジェクト記述言語を使用してこれらの拡張を定義することにより、コアクラスを必要に応じて静的に拡張するアプローチでもよく、次いでこれらの拡張を処理してこれらの拡張されたクラスに関係するソースコードを生成することができる。代わりに、ソースコードプログラミング言語中のソースコードに直接に手操作で拡張を追加することによって拡張クラスを生成することもできる。図4Aにこのアプローチを示しており、それによって拡張420、430、および440をコアフレームワークファイル410に追加してそれを拡張し、次いで、拡張420、430、および440を今や拡張済みのコアフレームワークファイル410の一部としてコンパイルする。
しかし、420、430、440などの拡張の定義を提供するプログラマには、コアフレームワーク410のソースコードにアクセスできる必要があるはずなので、このアプローチは、すべての場合に適切ではない可能性がある。コアフレームワーク410の提供者がこのコアフレームワークソースコードを秘密または非変更のままに保ちたいと思っているような環境では、これが望ましくないこともある。このケースでは、図4Bに示す第2のアプローチを使用し、それによって拡張460、470および480とは別のファイルとしてコアコンパイラおよびツールフレームワーク450をコンパイルすることができる。
第2のアプローチでは、実行時に拡張をこのコアフレームワークに関連づけてこのコアフレームワークを適切に拡張するようにして、拡張460、470および480、ならびにコアフレームワーク450が、互いにリンクをもつようにすることができる。どの拡張を使用して特定のコアクラスを拡張すべきかを指定する簡単なリンクリストとしてこれらのリンクを実装することができる。これらの拡張をコアクラスに必要に応じ必要な場合に適切に関係づける簡単な命名規則を使用することによって、これを実現することもできる。第1のアプローチに比べてこの第2のアプローチでは、実行時にリンクするという態様に関係する追加のオーバーヘッド処理が必要とされることもあり、したがって、より低速な実装形態になることもある。他方、この第2のアプローチでは、コアフレームワークのソースコードへのアクセス権を持たない開発者によるコアクラスの拡張が可能になるという柔軟性がもたらされる。
コンパイルに先立ってコアクラスを静的に拡張する方法の一例
図5に、前述の図4Aを参照して示すような、コンパイル時に先立ってコアフレームワークプログラムに関係するクラスを静的に拡張する方法を示す。オブジェクト記述言語を使用して、これらのコアクラスとその拡張を定義することができる。これらのコアクラスおよびそのクラス拡張の定義を同時または一緒に生成する必要はない。しかし、クラス拡張を追加するにはコアプログラムのソースコードに何らかのアクセスをする必要があるはずである。かかるクラス定義が取得された後に、次いで510で、オブジェクト記述言語表現をソースコード表現に変換することができるODLプリプロセッサによって、コアクラスおよびその拡張の定義を一緒に処理することになる。したがって520で、このODLプロセッサによる前処理の結果は、C++などのソースコード言語におけるコアクラスの定義およびその拡張を表す、ヘッダファイルおよびたぶん何らかの他のコードとなるはずである。次いで、さらに530で、コアクラスメンバおよびそのクラス拡張メンバを含む拡張クラス定義をもつヘッダファイルは、今や拡張済みのコアフレームワークに関係するコードの残りと一緒にコンパイルされてカスタム構成されたコンパイラおよび他のソフトウェア開発ツールを生成するはずである。
図6に、図5の方法を実装するシステムの一例を示す。図6に示すように、コアクラス定義620に至る複数の拡張定義610をオブジェクト記述言語ファイルとして記憶することができる。コアクラス定義およびクラス拡張定義にそれぞれ対応するファイル610および620を受け取ることができるODLプリプロセッサ630を提供することができる。このプリプロセッサはまた、ファイル610および620をこれらのオブジェクト記述言語形式からソースコード表現640に変換することもできるべきである。このソースコード表現はどの言語で表すことも可能であり、これを最終的にはコンピュータプロセッサが実行可能な形式にコンパイルすることができる。プリプロセッサ630が生成するソースコード640は、ヘッダファイルを含むことができ、一般にこれらのヘッダファイルにクラス定義を記憶する。ソースコード表現640をコンパイルするためにプリプロセッサ630が出力するソースコード640の言語用に適切なソースコードコンパイラ650を提供して、コンパイラや他のソフトウェア開発ツールなどのコアソフトウェアプログラムのカスタマイズされた拡張バージョンを作成することができる。
実行時にコアクラスを動的に拡張する方法の一例
図7は、実行時に拡張を適切なコアクラスに関連づけることにより、拡張可能なコアフレームワークソフトウェアプログラムのコアクラス定義を拡張する方法を示している。これらのコアクラス定義およびその拡張は、オブジェクト記述言語を使用して別々に表現することができる。この記述言語は、コアクラス定義が動的に拡張可能であることを表現するのに適していることもある。また、かかる言語は、特定のコアクラス定義とその拡張の間の関連付けを表現するのに適していることもある。かかる1つの好適な言語のための構文について以下でさらに詳細に説明する。定義を表現した後に、710でODLプリプロセッサを使用して、720でこのオブジェクト記述言語表現中の定義をソースコード表現に変換する。しかし、静的プロセス(図6)と違って、図7の動的プロセスでは、コアクラス定義が、ODLプリプロセッサによってこれらの拡張の定義と一緒に処理されることはない。そうではなくて、コアクラス定義に対応するソースコードヘッダファイルとクラス拡張定義に対応するソースコードヘッダファイルは、別々に生成される。異なるODLプリプロセッサによってこれらを生成することができるが、必ずしもそのようにする必要はない。さらに730で、コアクラス定義を含むヘッダファイルとクラス拡張定義を含むヘッダファイルを別々にコンパイルしてコンピュータが実行可能な別々のファイルを作成する。しかし、740で、実行時にクラス拡張定義を適切なコアクラス定義に関連づけてこれらのコアクラスを定義に応じて拡張することができる。
図8に、図7の方法を実装するシステムの一例を示す。図8に示すように、クラス拡張定義が、オブジェクト記述言語で提供されファイル810に記憶される。図に示すように各クラス拡張を別のファイルとして記憶することは必ずしも必要ではない。コアクラス定義もまた、オブジェクト記述言語で提供され、ファイル820に記憶される。図7で説明した方法に従って、ODLプリプロセッサ825を提供して、コアクラス定義をオブジェクト記述言語表現からソースコード言語表現に変換することによってコアクラス定義を処理して、ヘッダファイル835として記憶する。同様にして、さらに別のODLプリプロセッサ830を提供してクラス拡張ファイル810を処理してクラス拡張を含むソースコードヘッダファイル840を生成することができる。ソースコードコンパイラ845を提供してクラス拡張ヘッダファイル840をコンパイルしてクラス拡張定義を含むコンピュータ実行可能ファイル860を生成することができる。同様に、ソースコンパイラ850を提供してコアクラス定義を含むヘッダファイル835をコンパイルしてコアクラス定義を含むコンピュータ実行可能ファイル855を生成することができる。次いで実行時に、コアクラス855に対応する実行可能ファイルとクラス拡張に対応する実行可能ファイルが実行される場合、コアと拡張クラスの間に提供されるリンク870によって、コアクラスが適切に拡張されるようにすることができる。
静的に拡張可能なクラス定義を提供するオブジェクト記述言語
以上で指摘したように、簡単なオブジェクト記述言語を使用して拡張可能コアフレームワークプログラムの所望の構成に依存したクラス定義を提供することができる。例えば、コアフレームワークの特定の構成は、コンパイラのタイプ(例えば、JIT、Pre−JIT、ネイティブ最適化など)、ターゲットのタイプ(例えば、IA−64、X86、ARMなど)、他のシナリオファクタなどのソフトウェア開発シナリオに基づいてクラス定義に異種の要求を行う可能性がある。以下の数段落では、以上の図5ないし図8を参照して説明したようなODLプリプロセッサで処理してソースコード言語によるクラス定義を生成することが可能な、かかる言語について説明している。
図9Aは、オブジェクト記述言語を使用した標準的なクラス宣言を示している。一般的に、宣言900は、ヘッダ911および本体912を含む。このヘッダを使用してクラスの可視性(visibility)(例えば、公開、非公開など)、クラス名などを宣言することができる。913に示すように、ヘッダは、以下の例のような角括弧内に囲まれた属性定義も含む。
[attribute_name]
この宣言を使用して、クラスが(例えば、ドットネットシナリオにおける)管理されたクラスであるか否かなどクラスの属性、およびクラスの拡張属性を定義することができる。例えば、それが管理されたクラスであるかどうかを定義することを、[gc]属性を宣言することによって行ってこのクラスのオブジェクトに対するガーベージコレクションが(例えば、ドットネットフレームワークによって)自動的に行われることを示すことができる。クラス拡張属性では、1つのアプローチは、すべてのクラスが前述のように静的に拡張可能であることを想定することである。したがって、クラスが静的に拡張可能であることを特に宣言するために特別な属性が必要とされないこともある。しかし、図10Aに示すように、実行時に(すなわち、動的に)拡張すべきクラスを[extensible]などの特定の属性を用いて宣言することができる。
図9Aに示す例では、クラスSYMは、その本体にコアクラスメンバ914および915を有する静的に拡張可能なクラスである。クラス900は、コアクラスとすることができ、クラスメンバTYPE914およびNAME915は、コアクラスを用いたすべての構成依存の拡張クラスに共通のクラスメンバとすることができる。コアクラス900を定義した後に、コアフレームワークの特定の構成についてのコアクラス定義の拡張バージョンを生成するクラス拡張を提供することができる。
図9Bは、オブジェクト記述言語によるかかる2つのクラス拡張定義920を示している。簡単にするために、クラス拡張の形式は、コアクラスの宣言または定義の形式に非常に類似している。拡張925は、JITコンパイラをコアフレームワークから構築するためのJITコンパイルシナリオに関係するクラスメンバ926を示している。このJITコンパイルシナリオは、JITコンパイラ構成に特有であるが他の構成に対しては必ずしもそうではない、インターフェース、メソッド、および変数などの特定のクラスメンバ926を必要とすることもある。したがって、ODLプリプロセッサが処理する場合に図9Aのコアクラス定義を拡張する拡張925を提供することができる。927におけるキーワード「extend」は、これがコアクラスSYMに対する静的な拡張であることを意味する。また、属性指定[JIT]928は、コアフレームワークを拡張してJITコンパイラを実装する際だけにこの拡張を適用すべきであることを意味している。同様に、拡張930を適用してIA−64プロセッサをターゲットにするツールを構築するのに特有のクラスメンバ931を追加することができる。2つの拡張925および930は互いに独立であり、異なるパーティが提供することができ、これらの拡張は、従来のクラス−サブクラス間の依存性を使用してコアクラス定義を拡張するケースのように互いに依存し合う必要はない。さらに、プログラマは、複雑な依存関係を追跡する必要がない。
他のファクタによる他の拡張を提供することができる。例えば、C++用の中間言語では、2つのファンクションシンボルを一緒に関連づける必要があることもある。このファンクションは、C++用の中間言語を処理するように構成されたソフトウェア開発ツールに特有の拡張として追加することができ、そこでは、この拡張は、2つのファンクションシンボルを一緒に関連づけるメソッドを含むはずである。
例示のJITコンパイラに関係した拡張925および例示のIA−64ターゲットに関係した拡張930の実際の条件付き実装形態は、図9Cに示すようにODLプリプロセッサがその拡張クラス定義のソースコード表現を生成する場合に実装することができる。拡張クラス940は、コアクラス定義に関係する最初のクラスメンバをもつように示されるだけでなく、今や追加されたクラスメンバ926および931をもつようにも示されている。したがって、図に示す拡張クラスは、IA−64プロセッサをターゲットとしたJITコンパイラを構成するためのクラス定義である。同様にして、複数の異なるソフトウェア開発シナリオに基づいた複数の異なる拡張を条件付きで追加してコアクラスを静的に拡張することができる。適切なソースコードコンパイラを使用してコンパイルする際に、拡張コアクラス940は、コアフレームワークのカスタマイズされたバージョンを生成する助けをすることになる。
動的な拡張クラス定義を提供するオブジェクト記述言語
静的な拡張の1つの不利な点は、コアフレームワークとその拡張を一緒にコンパイルしてコンピュータが実行可能な単一のファイルを生成することが必要なことにある。これは、拡張を提供している者が、拡張と一緒に再コンパイルするためにコアフレームワークのソースコードにアクセスできる必要もあることを意味する。いくつかの異なる理由から望ましくないこともあるこの状況を回避するためには、拡張クラス定義を実行時に生成することもできる。
図10Aは、オブジェクト記述言語(ODL)を使用してコアフレームワークの拡張バージョンの特定の構成に基づいてコアクラス定義を動的に拡張するクラス宣言の一例を示している。クラスINSTR1010についてのコアクラス定義は、これが動的に拡張可能なクラス宣言であることを意味する1011における属性「extensible」を伴うヘッダを有している。クラス宣言1012の本体は、このフレームワークに共通のクラスメンバを有する。しかし、1011における属性[extensible]は、ODLプリプロセッサで処理する場合、そのソースコードに対する拡張オブジェクトを生成し挿入し、これが、適切に関連づけられた拡張によってさらなるクラスメンバを追加して後ほど実行時に提供すべきプレースホルダとしての役割を果たすことが可能になる。図10Bに、特定のターゲットシナリオに関連する、かかる1つの拡張1020を示す。この例では、拡張1020は、IA−64ターゲットプロセッサ用のソフトウェア開発ツールを実装することに特有のHINTBITS1021クラス拡張メンバおよびPREDICATES1022クラス拡張メンバを追加する。属性[IA−64]1023を使用して、この特定の拡張が、IA−64プロセッサをターゲットとしたコアコンパイラおよびツールフレームワークのカスタマイズされた構成に適用可能であるにすぎないことを指し示す。キーワード1024「extend」を追加して、この拡張1020が1025におけるクラスINSTRの動的な拡張であることを指し示す。
以前に指摘したように、拡張クラスを動的に生成するケースでは、コアクラス定義1010およびクラス拡張定義1020を処理してコアクラス定義およびこれらの拡張の別々のソースコード表現が作成される。さらに、これらの別々のソースコード表現を後で別々にコンパイルしてコンピュータによって実行可能な別々のファイルを生成する。このケースでは、前述の静的な拡張とは異なり、コアクラス定義を拡張するのに必要とされるクラス拡張メンバは、拡張クラス定義と共にソースコードヘッダファイルに簡単には追加されない。そうではなくて、図10Cに示すように、動的に拡張可能なクラス定義が実行時にコアクラス定義1010に追加すべきであると期待するGETクラス拡張およびSETクラス拡張に他のコード1031を追加することができる。したがって、静的な拡張に比べると、動的な拡張では、一部の追加のプロシージャ1031を実行して実行時にクラス定義を適切に拡張する必要があるという追加されたオーバーヘッドを有することがある。したがって、一般に、動的拡張では、プロセスの速度が低下するが、他方、このアプローチではコアおよびその拡張を別々にコンパイルすることができるので、拡張を提供するための柔軟性が追加される。これによって、サードパーティは、このコアフレームワークのソースコードにアクセスする必要なしにコアクラス定義に対して拡張を提供できるようになる。
図11Aに、動的に拡張可能なコアクラス定義1110のさらに他の例を示す。キーワード「extensible」1111は、このクラスINSTRが拡張可能であり、このクラスの本体はまた、どのような拡張を追加するのにも先立ってそのクラスについてのクラスメンバを追加することを指し示す。クラスメンバメソッド1112のうちの1つはキーワード「extension point」を有しており、これは、クラス拡張のうちの1つが、指定された拡張ポイント1112にメソッドまたはインターフェースFOO()を具体的に定義することによって組み込まれることを意味する。
図11Bは、IA−64プロセッサをターゲットとした構成に必要とされるHINTBITS1121クラス拡張およびPREDICATES1122クラス拡張だけでなく、拡張ポイント1112によって示されるFOO()メソッド1123の定義も提供することにより、図11Aに示す拡張可能クラスを拡張するための適切な動的拡張1120を示している。この「extension point」というキーワードは、拡張を挿入できる、コアクラス定義の特定のポイントを示すためのさらにきめ細かい制御を提供する。さらに、適切な拡張に対して適切なポインタを自動的に生成するオブジェクト定義言語を使用することによってこれを簡単に行うことができる。同様にして、静的に拡張可能なコアクラス定義で拡張ポイントを表現することもできる。
ソフトウェア開発ツールをカスタマイズするための実装形態の一例
図12は、複数のソフトウェア開発シナリオに従ってソフトウェア開発ツールを構築する実装形態の一例を示している。様々なソフトウェア開発シナリオに関係するクラス拡張を追加することによってコアクラス1210を拡張することができる。例えば、特定のターゲットアーキテクチャ1220(例えば、X86、IA−64など)のソフトウェア開発シナリオにクラス拡張を関係づけることができ、コンパイルシナリオ1230(例えば、JIT、ネイティブなど)に他の拡張を関係づけることができる。同様に、他のソフトウェア開発シナリオが、拡張の選択に影響を与えることもある。例えば、ソフトウェア開発ツールの管理されたコード実装1240に特有な拡張もあり得るし、また拡張が1組のプログラミング言語のうちの1つを指し示すこともある。したがって、これらの様々な拡張の構成を追加して、コアクラス1210を拡張して拡張可能コアフレームワークを使用してソフトウェア開発ツール1250を構築することができる。
代替形態
本発明の原理を説明済みの実施形態に関して説明し例示してきたが、この説明済みの実施形態は、かかる原理を逸脱することなく、構成および詳細を変更することができることが理解されよう。本明細書中で説明した技術は、コンパイラを使用した例を用いて示してきたが、これら技術のいずれでも他のソフトウェア開発ツール(例えば、デバッガ、オプティマイザ、シミュレータ、およびソフトウェア分析ツール)を使用することができる。さらに、拡張を生成する原理を、主として本明細書中ではコアクラスを拡張することに関して説明してきたが、同じ原理を同様に適用してコアクラスの任意の拡張またはサブクラスを拡張することもできる。また、ODLプロセッサについて、以上ではオブジェクト記述言語を受け取りソースコード言語を生成することが可能であると言及している。しかし、ODLプリプロセッサの出力はソースコード言語だけに限定される必要はない。ODLプリプロセッサの出力は、マイクロソフトのドットネットのCILなど中間表現または中間言語、あるいはプロセッサが実行可能な任意の形式を出力として提供することもできる。
また、本明細書中で説明したプログラム、プロセス、または方法は、どのような特定のタイプのコンピュータ機器にも関係づけられ、または限定されないことを理解されたい。本明細書中で説明した教示に従って、様々なタイプの汎用または専用のコンピュータ機器を使用し、またはこれらによって動作を実施することができる。本明細書中で説明した動作を、かかる動作を実施するためのコンピュータ実行可能な命令を含むコンピュータ読取り可能媒体によって実現することができる。ソフトウェアで示された例示の実施形態の要素をハードウェアで実装することができ、逆もまた同様に可能である。本発明の原理を適用できる多くの可能な実施形態を考慮して、詳述された実施形態が例示にすぎず、本発明の範囲を限定するものと解釈すべきではないことを理解されたい。そうではなくて、本出願人は、以下の特許請求の範囲およびその等価物の範囲および趣旨に含まれ得るかかるすべての実施形態を、本発明として請求するものである。
構成に依存する拡張可能コアソフトウェアフレームワークの一例を示すブロック図である。 オブジェクト指向プログラミング言語の一例におけるクラスおよびオブジェクトとして実装されるデータ構造を示すブロック図である。 拡張可能なコアソフトウェアプログラムのクラスとその対応する拡張の間の関係を示すブロック図である。 クラス拡張を追加することによってクラス定義を拡張するための全体的な方法のフローチャートである。 構成に依存する、コアソフトウェアプログラムの拡張バージョンを生成する全体的な方法のフローチャートである。 拡張をコンパイル時に先立って静的に実装する、コアソフトウェアフレームワークの拡張バージョンを示すブロック図である。 拡張を実行時に動的に実装する、コアソフトウェアプログラムの拡張バージョンを示すブロック図である。 コアソフトウェアプログラムを静的に拡張する方法のフローチャートである。 図5に示す、コアソフトウェアプログラムを静的に拡張するシステムを示すブロック図である。 コアソフトウェアプログラムを動的に拡張する方法のフローチャートである。 図7に示す、コアソフトウェアプログラムを動的に拡張するシステムを示すブロック図である。 オブジェクト記述言語による静的に拡張可能なコアクラスのコアクラス宣言のリストである。 図9Aの静的に拡張可能なコアクラス宣言に対する2つのクラス拡張のリストである。 図9Aのコアクラス宣言を図9Bのクラス拡張に関連づけることによって生成される拡張クラス宣言のソースコード表現のリストである。 オブジェクト記述言語による動的に拡張可能なコアクラスのコアクラス宣言のリストである。 図10Aの動的に拡張可能なコアクラス宣言に対する拡張のリストである。 図10Aのコアクラス宣言を図10Bのクラス拡張に関連づけることによって生成される拡張クラス宣言のソースコード表現のリストである。 クラス拡張を挿入する拡張ポイントを指し示すコアクラス宣言のリストである。 図11Aのコアクラス定義に対する拡張のリストである。 複数のソフトウェア開発シナリオに従ってソフトウェア開発ツールを構築する実装形態の一例を示すブロック図である。
符号の説明
101〜104 ソース言語
110 コアフレーム
111 ソフトウェア開発ツール(コンパイラ)
112〜114 ソフトウェア開発ツール
121 プロセッサ

Claims (11)

  1. コアクラスの定義および拡張クラスの定義を格納するメモリ、プリプロセッサ、およびコンパイラを備えたシステムにおいて、ソフトウェアのコアクラスを拡張して、特定のソフトウェア開発シナリオに依存する前記ソフトウェアの拡張バージョンを生成することによって前記ソフトウェアを拡張する方法であって、前記ソフトウェア開発シナリオは、1または複数のシナリオファクタを定義し、前記シナリオファクタには、少なくともプロセッサアーキテクチャのタイプ、コンパイラのタイプ、およびプログラミング言語のタイプが含まれ、前記拡張クラスは、前記ソフトウェア開発シナリオの前記1または複数のシナリオファクタに基づいて選択される拡張メンバを含み
    前記プリプロセッサが、前記コアクラスの定義を受け取るステップであって、前記コアクラスの定義には、当該コアクラスがコンパイル時に先立って静的に拡張可能、または実行時に動的に拡張可能のいずれであるかが定義されている、ステップと、
    前記プリプロセッサが、特定のソフトウェア開発シナリオを受け取るステップと、
    前記プリプロセッサが、前記受け取ったソフトウェア開発シナリオに従って、前記コアクラスを拡張するために必要な拡張クラスの定義を受け取るステップと
    を含み、
    前記コアクラスが静的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義および前記拡張クラスの定義を含むヘッダファイルを生成し、前記コンパイラが、当該ヘッダファイルをコンパイルして前記ソフトウェアの拡張バージョンを生成し、
    前記コアクラスが動的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々に生成し、前記コンパイラが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々にコンパイルして、互いにリンクを有するコンピュータ実行可能ファイルを別々に生成し、実行時に前記拡張クラス前記コアクラスに関連付けることにより、前記ソフトウェアの拡張バージョンを生成することを特徴とする方法。
  2. 前記コアクラスの定義は、前記拡張クラスに含まれる前記拡張メンバを挿入する、前記コアクラス内のポイントを指し示す1つまたは複数の拡張ポイントを含むことを特徴とする請求項1に記載の方法。
  3. 前記ソフトウェアは、拡張可能なコアコンパイラフレームワークであり、前記ソフトウェア開発シナリオは、生成されるコンパイラが対象とするコンパイラのタイプを前記シナリオファクタの1つとして含み、前記コンパイラのタイプに特有の拡張メンバを含む拡張クラスを用いて拡張されたコンパイラが生成されることを特徴とする請求項1に記載の方法。
  4. 前記コンパイラのタイプは、JITコンパイラ、Pre−JITコンパイラ、およびネイティブ最適化コンパイラからなる群から選択されることを特徴とする請求項3に記載の方法。
  5. 前記ソフトウェアは、拡張可能なコアソフトウェア開発ツールフレームワークであり、前記ソフトウェア開発シナリオは、生成されるソフトウェア開発ツールが対象とするプロセッサアーキテクチャのタイプを前記シナリオファクタの1つとして含み、前記プロセッサアーキテクチャのタイプに特有の拡張メンバを含む拡張クラスを用いて拡張されたソフトウェア開発ツールが生成されることを特徴とする請求項1に記載の方法。
  6. ソフトウェアのコアクラスを拡張して、特定のソフトウェア開発シナリオに依存する前記ソフトウェアの拡張バージョンを生成することによって前記ソフトウェアを拡張するためのシステムであって、前記ソフトウェア開発シナリオは、1または複数のシナリオファクタを定義し、前記シナリオファクタには、少なくともプロセッサアーキテクチャのタイプ、コンパイラのタイプ、およびプログラミング言語のタイプが含まれ、前記システムは、
    コアクラスの定義および拡張クラスの定義を格納するメモリであって、前記コアクラスの定義には、当該コアクラスがコンパイル時に先立って静的に拡張可能、または実行時に動的に拡張可能のいずれであるかが定義されている、前記拡張クラスは、前記ソフトウェア開発シナリオの前記1または複数のシナリオファクタに基づいて選択される拡張メンバを含む、メモリと、
    前記コアクラスの定義および特定のソフトウェア開発シナリオを受け取り、当該ソフトウェア開発シナリオに従って、前記コアクラスを拡張するために必要な拡張クラスの定義を受け取り、クラスの定義を含むヘッダファイルを生成するプリプロセッサと、
    前記プリプロセッサが生成したヘッダファイルをコンパイルするコンパイラと
    を備え、
    前記コアクラスが静的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義および前記拡張クラスの定義を含むヘッダファイルを生成し、前記コンパイラが、当該ヘッダファイルをコンパイルして前記ソフトウェアの拡張バージョンを生成し、
    前記コアクラスが動的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々に生成し、前記コンパイラが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々にコンパイルして、互いにリンクを有するコンピュータ実行可能ファイルを別々に生成し、実行時に前記拡張クラス前記コアクラスに関連付けることにより、前記ソフトウェアの拡張バージョンを生成することを特徴とするシステム。
  7. 前記コアクラスの定義は、前記拡張クラスに含まれる前記拡張メンバを挿入する、前記コアクラス内のポイントを指し示す1つまたは複数の拡張ポイントをさらに含むことを特徴とする請求項に記載のシステム。
  8. 前記システムは、前記コアクラスのコンピュータ実行可能ファイルを呼び出し、実行時に前記コアクラスに前記拡張クラスに含まれる前記拡張メンバを挿入することによって、前記ソフトウェアの拡張バージョンを生成することを特徴とする請求項に記載のシステム。
  9. 前記ソフトウェアは、拡張可能なコアソフトウェア開発ツールフレームワークであり、前記ソフトウェア開発シナリオは、生成されるソフトウェア開発ツールが対象とするプロセッサアーキテクチャのタイプを前記シナリオファクタの1つとして含み、前記プロセッサアーキテクチャのタイプに特有の拡張メンバを含む拡張クラスを用いて拡張されたソフトウェア開発ツールが生成されることを特徴とする請求項に記載のシステム。
  10. 前記ソフトウェアは、拡張可能なコアソフトウェア開発ツールフレームワークであり、前記ソフトウェア開発シナリオは、生成されるソフトウェア開発ツールが対象とするコンパイラのタイプを前記シナリオファクタの1つとして含み、前記コンパイラのタイプに特有の拡張メンバを含む拡張クラスを用いて拡張されたソフトウェア開発ツールが生成されることを特徴とする請求項に記載のシステム。
  11. コアクラスの定義および拡張クラスの定義を格納するメモリ、プリプロセッサ、およびコンパイラを備えたシステムにおいて、ソフトウェアのコアクラスを拡張して、特定のソフトウェア開発シナリオに依存する前記ソフトウェアの拡張バージョンを生成することによって前記ソフトウェアを拡張する方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記ソフトウェア開発シナリオは、1または複数のシナリオファクタを定義し、前記シナリオファクタには、少なくともプロセッサアーキテクチャのタイプ、コンパイラのタイプ、およびプログラミング言語のタイプが含まれ、前記拡張クラスは、前記ソフトウェア開発シナリオの前記1または複数のシナリオファクタに基づいて選択される拡張メンバを含み、前記方法は、
    前記プリプロセッサが、前記コアクラスの定義を受け取るステップであって、前記コアクラスの定義には、当該コアクラスがコンパイル時に先立って静的に拡張可能、または実行時に動的に拡張可能のいずれであるかが定義されている、ステップと、
    前記プリプロセッサが、特定のソフトウェア開発シナリオを受け取るステップと、
    前記プリプロセッサが、前記受け取ったソフトウェア開発シナリオに従って、前記コアクラスを拡張するために必要な拡張クラスの定義を受け取るステップと
    を含み、
    前記コアクラスが静的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義および前記拡張クラスの定義を含むヘッダファイルを生成し、前記コンパイラが、当該ヘッダファイルをコンパイルして前記ソフトウェアの拡張バージョンを生成し、
    前記コアクラスが動的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々に生成し、前記コンパイラが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々にコンパイルして、互いにリンクを有するコンピュータ実行可能ファイルを別々に生成し、実行時に前記拡張クラス前記コアクラスに関連付けることにより、前記ソフトウェアの拡張バージョンを生成することを特徴とするコンピュータ読取り可能な記録媒体。
JP2004194759A 2003-07-23 2004-06-30 ソフトウェアを拡張するための方法、システムおよび記録媒体 Expired - Lifetime JP4716681B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/626,251 US7305666B2 (en) 2003-07-23 2003-07-23 Description language for an extensible compiler and tools infrastructure
US10/626,251 2003-07-23

Publications (2)

Publication Number Publication Date
JP2005044347A JP2005044347A (ja) 2005-02-17
JP4716681B2 true JP4716681B2 (ja) 2011-07-06

Family

ID=33490900

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004194759A Expired - Lifetime JP4716681B2 (ja) 2003-07-23 2004-06-30 ソフトウェアを拡張するための方法、システムおよび記録媒体

Country Status (5)

Country Link
US (1) US7305666B2 (ja)
EP (1) EP1501010A3 (ja)
JP (1) JP4716681B2 (ja)
KR (1) KR101137126B1 (ja)
CN (1) CN100478874C (ja)

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US7290243B1 (en) 2001-02-28 2007-10-30 Apple Inc. Method and apparatus for application building using build styles
US7143407B2 (en) * 2001-07-26 2006-11-28 Kyocera Wireless Corp. System and method for executing wireless communications device dynamic instruction sets
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
US7818729B1 (en) * 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US7856624B2 (en) * 2003-09-15 2010-12-21 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US7810080B2 (en) * 2003-09-15 2010-10-05 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US7512938B2 (en) * 2005-03-18 2009-03-31 Microsoft Corporation Typed intermediate representation for object-oriented languages
US7757224B2 (en) * 2006-02-02 2010-07-13 Microsoft Corporation Software support for dynamically extensible processors
US7844978B2 (en) * 2006-06-02 2010-11-30 International Business Machines Corporation Artifact management for an extensible runtime environment
US8161465B2 (en) * 2006-07-27 2012-04-17 Oracle International Corporation Method and apparatus for performing conditional compilation
US7743076B2 (en) * 2007-01-26 2010-06-22 Microsoft Corporation Extensible action sequences coordinating independently created components
US8239845B2 (en) * 2007-02-14 2012-08-07 The Mathworks, Inc. Media for using parallel processing constructs
US8250550B2 (en) * 2007-02-14 2012-08-21 The Mathworks, Inc. Parallel processing of distributed arrays and optimum data distribution
US8239844B2 (en) 2007-02-14 2012-08-07 The Mathworks, Inc. Method of using parallel processing constructs and dynamically allocating program portions
US8010954B2 (en) * 2007-02-14 2011-08-30 The Mathworks, Inc. Parallel programming interface to dynamically allocate program portions
US8255890B2 (en) * 2007-02-14 2012-08-28 The Mathworks, Inc. Media for performing parallel processing of distributed arrays
US8255889B2 (en) * 2007-02-14 2012-08-28 The Mathworks, Inc. Method of using parallel processing constructs and dynamically allocating program portions
US8239846B2 (en) * 2007-02-14 2012-08-07 The Mathworks, Inc. Device for performing parallel processing of distributed arrays
US8762976B2 (en) * 2007-03-09 2014-06-24 Microsoft Corporation Static extensibility models with dynamic languages and scripts
US8181167B2 (en) * 2008-01-09 2012-05-15 Kan Zhao Method and system for presenting and analyzing software source code through intermediate representation
US20090183185A1 (en) * 2008-01-16 2009-07-16 Microsoft Corporation Declarative and Extensible Process Definition
KR101418969B1 (ko) * 2008-02-27 2014-08-13 삼성전자주식회사 프로세서 및 컴파일 방법
US9158519B2 (en) * 2008-05-21 2015-10-13 Optumsoft, Inc. Dynamic collection attribute-based computer programming language methods
US20100088686A1 (en) * 2008-10-06 2010-04-08 Microsoft Corporation Programming language with extensible syntax
US8392895B2 (en) * 2009-01-13 2013-03-05 Mediatek Inc. Firmware extension method and firmware builder
CA2675680C (en) * 2009-08-27 2013-05-14 Ibm Canada Limited - Ibm Canada Limitee Generating object code that uses calculated contents for a variable determined from a predicate
CA2691851A1 (en) * 2010-02-04 2011-08-04 Ibm Canada Limited - Ibm Canada Limitee Control flow analysis using deductive reaching definitions
US8572591B2 (en) * 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US8997070B2 (en) * 2011-12-15 2015-03-31 Sap Se Extension mechanism for scripting language compiler
US8954939B2 (en) * 2012-12-31 2015-02-10 Microsoft Corporation Extending a development environment
US9250937B1 (en) * 2013-11-06 2016-02-02 The Regents Of The University Of California Code randomization for just-in-time compilers
US9542173B2 (en) * 2015-05-15 2017-01-10 Sap Se Dependency handling for software extensions
US9477447B1 (en) * 2015-05-15 2016-10-25 Sap Se Semantic representations of software extensions
US10120661B2 (en) * 2015-07-16 2018-11-06 Sugarcrm Inc. Multi-flavored software execution from a singular code base
CN106484489A (zh) * 2015-09-01 2017-03-08 阿里巴巴集团控股有限公司 一种扩展编程语言特性的方法及装置
CN106909353B (zh) * 2015-12-22 2019-12-13 阿里巴巴集团控股有限公司 应用程序的运行方法和装置
US10140105B2 (en) * 2016-03-10 2018-11-27 Wowza Media Systems, LLC Converting source code
US10268455B2 (en) 2016-05-20 2019-04-23 Microsoft Technology Licensing, Llc Augmenting an original class with an augmenting class
GB2573775A (en) * 2018-05-16 2019-11-20 Sage Uk Ltd Application Deployment
US11366658B1 (en) * 2021-01-19 2022-06-21 Sap Se Seamless lifecycle stability for extensible software features
CN114296693B (zh) * 2021-12-15 2025-07-08 北京经纬恒润科技股份有限公司 一种多核异构处理器的模型开发方法及装置
US11995421B2 (en) 2022-04-11 2024-05-28 Microsoft Technology Licensing, Llc Register allocation heuristics order
US12379976B2 (en) 2022-10-05 2025-08-05 Insight Direct Usa, Inc. Runtime dependency configuration utility

Family Cites Families (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4197978A (en) 1978-06-29 1980-04-15 The Boeing Company Method of making an integral structural member
US4734854A (en) 1985-10-08 1988-03-29 American Telephone And Telegraph Company System for generating software source code components
CA1248238A (en) 1985-10-17 1989-01-03 Francis D. Lawlor Compiler including retargetable data generation
JPS6488834A (en) * 1987-09-30 1989-04-03 Nec Corp Program addition correcting system
US5339419A (en) 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
US5659753A (en) 1991-02-27 1997-08-19 Digital Equipment Corporation Interface for symbol table construction in a multilanguage optimizing compiler
US5598560A (en) 1991-03-07 1997-01-28 Digital Equipment Corporation Tracking condition codes in translation code for different machine architectures
JPH04361328A (ja) * 1991-06-10 1992-12-14 Fujitsu Ltd 処理モード切り替え方式
US5488727A (en) 1991-09-30 1996-01-30 International Business Machines Corporation Methods to support multimethod function overloading with compile-time type checking
JPH0683605A (ja) * 1992-09-07 1994-03-25 Fujitsu Ltd 改変したプログラムを実行するデータ処理方式
CA2102089C (en) 1993-10-29 1999-05-25 David M. Gillies Recompilation of computer programs for enhanced optimization
US5761511A (en) 1994-01-28 1998-06-02 Sun Microsystems, Inc. Method and apparatus for a type-safe framework for dynamically extensible objects
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
US5742828A (en) 1994-08-03 1998-04-21 Microsoft Corporation Compiler and method for evaluation of foreign syntax expressions in source code
US5778227A (en) 1995-08-01 1998-07-07 Intergraph Corporation System for adding attributes to an object at run time in an object oriented computer environment
US5754858A (en) 1996-05-01 1998-05-19 Microsoft Corporation Customizable application project generation process and system
US6421667B1 (en) 1996-06-11 2002-07-16 Edgar F. Codd Delta model processing logic representation and execution system
US6463581B1 (en) 1996-10-03 2002-10-08 International Business Machines Corporation Method for determining reachable methods in object-oriented applications that use class libraries
US5778233A (en) 1996-10-11 1998-07-07 International Business Machines Corporation Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
US6247169B1 (en) 1996-11-04 2001-06-12 Sun Microsystems, Inc. Structured exception-handling methods, apparatus, and computer program products
US5937195A (en) 1996-11-27 1999-08-10 Hewlett-Packard Co Global control flow treatment of predicated code
US5943499A (en) 1996-11-27 1999-08-24 Hewlett-Packard Company System and method for solving general global data flow predicated code problems
US5857105A (en) 1997-02-05 1999-01-05 Hewlett-Packard Company Compiler for reducing number of indirect calls in an executable code
US6212672B1 (en) * 1997-03-07 2001-04-03 Dynamics Research Corporation Software development system with an executable working model in an interpretable intermediate modeling language
US5918235A (en) 1997-04-04 1999-06-29 Hewlett-Packard Company Object surrogate with active computation and probablistic counter
US6149318A (en) 1997-04-15 2000-11-21 Samuel C. Kendall Link-time and run-time error detection, and program instrumentation
US5999739A (en) 1997-05-29 1999-12-07 Hewlett-Packard Company Method and apparatus for elimination of redundant branch instructions from a program
US6009273A (en) 1997-05-29 1999-12-28 Hewlett-Packard Company Method for conversion of a variable argument routine to a fixed argument routine
US6070011A (en) 1997-10-21 2000-05-30 Hewlett-Packard Co. Compiler for performing a loop fusion, dependent upon loop peeling and/or loop reversal
US5966702A (en) 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6148302A (en) 1998-02-26 2000-11-14 Sun Microsystems, Inc. Method, apparatus, system and computer program product for initializing a data structure at its first active use
US6202204B1 (en) 1998-03-11 2001-03-13 Intel Corporation Comprehensive redundant load elimination for architectures supporting control and data speculation
US6330717B1 (en) * 1998-03-27 2001-12-11 Sony Corporation Of Japan Process and system for developing an application program for a distributed adaptive run-time platform
US6249910B1 (en) 1998-05-04 2001-06-19 Hewlett-Packard Company Apparatus and method for incrementally update static single assignment form for cloned variable name definitions
US6578090B1 (en) 1998-06-08 2003-06-10 Ricoh Company, Ltd. System and method for interfacing two modules supporting various applications
JP3320358B2 (ja) * 1998-06-18 2002-09-03 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法、例外処理方法、及びコンピュータ
US6289446B1 (en) 1998-09-29 2001-09-11 Axis Ab Exception handling utilizing call instruction with context information
US6182284B1 (en) 1998-09-30 2001-01-30 Hewlett-Packard Company Method and system for eliminating phi instruction resource interferences and redundant copy instructions from static-single-assignment-form computer code
US6292938B1 (en) 1998-12-02 2001-09-18 International Business Machines Corporation Retargeting optimized code by matching tree patterns in directed acyclic graphs
US6253304B1 (en) 1999-01-04 2001-06-26 Advanced Micro Devices, Inc. Collation of interrupt control devices
US6412109B1 (en) 1999-01-29 2002-06-25 Sun Microsystems, Inc. Method for optimizing java bytecodes in the presence of try-catch blocks
US6353924B1 (en) 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution
US6526570B1 (en) 1999-04-23 2003-02-25 Sun Microsystems, Inc. File portability techniques
US6286134B1 (en) 1999-04-23 2001-09-04 Sun Microsystems, Inc. Instruction selection in a multi-platform environment
US6363522B1 (en) 1999-04-23 2002-03-26 Sun Microsystems, Inc. Method and apparatus for handling exceptions as normal control flow
US6374368B1 (en) 1999-05-21 2002-04-16 Microsoft Corporation Weakest precondition analysis
US20020166115A1 (en) 1999-06-10 2002-11-07 A.V.S. Sastry System and method for computer program compilation using scalar register promotion and static single assignment representation
US6460178B1 (en) 1999-06-30 2002-10-01 Microsoft Corporation Shared library optimization for heterogeneous programs
US6481008B1 (en) 1999-06-30 2002-11-12 Microsoft Corporation Instrumentation and optimization tools for heterogeneous programs
US6662356B1 (en) 1999-06-30 2003-12-09 Microsoft Corporation Application program interface for transforming heterogeneous programs
US6629312B1 (en) 1999-08-20 2003-09-30 Hewlett-Packard Development Company, L.P. Programmatic synthesis of a machine description for retargeting a compiler
US6560774B1 (en) 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6625808B1 (en) 1999-12-10 2003-09-23 Microsoft Corporation Method and apparatus for facilitating memory management in a program comprised of heterogeneous components
US6598220B1 (en) 1999-12-17 2003-07-22 Dell Products L.P. System and method for allowing registerable runtime modification of object behaviors
US6804814B1 (en) 1999-12-29 2004-10-12 Veritas Operating Corporation Method for simulating back program execution from a traceback sequence
US6748584B1 (en) 1999-12-29 2004-06-08 Veritas Operating Corporation Method for determining the degree to which changed code has been exercised
US6745383B1 (en) 1999-12-29 2004-06-01 Veritas Operating Corporation Early warning mechanism for enhancing enterprise availability
US6981249B1 (en) 2000-05-02 2005-12-27 Microsoft Corporation Methods for enhancing type reconstruction
US6678805B1 (en) 2000-05-25 2004-01-13 Microsoft Corporation Structure organization for improved cache performance
US6625804B1 (en) 2000-07-06 2003-09-23 Microsoft Corporation Unified event programming model
CA2321018A1 (en) 2000-09-27 2002-03-27 Ibm Canada Limited-Ibm Canada Limitee Optimizing compilation by forward store movement
US6854110B2 (en) 2000-12-21 2005-02-08 Microsoft Corporation System and method for obtaining scratch registers in computer executable binaries
US6925639B2 (en) 2001-02-23 2005-08-02 Microsoft Corporation Method and system for register allocation
US7117488B1 (en) 2001-10-31 2006-10-03 The Regents Of The University Of California Safe computer code formats and methods for generating safe computer code
US6834383B2 (en) 2001-11-26 2004-12-21 Microsoft Corporation Method for binary-level branch reversal on computer architectures supporting predicated execution
US7426719B2 (en) 2001-11-29 2008-09-16 Microsoft Corporation Method and system for rewriting unwind data in the presence of exceptions
JP3870112B2 (ja) 2002-03-13 2007-01-17 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法、コンパイル装置、及びコンパイル用プログラム
US7228540B2 (en) 2002-05-14 2007-06-05 Microsoft Corporation Preparation for software on demand system
US7213245B2 (en) 2002-05-14 2007-05-01 Microsoft Corporation Software on demand system
US7185328B2 (en) 2002-05-30 2007-02-27 Microsoft Corporation System and method for improving a working set
US7055132B2 (en) 2002-06-28 2006-05-30 Microsoft Corporation System and method for associating properties with objects
US7367022B2 (en) 2002-09-05 2008-04-29 Intel Corporation Methods and apparatus for optimizing the operating speed and size of a computer program
US7240346B2 (en) 2002-11-13 2007-07-03 Microsoft Corporation Method and system for accessing drawing resources
US7203941B2 (en) 2002-11-14 2007-04-10 Microsoft Corporation Associating a native resource with an application
US7370321B2 (en) 2002-11-14 2008-05-06 Microsoft Corporation Systems and methods to read, optimize, and verify byte codes for a multiplatform jit
US7546607B2 (en) 2002-11-19 2009-06-09 Microsoft Corporation Native code exposing virtual machine managed object
US7281248B2 (en) 2002-11-19 2007-10-09 Microsoft Corporation Virtualized and realized user interface controls
US7472400B2 (en) 2003-02-28 2008-12-30 Bea Systems, Inc. Method for dynamically generating a wrapper class
US7120898B2 (en) * 2003-06-26 2006-10-10 Microsoft Corporation Intermediate representation for multiple exception handling models

Also Published As

Publication number Publication date
CN1577265A (zh) 2005-02-09
EP1501010A2 (en) 2005-01-26
US7305666B2 (en) 2007-12-04
KR101137126B1 (ko) 2012-04-19
US20050022161A1 (en) 2005-01-27
CN100478874C (zh) 2009-04-15
JP2005044347A (ja) 2005-02-17
EP1501010A3 (en) 2007-09-12
KR20050011685A (ko) 2005-01-29

Similar Documents

Publication Publication Date Title
JP4716681B2 (ja) ソフトウェアを拡張するための方法、システムおよび記録媒体
Tanter et al. A versatile kernel for multi-language AOP
Van Put et al. Diablo: a reliable, retargetable and extensible link-time rewriting framework
US7380242B2 (en) Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
JP5851396B2 (ja) 処理方法
CN110149800B (zh) 一种用于处理与源程序的源代码相关联的抽象语法树的装置
EP1074911A2 (en) Aspect-oriented programming
EP1491999A2 (en) Software development infrastructure
JP2002504725A (ja) 最適化先読みコンパイラを使用したジャバ開発環境
US6219834B1 (en) Extensible compiler and method
Poletto et al. tcc: A templatebased compiler for ‘c
Kimpe et al. The COOLFluiD parallel architecture
Costanza A short overview of AspectL
Izawa Supporting multi-scope and multi-level compilation in a meta-tracing just-in-time compiler
JPH03208187A (ja) 拡張グラフィック機能を与える方法
Forgáč et al. Static and dynamic approaches to weaving
Rura et al. A basis for aspectj refactoring
Panahi et al. Adaptive techniques for minimizing middleware memory footprint for distributed, real-time, embedded systems
Hansen Deployment descriptions in a world of COTS and open source
Kim et al. Flexible and efficient in-vivo enhancement for grid applications
Banerji et al. Design, Distribution, and Management of Object Oriented Software.
Plumbridge et al. Translating Java for resource constrained embedded systems
Philippsen et al. Complex numbers for Java
Cantiello et al. Compilers, techniques, and tools for supporting programming heterogeneous many/multicore systems
McKinley et al. Compiling for heterogeneous systems: A survey and an approach

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070626

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100806

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101105

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110224

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110318

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: 20110329

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20140408

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250