JP2008542927A - 外部プログラム環境からの遅延束縛関数の呼び出し - Google Patents

外部プログラム環境からの遅延束縛関数の呼び出し Download PDF

Info

Publication number
JP2008542927A
JP2008542927A JP2008514937A JP2008514937A JP2008542927A JP 2008542927 A JP2008542927 A JP 2008542927A JP 2008514937 A JP2008514937 A JP 2008514937A JP 2008514937 A JP2008514937 A JP 2008514937A JP 2008542927 A JP2008542927 A JP 2008542927A
Authority
JP
Japan
Prior art keywords
environment
late bound
bound
late
function
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.)
Granted
Application number
JP2008514937A
Other languages
English (en)
Other versions
JP2008542927A5 (ja
JP5412108B2 (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.)
MathWorks Inc
Original Assignee
MathWorks Inc
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 MathWorks Inc filed Critical MathWorks Inc
Publication of JP2008542927A publication Critical patent/JP2008542927A/ja
Publication of JP2008542927A5 publication Critical patent/JP2008542927A5/ja
Application granted granted Critical
Publication of JP5412108B2 publication Critical patent/JP5412108B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Abstract

本発明は遅延束縛プログラム言語の外部環境への統合に関する。この外部環境は、初期束縛環境、遅延束縛環境、或いはそれらの組合せの何れでもよい。この遅延束縛プログラム環境にはモジュラー実行エンジン及びインターフェース機構が関連付けられており、インターフェース機構は、上述の外部環境と互換性がある形式で遅延束縛意味論を表現できる。

Description

本願は、その内容を引用して本明細書に援用する2005年6月2日付けの米国特許出願第11/144411号の利益を主張する。
本発明はアプリケーション及びソフトウェア構成要素に関し、より詳細には、初期束縛アプリケーションから遅延束縛関数を呼び出すための方法及びシステムに関する。
アプリケーションで関数呼び出しを束縛するには、その関数を実機械語アドレスに置換する必要がある。従って、この束縛がどの関数(すなわち、当該関数を実現するコードのセクション)を実行時に実行するか決定する。コンパイル時に束縛が起これば、それは「初期束縛」である。対照的に、実行時に束縛が起これば、それは「遅延束縛」である。プログラミング言語は、一般に初期束縛又は遅延束縛として分類できる。
どちらの関数呼び出し束縛時を選択するかは(すなわち、初期束縛か遅延束縛か)、実行時のコードのパフォーマンス(初期束縛は実行時に高速である)と、プログラマーのプログラミング容易さ(遅延束縛プログラムは書くのが容易である)との兼ね合いである。現状では、プログラマーは、プログラムを書くのに要する時間か、プログラムを実行するのに要する時間かのどちらが重要かを決定しなければならない。残念ながら、これは容易な選択ではないことが多い。従来のシステムでは、この兼ね合いのバランスを効果的にとる機構は存在しない。
発明の概要
本発明は、遅延束縛プログラム関数を外部プログラム環境に統合するための方法及びシステムを提供する。この外部プログラム環境は、初期束縛環境、遅延束縛環境、或いはそれらの組合せの何れでもよい。
本発明の第1の様態によれば、遅延束縛アプリケーションが外部プログラム環境に統合される方法が提供される。遅延束縛プログラム及び遅延束縛環境が与えられ、後に、外部環境に使用可能とすべきどのような遅延束縛呼び出しが遅延束縛プログラム及び環境内に存在するかを特定するために遅延束縛プログラム及び環境が調べられる。次にインターフェースが生成され、このインターフェースにより遅延束縛関数呼び出しを外部プログラム環境内で統合可能となる。本発明の実施に用いられる外部環境は、遅延束縛環境、初期束縛環境、或いはそれらの組合せの何れでもよい。
本発明の別の様態では、遅延束縛プログラム言語を外部環境に統合するシステムが提供され、このシステムは外部環境と遅延束縛プログラム及びプログラム環境とを含む。この外部環境は、遅延束縛プログラム環境、初期束縛プログラム環境、或いはそれらの組合せの何れでもよい。この遅延束縛プログラム環境はモジュラー実行エンジンとインターフェース機構とを含み、インターフェース機構は、外部環境と互換性がある形式で遅延束縛意味論を表現できる。
本発明の更なる様態では、実行可能な遅延束縛内容を外部プログラム環境で使用するために再配布可能なアプリケーションにパッケージ化する方法が提供される。この外部環境は、遅延束縛プログラム環境、初期束縛プログラム環境、或いはそれらの組合せの何れでもよい。この方法は、先ず、遅延束縛内容のうちどのファイルが遅延束縛アプリケーションを表すかを特定するため遅延束縛内容を調べる。更に、遅延束縛アプリケーションをサポートするのに必要な関数のみを含む遅延束縛モジュラー実行エンジンが提供される。このモジュラー実行エンジンは、遅延束縛アプリケーションをサポートするのに必要な関数のみを実行するよう構成されている。
本発明の別の様態では、クライアントとサーバを含むネットワークが与えられ、サーバは遅延束縛プログラム環境と外部プログラム環境とを実行できる。適切な外部環境には、遅延束縛プログラム環境、初期束縛プログラム環境、又はそれらの組合せが含まれるがそれらに限定されない。クライアントはネットワークを介してサーバと通信する。インターフェースが生成され、それにより遅延束縛プログラム及びプログラム環境と外部プログラム環境との間でデータ交換が可能であり、遅延束縛プログラムアプリケーションを外部プログラム環境に統合できる。
本発明の代替的な様態では、遅延束縛アプリケーションを外部環境に統合するシステムが記載され、ここでは情報をクライアント装置に与えるため配布(原語:distribution)サーバが使用される。更に、インターフェース機構が与えられ、このインターフェース機構により遅延束縛関数呼び出しを外部プログラム環境に統合可能となる。
本発明の例示的な実施形態は、外部プログラム環境内に存在するアプリケーションが遅延束縛言語で存在する関数を呼び出すための機構を提供する。例示目的の以下の説明は、遅延束縛関数の初期束縛外部プログラム環境への統合に関するものである。初期束縛言語、遅延束縛言語、或いはそれらの組合せを含むがそれらに限定されない、上記以外の外部環境が存在する。この例では、初期束縛環境内における遅延束縛関数の統合により、プログラマーは実行時間と符号化の容易さとの兼ね合いを決定する時期を選択できる。従って、プログラマーは、パフォーマンスが非常に重要なアプリケーション部分には初期束縛関数呼び出しを使用する一方、プログラムが困難な関数には遅延束縛関数呼び出しを使用できる。
遅延束縛関数呼び出しを初期束縛プログラミング環境に統合することで、上述した兼ね合いの釣り合い取り以外にも多くの利点がもたらされる。第1に、この統合により、初期束縛プログラミング環境が遅延束縛の表現力を利用できるようになる。第2に、この統合により、初期束縛プログラミング環境が、初期束縛関数呼び出しを1つ又は複数の遅延束縛関数呼び出しの組に結び付けることができる。第3に、大きなレガシーシステムが、遅延束縛関数呼び出しなどに関わるより近代的なプログラミング方法を組み込むことを可能とする。
或いは、遅延束縛関数を遅延束縛プログラム環境に統合すると、遅延束縛関数を初期束縛言語に統合したときには容易に認識されない多くの利点が得られる。例えば、ほとんどの遅延束縛言語は特定の問題領域内の演算に特化されている。リスプ遅延束縛言語は、例えばストリングのリストの記号処理に最も適している。一方、遅延束縛PROLOGプログラミング言語は、定理の証明や論理的推論問題に適している。遅延束縛MATLABプログラミング言語は、対照的に、数値線形代数領域内での演算に適している。上述の遅延束縛プログラム言語は、本発明で利用するのに妥当な遅延束縛プログラム環境の代表的な例に過ぎない。当業者であれば、本発明に適用できる多くの代替的な遅延束縛プログラム環境が存在することが分かるはずであり、ここに挙げた例は決定的なものではない。
遅延束縛環境内で遅延束縛関数呼び出しを統合する際に、本発明は、未処理の計算問題を解くにあたって最適な言語が使用されるように、呼び出しを多数の遅延束縛言語に結合するプログラムをユーザにより作成可能とする。
この例示的な実施形態は、MATLAB(登録商標)環境に関連して例示的な目的のみで説明する。この例示的な実施形態はMATLAB(登録商標)に基づいたアプリケーションに関連して説明するが、本発明は、National
Instruments社のLabview、LISP、又はPROLOGを含むがそれに限定されない様々なプログラミング及び開発環境で生成されたアプリケーションをデプロイ(原語:deploy)且つ配布するために応用できる。
MATLAB(登録商標)は、直感的に使用できる高性能言語及び技術計算環境である。MATLAB(登録商標)は、データ解析、視覚化、及びアプリケーション開発用の数学的ツール及びグラフィカルツールを提供する。MATLAB(登録商標)は、問題及び解が親しみある数学的表記法で表現される使い勝手がよい環境で計算とプログラミングとを統合するものである。MATLAB(登録商標)は、その基本データ要素がディメンショニングを必要としないアレーである対話形システムである。これによりユーザは、特に行列やベクトル公式を含む多くの技術計算問題を、CやFORTRANなどのスカラ非対話形言語でプログラムを書く場合に比べ非常に短い時間で解くことが可能となる。MATLAB(登録商標)は、MATLAB(登録商標)コンパイラを含むアプリケーション開発ツールを提供する。MATLAB(登録商標)Builder
for COM及びMATLAB(登録商標)Builder for ExcelはMATLAB(登録商標)コンパイラと協働してCOM及びExcel環境で実行するオブジェクトを自動的に生成する。これらアプリケーション開発ツールを用いることで、ユーザはMATLAB(登録商標)アプリケーションを作成且つ配布し、更にMATLAB(登録商標)又は他の環境を使用する同僚とMATLAB(登録商標)作業を共有できる。
図1は、本発明の例示的な実施形態を実施するのに適した電子装置100の代表的な一実施形態である。電子装置100は、パーソナルコンピュータ(PC)、ラップトップコンピュータ、ワークステーション、個人情報端末(PDA)、インターネット機器、携帯電話などの様々な異なる技術を表す。図示した実施形態では、電子装置100は、中央処理装置(CPU)102と表示装置104とを含んでいる。表示装置104は、電子装置100による視覚ディスプレーを通じたユーザへの直接的な通信を可能とする。電子装置100は、キーボード106とマウス108などの入力装置とを更に含んでいる。他の使用可能な入力装置としては、スタイラス、トラックボール、ジョイスティック、タッチパッド、タッチスクリーンなどが含まれるがそれらに限定されない。電子装置100は、主記憶装置110とデータ及び命令を記憶しておく補助記憶装置112とを含む。記憶装置110及び112は、フロッピー(登録商標)(登録商標)ドライブ、ハードドライブ、テープドライブ、光学ドライブ、読出し専用記憶素子(ROM)、ランダムアクセス記憶装置(RAM)などの技術を含むがそれらに限定されない。ブラウザのようなアプリケーション、JAVA(登録商標)(登録商標)仮想計算機、並びに他のユーティリティ及びアプリケーションが記憶装置110及び112の一方又は両方に常駐できる。電子装置100は、図示した電子装置100外部にある1つ又は複数の電子装置と通信するためのネットワークインターフェース114も含むことができる。モデムが外部の電子装置又はネットワークと接続を確立するためのネットワークインターフェース114の一形態である。CPU102には、上述の構成要素の1つ又は複数が内部的又は外部的に接続されている。上述のアプリケーション以外にも、MATLAB(登録商標)116のようなモデリングアプリケーションを電子装置100にインストールし、動作させることができる。
電子装置100は、本発明を実装するための1つの構成を表すものにすぎないことに注目されたい。しかし、通常の技能を備えた当業者であれば、本発明は、上述の装置100での実装には限定されないことは理解するはずである。ユーザ入力や表示装置を全く必要としない埋込みコードに部分的又は完全に基づいた実装を含む他の実装も利用できる。すなわち、プロセッサは、別のプロセッサ又は他の装置と直接通信できる。
図2は、本発明を実施するために使用する分散形ネットワークの例示的実施形態である。このシステムは、ネットワーク200に関連付けられたクライアント装置202を含む。このネットワークには、更にサーバ装置204、インターフェース機構210、及び記憶装置206が関連付けられている。インターフェース機構210は、遅延束縛関数呼び出しを初期束縛プログラム環境内で統合できる。
オブジェクト指向環境でのプログラミングにおいて遅延束縛関数呼び出しを用いる利点の1つは、開発者の書くコードが、操作対象となるオブジェクトの正確なオブジェクトタイプに特定的である必要がないことである。言い換えれば、遅延束縛関数呼び出しは多相性をサポートできる。
本発明のインターフェース機構210を用いると、コンパイル時に、初期束縛コンパイラが遅延束縛環境に存在する遅延束縛関数に遭遇すると、初期束縛環境のこのコンパイラは、インターフェース機構210を用いて遅延束縛環境に存在するこの遅延束縛関数の実行時実行を可能にする。インターフェース機構210は一組の遅延束縛関数の一種のプロキシとして機能し、それらのうち1つが(実行時での入力のタイプに依存するが)実行時に呼び出される。
更に、例示目的でこのインターフェース機構はネットワーク200と関連付けられているように図示されているが、当業者であればインターフェース機構210をクライアント装置202、サーバ204、又はそれらの組合せとも付加的に関連付け可能であることは容易に理解するはずである。当業者であれば、上述のネットワークの実施形態は代表的な実例に過ぎず、その機能性をネットワークにおいて多くの方法で分割してよいことは理解するはずである。例えば、複数のクライアントをこのサーバに関連付けたり、単一のクライアントを複数サーバに関連付けたり又はそれらの組合せを採用してもよい。
図3は、本発明の例示的な実施形態を実施するのに用いられる構成要素を示す。この例示的な実施形態で示した構成要素によって、遅延束縛関数を初期束縛環境300に統合可能となる。1つの代表的なケースでは、この初期束縛プログラム環境は、ワシントン州レッドモンド所在のマイクロソフト社が販売するVisual
Studio(登録商標)プログラム環境であり、この遅延束縛関数はMATLAB(登録商標)関数である。ここでMATLAB(登録商標)及びVisual
Studio(登録商標)は単に例示目的で選択したに過ぎない。これ以外の多くの初期及び遅延束縛言語を用いて本発明を実施できる。
図示した例では、遅延束縛関数がMATLAB(登録商標)関数であれば、MATLAB(登録商標)コンパイラが、初期束縛環境300内に存在する初期束縛関数である遅延束縛インターフェース関数304及び306を生成する。これらインターフェース関数304及び306の名前及び実装はコンパイル時に完全に決定される。実行時には、これらインターフェース関数304及び306は遅延束縛関数を呼び出す。具体的には、遅延束縛インターフェース関数304は、モジュラー遅延束縛実行エンジン302(後に詳述する)を介して1つ又は複数の遅延束縛関数308の組を呼び出す。同様に、遅延束縛インターフェース関数306は、モジュラー遅延束縛実行エンジン302を介して1つ又は複数の遅延束縛関数310の組を呼び出す。こうして、初期束縛環境300が、選択した関数に関して実行時まで関数束縛を延期可能な機構が提供される。
図3から分かるように、遅延束縛インターフェース関数304及び306は複数の遅延束縛関数(308及び310を参照)の実行を引き起こすこともできる。1つの遅延束縛インターフェース関数が単一の遅延束縛関数に関連付けられている場合もありうるし、複数の遅延束縛関数が単一の遅延束縛インターフェース関数に関連付けられている場合もありうる。更に、インターフェース関数に与えられる入力のタイプによっては、それぞれの呼び出しが、関連付けられた組内の異なる遅延束縛関数への呼び出しとなることもありうる。
一実施形態では、このインターフェース機構を、初期束縛アプリケーションから呼び出し可能な関数を備えたアプリケーションプログラム・インタフェース(API)を介して実現してもよい。このAPIを用いて遅延束縛環境内の関数呼び出しを開始できる。例えば、Cプログラム環境で実行しているAPIは、MATLAB(登録商標)遅延束縛環境の関数を呼び出すことができる。或いは、APIは、動作するのに2次プログラムを必要としない独立実行可能プログラムでもよい。初期束縛C言語で実行するアプリケーションの視点からは、例えば、遅延束縛MATLAB(登録商標)アプリケーションで呼び出される関数は、従来型の関数呼び出しのように見える。ここでは、この関数及び引数が理解され、出力が既存の関数と類似した様態で渡される。
インターフェース機構は例示的にAPIとして説明してあるが、APIとの使用に限定されない。別法としては、このインターフェース機構は、初期又は遅延束縛環境で実行するソフトウェア又はハードウェア構成要素でもよい。このインターフェース機構は、遅延束縛プログラミング環境の意味論を、実行時に初期束縛プログラミング環境によって容易に識別される形式で自動的に表現でき、又、上述したように、上記の意味論を表現するための適切な形式を取ることができる。
モジュラー遅延束縛実行エンジン302は、遅延束縛環境内に存在する関数を実行する機構を提供する。これらは遅延束縛関数なので、遅延束縛環境において実行時に束縛される。遅延束縛環境がMATLAB(登録商標)環境である場合は、モジュラー遅延束縛実行エンジンはMATLAB(登録商標)構成要素ランタイムエンジンでよい。MATLAB(登録商標)構成要素ランタイムエンジンは、Mファイル、MEXファイル、及び他のタイプのMATLAB実行可能内容の実行を可能とする共有ライブラリのスタンドアロンセットである。MATLAB(登録商標)構成要素ランタイムエンジンをモジュラー実行エンジンとすれば、遅延束縛環境で関数を実行する時に、MATLAB(登録商標)計算ランタイムエンジンをユーザに見える新たなウィンドウに開く必要はない。むしろ、構成要素ランタイムエンジンはユーザには見えないように背景で実行できる。
本発明は、MATLAB(登録商標)アプリケーション及びMATLAB(登録商標)構成要素ランタイムエンジンのみに限定されるものでなく、多数の代替的な遅延束縛環境及び実行エンジンを用いて実施できる。
モジュラー遅延束縛実行エンジン302の構成によって、初期束縛環境300における遅延束縛インターフェース関数呼び出し304又は306の実行に続き、モジュラー遅延束縛実行エンジン302は実行を継続することも、終了することも可能である。モジュラー遅延束縛実行エンジン302の実行を継続させることにより、遅延束縛環境における後続の関数実行が可能となり、初期束縛環境300内からの呼び出しがより迅速に行われ、モジュラー遅延束縛実行エンジン302を開始する必要がなくなる。或いは、初期束縛環境300内から制御される、遅延束縛関数を実行した後のモジュラー遅延束縛実行エンジン302の終了により、プロセッサ要求及びリソース配分が減少し、又、モジュラー遅延束縛実行エンジン302に関連付けられたリソースは、モジュラー実行エンジン300が終了されると解放される。(それが存在する)
例示的な実施形態の動作を説明するには実例が役立つはずである。この実例は、任意の入力数に10を加えるために使われる、遅延束縛プログラム環境(例えば、MATLAB(登録商標))内からのMATLAB(登録商標)関数である。この関数はplus10と名付けられ、次のとおり定義される。
Figure 2008542927
次に記述したのは、MATLAB(登録商標)コンパイラにより関数plus10を含むMファイルplus10.mから自動的に生成されたC関数ライブラリのソースファイルである。下記の第1のファイルはヘッダファイルlibplus.hである。このヘッダファイルの後にはファイルlibplus.cを記載する。関数mlfPlus10は、plus10関数が与えるMATLAB(登録商標)機能にアクセスするためCプログラムが呼び出すインターフェース関数の一例である。
次がヘッダファイルである。

#ifndef__libplus_h
#define__libplus_h 1

#include "mclmcr.h"
#ifdef__cplusplus
extern "C"{
#endif

extern bool
libplusInitializeWithHandlers(mclOutputHandlerFcn error_handler,
mclOutputHandlerFcn print_handler);
extern bool libplusInitialize(void);
extern void libplusTerminate(void);


extern void mlxPlus10(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[];


extern void mlfPlus10(int nargout, mxArray **s,
mxArray *x);

#ifdef __cplusplus
}
#endif

#endif
次がlibplus.cファイルである。

#include <stdio.h>
#include"mclmcr.h"
#include "libplus.h"
#ifdef cplusplus
extern "C" {
#endif
extern const unsigned char __MCC
COMPONENT_public_data[];
extern const char *__MCC_COMPONENT_name_data;
extern const char *__MCC_COMPONENT_root_data;
extern const unsigned char
__MCC_COMPONENT_session_data[];
extern const char *__MCC_COMPONENT_matlabpath_data[];
extern const int __MCC_COMPONENT_matlabpath_data_count;
extern const char
*__MCC_COMPONENT_mcr_runtime_options[];
extern const int
__MCC_COMPONENT_mcr_runtime_option_count;
extern const char
*__MCC_COMPONENT_mcr_application_options[];
extern const int
__MCC_COMPONENT_mcr_application_option_count;
#ifdef __cplusplus
}
#endif

static HMCRINSTANCE _mcr_inst = NULL;

static int mclDefaultErrorHandler(const char *s)
{
return fprintf(stderr, s);
}
static int mclDefaultPrintHandler(const char *s)
{
return fprintf(stdout, s);
}

bool libpluslnitializeWithHandlers(
mclOutputHandlerFcn error_handler,
mclOutputHandlerFcn print_handler
)
{
return (_mcr_inst == NULL ?

mcllnitializeComponentlnstance(&_mcr_inst,
__MCC_COMPONENT_public_data,
__MCC_COMPONENT_name_data,
__MCC_COMPONENT_root_data,
__MCC_COMPONENT_session_data,
__MCC_COMPONENT_matlabpath_data,
__MCC_COMPONENT_matlabpath_data_count,
__MCC_COMPONENT_mcr_runtime_options,
__MCC_COMPONENT_mcr_runtime_option_count,
true, NoObjectType, LibTarget,
NULL, error_handler, print_handler)
:
true);
}
bool libpluslnitialize(void)
{
return
libpluslnitializeWithHandlers(mclDefaultErrorHandler,
mclDefaultPrintHandler);
}
void libplusTerminate(void)
{
if (_mcr_inst != NULL)

mclTerminatelnstance(&_mcr_inst);
}

void mlxPlus10(int nlhs, mxArray *plhs[], int nrhs,
mxArray*prhs[])
{
mclFeval(_mcr_inst, "plus10", nlhs, plhs,
nrhs, prhs);
}
void mlfPlus10(int nargout, mxArray **s, mxArray *x)
{
mclMlfFeval(_mcr_inst,
"plusiO", nargout, 1, 1, s, x);
}
Cのような初期束縛プログラミング環境内からの上述のインターフェース関数mlxPlus10の呼び出しは次のコードに例示した。

#include <stdio.h>
#include "matrix. h"
#include "libplus.h"

void usage(char *name)
{
printf("Usage: %s integer\n", name);
printf("\tAdds 10 to the given integer\n");
exit(-1);
}

int main(int ac, char *av[])
{
mxArray *input = mxCreateDoubleScalar(atoi(av[1]));
mxArray *output = NULL;
double result;

if (ac != 2) usage(av[0]);

mcllnitializeApplication(NULL, 0);
libpluslnitialize();
mlxPlus10(1, &output, 1, &input);
libplusTerminate();

result = mxGetScalar(output);

printf("%s + 10 = %.0f\n", av[1], result);
mclTerminateApplication();
return 0;
}
上述のコードはCプログラミング言語で使用するために書かれたものだが、当業者なら、本発明の実施に使用できる多くの代替的な初期束縛環境が存在することは容易に理解するはずである。
上述の遅延束縛関数を呼び出すための方法から明らかなように、このプロセスは簡素化されていると同時に、ユーザ対話を最小限にしつつ遅延束縛関数を初期束縛環境に統合する適切な機構を提供する。元々の遅延束縛関数(plus10.m)の呼び出しは、初期束縛環境内からの他の通常の関数呼び出しと同一に見える。更に、この初期束縛環境は初期束縛関数を通常どおり処理し続けるので、関数の実行速度が向上する。
図4は、例示的な実施形態の構成要素間の相互作用をより詳細に示す。先ず初めに、ユーザは、遅延束縛環境400を用いて遅延束縛アプリケーション又は構成要素を開発する。図4では、このアプリケーション又は構成要素は、遅延束縛関数404A及び404Bを備えたユーザが作成した遅延束縛関数のスイート402として表されている。例示目的で、遅延束縛環境400はMATLAB(登録商標)であり、遅延束縛関数はMATLAB(登録商標)関数であると仮定する。次に、ユーザはMATLAB(登録商標)コンパイラ406を呼び出して、自分のアプリケーション又は構成要素をデプロイ可能な形式で生成させる。MATLAB(登録商標)コンパイラ406は入力ファイルを調べて、遅延束縛関数404A及び404Bを呼び出すために生成されることになる初期束縛インターフェースファイルに適した形式を特定する。更に、初期束縛環境の選択が、生成される初期束縛インターフェースの形式にも付加的に影響を与える。MATLAB(登録商標)コンパイラは入力ファイルを調べて、遅延束縛環境400における他の遅延束縛関数への依存性を特定する。次に、MATLAB(登録商標)コンパイラは、必要な遅延束縛関数を全て構成要素技術ファイル(CTF)アーカイブ410にパッケージ化し、又適切な初期束縛インターフェース関数408を生成する。CTFアーカイブは、ある構成要素に関連付けられている全ての実行可能な内容(すなわち、Mファイル又はMexファイル)を入れるためのものである。プログラム実行に必要な全情報の「スナップショット」が生成されるように、CTFアーカイブはアプリケーションが必要とする任意のデータファイルも含む。CTFアーカイブの内容は暗号化されている。
図5は、他の遅延束縛関数への依存性を特定するために実行されるステップを示したフローチャートである。一実施形態では、図5に示したステップは、関数呼び出しツリーの推移閉包を計算するために利用できる。それぞれが1つ又は複数の遅延束縛関数を含む一組の入力ファイルをユーザが与えることでこのプロセスは開始される(ステップ500)。MATLAB(登録商標)コンパイラは、ステップ500で一組の入力ファイルで与えられた遅延束縛関数それぞれを調べて、これら遅延束縛関数によってどの付加的な関数が呼び出されるかを特定する(ステップ502)。コンパイラは、コンパイル時に生成される関数呼び出しツリーを調べる。ステップ502で識別された各関数は、依存性データベースに明示的に記録された依存性を備えていることがある。このデータベースは、例えば、ある関数が適切に動作するためには1つ又は複数の付加的関数を必要とすることを示すことがある。依存性解析器はこれらの関数を必要な関数のリストに加える(ステップ504)。ステップ502及び504はこのリストに加える関数が無くなるまで繰り返される(ステップ506)。ステップ508では、幾つかの関数又は複数の関数グループがこのリストから明示的に排除される。こうして関数を排除するには多くの理由が考えられる。例えば、関数の排除は予め定めた事業上の理由に基づくことがあり、それには、特定のファイル又は関数がセキュリティ上の懸念及び知的財産保護のため最終的にデプロイしたアプリケーションで配布されないことなどがある。更に、不要と分かっている関数を偶然含めてしまわないように関数を排除することもある。依存性特定機構によっては内在する不正確さが原因となり、時としてこれら関数が必要な関数リスト(ステップ504)に不用意に含まれることがある。最後に、「遅延束縛モジュラー実行エンジン」は、当該遅延束縛モジュラー実行エンジンに関連付けられた、固定した基本の組の遅延束縛関数を典型的に含む。従って、この基本組の関数は実行エンジンがインストールされた全ての場所で利用可能であるため、これらの関数をデプロイしたアプリケーションに含める必要はない。この排除機構を用いれば、デプロイした最終アプリケーションはそのサイズがかなり小さくなり、ユーザによる取扱いがより容易となりうる。ユーザは、それぞれ依存性及び排除を明言するステップ504及び508で入力を与えることができる。更に、必要な関数のリストの管理は、部分的にせよ全体的にせよユーザの操作にまかせてもよい。
依存性解析器の出力が、アプリケーションを構成する遅延束縛関数の最終リストである。これら関数は入力データやスイッチなどのユーザ定義データと共にコンパイラにより使用され、どのインターフェース関数を生成すべきかと、これら生成された関数の形式とを決定する。
生成された初期束縛インターフェース関数408(図4)はオプションのユーザ作成初期束縛言語コード416及びデータ型作成API418と組み合わされ、初期束縛アプリケーション又は構成要素414を作成する。
実行時に、最終ユーザアプリケーション又は構成要素414はデータ型作成API418を呼び出して、外部環境内に含まれるデータから遅延束縛環境に互換性があるデータを作成する。本実施形態では、外部環境は初期束縛プログラミング環境である。次に、データ型作成API418は、この新たに作成したデータを最終ユーザアプリケーション又は構成要素414に識別する。当業者であれば理解するように、このデータ識別は「ハンドル」又は「プロキシ」を用いて行うことができる。
次に、最終ユーザアプリケーション又は構成要素414が初期束縛インターフェース関数408を呼び出し、するとこのインターフェース関数408がモジュラー遅延束縛実行エンジン420を呼び出す。初期束縛インターフェース関数408の名前に加え、外部環境データから作成された互換性データが次にモジュラー実行エンジン420に渡されて、モジュラー実行実行エンジン420はこのデータと関数名を組み合わせて(すなわち遅延束縛)CTFアーカイブ410に含まれた組から適切な関数を選択できる。すると、モジュラー遅延束縛実行エンジン420の結果は最終ユーザアプリケーション又は構成要素414に返される。
本発明の例示的な実施形態は、遅延束縛関数を初期環境から呼び出し可能とするデータ型を提供する。これらデータ型により、初期言語は遅延束縛言語に存在するデータ型を表すことができる。これらデータ型は、ユーザに与えられるインターフェースライブラリの一部でもよい。
更に、暗号化/復号スキーマをコンパイラ406の各呼び出しに関連付けることができる。一実施形態では、コンパイラが呼び出された後、一意の暗号化/復号キーが生成される。このキーは、米国政府が使用している先進暗号化規格(AES)のような利用可能な公開キー暗号化手段を用いて保護することができる。当業者であれば、本発明で使用するために容易に利用できる多数の代替的な暗号化/復号手段が存在することは理解するはずである。実行時に、一意のキーは復号され、CTFアーカイブで必要なファイルを復号するのに用いられる。一実施形態では、ファイルが復号されるのはそうしたファイルが必要となるときのみであり、それにより復号情報がディスクに記憶されないようにする。
こうした暗号化/復号スキームを使用することによって、アプリケーションをビルドする人物が開発したコードの保護が可能となる。CTFアーカイブで使用されるファイルは暗号化されているので、ファイルに含まれた内容を保護しつつファイルを共有又は配布可能である。例えば企業のトレードシークレットを含んだファイルは、このトレードシークレットがユーザに明かされないように、暗号化した様態で配布される。更に、アプリケーションで使用されるファイルは暗号化されているので、エンドユーザはプログラム実行に影響を与える様態でファイルを容易に変更できない。更に、ファイルはコンパイラが生成した一意のキーに基づいて暗号化且つ復号されるので、1つのアプリケーションで使用したファイルを別のアプリケーションで使用できない。最後に、生成された各アプリケーションを分析してどのコンパイラ・ライセンスキーがそのアプリケーションを生成したかを特定できるので、上述の暗号化/復号機構を使用して海賊版ソフトウェアを追跡できる。従って、コンパイラ・ライセンスキーが分かれば、そのライセンスキーを被許諾者のリストと相互参照してその海賊版ソフトウェアのソースを特定できる。
図6は、遅延束縛関数呼び出しを遅延束縛プログラム環境600に統合するのに必要な構成要素の例示的な実施形態である。1つの事例では、遅延束縛プログラム環境はLISPプログラム環境であり、遅延束縛関数はMATLAB(登録商標)関数である。こうした遅延束縛関数及び言語は例示目的のみで選ばれたもので、当業者であれば多数の代替的な遅延束縛関数及び言語が存在することは容易に理解するはずである。
図示した例では、遅延束縛関数がMATLAB(登録商標)関数であれば、MATLAB(登録商標)コンパイラが、遅延束縛環境600内の遅延束縛関数である遅延束縛インターフェース関数604及び606を生成する。実行時には、これらインターフェース関数604及び606はモジュラー遅延束縛実行エンジン602を使って遅延束縛関数を呼び出すのに用いられる。図6に更に示したように、遅延束縛インターフェース関数604及び606は複数の遅延束縛関数(608及び610を参照)の実行を引き起こすこともできる。1つの遅延束縛インターフェース関数が単一の遅延束縛関数に関連付けられている場合もありうるし、複数の遅延束縛関数が単一の遅延束縛インターフェース関数に関連付けられている場合もありうる。更に、インターフェース関数に与えられる1つ又は複数の入力タイプに基づいて、それぞれの呼び出しが、関連付けられた関数組内の異なる遅延束縛関数への呼び出しとなることもありうる。
一実施形態では、このインターフェース機構を、遅延束縛アプリケーションから呼び出し可能な関数を備えたアプリケーションプログラム・インタフェース(API)とすることができる。或いは、APIは、動作するのに2次プログラムを必要としない独立実行可能プログラムでもよい。更に、インターフェース関数はソフトウェア又はハードウェア構成要素でもよい。
モジュラー遅延束縛実行エンジン602は、遅延束縛環境内に存在する関数を実行時に実行する機構を提供する。MATLAB(登録商標)環境では、モジュラー遅延束縛実行エンジンは、Mファイル、MEXファイル、及び他のMATLAB実行可能内容を実行可能なMATLAB(登録商標)構成要素ランタイムエンジンでよい。本発明は、MATLAB(登録商標)アプリケーション及びMATLAB(登録商標)構成要素ランタイムエンジンのみに限定されるものでなく、多数の代替的な遅延束縛環境及び実行エンジンを用いて実施できる。
モジュラー遅延束縛実行エンジン602の構成によって、遅延束縛環境600における遅延束縛インターフェース関数呼び出し604又は606の実行に続き、モジュラー遅延束縛実行エンジン602はその実行を継続することで遅延束縛環境での後続の関数実行を容易に可能としてもよいし、終了することも可能である。
例を用いて本発明を説明してきたが、説明した実施形態の本発明の精神から逸脱しない範囲での修正及び変更は、通常の技能を備えた当業者には自明であろう。上述の実施形態の諸局面及び特徴は、互いに組み合わせて使用してもよい。上述の実施形態は単に例示的なものであり、いかなる意味でも限定的に解釈されるべきではない。本発明の範囲は、上述の記載からでなく添付の特許請求の範囲から判断すべきであり、特許請求の範囲に入る全ての変更及び等価物は、そこに包含するよう意図されている。
本発明の例示的な実施形態を実施するのに適した電子装置のブロック図である。 本発明の例示的な実施形態を実施するのに適した代表的なクライアント・サーバ環境であって、遅延束縛関数を外部プログラミング環境に組み込み可能なクライアント・サーバ環境を示す。 本発明の例示的な実施形態を実施するのに用いられる構成要素を示す。 例示的な実施形態の構成要素間の相互作用をより詳細に示す図式例である。 他の遅延束縛関数への依存性を特定するために実行されるステップを示したフローチャートである。 遅延束縛関数呼び出しを遅延束縛プログラム環境に統合する際に使用される必要な構成要素の例示的な実施形態である。

Claims (51)

  1. 電子装置において、遅延束縛関数を外部プログラム環境に統合する方法であって、
    外部プログラム環境で実行される遅延束縛関数呼び出しを遅延束縛環境内で与える段階と、
    前記遅延束縛プログラムを自動的に調べて、前記与えられた遅延束縛関数呼び出しが必要とする一組の従属遅延束縛関数を特定する段階と、
    前記一組の遅延束縛関数と前記外部プログラム環境との間のインターフェースを自動的に生成する段階とを含む、方法。
  2. 前記外部プログラム環境は初期束縛プログラミング環境である、請求項1に記載の方法。
  3. 前記インターフェースを用いて前記初期束縛外部プログラミング環境内から前記遅延束縛関数呼び出しを実行する段階を更に含む、請求項2に記載の方法。
  4. 前記外部プログラム環境は遅延束縛プログラミング環境である、請求項1に記載の方法。
  5. 前記インターフェースを用いて前記遅延束縛外部プログラミング環境内から前記遅延束縛関数呼び出しを実行する段階を更に含む、請求項4に記載の方法。
  6. 前記電子装置が遅延束縛実行可能エンジンを更に含み、該遅延束縛実行エンジンが前記遅延束縛関数を実行する、請求項1に記載の方法。
  7. 前記遅延束縛関数の内容が暗号化されている、請求項6に記載の方法。
  8. 前記遅延束縛関数の内容が、公開キー暗号化手段を用いて暗号化されている、請求項7に記載の方法。
  9. 前記公開キー暗号化手段は、先進暗号化規格(AES)公開キー暗号化手段である、請求項7に記載の方法。
  10. 前記遅延束縛実行エンジンが、前記遅延束縛関数の内容を実行するため該内容を復号する、請求項6に記載の方法。
  11. 前記遅延束縛関数の内容は、実行時に必要なときのみに復号される、請求項10に記載の方法。
  12. 暗号化/復号スキーマが複数のユーザ間での安全なファイルの共有を可能とする、請求項6に記載の方法。
  13. 暗号化/復号スキーマが、遅延束縛関数の実行で使用されるコンパイラにより生成される一意のキーを用いて、請求項6に記載の方法。
  14. 前記暗号化/復号スキーマは、遅延束縛関数の実行で使用されるコンパイラにより生成される前記一意のキーを用いて海賊版ソフトウェアを追跡可能とする、請求項13に記載の方法。
  15. 前記遅延束縛環境における前記遅延束縛関数呼び出しの実行に続いて、前記遅延束縛実行エンジンを終了する段階を更に含む、請求項6に記載の方法。
  16. 前記初期束縛環境はCプログラミング環境である、請求項2に記載の方法。
  17. 前記初期束縛環境はC++プログラミング環境である、請求項2に記載の方法。
  18. 前記初期束縛環境はFORTRANプログラミング環境である、請求項2に記載の方法。
  19. 前記初期束縛環境はLISPプログラミング環境である、請求項4に記載の方法。
  20. 前記初期束縛環境はPrologプログラミング環境である、請求項4に記載の方法。
  21. 前記初期束縛環境はMATLABプログラミング環境である、請求項4に記載の方法。
  22. 前記インターフェースが、前記外部プログラム環境に利用可能なアプリケーションプログラム・インタフェース(API)である、請求項1に記載の方法。
  23. 前記APIは、前記外部プログラム環境内から前記遅延束縛環境の関数を呼び出す際に利用される、請求項22に記載の方法。
  24. 前記インターフェースが、外部プログラム環境内から実行可能なソフトウェア構成要素である、請求項1に記載の方法。
  25. 前記インターフェースが、外部プログラム環境内から実行可能なソフトウェア・アプリケーションである、請求項1に記載の方法。
  26. 実行時に前記外部プログラム環境内から遅延束縛関数呼び出しを実行する段階を更に含む、請求項1に記載の方法。
  27. 遅延束縛言語を外部プログラム環境に統合するためのシステムであって、
    外部プログラム環境と、
    遅延束縛プログラム環境であって、該遅延束縛環境内の関数を実行可能な遅延束縛プログラム環境と、
    インターフェースとを含み、
    前記インターフェース機構は、前記遅延束縛プログラム環境の意味論を前記外部プログラム環境と互換性がある形式で自動的に表現する、システム。
  28. 前記外部プログラム環境は初期束縛プログラミング環境である、請求項27に記載のシステム。
  29. 前記外部プログラム環境は遅延束縛プログラミング環境である、請求項27に記載のシステム。
  30. 前記遅延束縛プログラミング環境はモジュラー実行エンジンを含む、請求項27に記載のシステム。
  31. 前記遅延束縛実行エンジンが、前記外部プログラム環境内からの関数呼び出しを前記遅延束縛プログラム環境内で実行する、請求項30に記載のシステム。
  32. 前記遅延束縛環境における前記遅延束縛関数呼び出しの実行に続いて、前記遅延束縛実行エンジンが終了される、請求項31に記載のシステム。
  33. 前記初期束縛プログラム環境はCプログラミング環境である、請求項28に記載のシステム。
  34. 前記初期束縛環境はC++プログラミング環境である、請求項28に記載のシステム。
  35. 前記初期束縛環境はFORTRANプログラミング環境である、請求項28に記載のシステム。
  36. 前記初期束縛環境はVisual Basicプログラミング環境である、請求項28に記載のシステム。
  37. 前記初期束縛環境はLISPプログラミング環境である、請求項29に記載のシステム。
  38. 前記初期束縛環境はPrologプログラミング環境である、請求項29に記載のシステム。
  39. 前記初期束縛環境はMATLABプログラミング環境である、請求項29に記載のシステム。
  40. 前記インターフェース機構が、前記初期束縛プログラム環境で実行するアプリケーションプログラム・インタフェース(API)である、請求項27に記載のシステム。
  41. 前記APIは、前記外部プログラム環境内から前記遅延束縛環境の関数を呼び出す際に利用される、請求項40に記載のシステム。
  42. 前記インターフェースが外部プログラム環境内から実行可能なソフトウェア構成要素である、請求項27に記載のシステム。
  43. 前記インターフェースが、実行時に前記遅延束縛プログラム環境の意味論を前記外部プログラム環境で表現する、請求項27に記載のシステム。
  44. 実行可能な遅延束縛内容を外部プログラム環境で使用するために再配布可能なアプリケーションにパッケージ化する方法であって、
    前記遅延束縛内容を調べる段階と、
    前記遅延束縛アプリケーションをサポートするのに必要な関数のみを実行する遅延束縛モジュラー実行エンジンを設ける段階と、
    前記モジュラー実行エンジンを、前記遅延束縛アプリケーションをサポートするのに必要な関数のみを実行するよう構成する段階とを含む、方法。
  45. 前記遅延束縛内容は、再配布可能な形式にパッケージ化される前に暗号化される、請求項44に記載の方法。
  46. 前記遅延束縛内容は、再配布可能な形式にパッケージ化された後に復号される、請求項45に記載の方法。
  47. 前記モジュラー実行エンジンにより実行される前記実行関数の結果を前記外部プログラム環境に引き渡す段階を更に含む、請求項44に記載の方法。
  48. 前記モジュラー実行エンジンにより実行される前記関数の前記結果は、外部プログラム環境で使用される遅延束縛デバッギング命令である、請求項47に記載の方法。
  49. 前記モジュラー実行エンジンにより実行された前記関数の出力を、前記外部プログラム環境で設計されたユーザインターフェースを用いて図示的に表示する段階を更に含む、請求項47に記載の方法。
  50. 前記モジュラー実行エンジンにより実行された前記関数の出力を、前記外部プログラム環境で設計されたユーザインターフェースを用いてテキスト的に表示する段階を更に含む、請求項47に記載の方法。
  51. 関数呼び出しツリーの推移閉包を計算するための方法であって、
    1つ又は複数の遅延束縛関数を含む一組の入力ファイルを与える段階と、
    関数呼び出し依存性が存在するかどうかを特定するため前記入力ファイルそれぞれを調べる段階と、
    依存性データベースから付加的な関数呼び出し依存性を自動的に追加する段階と、
    前記関数呼び出しツリーから関数の定義済み部分集合を自動的に除去する段階とを含み、
    前記関数の定義済み部分集合は別のデータベースに記憶される、方法。
JP2008514937A 2005-06-02 2006-06-02 外部プログラム環境からの遅延束縛関数の呼び出し Active JP5412108B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/144,411 2005-06-02
US11/144,411 US8046777B2 (en) 2005-06-02 2005-06-02 Calling of late bound functions from an external program environment
PCT/US2006/021591 WO2006130871A2 (en) 2005-06-02 2006-06-02 Calling of late bound functions from an external program environment

Publications (3)

Publication Number Publication Date
JP2008542927A true JP2008542927A (ja) 2008-11-27
JP2008542927A5 JP2008542927A5 (ja) 2012-09-27
JP5412108B2 JP5412108B2 (ja) 2014-02-12

Family

ID=37009192

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008514937A Active JP5412108B2 (ja) 2005-06-02 2006-06-02 外部プログラム環境からの遅延束縛関数の呼び出し

Country Status (7)

Country Link
US (3) US8046777B2 (ja)
EP (3) EP1889155B1 (ja)
JP (1) JP5412108B2 (ja)
CN (2) CN102063315B (ja)
AT (1) ATE476704T1 (ja)
DE (1) DE602006015949D1 (ja)
WO (1) WO2006130871A2 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8838974B2 (en) * 2005-07-15 2014-09-16 The Mathworks, Inc. System and method for verifying the integrity of read-only components in deployed mixed-mode applications
US8255883B2 (en) 2007-04-20 2012-08-28 Microsoft Corporation Translating late bound LINQ expressions into database queries
WO2008130769A2 (en) * 2007-04-20 2008-10-30 Microsoft Corporation Runtime translation from late-bound to early-bound expression
CN102043663A (zh) * 2009-10-26 2011-05-04 鸿富锦精密工业(深圳)有限公司 程序调用系统及其程序调用方法
US8589867B2 (en) 2010-06-18 2013-11-19 Microsoft Corporation Compiler-generated invocation stubs for data parallel programming model
US20110314256A1 (en) * 2010-06-18 2011-12-22 Microsoft Corporation Data Parallel Programming Model
US8769486B2 (en) * 2011-01-06 2014-07-01 The Mathworks, Inc. Dynamically generating statically-typed proxies for dynamically-typed functions
US9135027B1 (en) 2011-10-26 2015-09-15 The Mathworks, Inc. Code generation and execution for dynamic programming languages
US8943474B1 (en) * 2011-10-26 2015-01-27 The Mathworks, Inc. Code generation and execution for dynamic programming languages
US9032380B1 (en) * 2011-12-05 2015-05-12 The Mathworks, Inc. Identifying function calls and object method calls
US9183120B1 (en) 2013-06-04 2015-11-10 The Mathworks, Inc. Functional dependency analysis
US8832321B1 (en) * 2014-02-12 2014-09-09 tw telecom holdings, inc. External injection of cloud based network functions into network services
US9740505B2 (en) * 2014-07-15 2017-08-22 The Mathworks, Inc. Accurate static dependency analysis via execution-context type prediction
CN107402797A (zh) * 2016-05-19 2017-11-28 中兴通讯股份有限公司 一种软件编译方法及装置
CN106371838B (zh) * 2016-08-31 2019-10-18 福建联迪商用设备有限公司 一种维护软件包依赖关系的方法及系统
CN106681714A (zh) * 2016-12-07 2017-05-17 乐视控股(北京)有限公司 程序环境设置方法、装置及电子设备
CN107329843B (zh) * 2017-06-30 2021-06-01 百度在线网络技术(北京)有限公司 应用程序语音控制方法、装置、设备以及存储介质
US10929160B1 (en) 2018-12-12 2021-02-23 The Mathworks, Inc. Composite-trace just-in-time compilation
CN110795070B (zh) * 2019-05-24 2023-07-25 杭州海兴电力科技股份有限公司 虚拟关口表平台及构建方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01306923A (ja) * 1988-06-06 1989-12-11 Nec Corp 異種言語間連絡方式
JPH0546402A (ja) * 1991-08-12 1993-02-26 Nec Corp プログラム間相互呼出し方式
JP2003076558A (ja) * 2001-09-04 2003-03-14 Hitachi Software Eng Co Ltd プログラム実行制御方法及びプログラム実行制御プログラム

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1991008534A1 (de) * 1989-11-29 1991-06-13 Siemens Aktiengesellschaft Verfahren zur dynamischen bindung von definierbaren programmelementen eines interaktiven datenverarbeitungssystems
JPH06103075A (ja) * 1992-07-06 1994-04-15 Internatl Business Mach Corp <Ibm> オブジェクト指向適用業務
JPH06103075B2 (ja) 1992-10-30 1994-12-14 東北電力株式会社 燃料管付き小径管の取替方法
US6128660A (en) * 1996-03-21 2000-10-03 Hearme Network match maker
US6393497B1 (en) * 1998-03-20 2002-05-21 Sun Microsystems, Inc. Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system
US5812855A (en) * 1996-06-03 1998-09-22 Silicon Graphics, Inc. System and method for constaint propagation cloning for unknown edges in IPA
US6041179A (en) 1996-10-03 2000-03-21 International Business Machines Corporation Object oriented dispatch optimization
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
US6366958B1 (en) * 1996-10-21 2002-04-02 International Business Machines Corporation NETBIOS protocol support for a DCE RPC mechanism
US6401099B1 (en) * 1996-12-06 2002-06-04 Microsoft Corporation Asynchronous binding of named objects
US7324972B1 (en) 1997-03-07 2008-01-29 Clickshare Service Corporation Managing transactions on a network: four or more parties
US6026238A (en) 1997-08-18 2000-02-15 Microsoft Corporatrion Interface conversion modules based upon generalized templates for multiple platform computer systems
US6799320B1 (en) * 1998-12-16 2004-09-28 Microsoft Corporation Providing binding options for component interfaces
US6247175B1 (en) 1998-12-22 2001-06-12 Nortel Networks Limited Method and apparatus for identifying and removing unused software procedures
US6415434B1 (en) * 1999-06-18 2002-07-02 Hewlett-Packard Company Apparatus and method for a runtime method overloading resolver
US6442752B1 (en) * 1999-08-26 2002-08-27 Unisys Corporation Method, apparatus, and computer program product for replacing a dynamic link library (dll) of a first computing environment with a dll of a second computing environment that can be invoked from the first computing environment in a transparent manner
EP1117033A1 (en) * 2000-01-14 2001-07-18 Sun Microsystems, Inc. Dynamic dispatch function
US7100153B1 (en) 2000-07-06 2006-08-29 Microsoft Corporation Compiler generation of a late binding interface implementation
US20020078255A1 (en) 2000-10-17 2002-06-20 Shankar Narayan Pluggable instantiable distributed objects
US7000213B2 (en) 2001-01-26 2006-02-14 Northwestern University Method and apparatus for automatically generating hardware from algorithms described in MATLAB
US7171311B2 (en) * 2001-06-18 2007-01-30 Rosetta Inpharmatics Llc Methods of assigning treatment to breast cancer patients
US6901595B2 (en) * 2001-09-29 2005-05-31 Siebel Systems, Inc. Method, apparatus, and system for implementing a framework to support a web-based application
US7000238B2 (en) * 2001-10-10 2006-02-14 Borland Software Corporation Development system providing extensible remoting architecture
US7373406B2 (en) * 2001-12-12 2008-05-13 Valve Corporation Method and system for effectively communicating file properties and directory structures in a distributed file system
US7370075B2 (en) * 2002-04-25 2008-05-06 Digital Evolution Method and apparatus for managing web services within a computer network system
US8447963B2 (en) * 2002-06-12 2013-05-21 Bladelogic Inc. Method and system for simplifying distributed server management
CN1280718C (zh) * 2002-11-05 2006-10-18 中兴通讯股份有限公司 一种图形显示自动转换方法
US7308684B2 (en) * 2003-06-16 2007-12-11 Microsoft Corporation Classifying software and reformulating resources according to classifications

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01306923A (ja) * 1988-06-06 1989-12-11 Nec Corp 異種言語間連絡方式
JPH0546402A (ja) * 1991-08-12 1993-02-26 Nec Corp プログラム間相互呼出し方式
JP2003076558A (ja) * 2001-09-04 2003-03-14 Hitachi Software Eng Co Ltd プログラム実行制御方法及びプログラム実行制御プログラム

Non-Patent Citations (10)

* Cited by examiner, † Cited by third party
Title
CSNC200902240019; マグローヒル科学技術用語大辞典 第3版, 19971008, 第826頁, 日刊工業新聞社 *
CSND200301994012; 青柳龍也: '「理論で学ぶJavaプログラミング 第10回 継承/メソッドの再定義」' Java WORLD 2002年5月号(第6巻,第5号), 20020501, 第140〜152頁, (株)IDGジャパン *
CSND200302296008; 赤間世紀: '「第7章 データベース技術の最新動向」' Interface 2002年10月号(第28巻,第10号), 20021001, 第108〜119頁, CQ出版株式会社 *
CSNG200200122034; 高野了成(外3名): '「メディア変換機構を提供する分散永続オブジェクトシステム」' マルチメディア通信と分散処理ワークショップ論文集(情報処理学会シンポジウムシリーズ Vol.2000, No.15) , 20001206, 第241〜246頁, 社団法人情報処理学会 *
JPN6012010271; 赤間世紀: '「第7章 データベース技術の最新動向」' Interface 2002年10月号(第28巻,第10号), 20021001, 第108〜119頁, CQ出版株式会社 *
JPN6012010273; マグローヒル科学技術用語大辞典 第3版, 19971008, 第826頁, 日刊工業新聞社 *
JPN6012010274; B.J.コックス(外1名)著,松本正雄訳: 「オブジェクト指向のプログラミング 改訂第2版 ソフトウエア再利用の方法」 初版, 20041222, 第17頁, 株式会社新紀元社 *
JPN6013049912; 高野了成(外3名): '「メディア変換機構を提供する分散永続オブジェクトシステム」' マルチメディア通信と分散処理ワークショップ論文集(情報処理学会シンポジウムシリーズ Vol.2000, No.15) , 20001206, 第241〜246頁, 社団法人情報処理学会 *
JPN6013049913; 青柳龍也: '「理論で学ぶJavaプログラミング 第10回 継承/メソッドの再定義」' Java WORLD 2002年5月号(第6巻,第5号), 20020501, 第140〜152頁, (株)IDGジャパン *
JPN6013049914; A・S・タネンバウム著,水野忠則(外4名)訳: 「モダンオペレーティングシステム 原著第2版」 第2版, 20041210, 第888〜889頁, 株式会社ピアソン・エデュケーション *

Also Published As

Publication number Publication date
CN102063315A (zh) 2011-05-18
CN102063315B (zh) 2015-03-11
US8881178B2 (en) 2014-11-04
WO2006130871A3 (en) 2007-02-22
WO2006130871A2 (en) 2006-12-07
CN101233485B (zh) 2010-12-08
EP2323031A2 (en) 2011-05-18
EP1889155A2 (en) 2008-02-20
US8046777B2 (en) 2011-10-25
EP2312439A3 (en) 2013-11-13
DE602006015949D1 (de) 2010-09-16
EP2323031A3 (en) 2016-01-20
ATE476704T1 (de) 2010-08-15
US20080052730A1 (en) 2008-02-28
EP1889155B1 (en) 2010-08-04
US7802268B2 (en) 2010-09-21
EP2312439A2 (en) 2011-04-20
CN101233485A (zh) 2008-07-30
US20060277526A1 (en) 2006-12-07
US20120036519A1 (en) 2012-02-09
JP5412108B2 (ja) 2014-02-12

Similar Documents

Publication Publication Date Title
JP5412108B2 (ja) 外部プログラム環境からの遅延束縛関数の呼び出し
Cavé et al. Habanero-Java: the new adventures of old X10
Albert et al. COSTA: Design and implementation of a cost and termination analyzer for java bytecode
Hartel et al. Formalizing the safety of Java, the Java virtual machine, and Java card
US8869127B2 (en) Refactoring programs for flexible locking
Pratikakis et al. Transparent proxies for java futures
Fourtounis et al. Static analysis of java dynamic proxies
Madsen et al. Timemory: modular performance analysis for HPC
US11403074B1 (en) Systems and methods for generating interfaces for callback functions in object-oriented classes
Van Ginkel et al. Automatically generating secure wrappers for SGX enclaves from separation logic specifications
Lin et al. Solsee: a source-level symbolic execution engine for solidity
US7428737B1 (en) Method for using header files to call a shared library from a dynamic environment
Factor et al. Instrumentation of standard libraries in object-oriented languages: the twin class hierarchy approach
Choi Aspect-oriented programming with Enterprise JavaBeans
Binder et al. Polymorphic bytecode instrumentation
Forax et al. Reflection-based implementation of Java extensions: the double-dispatch use-case
Chang et al. Measuring dynamic memory invocations in object-oriented programs
Harrison et al. CAT: A toolkit for assembling concerns
McGachey et al. Class Transformations for Transparent Distribution of Java Applications.
Forax et al. A reflective implementation of Java multi-methods
Augusto et al. Honey Potion: an eBPF Backend for Elixir
McGachey et al. Classifying Java class transformations for pervasive virtualized access
Temple Lang Working with meta-data from C/C++ code in R: the RGCCTranslationUnit package
Fomitechev Enterprise Application Development with Visual C++ 2005
Bannet Soft boundaries for statically enforceable protection domains

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090114

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120306

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120605

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120614

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120705

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120712

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120802

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20120802

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130129

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130402

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130409

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130528

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130604

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130626

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131015

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131111

R150 Certificate of patent or registration of utility model

Ref document number: 5412108

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250