JP4716681B2 - ソフトウェアを拡張するための方法、システムおよび記録媒体 - Google Patents
ソフトウェアを拡張するための方法、システムおよび記録媒体 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-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
本明細書中に説明した技法では、主としてコンパイラを使用した例を用いて示しているが、これらの技法はどれも、他のソフトウェア開発ツール(例えば、デバッガ、オプティマイザ、逆アセンブラ、シミュレータ、およびソフトウェア分析ツール)に関連して使用することもできる。
図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組のソフトウェア開発シナリオまたはファクタを提供しているにすぎない。同様に、他のシナリオでも、カスタムソフトウェア開発ツールを構成するのに必要とされるソフトウェア拡張の選択に影響を与える可能性がある。かかるシナリオを一括して、構成と呼ぶことができる。しかし、カスタムソフトウェア開発ツールの特定の構成に、単一のシナリオが影響を与えることもある。
オブジェクト指向プログラミングでは、オブジェクトを使用してデータを記憶しそのデータについての機能にアクセスすることができる。オブジェクトは、クラス定義を提供することによって定義され、次いでこれらのクラス定義を使用してそのクラスに属するオブジェクトをインスタンス化することができる。
選択済みのソフトウェア開発シナリオに従ってコアソフトウェアフレームワークを拡張する一方法は、ソフトウェアクラスを拡張することである。ソフトウェアクラスは、オブジェクトクラスの定義を変更することにより拡張することができる。
ソフトウェア開発ツールを構成するためのソフトウェア開発シナリオを開発者が決定した後、これらのそれぞれのクラス拡張を指定してコアソフトウェアフレームワークの拡張バージョンを開発することができる。次いで、適切なソフトウェア(例えば、プリプロセッサまたはコンパイラ)には、指定済みのシナリオを受け取りそのシナリオにとって適切な拡張セットを含めることができる。したがって、特定のソフトウェア開発シナリオについてのクラス拡張は、そのシナリオにとって適切な1つまたは複数のクラス拡張を有するソフトウェア開発シナリオクラス拡張セットにグループ化することができる。ソフトウェア開発ツールを開発する際に、このソフトウェア開発シナリオクラス拡張セットを呼び出して適切なクラスを拡張することができる。開発中または実行時にこれらのクラスを拡張することができる。
図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を生成することができる。
図3Aは、コアフレームワークを拡張することによってコンパイラまたはツールを構築するためのコアクラス定義を拡張するための全体的な方法を示している。最初に302で、拡張を示すデータに出会い、304でソフトウェア開発ツールのクラスを拡張が指し示すように拡張する。
コアフレームワークプログラムを拡張するための1つのアプローチは、そのコアプログラムのソースコードファイルに対するアクセスを取得するアプローチ、およびこのオブジェクト記述言語を使用してこれらの拡張を定義することにより、コアクラスを必要に応じて静的に拡張するアプローチでもよく、次いでこれらの拡張を処理してこれらの拡張されたクラスに関係するソースコードを生成することができる。代わりに、ソースコードプログラミング言語中のソースコードに直接に手操作で拡張を追加することによって拡張クラスを生成することもできる。図4Aにこのアプローチを示しており、それによって拡張420、430、および440をコアフレームワークファイル410に追加してそれを拡張し、次いで、拡張420、430、および440を今や拡張済みのコアフレームワークファイル410の一部としてコンパイルする。
図5に、前述の図4Aを参照して示すような、コンパイル時に先立ってコアフレームワークプログラムに関係するクラスを静的に拡張する方法を示す。オブジェクト記述言語を使用して、これらのコアクラスとその拡張を定義することができる。これらのコアクラスおよびそのクラス拡張の定義を同時または一緒に生成する必要はない。しかし、クラス拡張を追加するにはコアプログラムのソースコードに何らかのアクセスをする必要があるはずである。かかるクラス定義が取得された後に、次いで510で、オブジェクト記述言語表現をソースコード表現に変換することができるODLプリプロセッサによって、コアクラスおよびその拡張の定義を一緒に処理することになる。したがって520で、このODLプロセッサによる前処理の結果は、C++などのソースコード言語におけるコアクラスの定義およびその拡張を表す、ヘッダファイルおよびたぶん何らかの他のコードとなるはずである。次いで、さらに530で、コアクラスメンバおよびそのクラス拡張メンバを含む拡張クラス定義をもつヘッダファイルは、今や拡張済みのコアフレームワークに関係するコードの残りと一緒にコンパイルされてカスタム構成されたコンパイラおよび他のソフトウェア開発ツールを生成するはずである。
図7は、実行時に拡張を適切なコアクラスに関連づけることにより、拡張可能なコアフレームワークソフトウェアプログラムのコアクラス定義を拡張する方法を示している。これらのコアクラス定義およびその拡張は、オブジェクト記述言語を使用して別々に表現することができる。この記述言語は、コアクラス定義が動的に拡張可能であることを表現するのに適していることもある。また、かかる言語は、特定のコアクラス定義とその拡張の間の関連付けを表現するのに適していることもある。かかる1つの好適な言語のための構文について以下でさらに詳細に説明する。定義を表現した後に、710でODLプリプロセッサを使用して、720でこのオブジェクト記述言語表現中の定義をソースコード表現に変換する。しかし、静的プロセス(図6)と違って、図7の動的プロセスでは、コアクラス定義が、ODLプリプロセッサによってこれらの拡張の定義と一緒に処理されることはない。そうではなくて、コアクラス定義に対応するソースコードヘッダファイルとクラス拡張定義に対応するソースコードヘッダファイルは、別々に生成される。異なるODLプリプロセッサによってこれらを生成することができるが、必ずしもそのようにする必要はない。さらに730で、コアクラス定義を含むヘッダファイルとクラス拡張定義を含むヘッダファイルを別々にコンパイルしてコンピュータが実行可能な別々のファイルを作成する。しかし、740で、実行時にクラス拡張定義を適切なコアクラス定義に関連づけてこれらのコアクラスを定義に応じて拡張することができる。
以上で指摘したように、簡単なオブジェクト記述言語を使用して拡張可能コアフレームワークプログラムの所望の構成に依存したクラス定義を提供することができる。例えば、コアフレームワークの特定の構成は、コンパイラのタイプ(例えば、JIT、Pre−JIT、ネイティブ最適化など)、ターゲットのタイプ(例えば、IA−64、X86、ARMなど)、他のシナリオファクタなどのソフトウェア開発シナリオに基づいてクラス定義に異種の要求を行う可能性がある。以下の数段落では、以上の図5ないし図8を参照して説明したようなODLプリプロセッサで処理してソースコード言語によるクラス定義を生成することが可能な、かかる言語について説明している。
この宣言を使用して、クラスが(例えば、ドットネットシナリオにおける)管理されたクラスであるか否かなどクラスの属性、およびクラスの拡張属性を定義することができる。例えば、それが管理されたクラスであるかどうかを定義することを、[gc]属性を宣言することによって行ってこのクラスのオブジェクトに対するガーベージコレクションが(例えば、ドットネットフレームワークによって)自動的に行われることを示すことができる。クラス拡張属性では、1つのアプローチは、すべてのクラスが前述のように静的に拡張可能であることを想定することである。したがって、クラスが静的に拡張可能であることを特に宣言するために特別な属性が必要とされないこともある。しかし、図10Aに示すように、実行時に(すなわち、動的に)拡張すべきクラスを[extensible]などの特定の属性を用いて宣言することができる。
静的な拡張の1つの不利な点は、コアフレームワークとその拡張を一緒にコンパイルしてコンピュータが実行可能な単一のファイルを生成することが必要なことにある。これは、拡張を提供している者が、拡張と一緒に再コンパイルするためにコアフレームワークのソースコードにアクセスできる必要もあることを意味する。いくつかの異なる理由から望ましくないこともあるこの状況を回避するためには、拡張クラス定義を実行時に生成することもできる。
図12は、複数のソフトウェア開発シナリオに従ってソフトウェア開発ツールを構築する実装形態の一例を示している。様々なソフトウェア開発シナリオに関係するクラス拡張を追加することによってコアクラス1210を拡張することができる。例えば、特定のターゲットアーキテクチャ1220(例えば、X86、IA−64など)のソフトウェア開発シナリオにクラス拡張を関係づけることができ、コンパイルシナリオ1230(例えば、JIT、ネイティブなど)に他の拡張を関係づけることができる。同様に、他のソフトウェア開発シナリオが、拡張の選択に影響を与えることもある。例えば、ソフトウェア開発ツールの管理されたコード実装1240に特有な拡張もあり得るし、また拡張が1組のプログラミング言語のうちの1つを指し示すこともある。したがって、これらの様々な拡張の構成を追加して、コアクラス1210を拡張して拡張可能コアフレームワークを使用してソフトウェア開発ツール1250を構築することができる。
本発明の原理を説明済みの実施形態に関して説明し例示してきたが、この説明済みの実施形態は、かかる原理を逸脱することなく、構成および詳細を変更することができることが理解されよう。本明細書中で説明した技術は、コンパイラを使用した例を用いて示してきたが、これら技術のいずれでも他のソフトウェア開発ツール(例えば、デバッガ、オプティマイザ、シミュレータ、およびソフトウェア分析ツール)を使用することができる。さらに、拡張を生成する原理を、主として本明細書中ではコアクラスを拡張することに関して説明してきたが、同じ原理を同様に適用してコアクラスの任意の拡張またはサブクラスを拡張することもできる。また、ODLプロセッサについて、以上ではオブジェクト記述言語を受け取りソースコード言語を生成することが可能であると言及している。しかし、ODLプリプロセッサの出力はソースコード言語だけに限定される必要はない。ODLプリプロセッサの出力は、マイクロソフトのドットネットのCILなど中間表現または中間言語、あるいはプロセッサが実行可能な任意の形式を出力として提供することもできる。
110 コアフレーム
111 ソフトウェア開発ツール(コンパイラ)
112〜114 ソフトウェア開発ツール
121 プロセッサ
Claims (11)
- コアクラスの定義および拡張クラスの定義を格納するメモリ、プリプロセッサ、およびコンパイラを備えたシステムにおいて、ソフトウェアのコアクラスを拡張して、特定のソフトウェア開発シナリオに依存する前記ソフトウェアの拡張バージョンを生成することによって前記ソフトウェアを拡張する方法であって、前記ソフトウェア開発シナリオは、1または複数のシナリオファクタを定義し、前記シナリオファクタには、少なくともプロセッサアーキテクチャのタイプ、コンパイラのタイプ、およびプログラミング言語のタイプが含まれ、前記拡張クラスは、前記ソフトウェア開発シナリオの前記1または複数のシナリオファクタに基づいて選択される拡張メンバを含み、
前記プリプロセッサが、前記コアクラスの定義を受け取るステップであって、前記コアクラスの定義には、当該コアクラスがコンパイル時に先立って静的に拡張可能、または実行時に動的に拡張可能のいずれであるかが定義されている、ステップと、
前記プリプロセッサが、特定のソフトウェア開発シナリオを受け取るステップと、
前記プリプロセッサが、前記受け取ったソフトウェア開発シナリオに従って、前記コアクラスを拡張するために必要な拡張クラスの定義を受け取るステップと
を含み、
前記コアクラスが静的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義および前記拡張クラスの定義を含むヘッダファイルを生成し、前記コンパイラが、当該ヘッダファイルをコンパイルして前記ソフトウェアの拡張バージョンを生成し、
前記コアクラスが動的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々に生成し、前記コンパイラが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々にコンパイルして、互いにリンクを有するコンピュータ実行可能ファイルを別々に生成し、実行時に前記拡張クラスを前記コアクラスに関連付けることにより、前記ソフトウェアの拡張バージョンを生成することを特徴とする方法。 - 前記コアクラスの定義は、前記拡張クラスに含まれる前記拡張メンバを挿入する、前記コアクラス内のポイントを指し示す1つまたは複数の拡張ポイントを含むことを特徴とする請求項1に記載の方法。
- 前記ソフトウェアは、拡張可能なコアコンパイラフレームワークであり、前記ソフトウェア開発シナリオは、生成されるコンパイラが対象とするコンパイラのタイプを前記シナリオファクタの1つとして含み、前記コンパイラのタイプに特有の拡張メンバを含む拡張クラスを用いて拡張されたコンパイラが生成されることを特徴とする請求項1に記載の方法。
- 前記コンパイラのタイプは、JITコンパイラ、Pre−JITコンパイラ、およびネイティブ最適化コンパイラからなる群から選択されることを特徴とする請求項3に記載の方法。
- 前記ソフトウェアは、拡張可能なコアソフトウェア開発ツールフレームワークであり、前記ソフトウェア開発シナリオは、生成されるソフトウェア開発ツールが対象とするプロセッサアーキテクチャのタイプを前記シナリオファクタの1つとして含み、前記プロセッサアーキテクチャのタイプに特有の拡張メンバを含む拡張クラスを用いて拡張されたソフトウェア開発ツールが生成されることを特徴とする請求項1に記載の方法。
- ソフトウェアのコアクラスを拡張して、特定のソフトウェア開発シナリオに依存する前記ソフトウェアの拡張バージョンを生成することによって前記ソフトウェアを拡張するためのシステムであって、前記ソフトウェア開発シナリオは、1または複数のシナリオファクタを定義し、前記シナリオファクタには、少なくともプロセッサアーキテクチャのタイプ、コンパイラのタイプ、およびプログラミング言語のタイプが含まれ、前記システムは、
コアクラスの定義および拡張クラスの定義を格納するメモリであって、前記コアクラスの定義には、当該コアクラスがコンパイル時に先立って静的に拡張可能、または実行時に動的に拡張可能のいずれであるかが定義されている、前記拡張クラスは、前記ソフトウェア開発シナリオの前記1または複数のシナリオファクタに基づいて選択される拡張メンバを含む、メモリと、
前記コアクラスの定義および特定のソフトウェア開発シナリオを受け取り、当該ソフトウェア開発シナリオに従って、前記コアクラスを拡張するために必要な拡張クラスの定義を受け取り、クラスの定義を含むヘッダファイルを生成するプリプロセッサと、
前記プリプロセッサが生成したヘッダファイルをコンパイルするコンパイラと
を備え、
前記コアクラスが静的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義および前記拡張クラスの定義を含むヘッダファイルを生成し、前記コンパイラが、当該ヘッダファイルをコンパイルして前記ソフトウェアの拡張バージョンを生成し、
前記コアクラスが動的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々に生成し、前記コンパイラが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々にコンパイルして、互いにリンクを有するコンピュータ実行可能ファイルを別々に生成し、実行時に前記拡張クラスを前記コアクラスに関連付けることにより、前記ソフトウェアの拡張バージョンを生成することを特徴とするシステム。 - 前記コアクラスの定義は、前記拡張クラスに含まれる前記拡張メンバを挿入する、前記コアクラス内のポイントを指し示す1つまたは複数の拡張ポイントをさらに含むことを特徴とする請求項6に記載のシステム。
- 前記システムは、前記コアクラスのコンピュータ実行可能ファイルを呼び出し、実行時に前記コアクラスに、前記拡張クラスに含まれる前記拡張メンバを挿入することによって、前記ソフトウェアの拡張バージョンを生成することを特徴とする請求項6に記載のシステム。
- 前記ソフトウェアは、拡張可能なコアソフトウェア開発ツールフレームワークであり、前記ソフトウェア開発シナリオは、生成されるソフトウェア開発ツールが対象とするプロセッサアーキテクチャのタイプを前記シナリオファクタの1つとして含み、前記プロセッサアーキテクチャのタイプに特有の拡張メンバを含む拡張クラスを用いて拡張されたソフトウェア開発ツールが生成されることを特徴とする請求項6に記載のシステム。
- 前記ソフトウェアは、拡張可能なコアソフトウェア開発ツールフレームワークであり、前記ソフトウェア開発シナリオは、生成されるソフトウェア開発ツールが対象とするコンパイラのタイプを前記シナリオファクタの1つとして含み、前記コンパイラのタイプに特有の拡張メンバを含む拡張クラスを用いて拡張されたソフトウェア開発ツールが生成されることを特徴とする請求項6に記載のシステム。
- コアクラスの定義および拡張クラスの定義を格納するメモリ、プリプロセッサ、およびコンパイラを備えたシステムにおいて、ソフトウェアのコアクラスを拡張して、特定のソフトウェア開発シナリオに依存する前記ソフトウェアの拡張バージョンを生成することによって前記ソフトウェアを拡張する方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記ソフトウェア開発シナリオは、1または複数のシナリオファクタを定義し、前記シナリオファクタには、少なくともプロセッサアーキテクチャのタイプ、コンパイラのタイプ、およびプログラミング言語のタイプが含まれ、前記拡張クラスは、前記ソフトウェア開発シナリオの前記1または複数のシナリオファクタに基づいて選択される拡張メンバを含み、前記方法は、
前記プリプロセッサが、前記コアクラスの定義を受け取るステップであって、前記コアクラスの定義には、当該コアクラスがコンパイル時に先立って静的に拡張可能、または実行時に動的に拡張可能のいずれであるかが定義されている、ステップと、
前記プリプロセッサが、特定のソフトウェア開発シナリオを受け取るステップと、
前記プリプロセッサが、前記受け取ったソフトウェア開発シナリオに従って、前記コアクラスを拡張するために必要な拡張クラスの定義を受け取るステップと
を含み、
前記コアクラスが静的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義および前記拡張クラスの定義を含むヘッダファイルを生成し、前記コンパイラが、当該ヘッダファイルをコンパイルして前記ソフトウェアの拡張バージョンを生成し、
前記コアクラスが動的に拡張可能であると示される場合、前記プリプロセッサが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々に生成し、前記コンパイラが、前記コアクラスの定義を含むヘッダファイル、および前記拡張クラスの定義を含むヘッダファイルを別々にコンパイルして、互いにリンクを有するコンピュータ実行可能ファイルを別々に生成し、実行時に前記拡張クラスを前記コアクラスに関連付けることにより、前記ソフトウェアの拡張バージョンを生成することを特徴とするコンピュータ読取り可能な記録媒体。
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)
| 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)
| 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 |
-
2003
- 2003-07-23 US US10/626,251 patent/US7305666B2/en not_active Expired - Fee Related
-
2004
- 2004-06-30 JP JP2004194759A patent/JP4716681B2/ja not_active Expired - Lifetime
- 2004-07-01 EP EP04103108A patent/EP1501010A3/en not_active Ceased
- 2004-07-09 KR KR1020040053552A patent/KR101137126B1/ko not_active Expired - Fee Related
- 2004-07-23 CN CNB2004100589703A patent/CN100478874C/zh not_active Expired - Fee Related
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 |