JP5905577B2 - オペレーティングシステムのネイティブプログラミングインターフェイスの他のプログラミング言語の中への投射 - Google Patents

オペレーティングシステムのネイティブプログラミングインターフェイスの他のプログラミング言語の中への投射 Download PDF

Info

Publication number
JP5905577B2
JP5905577B2 JP2014528374A JP2014528374A JP5905577B2 JP 5905577 B2 JP5905577 B2 JP 5905577B2 JP 2014528374 A JP2014528374 A JP 2014528374A JP 2014528374 A JP2014528374 A JP 2014528374A JP 5905577 B2 JP5905577 B2 JP 5905577B2
Authority
JP
Japan
Prior art keywords
operating system
program
projection
metadata
projection element
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2014528374A
Other languages
English (en)
Other versions
JP2014525623A (ja
JP2014525623A5 (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 JP2014525623A publication Critical patent/JP2014525623A/ja
Publication of JP2014525623A5 publication Critical patent/JP2014525623A5/ja
Application granted granted Critical
Publication of JP5905577B2 publication Critical patent/JP5905577B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Landscapes

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

Description

本発明は、ネイティブシステムAPIを他のプログラミング言語の中へ投射することに関する。
オペレーティングシステムは、典型的にいくつかのプログラミングインターフェイスを有しており、アプリケーションはオペレーティングシステムによってサポートされている機能性にアクセスすることができる。こうしたAPI(アプリケーションプログラミングインターフェイス)は、典型的にコンピュータープログラミング言語における名前付きファイルまたはオブジェクトを使用してオペレーティングシステムによって規定されている。例えば、Cプログラミング言語は、"interface.h"といった名前のヘッダーファイルを使用する。同様に、"P/Invoke"と呼ばれるC#メカニズムにおいて、オペレーティングシステムのAPIにアクセスするためにシグネチャー(signature)が使用されている。オペレーティングシステムのAPIを使用するコンピュータープログラムを書く人は、典型的にプログラムの中の名前付きAPIファイル又はオブジェクトを参照し、または、プログラミング言語によって提供される別のメカニズムを使用する。プログラムは、例えば、そのAPIによって規定されたファンクションに対するコール(call)を含んでいる。そのAPIによって使用されている構文においてである。
こうしたやり方で規定されたAPIは、それらが書き込まれた言語以外の言語によっては直接的にアクセスすることができない。他の言語の中に書き込まれたプログラムにアクセスできるようにするために、APIはラップ(”wrapped”)される。このラップは、典型的にはAPIごと及び言語ごとに行われる必要があり、対象言語とAPIとオペレーティングシステムの深い理解を要するものである。従って、多くのオペレーティングシステムのAPIは利用できない。
本概要は、以降の詳細な説明でより詳しく記述される本発明の概念について、簡素化された形式において代表的な概念の選択を紹介するものである。本概要は、特許請求された技術的事項の主要な特徴または本質的な特徴を特定することを意図するものではない。また、特許請求された技術的事項の範囲を限定するために使用されることを意図するものではない。
オペレーティングシステムが作成されるときは、APIに関する情報が生成され、オペレーティングシステムの中の既知のロケーションに既知のフォーマットにおいて保管される。この情報は、オペレーティングシステムによって公開された全てのAPIを完全に記述するものである。これは、これらに限定されるわけではないが、API、種々のタイプの名前付きエレメントに関する情報を含んでいる。ベーシックタイプ、列挙型、デリゲート(delegate)、インターフェイス、クラス、メソッド、プロパティ、および、イベントといったものである。
言語コンパイラー又はインタープリターは、このAPI情報を使用して、対象言語におけるネイティブシステム(native system)APIの自然でよく知られた表現を作成する。この表現は、言語によって変わるものである(自然でよく知られたものは言語ごとに変わるからである)。言語コンパイラー又はインタープリターは、コンパイル時及び/又は実行時のAPI情報、対象の言語に対して最も好適なあらゆるものを読み出すことができる。例えば、C++のような静的コンパイル言語は、純粋にコンパイル時においてメタデータを使用し、一方で、Python又はJavaScript(登録商標)のような動的言語は、純粋に実行時においてメタデータを使用する。.NET又はJava(登録商標)のような環境は、コンパイル時と実行時の両方においてメタデータを使用するであろう。メタデータは、アプリケーションがAPIにおける名前付きエレメントを参照することができるように使用される。メタデータを使用する投射(projection)が作成され、APIにおける名前付きエレメントを対象言語における名前付きエレメントに対してマップし、対象表現とネイティブオペレーティングシステム表現との間のこうしたデータを変換するラッパー(wrapper)を規定する。
従って、一つの態様において、オペレーティングシステムのアプリケーションプログラミングインターフェイスを記述するメタデータはメモリーの中に保管される。プログラミング言語におけるプログラムの中で名前付けされた指標が与えられれば、アプリケーションプログラミングインターフェイスのうち一つのエレメントを参照して、名前付けされたエレメントは、メタデータを使用してプログラミング言語の中に投射される。投射は、プログラムのコンパイル又はインタープリテーション(interpretation)の最中に生じ得る。投射は、プログラミング言語において一つまたはそれ以上のエレメントを作成するコードを作成すること、および、タイプに従って、作成されたエレメントに対してデータを変換することを含んでいる。インターフェイスは、その方法、プロパティ、および、イベントを含めて、投射され得る。投射は、また、例外(exception)をオペレーティングシステムからアプリケーションへプロパゲーションすることも含んでいる。
オペレーティングシステムのAPIを他の言語の中にこうして投射することは、コンピューターで実行されるプロセス、一つまたはそれ以上のコンピューターストレージメディアを含む製造の手段、または、コンピューターマシンにおいて実施され得る。
以降の説明においては、添付の図面が参照される。図面は、明細書の一部を構成しており、説明図として、本技術に係る所定の実施例が示されている。本発明開示の範囲を逸脱することなく、他の実施例が使用され、構成の変更がなされ得ることが理解されるべきである。
図1は、APIを他のプログラミング言語の中へ投射することを含むシステムのブロックダイヤグラムである。 図2は、開発ツールのオペレーション例を説明するフローチャートである。 図3は、コンパイラー又はインタープリターのオペレーション例を説明するフローチャートである。 図4は、こうしたシステムが実施されるコンピューターデバイスの実施例に係るブロックダイヤグラムである。
以下のセクションでは、こうしたネイティブシステムAPIを他のプログラミング言語の中へ投射することが実施できるオペレーション環境の実施例が提供される。
図1を参照すると、実行されているアプリケーション100は、実行時にオペレーティングシステム104のネイティブシステムAPI102にアクセスしている。アプリケーションがこうした機能性を有するように、プログラム106は、エディターといった、開発ツール112を典型的に使用して書かれている。こうしたプログラムは、言語のコンパイラー又はインタープリター108によってコンパイルまたはインタープリート(interpret)のいずれかが行われて、実行時間アプリケーション(runtime application)100を提供する。開発ツール102、および、コンパイラー又はインタープリター108は、オペレーティングシステムのAPI102を完全に記述するメタデータ110にアクセスする。開発ツール102は、開発者がプログラムを書くことを手助けする。メタデータを介して利用可能なネイティブシステムAPIを開発者に通知し、こうしたAPIが開発者のプログラミング言語を使用してアクセスできるようにしている。コンパイラー又はインタープリターは、ネイティブシステムAPIの開発者のプログラミング言語の中への投射をメタデータを使用して実施する。特に、APIにおける名前付きエレメントは、対象言語における名前付けされたエレメントに対してマップされ、こうしたエレメントの中の値は、対象言語とオペレーティングシステムによって使用されるフォーマット間で変換される。
こうしたシステムの構築は、メタデータを用いて記述されたAPIを伴うオペレーティングシステムを構築することから始まる。メタデータは、プログラミング言語の独立した形式で、API記述の名前付けされたエレメントのそれぞれを表している。このメタデータは、インターフェイスの完全な記述を提供する。結合されたシステムメタデータは、ECMA−335CLIフォーマットで、一連のメタデータファイルの中に保管され得る。しかしながら、本発明にとって所定のフォーマットは重要ではない。
このコンテクストを仮定して、こうしたシステムの実施例が、図2から図4に関して、より詳細に説明される。
図2において、開発ツールのオペレーションの実施例がこれから説明される。開発者は、コンピュータープログラムを書くときに、エディターといった、開発ツール形式を一般的に使用する。このエディターは種々のタスクを行うことができる。文法を確認したり、開発者が入力した文字列の完了を提示するといったことである。この環境において、オペレーティングシステムのアプリケーションプログラミングインターフェイスを記述しているメタデータは、種々の方法で使用され得る。開発ツールは、入力された文字列を受け取る200。APIにおいて識別子(「マウス」といったもの)または名前空間(オペレーティングシステム名といったもの)として使用されるキーワードといったものである。メタデータは検索され202、識別子又は名前空間の一部として受け取った入力を有しているエレメントを特定する。マッチング(matching)エレメント一式に対する識別子は集められて204、開発ツールに戻される。開発ツールは、選択のために開発者に対してエレメントを提示し206、メタデータからの情報を使用して、開発者が使用しているコンピューター言語にとって好適なフォーマットでそうしたエレメントを提示する。
図3を参照して、これから言語コンパイラー又はインタープリターのオペレーションの実施例が説明される。コンピュータープログラムの処理において、コンパイル又はインタープリートであっても、コンピュータープログラムの一連のエレメントが検知される300。コンピュータープログラムのエレメントがオペレーティングシステムのAPIに関連するかどうかが判断される302。例えば、メタデータにおけるエレメントを検索することによって、このことが判断され得る。メタデータを使用して、投射エレメントが作成される304。投射データは、コンピュータープログラムとオペレーティングシステムとの間でデータを交換できるようにする。特に、コンパイラー又はインタープリターは、オペレーティングシステムのAPIにおける名前付きエレメントを対象言語における名前付きエレメントに対する投射を実施する。メタデータにより、オブジェクトが作成され、プログラムによって使用されるデータフォーマットとオペレーティングシステムによって使用されるフォーマットとの間で値を変換することができる。実行時に、このエレメントにより、プログラムは、オペレーティングシステムのAPIにアクセスすることができ306、アプリケーションとオペレーティングシステムとの間でデータを変換することができる。
こうしたシステムの一般的なオペレーションが説明されてきたので、これから所定の実施例が説明される。特に、APIを記述するメタデータとAPIのエレメントのコンピューター言語所定の表現との間の投射の実施例に係るさらなる詳細がこれから説明される。
以降の説明は、単なる一つの可能な実施例に関するものであり、本発明を限定するものと考えられるべきではない。特に、以降の記載は実施可能な言語投射の単なる実施例であり、この言語に対する他の実施が可能であり、他の言語への他の投射が可能であることが理解されるべきである。
この実施例においては、JavaScriptが、メタデータを使用してネイティブシステムAPIの中に投射されるプログラミング言語である。以下の実施例においては、いくつかの種類のエレメントが、どのようにJavaScriptプログラミング言語の中に投射されるかが説明される。
スクリプトが、オペレーティングシステムのAPIによって規定された所定のオブジェクトのインスタンスを作成するように試みるとき、プロジェクター(Projector)オブジェクトがメタデータへのアクセスを担い、異なるタイプ間でのデータを変換するスタブ(stub)を作成する。おそらくプロキシーオブジェクトの作成を含んでおり、メソッド呼び出しをディスパッチ(dispatch)するために、イベントを管理して、コールバックファンクションを管理している。
整数、文字列、等といった、基本タイプの名前付きエレメントに対して、以降の記載は、こうしたAPIエレメントをJavaScriptの中に投射する方法である。
オペレーティングシステムは、いくつかの署名された整数タイプと署名のない整数タイプを有している。1バイトの署名のない整数(UInt8)、4バイトの署名のない整数(UInt32)、1バイトの署名された整数(Int8)、8バイトの署名された又は署名のない整数(Int64とUInt64)といったものである。こうしたタイプの名前付けされたエレメントが、JavaScriptナンバー値として投射される。JavaScriptナンバーがオペレーティングシステム値へと変換される場合、その値はJavaScriptナンバーに型強制(type coerce)され、ES5 ToInt32規格によって定義されたプロセスが続く。UInt8に対して、結果はモジュロ(modulo)2^8が適用される。Int32に対しては、モジュロ2^16が適用される。UInt32に対しては、モジュロ2^32が適用される。
JavaScript値へと変換された64ビットの整数は、標準ナンバー値として表現される。署名された整数で範囲[−2^53、2^53]にある場合、または、署名のない整数で範囲[0、2^53]にある場合である。この範囲の外側にある場合は、整数データの全64ビットを保持するカスタムバッキングストア(custom backing store)を用いてナンバー値として表される。こうしたカスタムナンバー値上での数学的オペレーションにより、その値を、範囲[−2^53、2^53]、または、署名のない場合[0、2^53]の範囲における標準ナンバー表現にされる。値がこの範囲の外側にある場合、タイプエラー(Type Error)が生じる。64ビットの整数へと変換されたJavaScript値は、それが投射された値それ自身である場合は、直接的に割り当てられる。そうでなければ、その値にEC5”ToInteger”転換を適用した結果が渡される。
キャラクター(16ビットのユニコードにより表されるもの)、文字列、または、グローバル一意識別子(GUID)であるオペレーティングシステムのAPIに係る名前付きエレメントは、JavaScriptの文字列として表現することができ、JavaScriptにおける名前付き文字列へと投射される。
JavaScriptへと変換されたキャラクターは、ユニコード値によって表わされる単一キャラクターを含むJavaScript文字列値へと転換される。キャラクターへと変換されたJavaScript値は、ES5 ToStringオペレーションを介してJavaScript文字列へと型強制され、最初のキャラクターは保持される。そして、単一のキャラクターはChar16値として渡される。
JavaScriptへと変換された文字列は、JavaScriptストリング(String)に転換される。文字列へと変換されたJavaScript値は、JavaScriptストリングへと型強制される。
JavaScript値へと変換されたGUIDは、文字列フォーマットへと転換される。GUIDへと変換されたJavaScript値は、文字列へと型強制され、そして、オペレーティングシステムによって使用されるフォーマットへと構文解析される。
オペレーティングシステムは、名前付きエレメントを伴うAPIを有することができる。名前付きエレメントは、ある時点を表わすDateTimeストラクト(struct)、または、時間量を表すTimeSpanストラクトである。DateTimeストラクトは、DateTimeストラクトデータ(Dataインスタンスとは異なる範囲と精度を有するもの)と一致するバッキングストアを用いて、DataインスタンスとしてJavaScriptの中に投射され得る。TimeSpanストラクトはミリ秒に転換され、JavaScriptナンバーとしてリターンされる。同様に、JavaScriptナンバーはミリ秒から100ナノ秒単位に転換することができ、TimeSpanストラクトとして渡される。
メタデータのインタープリートにより、投射は、いくつかの場合において、タイプをネイティブ環境から言語投射における既存のタイプへと再度マップすることもできることに留意すべきである。例えば、このことは、ネイティブAPIにおけるタイプと言語投射が互換性のあるデータレイアウトを有している場合に可能であり望ましいものであって、基本的なデータタイプについて容易に生じるものである。メタデータのマッピングを用いて、投射は、言語タイプ上のメソッド又はプロパティといった、全てのオペレーションを直接的にネイティブタイプへ単純にリダイレクト(redirect)することができる。これにより、こうしたタイプの使用は、言語開発者にとって、より自然でよく知られたものになる。例えば、DateTimeストラクトの再度マップは、こうしたやり方で実施される。ネイティブAPIにおいて、DateTimeストラクトは、あらゆる追加のオペレーションなしにメタデータにおいてWindows(登録商標).Foundation.DateTimeとして表される。C#投射において、このタイプは、サポートが豊富なC#におけるSystem.DateTimeOffsetにリダイレクトされ得る。
別の実施例として、APIにおける名前付きエレメントがメソッドである場合、そのエレメントはリターンタイプとしての値HRESULTを有し、JavaScriptにおける例外に転換される。リターンされたHRESULTは、JavaScriptエンジンによって成功が確認される。HRESULTが失敗を示している場合、JavaScriptエンジンは、JavaScript側に例外を投げかける。従って、オペレーティングシステムのAPIのメソッドを実施しているJavaScriptに対して、HRESULTの失敗がJavaScript Exceptionとしてサーフェス(surface)される。JavaScriptメソッドを使用しているAPIメソッド(以下に説明されるコールバック(call back)又はデリゲート(delegate)といったもの)に対して、JavaScriptメソッドコールが例外ブロック(または、APIをホストしているJavaScriptによって提供されるような等価なもの)の中にラップされる。捉えた例外がHRESULTとしてプロパゲーションされ得るようにである。しかしながら、オペレーティングシステムは、また、HRESULTがメソッドとプロパティのパラメーター位置の中又は外にあるようにしている。こうした場合、HRESULTは署名のない32ビットチップとして変換される(上述のようにである)。
列挙型(enumerated type)であるAPIにおける名前付きエレメント、つまり名前付きコンスタント(constant)一式、に対しては、それぞれの名前付き値に対する読み出し専用フィールドを含むオブジェクトとしてJavaScriptにおいて表現される。
「ストラクト(”struct”)」であるAPIにおける名前付きエレメント、つまり名前付きフィールドの集合、に対しては、JavaScriptオブジェクトとしてJavaScriptにおいて表現される。JavaScriptへと変換されたストラクトはオブジェクトへと転換される。ストラクトにおけるそれぞれの名前付きフィールドの値は、フィールドの基礎的なタイプごとに変換される。オブジェクトタイプであるJavaScript値は、ストラクトへと変換され得る。JavaScriptオブジェクト又はそのプロトタイプは、ストラクトのそれぞれの名前付きフィールドに対する名前付きフィールドを含んでおり、それぞれの名前付きフィールドの値は、基礎的なタイプに従って変換される。JavaScriptオブジェクトにおける追加のフィールドで、オペレーティングシステムのAPIストラクトにおける均等物を有さないものは、無視される。ストラクト値の変換が失敗した場合、変換エラーがリターンされる。
この実施例において、オペレーティングシステムは、アレイ(array)に対するタイプを有していないが、代わりに、メソッドに対する引数が、アレイにおけるエレメントの数を表している署名のない整数長さ、バイトでなく、のペアとなるようにできる。アレイの最初のエレメントに対するポインターが後に続くものである。
アレイをJavaScriptへと変換する場合、以下の特性をもつオブジェクトが作成される。オブジェクトは、0とアレイの長さ、マイナス1、との間のそれぞれの整数値に対するプロパティを有しており、それらは加算(enumerable)で、書き込み可能であるが、構成可能ではない。そして、「長さ(’length’)」のプロパティは、初期的にベクトル長に設定されており、それは書き込み不可能であり、加算でなく、構成可能ではない。プロトタイプは、Arrayプロトタイプオブジェクトである。インデックスプロパティ上の[[Put]]オペレーションは、基本的なネイティブアレイ上に所定のインデックスを設定する。インデックスプロパティ上の[[GetOwnProperty]]オペレーションは、基本的なネイティブアレイへとインデックスする。Arrayとして[[Class]]は有していない。JavaScriptオブジェクトを変換するとき、オブジェクトが[[Class]]Arrayを有するとすれば、アレイはネイティブアレイへとコピーされ、このアレイに対する参照が伝達される。オブジェクトが投射されたアレイであれば、基本的なネイティブアレイが伝達される。
APIは、また、デリゲート(delegate)又はコールバックファンクションである名前付きエレメントを有することができ、一つの実施可能な方法に関するものである。これらは、コール可能なオブジェクトとしてJavaScriptの中へ投射され得る。投射は、カスタム変換オブジェクトにおけるコールバックデリゲートをラップする。
JavaScriptへと変換されたデリゲートは、JavaScriptファンクションオブジェクトの中にラップされる。ファンクションオブジェクトが実施された場合、引数は、デリゲートによって規定されるように均等なパラメーターへと変換され、ラップされたデリゲートオブジェクトが実施される。引数の変換が失敗した場合、デリゲートはフェイル(fail)をコールする。パラメーターにおけるデリゲートよりも少ないJavaScript引数しかない場合、デリゲートはフェイルをコールする。パラメーターにおけるデリゲートを超える追加のJavaScript引数は無視される。デリゲートが実施された後で、アウトパラメーター(out parameter)はJavaScriptタイプへと変換される。アウトパラメーターの変換が失敗した場合、デリゲートはフェイルをコールする。そして、アウトパラメーターはJavaScript値に変換されて、リターンされる。
ネイティブJavaScriptファンクションオブジェクトがデリゲートへと変換される場合、コール可能なオブジェクトは、対応するデリゲートタイプのデリゲートの中にラップされる。デリゲートが実施されるとき、インパラメーター(in parameter)がJavaScriptタイプへと変換されて、JavaScriptファンクションオブジェクトが実施される。引数の変換に失敗した場合、デリゲートコールはフェイルする。デリゲートが実施された後で、リターン値が、以下のルールに基づいてデリゲートのアウトパラメーターへとマップされる。第1に、アウトパラメーターが存在しない場合は、JavaScriptファンクションオブジェクトからのリターン値は無視される。第2に、デリゲートが一つのアウトパラメーターを規定する場合は、JavaScriptファンクションオブジェクトからのリターン値は、そのタイプへと変換される。その変換が失敗した場合、デリゲートコールはフェイルする。第3に、デリゲートが複数のアウトパラメーターを規定する場合は、JavaScriptファンクションオブジェクトからのリターン値は、それぞれのアウトパラメーターに対する名前付きプロパティを伴うオブジェクトである。それぞれの名前付きプロパティは、対応するアウトパラメーターのタイプへと変換される。リターン値がオブジェクトでない場合、デリゲートコールはフェイルする。リターンされたオブジェクトがそれぞれのアウトパラメーターに対する名前付きプロパティを含まない場合、デリゲートコールはフェイルする。リターンされたオブジェクトが、アウトパラメーターに対応していない追加の名前付きプロパティを含む場合、それらは無視される。名前付きプロパティの対応するアウトパラメータータイプへの変換が失敗した場合、デリゲートコールはフェイルする。
以下の実施例は、IString Collectionと呼ばれるデリゲートのためのメタデータと、このデリゲートのインスタンスを作成する擬似JavaScriptコードを説明するものである。
Example metadata:
[uuid(…)]
delegate HRESULT Comparer([in] HSTRING s1,[in] HSTRING s2,[out,retval] Boolean*value)
interface IStringCollection
{
HRESULT Sort([in] Comparer compare);
}
Psuedo-JavaScript:
//create an instance of a class that implements IStringCollection
strCol=getIStringCollection()
strCol.sort(function(s1,s2){returen s1>s2;});
インターフェイスは、オブジェクトとして直接的にJavaScriptへと投射されるものではない。しかしながら、インターフェイスは、オペレーティングシステムのAPIメソッドのパラメーター及びリターンタイプであり得る。
上記の実施例で、対象プログラミング言語において自然な投射を提供するために、メンバーがJavaScriptへと投射され、ネームがcamelCaseに変更される。メンバーに対してcamelCaseネームを使用するためのJavaScriptにおける文字列変換に従ったものである。JavaScriptコンストラクター(constructor)ファンクションに類似のタイプは、慣習的にPascalCaseであり、その形式に投射される。同様に、enum型プロパティ、ストラクトフィールド、addEventListenerパターンのイベント名は、camelCaseにおけるネームを有している。
実行時間クラスの表現となる静的タイプ情報に基づいては知られていないインターフェイスインスタンスは、JavaScriptへと変換されて、以下のステップを通過する。第1に、インターフェイスへのコールがなされてインターフェイスに対する実行時間クラス名が獲得される。成功の場合、オブジェクトは、実行時間クラスインスタンスオブジェクト(以下に説明される)として投射される。そうでなければ、オブジェクトは、それが実施するように知られているまさにそのインターフェイスを実施する名前付けされていない実行時間クラスのインスタンスであるかのように投射される。それは、他動的に(transitively))要求されるインターフェイスである。
インターフェイスタイプに変換されているJavaScript値が検査される。それが投射された実行時間クラスインスタンスオブジェクトであるか、または、投射されたインターフェイスインスタンスオブジェクトであるかが検査される。それが実行時間クラスオブジェクトであり、そのオブジェクトがプロキシーする(proxy)オリジナルの値がインターフェイスタイプを実施する場合、インターフェイスのオブジェクト実施がオペレーティングシステムに渡される。そうでなければ、タイプエラー例外が生じる。
オペレーティングシステムのAPIにおけるオブジェクトは、実行時間クラスのインスタンスであってよい。実行時間クラスは、一式の一つまたはそれ以上のインターフェイス(以下に定義されるもの)を実施する。実行中のオブジェクトに係る実施されたインターフェイスのリストは、実行中のオブジェクトをリターンしたメソッドのメタデータに基づくか、または、実行時間クラス名にアクセスしてメタデータを検索することによるか、いずれかにより決定され得る。JavaScriptは、プロトタイプベースの動的言語であるため、クラスの構造を有さない。クラス構造は、オブジェクトとしてJavaScriptに投射される。
このように、オペレーティングシステムのAPIオブジェクトは、オブジェクトとしてJavaScriptに投射される。クラスの全ての実施されたインターフェイス上で定義されるメソッド、プロパティ、および、イベントの結合は、タイプメンバーを表しており、投射されたJavaScriptオブジェクト上で利用可能な名前付きプロパティとして、プロトタイプを介して、示される。JavaScript言語投射の使用者は、どのインターフェイス上にメンバーが実際に定義されているかを気にすることなく、クラスのあらゆるメンバーに直接的にアクセスすることができる。
JavaScriptオブジェクトは動的である。新たなプロパティがいつでも追加され、または、削除され得ることを意味している。投射されたオブジェクトは、新たなプロパティとメソッドの追加をサポートすることができる。既定のインターフェイスメンバーがオーバーライド(override)または削除されない限りにおいてである。JavaScript表現において、投射されたオブジェクトは拡張可能であるが、名前付きタイプメンバーの集合は構成可能ではない。投射されたオブジェクトは、実行時間クラス実施のインターフェイスからのメンバーの集合上で定義されたインスタンスメンバーを伴うプロトタイプを有している。
そうしたインターフェイスは、上述のように、メソッド、パラメーター、および、イベントを有している。
言語投射レイヤー(layer)でのメソッドは、メソッドごとのスロットを用いて仮想関数テーブル(vtable)として実施される。インターフェイスに関するメタデータは、メソッドと同様に、パラメーターのネーム(name)、タイプ、および、ダイレクション(イン/アウト)を提供する。メソッドは、投射された実行時間クラス上のコール可能なプロパティ、または、インターフェイスオブジェクトとしてJavaScriptに投射される。こうしたプロパティは、以下のとおりである。{Writable=false, Enumerable=true, Configurable=false} コールされた場合、引数は対応するパラメータータイプに従って変換され、メソッドは、これらの値を用いてコールされる。リターン値は、JavaScript値に変換され、値としてのJavaScriptオブジェクトを伴うものである。
言語投射レイヤーでのプロパティは、ゲット(get)及び/又はセット(set)メソッドとして実施される。プロパティ値のアクセスがゲットメソッドをコールし、一方でプロパティ値の更新はセットメソッドを実施する。プロパティは、読み出し又は書き込み(つまり、ゲット及びセットメソッドが利用可能である)であってよく、または、読み出し専用であってよい(つまり、ゲットメソッドだけが利用可能である)。プロパティは、JavaScriptの中にプロパティとして投射される。プロパティ値の変換は、上述のように、基本的なプロパティタイプに基づいて作用する。
言語投射レイヤーでのイベントは、アッド(add)及び/又はリムーブ(remove)メソッドとして実施される。アッドメソッドは、デリゲートインスタンスを得てリスナー(listener)を記述するデータをリターンする。一方で、リム−ブメソッドは、リスナーを記述するデータ得て何もリターンしない。
JavaScriptにおいて、少なくとも一つのイベントが投射されているあらゆる投射された実行時間クラス又はインターフェイスオブジェクトは、そのプロパティに2つのプロパティが追加される。addEventListenerとremoveEventListenerである。これらのプロパティは、{Writable:false,Enumerable:true,Configurable:fales}であり、コール可能なオブジェクトとなるように割り当てられる。
addEventListenerファンクションは、リスン(listen)するイベントの名前を表す文字列引数、リスナーとして割り当てるためにコールバックファンクション、および、無視されている任意の第3のパラメーターを獲得する。このファンクションは、基本的なadd_Eventメソッドをコールし、変換されたコールバックファンクションをデリゲートとして渡して、結果として生じたトークン(token)をコールバックファンクションオブジェクトの参照識別子によってキー付けされたマップの中に保管する。
removeEventListenerは、リスナーから取り除くイベントの名前を表す文字列引数、取り除かれるべきコールバックファンクション、および、無視されている任意の第3のパラメーターを獲得する。このファンクションは、保管されたトークンのマップにおける参照識別子によってコールバックファンクションを検索して、トークンが見つかった場合に、基本的なremove_Eventメソッドをコールし、検索されたトークンを渡す。
イベントが開始されると、コールバックとして渡されたあらゆるJavaScriptファンクションオブジェクトが実施される。ファンクションオブジェクトに渡された引数は、EventHandlerデリゲートに提供される引数の変換された値になる。
上述のように、言語に対するAPI投射レイヤーを有することにより、オペレーティングシステムのAPIに係る名前付きエレメントは、オペレーティングシステムの中に保管されたメタデータによって規定されるように、オペレーティングシステムのAPIフォーマットとアプリケーションプログラミング言語フォーマットとの間のオブジェクト及び変換データを自動的に作成するために使用される。上記は、例示オペレーティングシステムと例示プログラム言語との間の単なる例示投射であること、および、本発明がこの実施例に限定されるものではないことが理解されるべきである。
実施例について説明してきたので、そうしたシステムが動作するようにデザインされたコンピューター環境についてこれから説明する。以降の記載は、このシステムが実施され得る好適なコンピューター環境について簡潔で一般的な説明を提供するように意図されたものである。システムは、数多くの汎用又は専用コンピューターハードウェア構成を用いて実施することができる。好適なよく知られたコンピューターデバイスの実施例は、これらに限定されるわけではないが、以下のものを含んでいる。パーソナルコンピューター、サーバーコンピューター、ハンドヘルド又はラップトップデバイス(例えば、メディアプレーヤー、ノートブックコンピューター、携帯電話、パーソナルデータアシスタント、ボイスレコーダー)、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、ゲームコンソール、プログラム可能な家電、ノートブックPC、ミニコンピューター、メインフレームコンピューター、上記のあらゆるシステム又はデバイスを含む分散コンピューティング環境、等である。
図4は、好適なコンピューターシステム環境の実施例を示している。コンピューターシステム環境は、好適なコンピューター環境の単なる一例であって、こうしたコンピューター環境の範囲又は機能性に関していかなる限定も意図するものではない。コンピューター環境は、オペレーション環境の中に示されたあらゆる一つのコンポーネント又はその組み合わせに関していかなる依存も要求も有しないものとして理解されるべきである。
図4に関して、コンピューター環境の実施例は、コンピューターマシン400といった、コンピューターマシンを含んでいる。最も基本的な構成において、コンピューターマシン400は、典型的に、少なくとも一つのプロセッサユニット402とメモリー404を含んでいる。コンピューターデバイスは、複数のプロセッサユニット、及び/又は、グラフィックプロセッサユニット420といった追加のコプロセッサユニット(co−processing unit)を含んでよい。コンピューターデバイスのまさにその構成とタイプに基づいて、メモリー40は、揮発性(RAMといったもの)、不揮発性(ROM、フラッシュメモリー、等といったもの)、または、これら2つのいくつかの組み合わせであってよい。この最も基本的な構成は、破線406によって図4の中に示されている。加えて、コンピューターマシン400は、また、追加の特性/機能性を有し得る。例えば、コンピューターマシン400は、また、追加ストレージ(リムーバブル及び/又は非リムーバブルのもの)を含んでよい。これらに限定されるわけではないが、磁気又は光ディスク又はテープを含んでいる。こうした追加ストレージは、リムーバブルストレージ408及び非リムーバブルストレージ410として図4の中に示されている。コンピューターストレージメディアは、揮発性と不揮発性、リムーバブルと非リムーバブルメディアを含んでおり、コンピュータープログラムインストラクション、データ構造、プログラムモジュール、または、他のデータといった情報を保管するためのあらゆる方法又は技術において実施される。メモリー404、リムーバブルストレージ408及び非リムーバブルストレージ410は、全てコンピューターストレージメディアの実施例である。コンピューターストレージメディアは、これらに限定されるわけではないが、以下のものを含んでいる。RAM、ROM、EEPROM、フラッシュメモリーまたは他のメモリー技術、CD−ROM、デジタル多目的ディスク(DVD)または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、または、所望の情報を保管するために使用でき、コンピューターマシン400によってアクセスされ得る他のあらゆるメディア、である。
コンピューターマシン400は、また、コミュニケーション接続412を含んでおり、デバイスは他のデバイスとコミュニケーションすることができる。コミュニケーション接続412は、コミュニケーションメディアの実施例である。コミュニケーションメディアは、典型的に、コンピュータープログラムインストラクション、データ構造、プログラムモジュール、または、キャリア波又は他の伝送メカニズムといった変調されたデータ信号における他のデータを保持しており、あらゆる情報伝達メディアを含んでいる。用語「変調されたデータ信号(”modulated data signal”)」は、一つまたはそれ以上の特性セットを有する信号、または、信号におけるエンコード情報に関して、そうしたやり方で変換された信号を意味しており、それによって、信号の受信装置の構成または状態が変化している。実施例として、そして限定ではなく、コミュニケーションメディアは、有線ネットワーク又はダイレクト有線接続、および、音声、RF、赤外線、又は他の無線メディアといった無線メディアを含んでいる。
コンピューターマシン400は、ディスプレイ、キーボード、マウス、ペン、カメラ、タッチ入力デバイス、等といった種々の入力デバイス414を有してよい。スピーカー、プリンター、等といった出力デバイス416も、また、含まれてよい。こうしたデバイスの全ては従来技術としてよく知られており、ここにおいて長らく説明することを要しないものである。
こうしたシステムは、ソフトウェアの一般的なコンテクスト(context)において実施され得る。プログラムモジュールといった、コンピューターで実行可能なインストラクション及び/又はコンピューターで解釈されるインストラクションを含み、コンピューターマシンによって処理されるものである。一般的に、プログラムモジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、等を含み、プロセッサユニットによって処理されると、プロセッサユニットに対して所定のタスク又は所定の抽象的なデータタイプを実行するように指示する。このシステムは、分散コンピューター環境において実施されてもよい。タスクは、コミュニケーションネットワークを通じてリンクされた離れたプロセッサデバイスによって実行される。分散コンピューター環境において、プログラムモジュールは、メモリストレージデバイスを含むローカル及びリモート両方のコンピューターストレージメディアの中に存在し得る。
添付の請求項のプリアンブルにおける用語「製造方法」、「プロセス」、「マシン」、および、「組み合せ」は、米国特許法第101条におけるこれらの用語の使用によって定義される特許可能な技術的事項の範囲内にあるものと考えられる技術的事項に請求項を限定するように意図されたものである。
ここにおいて説明されたあらゆる又は全ての前出の代替的な実施例は、追加のハイブリッドな実施例を形成するために望まれるあらゆる組み合せにおいて使用され得るものである。添付の請求項において定められる技術的事項は、上述の所定の実施例に必ずしも限定されるものではないことが理解されるべきである。上述の所定の実施例は、単なる例として開示されたものである。

Claims (10)

  1. コンピューターで実施される方法であって:
    オペレーティングシステムのアプリケーションプログラミングインターフェイスを記述するメタデータをメモリーの中に受け取るステップと;
    前記オペレーティングシステムの前記アプリケーションプログラミングインターフェイスのうち一つのエレメントに関する目標プログラミング言語におけるプログラムの中の名前付きエレメントの指標を受け取るステップと;
    前記メタデータを使用して、前記目標プログラミング言語における前記プログラムの中で投射エレメントを作成するステップであり、前記投射エレメントは、前記オペレーティングシステムの前記アプリケーションプログラミングインターフェイスの前記エレメントの、前記プログラムの中の前記名前付きエレメントへの投射であり、実行時間において、前記プログラムの中の前記投射エレメントにより、前記プログラムが、前記オペレーティングシステムの前記アプリケーションプログラミングインターフェイスにアクセスすることができる、ステップと;を含み、
    前記投射エレメントは、タイプに従って、オペレーティングシステム表現とアプリケーション表現との間でデータを変換し、
    前記メタデータは、メタデータファイルの中に保管され、
    前記メタデータファイルは、マシンで読取り可能なプログラミング言語の独立した形式で前記アプリケーションプログラミングインターフェイスのエレメントを記述し、かつ、前記オペレーティングシステムの一部として既知のロケーションに標準ファイルフォーマットで保管される、
    ことを特徴とする方法。
  2. 前記投射エレメントを作成するステップは、前記プログラムがコンパイルされるときに、
    一つまたはそれ以上の投射エレメントを定義するコードを作成するステップと、
    を含む請求項1に記載の方法。
  3. 前記投射エレメントを作成するステップは、前記プログラムがインタープリートされるときに、
    一つまたはそれ以上の投射エレメントを定義するコードを作成するステップと、
    を含む請求項1に記載の方法。
  4. 前記投射エレメントは、
    メソッド、プロパティ、および、イベントを含むインターフェイスを含む、
    請求項1に記載の方法。
  5. 前記投射エレメントは、
    例外を前記オペレーティングシステムからアプリケーションまでプロパゲーションする、
    請求項1に記載の方法。
  6. 一つまたはそれ以上のプロセッサと;
    一つまたはそれ以上のコンピューターストレージメディアと;
    前記コンピューターストレージメディア上に保管されたコンピュータープログラムであり、プロセッサデバイスによって処理されるときに、オペレーティングシステムのアプリケーションプログラミングインターフェイスと目標プログラミング言語におけるアプリケーションとの間で言語投射を実施するコンピュータープログラムと、
    を含み、
    前記オペレーティングシステムの前記アプリケーションプログラミングインターフェイスは、メモリーの中に保管されたメタデータによって記述されており;
    前記言語投射は、
    前記オペレーティングシステムの前記アプリケーションプログラミングインターフェイスのうち一つのエレメントに関する目標プログラミング言語におけるプログラムの中で名前付きエレメントの指標を受け取り、かつ、
    前記メタデータを使用して、前記目標プログラミング言語における前記プログラムの中で投射エレメントを作成し、前記投射エレメントは、前記オペレーティングシステムの前記アプリケーションプログラミングインターフェイスの前記エレメントの、前記プログラムの中の前記名前付きエレメントへの投射であり、実行時間において、前記プログラムの中の前記投射エレメントにより、前記プログラムが、前記オペレーティングシステムの前記アプリケーションプログラミングインターフェイスにアクセスすることができる、ステップと;を含み、
    前記投射エレメントは、タイプに従って、オペレーティングシステム表現とアプリケーション表現との間でデータを変換し、
    前記メタデータは、メタデータファイルの中に保管され、
    前記メタデータファイルは、マシンで読取り可能なプログラミング言語の独立した形式で前記アプリケーションプログラミングインターフェイスのエレメントを記述し、かつ、前記オペレーティングシステムの一部として既知のロケーションに標準ファイルフォーマットで保管される、
    ことを特徴とするコンピューターマシン。
  7. 前記投射エレメントの作成は、前記プログラムがコンパイルされるときに、
    一つまたはそれ以上の投射エレメントを定義するコードを作成する、
    請求項6に記載のコンピューターマシン。
  8. 前記投射エレメントの作成は、前記プログラムがインタープリートされるときに、
    一つまたはそれ以上の投射エレメントを定義する、コードを作成する
    請求項6に記載のコンピューターマシン。
  9. 前記投射エレメントは、
    メソッド、プロパティ、および、イベントを含むインターフェイスを含む、
    請求項6に記載のコンピューターマシン。
  10. 前記投射エレメントは、
    例外を前記オペレーティングシステムから前記アプリケーションまでプロパゲーションする、
    請求項6に記載のコンピューターマシン。
JP2014528374A 2011-08-31 2011-10-11 オペレーティングシステムのネイティブプログラミングインターフェイスの他のプログラミング言語の中への投射 Expired - Fee Related JP5905577B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/223,296 2011-08-31
US13/223,296 US8695021B2 (en) 2011-08-31 2011-08-31 Projecting native application programming interfaces of an operating system into other programming languages
PCT/US2011/055704 WO2013032506A1 (en) 2011-08-31 2011-10-11 Projecting native application programming interfaces of an operating system into other programming languages

Publications (3)

Publication Number Publication Date
JP2014525623A JP2014525623A (ja) 2014-09-29
JP2014525623A5 JP2014525623A5 (ja) 2014-11-13
JP5905577B2 true JP5905577B2 (ja) 2016-04-20

Family

ID=47445766

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014528374A Expired - Fee Related JP5905577B2 (ja) 2011-08-31 2011-10-11 オペレーティングシステムのネイティブプログラミングインターフェイスの他のプログラミング言語の中への投射

Country Status (12)

Country Link
US (2) US8695021B2 (ja)
EP (1) EP2751673A4 (ja)
JP (1) JP5905577B2 (ja)
KR (1) KR101896138B1 (ja)
CN (1) CN102866884B (ja)
AU (1) AU2011375748B2 (ja)
BR (1) BR112014004469A2 (ja)
CA (1) CA2845480C (ja)
MX (2) MX339807B (ja)
RU (1) RU2598600C2 (ja)
TW (2) TWI556170B (ja)
WO (1) WO2013032506A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9798524B1 (en) * 2007-12-04 2017-10-24 Axway, Inc. System and method for exposing the dynamic web server-side
US9116780B2 (en) * 2013-02-06 2015-08-25 Google Inc. Method for modeling source code having code segments that lack source location
US9864861B2 (en) 2014-03-27 2018-01-09 Intel Corporation Object oriented marshaling scheme for calls to a secure region
US10635504B2 (en) 2014-10-16 2020-04-28 Microsoft Technology Licensing, Llc API versioning independent of product releases
US10394552B2 (en) 2016-05-17 2019-08-27 Dropbox, Inc. Interface description language for application programming interfaces
US10146519B2 (en) * 2016-09-20 2018-12-04 Bluedata Software, Inc. Generation and deployment of scripts for large scale processing framework services
CN107957911B (zh) * 2016-10-18 2019-07-05 腾讯科技(深圳)有限公司 组件调用的方法和装置、组件数据处理的方法和装置
US11182875B2 (en) * 2017-05-23 2021-11-23 Koninklijke Kpn N.V. Coordinate mapping for rendering panoramic scene
US10620980B2 (en) 2018-03-28 2020-04-14 Microsoft Technology Licensing, Llc Techniques for native runtime of hypertext markup language graphics content
US10866845B2 (en) * 2018-05-16 2020-12-15 Microsoft Technology Licensing, Llc Exposing native OS APIS in a web browser
CN108920218B (zh) * 2018-05-23 2023-03-03 北京五八信息技术有限公司 一种反射调用方法、装置、终端及计算机可读存储介质
US10725745B2 (en) * 2018-05-24 2020-07-28 Walmart Apollo, Llc Systems and methods for polyglot analysis
JP7067286B2 (ja) * 2018-06-06 2022-05-16 オムロン株式会社 制御システム、制御システムの制御方法、および制御システムのプログラム
CN108920133B (zh) * 2018-06-14 2021-06-18 北京三快在线科技有限公司 跨语言编程方法、装置、电子设备及存储介质
CA3111849A1 (en) * 2018-09-11 2020-03-19 Mastercard Technologies Canada ULC Optimized execution of fraud detection rules
US10838780B2 (en) * 2018-12-10 2020-11-17 Mcafee, Llc Portable hosted content
CN113835755B (zh) * 2021-09-24 2023-08-22 天津津航计算技术研究所 一种无操作系统环境下串口控制台实现方法

Family Cites Families (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5097533A (en) 1988-11-29 1992-03-17 International Business Machines Corporation System and method for interfacing computer application programs written in different languages to a software system
US5339422A (en) * 1991-03-07 1994-08-16 Digital Equipment Corporation System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment
US5910180A (en) 1995-11-21 1999-06-08 Diamond Multimedia Systems, Inc. Context virtualizing device driver architecture
US5887172A (en) * 1996-01-10 1999-03-23 Sun Microsystems, Inc. Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends
US6035342A (en) 1997-03-19 2000-03-07 Microsoft Corporation Method and computer program product for implementing object relationships
US6026238A (en) * 1997-08-18 2000-02-15 Microsoft Corporatrion Interface conversion modules based upon generalized templates for multiple platform computer systems
US20050182828A1 (en) 1999-04-21 2005-08-18 Interactual Technologies, Inc. Platform specific execution
US6745385B1 (en) * 1999-09-01 2004-06-01 Microsoft Corporation Fixing incompatible applications by providing stubs for APIs
EP1117033A1 (en) 2000-01-14 2001-07-18 Sun Microsystems, Inc. Dynamic dispatch function
US6813770B1 (en) 2000-04-21 2004-11-02 Sun Microsystems, Inc. Abstract syntax notation to interface definition language converter framework for network management
US7783720B1 (en) 2000-04-21 2010-08-24 Oracle America, Inc. CORBA metadata gateway to telecommunications management network
US7577834B1 (en) 2000-05-09 2009-08-18 Sun Microsystems, Inc. Message authentication using message gates in a distributed computing environment
US6691302B1 (en) 2000-05-31 2004-02-10 Siemens Information & Communications Networks, Inc. Interfacing a service component to a native API
US7065742B1 (en) 2000-10-30 2006-06-20 Microsoft Corporation System and method for dynamically processing declarative language instance data
US7574346B2 (en) * 2000-10-30 2009-08-11 Microsoft Corporation Kernel emulator for non-native program modules
US6993744B2 (en) 2000-12-19 2006-01-31 Tajen Corporation Method for enabling a compiler or interpreter to use identifiers found at run time in a map container object in a manner similar or identical to identifiers declared at compile time
US20020161596A1 (en) 2001-04-30 2002-10-31 Johnson Robert E. System and method for validation of storage device addresses
US6996832B2 (en) 2001-05-30 2006-02-07 Bea Systems, Inc. System and method for software component plug-in framework
CA2349905A1 (en) * 2001-06-07 2002-12-07 Ibm Canada Limited-Ibm Canada Limitee System and method of mapping between software objects and structured language element based documents
US7581231B2 (en) 2001-07-10 2009-08-25 Microsoft Corporation Computing system and method for allowing plurality of applications written in different programming languages to communicate and request resources or services via a common language runtime layer
US7165239B2 (en) 2001-07-10 2007-01-16 Microsoft Corporation Application program interface for network software platform
US7631084B2 (en) 2001-11-02 2009-12-08 Juniper Networks, Inc. Method and system for providing secure access to private networks with client redirection
US20040201600A1 (en) 2001-12-14 2004-10-14 Microsoft Corporation Methods and system for providing an XML-based interface description language
US7330971B1 (en) 2002-01-11 2008-02-12 Microsoft Corporation Delegated administration of namespace management
US20030188043A1 (en) 2002-03-27 2003-10-02 Woodall Thomas R. Two layer middleware architecture with an intermediate target independent interface
US7320123B2 (en) 2002-04-01 2008-01-15 Sun Microsystems, Inc. Method and system for detecting deprecated elements during runtime
US7424717B2 (en) 2002-05-01 2008-09-09 Bea Systems, Inc. Systems and methods for business process plug-in development
US7219339B1 (en) 2002-10-29 2007-05-15 Cisco Technology, Inc. Method and apparatus for parsing and generating configuration commands for network devices using a grammar-based framework
US7412658B2 (en) 2002-11-14 2008-08-12 Sap Ag Modeling system for graphic user interface
US7171539B2 (en) * 2002-11-18 2007-01-30 Arm Limited Apparatus and method for controlling access to a memory
US7546607B2 (en) 2002-11-19 2009-06-09 Microsoft Corporation Native code exposing virtual machine managed object
US7784044B2 (en) 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
US6993603B2 (en) * 2002-12-09 2006-01-31 Microsoft Corporation Managed file system filter model and architecture
US7197417B2 (en) 2003-02-14 2007-03-27 Advantest America R&D Center, Inc. Method and structure to develop a test program for semiconductor integrated circuits
US7846023B2 (en) 2003-03-27 2010-12-07 Microsoft Corporation Application-centric user interface techniques
US7383255B2 (en) 2003-06-23 2008-06-03 Microsoft Corporation Common query runtime system and application programming interface
US7380235B1 (en) 2003-06-27 2008-05-27 Microsoft Corporation Application program interface call replay tool
US7519951B2 (en) 2003-09-30 2009-04-14 International Business Machines Corporation Multi-attribute dynamic link library packaging
US20050091271A1 (en) * 2003-10-23 2005-04-28 Kasy Srinivas Systems and methods that schematize audio/video data
US7721254B2 (en) 2003-10-24 2010-05-18 Microsoft Corporation Programming interface for a computer platform
US8055907B2 (en) 2003-10-24 2011-11-08 Microsoft Corporation Programming interface for a computer platform
US7493592B2 (en) 2003-10-24 2009-02-17 Microsoft Corporation Programming interface for a computer platform
US20050114832A1 (en) 2003-11-24 2005-05-26 Microsoft Corporation Automatically generating program code from a functional model of software
US7392527B2 (en) * 2003-12-10 2008-06-24 Microsoft Corporation Driver-specific context for kernel-mode shimming
GB2409735A (en) 2003-12-30 2005-07-06 Ibm Method and system for change management of interfaces in distributed computer systems
US7694315B2 (en) * 2004-02-13 2010-04-06 Microsoft Corporation Schema-based machine generated programming models
US7444621B2 (en) 2004-02-20 2008-10-28 Microsoft Corporation Method and system for providing a common operating system
US20050216552A1 (en) * 2004-03-24 2005-09-29 Samuel Fineberg Communication-link-attached persistent memory system
US7707583B2 (en) 2004-05-20 2010-04-27 Sap Ag Robust sharing of runtime systems
US20050268308A1 (en) * 2004-05-28 2005-12-01 Nokia Corporation System and method for implementing a general application program interface
US8306991B2 (en) 2004-06-07 2012-11-06 Symantec Operating Corporation System and method for providing a programming-language-independent interface for querying file system content
US7941402B2 (en) 2004-09-24 2011-05-10 Sap Ag Storing and using classes in databases
US8898123B2 (en) 2005-06-07 2014-11-25 Rockwell Automation Technologies, Inc. Method and system for interface configuration via device-side scripting
US20060174252A1 (en) 2004-11-18 2006-08-03 Besbris David G Service versioning
US20060161910A1 (en) 2005-01-14 2006-07-20 International Business Machines Corporation Method, system and program product for automatically ensuring compatability of a code module loaded into a program-code environment
US7519713B2 (en) 2005-02-04 2009-04-14 Microsoft Corporation Mapping between object oriented and service oriented representations of a distributed application
US7950023B2 (en) 2005-02-04 2011-05-24 Microsoft Corporation Utilizing abstract descriptions to generate, exchange, and configure service and client runtimes
US7325007B2 (en) 2005-03-07 2008-01-29 Microsoft Corporation System and method for supporting non-native data types in a database API
US7685635B2 (en) 2005-03-11 2010-03-23 Microsoft Corporation Systems and methods for multi-level intercept processing in a virtual machine environment
US7716661B2 (en) 2005-03-16 2010-05-11 Microsoft Corporation Embedded device update service
US20060287890A1 (en) 2005-06-15 2006-12-21 Vanderbilt University Method and apparatus for organizing and integrating structured and non-structured data across heterogeneous systems
US7992140B2 (en) * 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
US20070039010A1 (en) 2005-08-15 2007-02-15 Microsoft Corporation Automatic generation of software code to facilitate interoperability
KR101198583B1 (ko) 2005-10-12 2012-11-06 한국과학기술원 메타데이터를 이용한 멀티미디어 미들웨어 장치와 그 관리방법 및 기록 매체
US7624257B2 (en) 2005-11-30 2009-11-24 International Business Machines Corporation Digital data processing apparatus having hardware multithreading support including a register set reserved for special class threads
US7716246B2 (en) 2005-11-30 2010-05-11 Microsoft Corporation Dynamic mechanism for providing metadata
US20070156913A1 (en) 2005-12-30 2007-07-05 Hiroyuki Miyamoto Method for enabling extension points through plug-ins
US9081585B1 (en) 2006-03-31 2015-07-14 The Mathworks, Inc. Interfacing a device driver with an application using a virtual driver interface and a strategy
ATE468556T1 (de) * 2006-04-13 2010-06-15 Microsoft Corp Virtuelles ausführungssystem für ressourcen- beschränkte geräte
US8104048B2 (en) 2006-08-04 2012-01-24 Apple Inc. Browsing or searching user interfaces and other aspects
ATE496350T1 (de) 2006-09-11 2011-02-15 Software Ag System zur verwaltung des lebenszyklus einer dienstorientierten architektur
GB0619147D0 (en) 2006-09-28 2006-11-08 Ibm A method, apparatus or software for managing software component version identifications in a componentised software system
US7971208B2 (en) 2006-12-01 2011-06-28 Microsoft Corporation Developing layered platform components
US8370818B2 (en) 2006-12-02 2013-02-05 Time Warner Cable Inc. Methods and apparatus for analyzing software interface usage
JP2009020705A (ja) 2007-07-12 2009-01-29 Hitachi Ltd Guiアプリケーション開発支援装置及び開発支援方法
US20090024986A1 (en) * 2007-07-19 2009-01-22 Microsoft Corporation Runtime code modification
US8667482B2 (en) 2007-08-10 2014-03-04 Microsoft Corporation Automated application modeling for application virtualization
KR100927442B1 (ko) 2007-08-16 2009-11-19 주식회사 마크애니 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법
US8364683B2 (en) 2007-08-30 2013-01-29 International Business Machines Corporation Importing and reconciling resources from disjoint name spaces to a common namespace
US20090132285A1 (en) * 2007-10-31 2009-05-21 Mckesson Information Solutions Llc Methods, computer program products, apparatuses, and systems for interacting with medical data objects
KR101528853B1 (ko) 2007-12-14 2015-07-01 삼성전자주식회사 Api 서비스 방법과 api 매쉬업 생성 방법, 장치 및기록매체
US8250524B2 (en) 2007-12-21 2012-08-21 Microsoft Corporation Contract programming for code error reduction
EP2088506A1 (en) * 2008-02-06 2009-08-12 Software AG Method and system for calling services from a remote client
US8484204B2 (en) 2008-08-28 2013-07-09 Microsoft Corporation Dynamic metadata
US9639375B2 (en) 2008-08-28 2017-05-02 Red Hat, Inc. Generation of language bindings for libraries using data from compiler generated debug information
US8595714B1 (en) 2009-03-04 2013-11-26 Amazon Technologies, Inc. User controlled environment updates in server cluster
GB0907171D0 (en) 2009-04-27 2009-06-10 Springsource Ltd Method and apparatus for automatically generating source code files in a storage unit
US9075667B2 (en) 2009-05-21 2015-07-07 Microsoft Technology Licensing, Llc Dynamic binding directed by static types
US8510729B2 (en) 2009-05-21 2013-08-13 Salesforce.Com, Inc. System, method and computer program product for versioning and deprecation of components of an application
US8495621B2 (en) 2009-06-15 2013-07-23 Microsoft Corporation Catalog-based software component management
US8983982B2 (en) 2009-12-22 2015-03-17 Bmc Software, Inc. Mechanism for deprecating object oriented data
US9483284B2 (en) 2011-02-25 2016-11-01 Red Hat, Inc. Version compatibility determination
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US9619779B2 (en) 2011-08-26 2017-04-11 Apple Inc. Client-side policy enforcement of developer API use
US20130055291A1 (en) 2011-08-31 2013-02-28 Microsoft Corporation Describing native application programming interfaces of an operating system with metadata
US9262183B2 (en) 2012-04-23 2016-02-16 Microsoft Technology Licensing, Llc Self-service composed web APIs
US8954479B2 (en) 2012-06-13 2015-02-10 International Business Machines Corporation End-to-end interoperability and workflows from building architecture design to one or more simulations
US9444899B2 (en) 2012-12-26 2016-09-13 Microsoft Technology Licensing, Llc Use of internet information services logging to collect user information in an asynchronous manner
US8793359B1 (en) 2013-11-25 2014-07-29 Software Ag Systems and/or methods for intelligently detecting API key domains

Also Published As

Publication number Publication date
CN102866884B (zh) 2016-09-28
US20130055292A1 (en) 2013-02-28
US9229790B2 (en) 2016-01-05
JP2014525623A (ja) 2014-09-29
RU2014107726A (ru) 2015-09-10
CN102866884A (zh) 2013-01-09
US20150020084A1 (en) 2015-01-15
RU2598600C2 (ru) 2016-09-27
CA2845480C (en) 2018-03-13
MX366619B (es) 2019-07-16
KR20140067017A (ko) 2014-06-03
TWI536263B (zh) 2016-06-01
MX339807B (es) 2016-06-10
BR112014004469A2 (pt) 2017-03-28
WO2013032506A1 (en) 2013-03-07
TWI556170B (zh) 2016-11-01
MX2014002474A (es) 2014-03-27
TW201619820A (zh) 2016-06-01
KR101896138B1 (ko) 2018-09-07
AU2011375748B2 (en) 2016-11-24
EP2751673A1 (en) 2014-07-09
TW201310341A (zh) 2013-03-01
CA2845480A1 (en) 2013-03-07
US8695021B2 (en) 2014-04-08
EP2751673A4 (en) 2015-03-04
AU2011375748A1 (en) 2014-03-06

Similar Documents

Publication Publication Date Title
JP5905577B2 (ja) オペレーティングシステムのネイティブプログラミングインターフェイスの他のプログラミング言語の中への投射
US11599346B2 (en) Accessing a migrated member in an updated type
US20200264846A1 (en) Generating dynamic modular proxies
JP2014525622A (ja) オペレーティングシステムのネイティブアプリケーションプログラミングインターフェイスのメタデータを用いた記述
US10459708B2 (en) Composing a module system and a non-module system
US10078497B2 (en) Bridging a module system and a non-module system
US11782774B2 (en) Implementing optional specialization when compiling code
US10387142B2 (en) Using annotation processors defined by modules with annotation processors defined by non-module code
US10983771B1 (en) Quality checking inferred types in a set of code
EP3164800B1 (en) Bridging a module system and a non-module system

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140925

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140925

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150523

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150924

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151027

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160125

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160316

R150 Certificate of patent or registration of utility model

Ref document number: 5905577

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

LAPS Cancellation because of no payment of annual fees