JP2009503677A - プログラムをデータオブジェクトとしてサポートするコンパイラ - Google Patents

プログラムをデータオブジェクトとしてサポートするコンパイラ Download PDF

Info

Publication number
JP2009503677A
JP2009503677A JP2008523884A JP2008523884A JP2009503677A JP 2009503677 A JP2009503677 A JP 2009503677A JP 2008523884 A JP2008523884 A JP 2008523884A JP 2008523884 A JP2008523884 A JP 2008523884A JP 2009503677 A JP2009503677 A JP 2009503677A
Authority
JP
Japan
Prior art keywords
expression
computer
semantic
data structure
recording medium
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.)
Pending
Application number
JP2008523884A
Other languages
English (en)
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 JP2009503677A publication Critical patent/JP2009503677A/ja
Pending legal-status Critical Current

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/47Retargetable compilers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • 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/436Semantic checking

Landscapes

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

Abstract

選択されたセマンティックオブジェクトがデータオブジェクトとして表現される言語をサポートするコンパイラを提供する。
データオブジェクトはプログラミング言語の能力を拡張するために多数の使い方が可能である。データオブジェクトはアプリケーションに渡され、そのアプリケーションのための実行可能命令を作成するために使用することができる。このようにすると、コンパイラのネイティブ言語で書かれた命令は、コンパイラのネイティブ言語と矛盾する言語のプログラムを受け付けるアプリケーションの制御のために使用することができる。コンパイラの構文検査(syntax checking)と変数バインディング(variable binding)能力は、コンパイラによって生成されたオブジェクトコードとは別のアプリケーションによって実行される命令のために使用することができる。データオブジェクトとして表現されたセマンティックオブジェクトは、ソースコードに含まれる明示的演算(express operations)に基づいて選択されることも、暗黙的型変換(implicit type conversion)に基づくこともある。

Description

本発明は、ソースコードファイル内の内部セマンティックオブジェクトをデータオブジェクトとして表現するコンパイラに関する。
場合によって、コンパイラプログラム命令をデータオブジェクトとして扱うことが望ましいことがある。この必要性は、例えば、コンピュータプログラマが別のアプリケーションのデータにアクセスするコンピュータプログラムを書いているときに起っている。例えば、あるプログラムをCプログラミング言語で書いているプログラマは、SQLプログラミング言語で書かれたクエリ(query)に応答するデータベースにアクセスしたい場合がある。Cプログラムからデータベースにクエリするには、CプログラマはSQLコマンドをストリングとしてCプログラムに挿入することができる。Cコンパイラはストリングを実行可能コードに変換しない。むしろCコンパイラは、プログラマによって入力された文字通りにそのストリングを格納する。
Cプログラムの実行時に、ストリングは、データベースのアプリケーションプログラミングインタフェース(application programming interface API)に渡される。APIはストリングをコンパイルまたは解釈し、データベースへの望みのアクセスを行なうための適当なコマンドをデータベースに与える。
Lisp/Scheme、MetaML、およびTemplate-Haskelなどの言語のコンパイラは、コードがソースコードファイル内に明示的に引用符で囲まれていれば、ソースコードファイル内にそのコードを表現するデータオブジェクトも作成する。
本発明は、ソースコードファイル内の内部セマンティックオブジェクト(internal semantic object)をデータオブジェクトとして表現するコンパイラを提供することを課題にしている。多くの場合、セマンティックオブジェクト(semantic object)は、プログラム命令をソースコード形体で構成する式(expression)になっている。
一側面では、本発明は、コンパイラによって使用される構文(syntax)に従って内部セマンティックオブジェクトを処理して該データオブジェクトを外部セマンティックデータ構造(external semantic data structure)として作成することに関する。データオブジェクトは多数の使い方が可能である。データオブジェクトは、アプリケーションに実行させる式または関数を表現することもあり、そのアプリケーションに関数または式を実行させるためにそのアプリケーションに与えられることもある。別の側面では、本発明は、データオブジェクトとして表現するための内部セマンティックオブジェクトを自動的に選択することに関する。コンパイラは、ソースコードを表現するデータオブジェクトを受け取るように構成されたメソッドにパラメータとして渡される外部セマンティックデータ構造を、そのメソッドが受け取る引き数の型に基づいて、内部セマンティックオブジェクトから選択的に作成し、これにより暗黙的型変換(implicit type conversion)が行なわれるようにしている。
以上の概要説明は、請求項に明確化されている本発明を限定するものではない。
なお、添付図面は一定の比率で描かれたものではない。図面において、各図に図示されている同一またはほぼ同一の各コンポーネントは類似符号で示されている。明確化のために、すべての図面においてすべてのコンポーネントに符号が付けられているとは限らない。
自身がコンパイルするソースコードのセマンティックオブジェクトからデータオブジェクトを選択的に作成するコンパイラがあると、コンピュータ言語がよりフレキシブルになることはすでに認識されている。データオブジェクトは、コンパイルされるソースコード内在のセマンティックオブジェクトから、該セマンティックオブジェクトの構文データ表現を収めているデータオブジェクトへ、コンパイル時暗黙的型変換(compile-time implicit type conversion)を使用して作成されることがある。データオブジェクトは、ラベル、式、デリゲート(delegate)、メソッド、クラス、ステートメントブロックまたは他の任意の単位やソースコード命令をグループ化したものなどの、如何なる望みの形体の内部セマンティックオブジェクトに対しても作成される。以下の説明では、内部セマンティックオブジェクトの例としてコンピュータプログラム命令、特に式が使用されている。
暗黙的型変換(implicit type conversion)は、プログラマが所与のコンパイル時の型Tから(ランタイム時の)System.Typeインスタンスを取得できるようにする(T)構成体(construct)の型を一般化したものと見ることができる。しかし、データオブジェクトはなんらかの適当な方法で内部セマンティックオブジェクトから作成されることもある。
このようなコンパイラは、他のアプリケーションにアクセスするアプリケーションの開発を単純化することができる。セマンティックオブジェクトが、コンパイラのネイティブ言語以外のプログラミング言語の命令に応答するアプリケーションによって実行されることを目的としたコンピュータプログラム命令である場合に、そのアプリケーションにアクセスするコードが、そのプログラムの残りの部分と同じソースコード言語で書かれていることがある。さらに、暗黙的型変換によると、プログラマはコードの式を明示的に引用符で囲む必要がなくなる。
このようなコンパイラを使用すると、コンピュータプログラマは、アプリケーションへのアクセスを制御する命令をコンパイラのネイティブ言語で書くことができる。命令はそのネイティブ言語で書かれるので、コンパイラは、命令を単にストリングとしてストアする代わりにその命令を処理でき、これにより、コンパイラはコンパイル時に構文エラーを検出できるという利点が得られる。さらに、コンパイラは、他の場合にはプログラマによって手作業で行なわれていた名前バインディング(name binding)と変数キャプチャ(variable capture)とを行なうことができる。その結果、コンパイラの外部で利用可能なコンピュータプログラム命令を表現しているデータオブジェクトはそのホスト言語のセマンティックを反映することがあり、例えば、解決された変数名、チェックされた型またはホスト言語のセマンティックに従って挿入された変換を含んでいることがある。重要なことは、この処理はコンパイル時に行なうことができるので、単にストリングとして処理されたコードが実行されるときランタイム時に発生する可能性のあるエラーが減少することである。
このようなコンパイラが使用されるシステムの例として、図1はアプリケーション環境100を簡略ブロック図で示している。アプリケーション環境100は、WINDOWS(登録商標)オペレーティングシステムが稼動しているデスクトップコンピュータ上で作成されることがある。なお、この特定アプリケーション環境は本発明を限定するものではない。適切であれば、どのようなオペレーティングシステムでも使用が可能である。
さらに、適切であれば、どのようなハードウェアでもアプリケーション環境100を構築するために使用できる。適切であれば、どのようなタイプの1または2以上のコンピュータを使用してもホストアプリケーション環境100を構築することが可能であり、これらのコンピュータはスタンドアロンまたはネットワーキング構成で構成されていることがある。
WINDOWSindows(登録商標)オペレーティングシステムの下では、複数のアプリケーションがアプリケーション環境で実行されていることがある。図示の実施形態におけるアプリケーション環境100では、コンパイラ110を含むアプリケーションとデータベースアプリケーション150が実行されている。従来と同じように、これらのアプリケーションの各々は、コンピュータ読み取り可能な記録媒体上にストアされたコンピュータ実行可能命令群から構成されていることがある。アプリケーション環境100では、アプリケーションの関数を実行するようにこれらの命令が実行されていることがある。
コンパイラ110はソースコード112に作用する。ソースコード112は、アプリケーション環境100を使用して一人または二人以上のプログラマによって開発されているプログラムを定義する複数のセマンティックオブジェクトを含んでいることがある。ソースコード112は都合のよい方法であれば、どのような方法でも作成されることがあり、アプリケーション環境100に関連するコンピュータ読み取り可能な記録媒体上にストアされていることがある。例えば、人間のプログラマはキーボード(図示せず)からテキストをタイプし、それをアプリケーション環境100に関連するファイルにストアすることでソースコードを作成することがある。
ソースコード112内のセマンティックオブジェクトは、人間のユーザによって開発中の望みのアプリケーションを定義することができる。図示の実施形態では、ソースコード112は、データベースアプリケーション150によって維持管理されているデータをストアし、リトリーブし、さもなければアクセスするアプリケーションを定義している。しかし、ソースコード112によって実現されたこの特定アプリケーションは本発明を限定するものではなく、ソースコード112は望みのアプリケーション用に準備されたプログラムを表わしている場合もある。
コンパイラ110は、ソースコード112内に収められたセマンティックオブジェクトに作用する。従来のコンパイラと同じように、コンパイラ110はソースコード112内のセマンティックオブジェクトを、オブジェクトコード120としてストアされたコンピュータ実行可能命令に変換することができる。ソースコード112と同じように、オブジェクトコード120も、アプリケーション環境100に関連するコンピュータ読み取り可能な記録媒体に格納されていることがある。なお、オブジェクトコード120は、適切であればどのような方法でも、適切であればどのようなロケーションにでも格納しておくことができる。
オブジェクトコード120は、この例では、アプリケーション環境100内で実行されるコンピュータアプリケーションを形成している。なお、オブジェクトコード120が実行されるロケーションは本発明を限定するものではない。オブジェクトコード120は、コンパイラ110が実行されている同じコンピュータ上で実行されることがある。これとネットワークで結ばれたコンピュータ上で実行されることもある。可能な変形の別の例として、オブジェクトコード120は、移動可能媒体上に記録されて、コンパイラ110が動作しているコンピュータに接続されていない複数のコンピュータに分散されることもある。
オブジェクトコード120を作成するほかに、コンパイラ110はソースコードファイル112内に収められたセマンティックオブジェクトを表現する1または2以上のデータオブジェクトも作成する。図示の実施形態では、データオブジェクトとして表現されたセマンティックオブジェクトは、コンパイラ110が作用するソースコード言語で書かれた式になっている。なお、以下では、このソースコード言語はコンパイラの「ネイティブ言語(native language)」と呼ぶことにする。ソースコードファイル112内に現れることがある式には、バイナリ式(binary expression)、単項式(unary expression)、3進式(ternary expression)、定数式(constant expression)、フィールドアクセス式(field access expression)、プロパティアクセス式(property access expression)、メソッドコール式(method call expression)、オブジェクト初期化式(object initializer expression)、オブジェクト作成式(object creating expression)、コレクションおよびアレイ初期化式(collection and array initializer expression)、アレイ作成式(array creation expression)、キャスト式(cast expression)、パラメータ参照式(parameter reference expression)、ラムダ式(lambda expression)、セマンティックツリー呼び出し式(invocation of semantic trees expression)、フリー変数キャプチャ式(free variable capture expression)または外部変数キャプチャ式(outer variable capture expression)がある。
データオブジェクトはコンパイラ110の外部で使用されることがあるが、コンパイラ110は、内部セマンティックオブジェクトからこれらのデータオブジェクトを作成するときそのネイティブ言語の構文ルールを適用することがある。例えば、コンパイラは、型チェック(type checking)、名前バインディング(name binding)、変数キャプチャ(variable capture)、多重定義解決(overload resolution)、エラーチェックまたはコンパイルされるプログラムとして内部で使用されるセマンティックオブジェクトの表現を作成する際に従来からコンパイラによって実行されている他の処理ステップを含む、1また2以上の演算(operation)を実行することがある。データオブジェクトはデータ構造に格納されることがあり、フィールドには、これらのコンパイラ演算の1つまたは2つ以上が内部セマンティックオブジェクトに適用されたときの結果を表わしているデータが収められている。このような構造はセマンティックデータ構造と呼ばれることがある。
アプリケーション環境100では、内部セマンティックオブジェクトを表現するためにコンパイラ110によって作成されたデータオブジェクトの一部はコンパイラ110の外部で使用される。図1の例では、データオブジェクトはAPI140に渡され、内部セマンティックオブジェクトによって指定された演算を実行するためにデータベース150を制御する際に使用される。
以上のように、別のアプリケーションを制御することを目的としたソースコード命令が「引用符」で囲まれて、ストリングまたは他の文字通りの形体でアプリケーションに渡されていた従来技術とは対照的に、ソースコード命令を表現する外部データ構造が用意されている。図示の実施形態では、内部セマンティックオブジェクトは式であり、外部セマンティックデータ構造は式ツリー(expression tree)130になっている。式ツリー130は、アプリケーション環境100に関連するコンピュータ読み取り可能な記録媒体にデータ構造としてストアされていることがある。図示の実施形態では、式ツリー130は、オブジェクトコードが実行されるコンピュータにアクセス可能であるコンピュータ読み取り可能な記録媒体上にストアされている。
各々の式ツリーは、一般的な形式 (generic form)でストアされていることがある。式ツリーを一般的な形式で格納すると、これらが使用される任意の特定コンテキスト用に容易にカスタマイズできるので、式ツリーを複数のコンテキストの中で使用することが可能になる。
コンパイラは、式または他のセマンティックオブジェクトの一般的な表現を、オブジェクトコードを形成するプロセスの一部として形成することがよくある。図示の実施形態では、式ツリー130は、式が処理されるときの式を表現するために従来公知なように、コンパイラが内部で使用する形式になっていることがある。なお、ここで説明している実施形態では、既存コンパイラとは異なり、選択されたセマンティックオブジェクトを表現しているデータ構造は、コンパイラ内部で処理するためにアクセスできるように、あるいはコンパイラの外部で処理するためにアクセスできるように格納されている。
図示の実施形態では、式ツリー130は、ソースコード112の命令によって指定された演算を実行するようにデータベースアプリケーション150を制御するために使用されることがある。ソースコード112からの命令を表現している式ツリーはAPI140に渡される。この例では、API140はデータベースアプリケーション150へのアプリケーションプログラムインタフェースである。
API140は、式ツリー130内に収められた式の一般的表現を、例えば、データベースアプリケーション150などによって実行されるフォーマットの命令に変換する。上述したように、公知コンパイラは、実行可能コードを形成する際の中間ステップとして式の表現を作成する部分を含んでいる。公知コンパイラは、式の一般的表現をデータベースアプリケーション150によって実行可能な形体の実行可能コードに変換する、第2部分を含んでいる。従って、API140は、データベースアプリケーション150によって実行可能なフォーマットにコードをコンパイルする公知コンパイラ部分の機能に似ている。具体的例として、データベースアプリケーション150がSQLクエリに応答する場合には、API140は、現在公知であるか、将来開発されるかに関係なく、式の一般的表現をデータベースアプリケーションによって実行可能なコードに変換するためにSQLコンパイラで使用されるテクノロジを使用して実現されていることがある。
一実施形態では、ソースコード112内のセマンティックオブジェクトのうち選択したサブセットだけが外部データ構造として表現されている。コンパイラ110は、ある種のセマンティックオブジェクトが外部データオブジェクトとして表現されるはずであることを示すソースコード112の構造体(construct)を認識するように作られていることがある。これらのセマンティックオブジェクトは、オブジェクトコード120を生成するためにこれらのセマンティックオブジェクトを使用する代わりに、あるいは使用することに加えて外部データ構造として表現することが可能である。
図1に図示の実施形態では、外部データ構造として表現されるように選択されたセマンティックオブジェクトは、アプリケーションに実行させる命令となるセマンティックオブジェクトである。コンパイラ110は、外部セマンティックデータ構造の中で表現されるセマンティックオブジェクトを特定する構造体をサポートしている。図2Aから図2Bまでは、望みのデータ構造を生成するためにコンパイラ110を制御できる、ソースコードファイル112内の命令の構文を示している。図2Aは、ソースコード形体の命令のシーケンスを収めているソースコード112の部分を示している。命令210、212および214は、命令がコンパイラ110によってどのような扱い方をされるかを示している。
命令210はデリゲート(delegate)Rの宣言である。このデリゲートRは関数を参照するために使用される。デリゲートRは、例えば、関数を指すポインタとして実現される。ここで説明している実施形態では、コンパイラ110はデリゲートRのためのストレージスペースを割り当てるが、デリゲートRのためのオブジェクトコードは生成しない。
命令212は関数fの宣言である。この例では、関数fは整数型(integer type)である引き数xを受け取り、ブール型(Boolean type)の値を戻してくる。戻される値は、引き数xの値が10より大であるかどうかによって決まる。コンパイラ110は、引き数を処理するために必要な演算を実行するオブジェクトコードを作成し、戻される値を計算する。このコードは、関数fがコンピュータプログラム内の別の場所でコールされると実行される。
上記とは対照的に、命令214は式の宣言を表わしている。命令214は「Expression」のキーワードで始まり、これは、コンパイラ110に対して、式の引き数を表現している外部データ構造を作成するように指示する。この例では、式の引き数は関数fと同じ演算を実行する関数eを指定している。なお、コンパイラ110は、コンパイラが命令212を処理するとき作成されるオブジェクトコードではなく、命令214を処理するとき外部データ構造を作成する。
図2Bは、命令がデータオブジェクトを作成することを示している別の状況を示す図である。図2Bは、変数yとzが定義されている命令220と222を示している。コンパイラ110は、変数yとzの各々用のメモリロケーションを割り振り、これらのメモリロケーションを指定値に初期化するコンピュータ実行可能命令をオブジェクトコードに追加することにより命令220と222を処理することがある。
命令224は「Expression」のキーワードで始まり、これは、データオブジェクトがそこから作成される式をその命令が定義していることを知らせている。この例では、データオブジェクトによって表現される式からは、式xに対する引き数が変数yとzの値の積より大であるかどうかを示すブール値が得られる。
命令224内に収められた式を表現する外部データ構造を準備するときに複雑さが発生している。式は、式の外側で定義され、ランタイム時引き数として用意されていない変数に作用し、そのような変数は「フリー変数(free variable)」または「外部変数(outer variable)」と呼ばれることがある。これらの変数の値はプログラムの実行中に変化することがある。従って、ここで説明している実施形態では、命令224の中の式を表わしているデータオブジェクトには、データオブジェクトの作成時に変数の値がロードされない。むしろ、データオブジェクトは情報への参照を含むように作成され、変数yとzの現在値が得られるようにしている。同じような問題はある式が別の式を参照するときに発生している。第2式への該当参照は、第1式を表わしているデータ構造に含まれている必要がある。ある式から別の式への参照を実現する1つ方法は、ある外部セマンティックデータ構造の中に別の外部セマンティックデータ構造を参照するメカニズムを組み入れることである。
変数yとzの値にアクセスするために必要な情報の表現が適切であれば、どのような表現でもデータオブジェクトに組み入れることができる。例えば、「funcletting」と名付けたプロセスが使用されることがある。Funclettingでは、コードの内側のフリー変数または部分式(sub-expression)をデータオブジェクトとしてキャプチャすることが行なわれる。フリー変数または部分式を表現する情報の基礎となる表現は、適切であればどのような形体にすることもできる。具体例として、データオブジェクトは、これらの値がストアされているメモリロケーションのアドレスを収めていることがある。メモリアドレスは絶対メモリアドレスであることも、スタックフレームまたは他のデータ構造までのオフセットであることもある。フリー変数または外部変数の値がどのように示されるかの別の例として、変数の値を戻してくる関数へのポインタが使用される場合がある。
Funclettingの使用は、図2Bに示すような方法で整数変数にアクセスすることに限定されない。他の型の変数への参照が行なわれることもある。
式内で使用される変数の値が式の実行時にどこから得られるかを示す情報を与えると、式を表現するデータ構造は、その実行時に望みの演算を実行する実行可能命令に即時に変換されることがある。望みの演算は、実行可能命令への変換がコンパイル時に行なわれるか、ランタイム時に行なわれるか、あるいはその中間で行なわれるかに関係なく、実行されることがある。さらに、望みの演算は、データオブジェクトから生成されたオブジェクトコードがいつ実行されるかに関係なく実行されることがある。
図3Aを参照して説明すると、図は、ソースコード112内のセマンティックオブジェクトをストアするデータオブジェクト310の表現を示している。データオブジェクト310は、適切であればどのようなコンピュータ読み取り可能な記録媒体にも実現することができ、セマンティックオブジェクトを表現するのに適切な形体であれば、どのような形体にすることもできる。この例では、セマンティックオブジェクトはソースコード112の中で定義された式であり、データオブジェクトは式ツリーとして編成されている。式ツリーには複数のフィールドが含まれ、その各々には、式を評価するときに役立つ情報が収められている。式ツリーはこの分野で公知であり、コンパイラ110は、適切であればどのような方法でも、ソースコード112内の式から式ツリーを構築することができる。
この例では、式ツリーは、データフィールド312と314および演算フィールド316を含む、複数のフィールドで表わされている。データフィールド312と314にはデータがストアされることがあり、演算フィールドは316には、フィールド312と314内のデータに対して実行される演算のインジケータがストアされることがある。
データオブジェクト310は、別のデータフィールド318と別の演算フィールド320を含んでいる。演算フィールド320には、フィールド318内のデータに対して実行される演算のインジケータおよび演算フィールド316で示された演算の結果がストアされることがある。さらに、データオブジェクト310は結果フィールド322を含んでいる。結果フィールド322には、データオブジェクト310で表わされた式の評価結果をストアしておくロケーションが指定されていることがある。
図3Aに示すように式ツリーを表わしているデータオブジェクト310は、データオブジェクトの一例である。適切であれば、どのような形体のデータオブジェクトでも使用されることがある。例えば、追加のフィールドが含まれていることがあるが、単純化のために図示されていない。例えば、データフィールドと演算フィールドはいくつでも使用されることがある。さらに、データオブジェクトはデータフィールドの数または演算フィールドの数を示すフィールドを含んでいることもあれば、式を表現するのに役立つフィールドを含んでいることもある。
図3Bを参照して説明すると、図は第2データオブジェクトを示している。データオブジェクト350は、データオブジェクト310と同じように、354と358のようにデータを指定するフィールドと356と360のようにそのデータに対して実行される演算を指定するフィールドを含んでいる。同様に、データオブジェクト350は、結果がどこに格納されるかを指定する結果フィールド360を含んでいる。データオブジェクト350がデータオブジェクト310と異なっている点は、データフィールド350には参照フィールド352が含まれていることである。この例では、参照フィールド352は、演算フィールド356で示された演算を実行するために使用されるデータがどこから得られるかを示すインジケータを含んでいる。参照フィールド352は、そこからデータが取得できる直接または間接メモリアドレスや他のインジケータを収めていることがある。例えば、参照フィールド352は該当データを検索する関数のアドレスを収めていることがある。
図3Aと図3Bは、外部データ構造の実現例を示す図である。適切であれば、セマンティック式のどのような表現でも、式を表わすために使用されることがある。もっと一般的には、式や他の内部セマンティックオブジェクトを表現するために他のデータ構造が採用されることもある。
図4は、コンパイラ110がソースコード112をオブジェクトコード120および式ツリー130(図1)のような外部データ構造に変換するために動作するときのプロセスを示す図である。このプロセスはプロセスブロック410から開始する。ブロック410において、コンパイラは式を特定するためにソースコード112を構文解析(parse)する。ソースコードの構文解析はコンパイラでは公知のオペレーションである。ブロック410での処理は、それが現在公知であるか、将来開発されるかに関係なく、従来のコンパイラと同じように実行されてよい。
ある式がソースコード112から構文解析されると、その式の処理はブロック412から継続される。ブロック412において、コンパイラは式の構文を検査する。この構文検査はコンパイラの公知機能であり、ブロック412における処理は、それが現在公知であるか、将来開発されるかに関係なく、従来のコンパイラと同じように実行されてよい。構文検査では、ブロック410で特定された式を、コンパイラが処理する言語で許されている式を定義しているルールセットと比較することが行なわれる。例えば、コンパイラ110がCプログラミング言語の変種で書かれたソースコードを処理する場合は、ブロック412で適用される構文ルールは、Cプログラミング言語の従来のルールが、ソースコード内の式に基づいてデータオブジェクトの作成または使用を定義しているルールで補強されたものが使用されることがある。例えば、従来の構文ルールは、命令214または224の中で使用されているような、「Expression」識別子の使用を許している構文定義ルールで補強されていることがある。他の従来の構文ルールは、式をデータオブジェクトとして表現すると可能にされる追加処理能力を反映するように改良された形体で使用されることもある。
ここで説明している実施形態では、ブロック412での構文検査はソースコード112内のすべての命令に適用され、その中には、最終的にアプリケーションプログラムに渡されて実行されるデータオブジェクトに変換されることを目的とした命令が含まれている。このようにすると、データベースアプリケーション150のような、アプリケーションプログラムによって実行されるように開発されたソードコードの中のエラーは、コンパイル時に検出することが可能になる。コンパイル時のエラー検出がしばしば望ましいとされるのは、ランタイム時のエラーが回避されるからである。
ブロック412で行なわれた構文検査で構文エラーが見つかったときは、プロセスはプロセスブロック414で指示されたエラー処理ルーチンに進むことがある。エラー処理ルーチンは、コンパイラ110の人間ユーザに構文エラーを通知する、エラーをログに記録する、構文エラーを自動的に訂正する、構文エラーのある式を処理中のソースコードから除去する、といった望みのアクションを実行することがある。
構文検査に続いて、処理はブロック413に進む。ブロック413において、式の中間表現が生成される。ソースコード式の中間表現を生成することはコンパイラの公知機能である。中間表現は、冗長式を除去する、変数および他のプログラムオブジェクトに必要なメモリ量を判断する、といったように、コンパイル中のプログラムでの種々の処理ステップを容易にするために使用されることが多い。多くの中間表現がコンパイラで使用されることは公知である。適切であれば、どのような中間表現でも使用されることがある。この例では、中間表現には、ソースコードの中の式を記述している式ツリーが含まれている。この例では、式を表現するように形成された外部セマンティックデータ構造は、コンパイラ110によって形成される式の中間表現と同じにすることができる。なお、外部セマンティックデータ構造とコンパイラによって内部で使用される中間表現は異なっていることがある。
プロセスは判定ブロック416に進む。判定ブロック416において、ブロック410で特定された式が、外部セマンティックデータ構造を残しておく必要のある式を表わしているかどうかのチェックが行なわれる。図2Aと図2Bを参照して上述したように、「Expression」インジケータを使用する式には、オブジェクトコードではなく外部セマンティック構造が用意されている。もっと一般的には、データオブジェクトが生成されることを示す明示的演算がソースコードの中にあるか、あるいはデータオブジェクトが外部で使用されるとの暗黙的インジケータがある場合には、どのセマンティックオブジェクトにもデータオブジェクトが残されることがある。
外部データオブジェクトが式用に用意されるときは、処理はブロック418に進む。ブロック418において、式の中間表現を収めているデータオブジェクトが格納される。図4の例では、データオブジェクトの各々は式ツリーをストアするデータ構造である。なお、処理される式または他のセマンティックオブジェクトがどのような型であるかに応じて、適切であれば、どのような形体のデータオブジェクトでも採用されることがある。
そのあと、処理は判定ブロック430に進む。判定ブロック430において、ソースコード中に式が残っているかどうかのチェックが行なわれる。式が残っていれば、処理はブロック410に戻り、そこで次の式が構文解析される。そのあと、処理は特定された式から継続する。逆に、ソースコードの中に式が残っていなければ、図4のプロセスは終了する。その処理時に、特定された式からコードを生成させることが判定ブロック416で判断されたときは、処理は判定ブロック420に進む。判定ブロック420において、特定された式が、その式を実現するための実行可能コードが存在しないようなデータブロックとして表わされた式を使用しているかどうかのチェックが行なわれる。
ある式が先行式を参照し、データオブジェクトだけがその先行式の表現として利用可能であるときは、処理はブロック422に進む。ブロック422において、先行式を表わしているデータオブジェクトはそのデータオブジェクトからオブジェクトコードを生成するように処理される。そのあと、処理はブロック424に進み、そこで処理中の式に対してオブジェクトコードが生成される。生成されたコードには、処理中の式から直接に生成されたオブジェクトコードおよび先行式を表わしているデータオブジェクトから生成されたオブジェクトコードが含まれていることがある。
逆に、処理中の式が、実行可能コードがまだ生成されていない別の式を参照していないときは、処理はブロック424に進む。ブロック424において、オブジェクトコードがその式に対して生成される。
データオブジェクトのように、式の中間表現からオブジェクトコードを生成することはコンパイラの公知機能である。オブジェクトコードは、現在公知であるか、将来開発されるかに関係なく、従来のコンパイラで使用されている手法を用いてブロック422と424で生成されることがある。
オブジェクトコードがある式に対して生成されると、処理は判定ブロック430に進む。判定ブロック430において、ソースコード112に式が残っているかどうかのチェックが行なわれる。式が残っている場合は、処理はブロック420に戻り、追加の処理が行なわれる。式が残っていない場合は、プロセスは終了する。
図4は、コンパイラ110が動作するときの1つのプロセスを示している。コンパイラ110は他のプロセスステップを取り入れていることがあり、その中には、従来のコンパイラによって使用されているプロセスステップが含まれている。さらに、図4に図示のプロセスステップの実行順序は単なる例示である。プロセスステップは、適切であれば、どのような順序でも取り入れることができる。例えば、ソースコードファイル全体は、式が処理される前に構文解析されることがある。さらに、一部のプロセスステップはパラレルに取り入れられていることがある。
図2Aと図2Bは、外部データ構造として表現されるべきセマンティックオブジェクトを特定する明示的演算がソードコード112に組み入れられていることを示している。コンパイラ110は、代替的にまたは付加的に、外部データ構造として表現されるべきセマンティックオブジェクトを他の方法を用いて特定することがある。いくつかの実施形態では、外部セマンティックデータ構造として表現されたセマンティックオブジェクトを、暗黙的型変換を用いて特定することが望ましいことがある。図5A、図5Bおよび図5Cは、暗黙的型変換を用いる利点を示している。
図5Aは、APIの一部を実現できるコード断片(code fragment)512を示す図である。この例では、コード断片512は、API140(図1)の一部になっている。コード断片512内の命令520は、API140のメソッドが定義されるクラスを定義している。
コード断片512には、「Where」と名付けたメソッドを定義する命令522が含まれている。命令522で定義されたメソッドは引き数524をもっている。引き数524には型が関連付けられている。図5Aの例では、引き数524は「Func」型が関連付けられている。命令522の中で定義されたメソッド「Where」がコールされたときは、このメソッドは「Func」型のパラメータを受け取るはずである。このようなパラメータは、例えば、デリゲート(delegate)として渡されることがある。
コード断片512の中で定義されたメソッドは本体526を含んでいる。本体526が実行されると、メソッド本体526内の引き数への参照の結果として、そのデリゲートがパラメータとして渡された関数に対応してコンパイラ110によって準備されたオブジェクトコードが実行される。
図5Bは、引き数がAPIのメソッドに渡されるときの代替形体を示している。この例では、メソッドはデリゲート型が未認識である引き数内に定義されている。図5Bに図示のコード断片542では、命令550はAPIのメソッドが定義されているクラスを定義している。命令522と同じように、命令552は「Where」と名付けたメソッドを定義している。命令552で定義されたメソッドも引き数を受け取る。図5Bの例では、引き数554は「Expression」構造体を使用している。この構造体の使用は、命令552で定義されたメソッドがコールされたとき、外部セマンティックデータ構造の形体の引き数が命令552に渡されることを示している。
命令552で定義されたメソッドはメソッド本体556を含んでいる。本体556が実行されると、引き数554がメソッド本体556内で参照されたとき、パラメータとして渡された外部セマンティックデータ構造がアクセスされる。メソッド本体556は、例えば、データベース150にアクセスするコマンドを生成するためにデータ構造を使用することがある。
図5Aと図5Bは、APIを開発しているプログラマが、そのAPIによって実行される演算を示すパラメータをメソッドが受け取るときの異なるメカニズムを指定できることを示している。どちらのケースも、そのAPIのユーザがソースコードプログラムを準備するとき、コンパイラ110のネイティブ言語を使用して望みの演算シーケンスを指定することができる。一方のケースでは、これらの命令はコンパイラ110によって実行可能オブジェクトコードに変換され、他方のケースでは、これらのソースコード命令はデータ構造に変換され、そのデータ構造はAPI140によってデータベース150に対するコマンドに変換される。API内の各メソッドが該当型のパラメータを受け取ることを確かめる1つの方法は、コードがコールするメソッドの引き数に一致する型のパラメータを使用してAPI内のメソッドをコールするプログラムを、APIのユーザに書かせることである。なお、API140の各メソッドがそのソースコードの中の命令をどのように処理するかを、ソースコード112を開発するプログラマが理解しないで済むようにするために、暗黙的型変換がコンパイラ110に採用される。
図5Cは、暗黙的型変換が使用されるときソースコード112内に組み込まれることがあるコード断片552を示している。コード断片552はメソッド「Where」へのコールを行なう命令560を含んでいる。図5Cに示すように、命令560でコールされるメソッドは「Where」メソッドに渡されるパラメータとして式562を含んでいる。図5Cでは、コンパイラ110が式562をオブジェクトコードにコンパイルされる式として扱うか、外部セマンティックデータオブジェクトに変換される式として扱うかは、明示的に示されない。従って、メソッドをコールするプログラムを書くユーザは、どのような望みの方法でも式を指定することができる。それにもかかわらず、コンパイラ110は、式562を該当フォーマットで表現するために暗黙的型変換に頼ることがある。コンパイラ110は、コールされたメソッドが要求する引き数の型を解析し、式562を該当する型に変換することがある。例えば、命令560でコールされたメソッドが命令522(図5A)内で定義された形体になっていれば、コンパイラ110は式562をオブジェクトコードに変換し、そのオブジェクトコードへのデリゲート(delegate)を、命令560でコールされたメソッドにパラメータとして渡すことがある。上記とは別に、命令560でコールされたメソッドが命令552(図5B)に示す形体で定義されている場合は、コンパイラ110は、式を外部セマンティックデータ構造に変換させることを、メソッドに渡された引き数の型から認識することがある。そのあと、その外部セマンティックデータ構造は、命令560でコールされたメソッドに渡されることがある。
暗黙的型変換によると、プログラマがソースコード112を生成するときの柔軟性が大幅に向上する。コンパイラ110は、外部セマンティックデータオブジェクトとして表現する該当命令を選択してAPI140に渡すので、プログラマは、API140のメソッドごとに引き数の特定表現を知る必要がなく、データオブジェクトに渡される引き数を明示的に引用符で囲む負担から解放される。
以上、本発明の少なくとも1つの実施形態のいくつかの側面を説明してきたが、この分野の精通者ならば当然に理解されるように、種々の改変、変更、および改良は容易に行なうことができる。
例えば、上述したように、式の外側で指定された型をもつものとしてパラメータが特定されている式用に形成されたデータオブジェクトはそのパラメータの一般的表現を含んでいる。データオブジェクトのパラメータは、そのパラメータの型情報がある場合であっても、データオブジェクトの中で一般的に表現することが可能である。さらに、そのパラメータの型以外のセマンティックオブジェクトの他の側面は、データオブジェクトから実行可能コードを生成するために使用されるコンテキストから得られる特定情報と共に、データオブジェクトの中で一般的に表現されることがある。
また、データオブジェクトとして表現されることがあるセマンティックオブジェクトの例として式が使用された。メソッドやクラスのように、どのような望みのセマンティックオブジェクトでも、データオブジェクトとして表現されることがある。
このような改変、変更および改良は本明細書の一部となるものであり、本発明の精神と範囲内に属するものである。従って、上述した説明と図面は単なる例示である。本発明の上述した実施形態は多数の方法で実現することができる。例えば、これらの実施形態は、ハードウェア、ソフトウェアまたはハードウェアとソフトウェアを組み合わせたもので実現されることがある。ソフトウェアで実現されるときは、ソフトウェアコードは、それがシングルコンピュータに用意されているか、複数のコンピュータ間に分散されているかに関係なく、適当であれば、どのようなコンピュータまたはコンピュータの集合上ででも実行させることができる。
また、概要を上述してきた種々のメソッドまたはプロセスは、種々のオペレーティングシステムまたはプラットフォームのいずれかを採用している1または2以上のプロセッサ上で実行可能なソフトウェアとしてコーディングされていることがある。さらに、そのようなソフトウェアは、いくつかの適当なプログラミング言語および/または従来のプログラミングまたはスクリプト記述(scripting)ツールのいずれかを使用して書かれていることがあり、実行可能マシン言語コードとしてコンパイルされていることもある。
この点に関して、本発明は、コンピュータ読み取り可能な記録媒体(または複数のコンピュータ読み取り可能な記録媒体)(例えば、コンピュータメモリ、1または2以上のフロッピディスク、コンパクトディスク、光ディスク、磁気テープなど)として実現されていることがあり、これらのコンピュータ読み取り可能な記録媒体には、1または2以上のコンピュータまたは他のプロセッサ上で実行されたとき、上述した本発明の種々実施形態を実現するメソッドを実行する1または2以上のプログラムが符号化されている。1または2以上のコンピュータ読み取り可能な記録媒体は、そこに格納されたプログラム(1または2以上)が1または2以上の異なるコンピュータまたは他のプロセッサ上にロードされて、上述した本発明の種々側面を実現できるように可搬的にすることができる。
本明細書において「プログラム」または「ソフトウェア」という用語は、上述した本発明の種々側面を実現するようにコンピュータまたは他のプロセッサをプログラミングするために採用できる任意タイプのコンピュータコードまたはコンピュータ実行可能命令セットを指すために広義の意味で使用されている。さらに、当然に理解されるように、本実施形態の一側面によれば、その実行時に本発明のメソッドを実行する1または2以上のコンピュータプログラムは、シングルコンピュータまたはプロセッサ上に置いておく必要がなく、複数の異なるコンピュータまたはプロセッサ間にモジュール方式で分散させて、本発明の種々側面を実現することが可能である。
コンピュータ実行可能命令は、プログラムモジュールのように、1または2以上のコンピュータまたは他のデバイスによって実行される多数の形体になっていることがある。一般的に、プログラムモジュールとしては、特定のタスクを実行し、あるいは特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などがある。代表例として、プログラムモジュールの機能は、種々の実施形態において望み通りに組み合わせることも、分散させることもできる。
上述した実施形態では、「オブジェクトコード」が説明されている。この用語も、コンパイルされたコードを指すために広義の意味で使用されることを目的としている。この用語には、実行可能ファイル、DLLを収めているファイルまたはコンパイラ出力の他の表現が含まれることもある。
さらに、「コンパイラ」という用語も広義の意味で使用され、「オブジェクトコード」が生成される時間は本発明を制限するものではない。例えば、コンパイラという用語には、「ジャストインタイム(Just In Time JIT)コンパイラまたはインタープリタとも呼ばれることがあるアプリケーションが含まれることもある。
さらに、「ファイル」という用語も論理的に関係のあるデータを指すために広義の意味で使用されている。この用語は、オペレーティングシステムによるデータのどのような特定の編成にも、記憶媒体上のどのような物理的位置にも制限されるものではない。
本発明の種々の側面は単独で使用されることも、組み合わせて使用されることも、あるいは上述してきた実施形態の中で具体的に説明されていない種々の構成で使用されることもあり、従って、上記説明の中で記述されている、あるいは図面に図示されているコンポーネントの明細と構成に適用されることに限定されない。例えば、ある実施形態で説明されている側面は、他の実施形態で説明されている側面とどのような方法でも組み合わせることが可能である。
「第1」、「第2」、「第3」などのように順序を示す用語が請求項の要素を修飾するために使用されているが、そのこと自体は、ある請求項の要素が他の請求項の要素に優先することも、先行することも、その順序も、あるいはメソッドのアクトが実行される時間的順序も意味するのではなく、これらは、ある名前をもつある請求項の要素を同じ名前をもつ別の要素と区別して(順序を示す用語を使用する場合を除く)、請求項の要素間を区別するラベルとして単に使用されたものである。
また、本明細書で使用されている語句と用語は説明目的のためであり、制限するものではない。「含む(including)」、「含む、備えた(comprising)」または「もつ(having)」、「収めている(containing)」、「を伴う(involving)」およびこれらの変形の使用は、そのあとに列挙された項目とその等価項目並びに追加項目を包含するものである。
コンパイラが使用されるアプリケーション環境を示す概略図である。 図1のコンパイラによって処理できるコードの断片を示す概略図である。 図1のコンパイラによって処理できるコードの断片を示す概略図である。 図2Aと図2Bのプログラムセグメントの中の式を表現するために使用できるデータオブジェクトを示す概略図である。 図2Aと図2Bのプログラムセグメントの中の式を表現するために使用できるデータオブジェクトを示す概略図である。 図1のコンパイラを動作させるプロセスを示すフローチャートである。 APIの一部を実現できるコードの断片を示す概略図である。 APIの一部を実現できるコードの断片を示す概略図である。 図5Aまたは図5Bのどちらかに示すAPIによって定義されたメソッドをコールできるコードの断片を示す概略図である。

Claims (20)

  1. 複数の内部セマンティックオブジェクトをもつネイティブ言語のプログラムを、
    a)複数の内部セマンティックオブジェクトのうちの第1内部セマンティックオブジェクトをネイティブ言語の構文に従って処理して、前記内部セマンティックオブジェクトを表現する外部セマンティックデータ構造を作成するというアクト
    に従ってコンパイルするためのコンピュータ実行可能命令を格納したことを特徴とするコンピュータ読み取り可能な記録媒体。
  2. 請求項1に記載のコンピュータ読み取り可能な記録媒体において、前記内部セマンティックオブジェクトは、ソースコードの形体のコンピュータプログラム命令を少なくとも1つ含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  3. 請求項1に記載のコンピュータ読み取り可能な記録媒体において、前記内部セマンティックオブジェクトはデリゲートを含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  4. 請求項1に記載のコンピュータ読み取り可能な記録媒体において、前記内部セマンティックオブジェクトはステートメントブロックを含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  5. 請求項1に記載のコンピュータ読み取り可能な記録媒体において、
    b)暗黙的型変換に基づいて複数の内部セマンティックオブジェクトから内部セマンティックオブジェクトを選択するというアクト
    に従ってプログラムをコンパイルするためのコンピュータ実行命令をさらに含むことを含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  6. 請求項1に記載のコンピュータ読み取り可能な記録媒体において、
    b)選択された内部セマンティックオブジェクトを特定するプログラム内の明示的演算に基づいて、複数の内部セマンティックオブジェクトから内部セマンティックオブジェクトを選択するというアクト
    に従ってプログラムをコンパイルするためのコンピュータ実行命令をさらに含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  7. 請求項6に記載のコンピュータ読み取り可能な記録媒体において、プログラムをコンパイルするための前記コンピュータ実行可能命令は、複数の式タイプの各々についてプログラム内の式を顕在化する外部セマンティックデータ構造を作成するコンピュータ実行可能命令をさらに含み、前記複数の式タイプは、バイナリ式、単項式、3進式、定数式、フィールドアクセス式、プロパティアクセス式、メソッドコール式、オブジェクト初期化式、オブジェクト作成式、コレクションおよびアレイ初期化式、アレイ作成式、キャスト式、パラメータ参照式、ラムダ式、セマンティックツリー呼び出し式、フリー変数キャプチャ式、および外部変数キャプチャ式を含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  8. 請求項1に記載のコンピュータ読み取り可能な記録媒体において、外部セマンティックデータ構造はセマンティック式ツリーによって表現されていることを特徴とするコンピュータ読み取り可能な記録媒体。
  9. 請求項1に記載のコンピュータ読み取り可能な記録媒体において、第1外部セマンティックデータ構造は、第2外部セマンティックデータ構造への参照を含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  10. 請求項1に記載のコンピュータ読み取り可能な記録媒体において、前記外部セマンティックデータ構造は、フリー変数または外部変数への参照をキャプチャすることを特徴とするコンピュータ読み取り可能な記録媒体。
  11. 引き数を有するメソッドをもつアプリケーションプログラムインタフェースを通してアプリケーションにアクセスするプログラムを準備するプロセスであって、前記引き数には型が関連付けられており、前記プログラムは前記メソッドへのコールをもち、前記コールにはパラメータが関連付けられており、前記プロセスは、前記パラメータを表現する外部セマンティックデータ構造を前記引き数の前記型に基づいて自動的および選択的に作成するステップを有することを特徴とするプロセス。
  12. 請求項11に記載のプロセスにおいて、外部セマンティックデータ構造を前記引き数の前記型に基づいて自動的および選択的に作成するステップは、該引き数が未認識のデリゲート型を有するとき、前記パラメータを表現する外部セマンティックデータ構造を選択的に作成することを含むことを特徴とするプロセス。
  13. 請求項11に記載のプロセスにおいて、コール引き数はソースコード形体のコンピュータプログラム命令を含むことを特徴とするプロセス。
  14. 請求項13に記載のプロセスにおいて、ランタイム時に、外部セマンティックデータ構造を使用してアプリケーションに対する少なくとも1つのコマンドを生成するステップをさらに含むことを特徴とするプロセス。
  15. 請求項14に記載のプロセスにおいて、前記外部セマンティックデータ構造を使用して少なくとも1つのコマンドを生成するアクトは、アプリケーションプログラムインタフェースによって実行されることを特徴とするプロセス。
  16. 請求項13に記載のプロセスにおいて、前記ソースコードは構文をもつ言語で書かれ、前記コール引き数を表現している外部セマンティックデータ構造を作成するステップは、前記コール引き数内で使用される変数の名前を前記構文に従ってバインディングするステップを含むことを特徴とするプロセス。
  17. 請求項13に記載のプロセスにおいて、前記ソースコードは構文をもつ言語で書かれ、前記コール引き数を表現している外部セマンティックデータ構造を作成するステップは、前記コール引き数内の前記コンピュータプログラム命令に構文エラーがないかどうかをチェックするステップを含むことを特徴とするプロセス。
  18. 複数の式をもつプログラムを処理するためのコンピュータ実行可能モジュールを格納したコンピュータ読み取り可能な記録媒体であって、前記コンピュータ実行可能モジュールは、
    a)複数の式の中の1つの式を、その式について少なくとも1つのコンパイラ演算を実行することによってデータ構造に変換するコンパイラモジュールと、
    b)前記データ構造を受け取り、前記データ構造から少なくとも1つのコマンドを作成するAPIモジュールと、
    c)前記少なくとも1つのコマンドを受け取り、前記少なくとも1つのコマンドによって指定された演算を実行するアプリケーションと、
    を含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  19. 請求項18に記載のコンピュータ読み取り可能な記録媒体において、前記アプリケーションはデータベースを含むことを特徴とするコンピュータ読み取り可能な記録媒体。
  20. 請求項18に記載のコンピュータ読み取り可能な記録媒体において、前記コンパイラモジュールは、前記複数の式の中の第2式から第2データ構造を生成する部分と前記第2データ構造からオブジェクトコードを生成する部分とを含むことを特徴とするコンピュータ読み取り可能な記録媒体。
JP2008523884A 2005-07-29 2006-06-21 プログラムをデータオブジェクトとしてサポートするコンパイラ Pending JP2009503677A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/193,721 US7992140B2 (en) 2005-07-29 2005-07-29 Compiler supporting programs as data objects
PCT/US2006/024419 WO2007018771A2 (en) 2005-07-29 2006-06-21 Compiler supporting programs as data objects

Publications (1)

Publication Number Publication Date
JP2009503677A true JP2009503677A (ja) 2009-01-29

Family

ID=37695828

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008523884A Pending JP2009503677A (ja) 2005-07-29 2006-06-21 プログラムをデータオブジェクトとしてサポートするコンパイラ

Country Status (5)

Country Link
US (2) US7992140B2 (ja)
EP (1) EP1913471A4 (ja)
JP (1) JP2009503677A (ja)
CN (1) CN101233488B (ja)
WO (1) WO2007018771A2 (ja)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7685567B2 (en) * 2005-07-29 2010-03-23 Microsoft Corporation Architecture that extends types using extension methods
US7992140B2 (en) * 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
US20070027905A1 (en) * 2005-07-29 2007-02-01 Microsoft Corporation Intelligent SQL generation for persistent object retrieval
US20070027849A1 (en) * 2005-07-29 2007-02-01 Microsoft Corporation Integrating query-related operators in a programming language
US7702686B2 (en) * 2005-07-29 2010-04-20 Microsoft Corporation Retrieving and persisting objects from/to relational databases
US9009660B1 (en) * 2005-11-29 2015-04-14 Tilera Corporation Programming in a multiprocessor environment
US8112739B2 (en) * 2005-12-01 2012-02-07 Cypress Semiconductor Corporation Data driven transfer functions
US8176468B2 (en) 2005-12-01 2012-05-08 Cypress Semiconductor Corporation Multivariable transfer functions
US9128727B2 (en) * 2006-08-09 2015-09-08 Microsoft Technology Licensing, Llc Generation of managed assemblies for networks
US8843906B1 (en) * 2006-10-16 2014-09-23 The Mathworks, Inc. Inferring data types from compiler call site
US8347266B2 (en) * 2007-12-10 2013-01-01 Microsoft Corporation Declarative object identity
US20090227921A1 (en) 2008-03-04 2009-09-10 Tyco Healthcare Group Lp Bendable sole for compression foot cuff
US20090271765A1 (en) * 2008-04-29 2009-10-29 Microsoft Corporation Consumer and producer specific semantics of shared object protocols
US8316357B2 (en) * 2008-09-03 2012-11-20 Microsoft Corporation Type descriptor management for frozen objects
US8881121B2 (en) * 2009-02-18 2014-11-04 International Business Machines Corporation Processing an object-oriented query to retrieve data from a data source
US8799877B2 (en) * 2009-03-27 2014-08-05 Optumsoft, Inc. Interpreter-based program language translator using embedded interpreter types and variables
US10089119B2 (en) 2009-12-18 2018-10-02 Microsoft Technology Licensing, Llc API namespace virtualization
US8739118B2 (en) 2010-04-08 2014-05-27 Microsoft Corporation Pragmatic mapping specification, compilation and validation
US20110276950A1 (en) * 2010-05-05 2011-11-10 Microsoft Corporation Name binding extensibility for typed programming language
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US8695021B2 (en) 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
US8997070B2 (en) * 2011-12-15 2015-03-31 Sap Se Extension mechanism for scripting language compiler
JP5818695B2 (ja) * 2012-01-04 2015-11-18 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation コード変換方法、プログラム及びシステム
US9557974B2 (en) * 2012-07-10 2017-01-31 Oracle International Corporation System and method for supporting compatibility checking for lambda expression
KR101893796B1 (ko) * 2012-08-16 2018-10-04 삼성전자주식회사 동적 데이터 구성을 위한 방법 및 장치
US9652207B2 (en) 2013-03-13 2017-05-16 Microsoft Technology Licensing, Llc. Static type checking across module universes
US9563412B2 (en) * 2013-03-13 2017-02-07 Microsoft Technology Licensing, Llc. Statically extensible types
US9639335B2 (en) 2013-03-13 2017-05-02 Microsoft Technology Licensing, Llc. Contextual typing
CN103500160B (zh) * 2013-10-18 2016-07-06 大连理工大学 一种基于滑动语义串匹配的句法分析方法
KR101629068B1 (ko) * 2013-12-10 2016-06-21 건국대학교 산학협력단 프로그램 언어 변환 장치 및 프로그램 언어 변환 장치를 구비하는 검증 장치
US9785456B2 (en) * 2014-04-22 2017-10-10 Oracle International Corporation Metadata-driven dynamic specialization
US10346941B2 (en) 2014-05-30 2019-07-09 Apple Inc. System and method for unified application programming interface and model
US10430169B2 (en) 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
US9740464B2 (en) * 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US10635504B2 (en) 2014-10-16 2020-04-28 Microsoft Technology Licensing, Llc API versioning independent of product releases
US9557917B2 (en) 2014-11-10 2017-01-31 International Business Machines Corporation Conditional stack frame allocation
US9864518B2 (en) 2014-11-10 2018-01-09 International Business Machines Corporation Assigning home memory addresses to function call parameters
US9317266B1 (en) 2014-11-12 2016-04-19 Bank Of America Corporation Leveraging legacy applications for use with modern applications
US9875087B2 (en) * 2015-04-10 2018-01-23 Oracle International Corporation Declarative program engine for large-scale program analysis
US10567517B2 (en) * 2015-06-05 2020-02-18 Apple Inc. Web resource load blocking API
US10621152B2 (en) * 2015-12-02 2020-04-14 Speedment, Inc. Methods and systems for mapping object oriented/functional languages to database languages
CN108920133B (zh) * 2018-06-14 2021-06-18 北京三快在线科技有限公司 跨语言编程方法、装置、电子设备及存储介质
US10942710B1 (en) * 2019-09-24 2021-03-09 Rockwell Automation Technologies, Inc. Industrial automation domain-specific language programming paradigm
US11048483B2 (en) 2019-09-24 2021-06-29 Rockwell Automation Technologies, Inc. Industrial programming development with an extensible integrated development environment (IDE) platform
CN113296748B (zh) * 2020-02-21 2022-07-26 上海莉莉丝科技股份有限公司 数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质
US11573775B2 (en) 2020-06-17 2023-02-07 Bank Of America Corporation Software code converter for resolving redundancy during code development
US11347500B2 (en) 2020-06-17 2022-05-31 Bank Of America Corporation Software code converter for resolving conflicts during code development
US11782685B2 (en) 2020-06-17 2023-10-10 Bank Of America Corporation Software code vectorization converter
CN113011978B (zh) * 2021-03-10 2023-05-26 河南大学 基于可认证数据结构的区块链语义分析的方法

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
US6067413A (en) * 1996-06-13 2000-05-23 Instantations, Inc. Data representation for mixed-language program development
US6574673B1 (en) * 1997-10-31 2003-06-03 Oracle Corporation Data type mapping for external callouts
US6378126B2 (en) * 1998-09-29 2002-04-23 International Business Machines Corporation Compilation of embedded language statements in a source code program
US6405368B1 (en) * 1999-04-16 2002-06-11 Brian Freyburger Method for separate compilation of templates
US6484313B1 (en) * 1999-06-30 2002-11-19 Microsoft Corporation Compiling and persisting of intermediate language code
US6836883B1 (en) * 2000-06-21 2004-12-28 Microsoft Corporation Method and system for compiling multiple languages
US6999956B2 (en) 2000-11-16 2006-02-14 Ward Mullins Dynamic object-driven database manipulation and mapping system
US7152223B1 (en) * 2001-06-04 2006-12-19 Microsoft Corporation Methods and systems for compiling and interpreting one or more associations between declarations and implementations in a language neutral fashion
US6789254B2 (en) * 2001-06-21 2004-09-07 International Business Machines Corp. Java classes comprising an application program interface for platform integration derived from a common codebase
US7454746B2 (en) * 2001-07-24 2008-11-18 The Mathworks, Inc. Function call translation
US7228540B2 (en) * 2002-05-14 2007-06-05 Microsoft Corporation Preparation for software on demand system
US7219338B2 (en) * 2003-03-25 2007-05-15 Microsoft Corporation Multi-language compilation
US7441237B2 (en) * 2003-03-25 2008-10-21 Microsoft Corporation System and method for extending a compiler through a composer
US7681184B1 (en) * 2004-05-24 2010-03-16 Borland Software Corporation System and methodology for cross language type system compatibility
US7702686B2 (en) 2005-07-29 2010-04-20 Microsoft Corporation Retrieving and persisting objects from/to relational databases
US20070028222A1 (en) 2005-07-29 2007-02-01 Microsoft Corporation Free/outer variable capture
US20070027849A1 (en) 2005-07-29 2007-02-01 Microsoft Corporation Integrating query-related operators in a programming language
US20070027905A1 (en) 2005-07-29 2007-02-01 Microsoft Corporation Intelligent SQL generation for persistent object retrieval
US7409636B2 (en) 2005-07-29 2008-08-05 Microsoft Corporation Lightweight application program interface (API) for extensible markup language (XML)
US7694274B2 (en) 2005-07-29 2010-04-06 Microsoft Corporation Dynamically typed unsafe variance
US7743066B2 (en) 2005-07-29 2010-06-22 Microsoft Corporation Anonymous types for statically typed queries
US7992140B2 (en) * 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
US20070044083A1 (en) 2005-07-29 2007-02-22 Microsoft Corporation Lambda expressions
US7818719B2 (en) 2005-07-29 2010-10-19 Microsoft Corporation Extending expression-based syntax for creating object instances
US7685567B2 (en) 2005-07-29 2010-03-23 Microsoft Corporation Architecture that extends types using extension methods
US7631011B2 (en) 2005-07-29 2009-12-08 Microsoft Corporation Code generation patterns

Also Published As

Publication number Publication date
US20070028223A1 (en) 2007-02-01
WO2007018771A2 (en) 2007-02-15
US20110246973A1 (en) 2011-10-06
WO2007018771A3 (en) 2007-06-07
CN101233488B (zh) 2012-07-04
EP1913471A4 (en) 2009-05-13
US7992140B2 (en) 2011-08-02
EP1913471A2 (en) 2008-04-23
US8458678B2 (en) 2013-06-04
CN101233488A (zh) 2008-07-30

Similar Documents

Publication Publication Date Title
JP2009503677A (ja) プログラムをデータオブジェクトとしてサポートするコンパイラ
KR101354803B1 (ko) 유형 추론 및 유형 지향 후기 바인딩
US7707566B2 (en) Software development infrastructure
US6247174B1 (en) Optimization of source code with embedded machine instructions
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US20120072890A1 (en) Unified data type system and method
US20070028222A1 (en) Free/outer variable capture
US20110271258A1 (en) Software Development Tool
US5960197A (en) Compiler dispatch function for object-oriented C
US7685581B2 (en) Type system for representing and checking consistency of heterogeneous program components during the process of compilation
US20070074185A1 (en) Identifier expressions
WO2007027366A1 (en) Nullable and late binding
Doolin et al. JLAPACK–compiling LAPACK Fortran to Java
US11748076B2 (en) Method of generating a representation of a program logic, decompilation apparatus, recompilation system and computer program products
Sah et al. An introduction to the Rush language
KR101705996B1 (ko) 자바스크립트 소스 코드를 최적화하기 위한 자바스크립트 소스 코드 정적 분석 장치 및 방법
Walia et al. Sham: A DSL for Fast DSLs
Turas Gradual C Programming for Typed Lua
You Specializing Scala with Truffle
Baziotis et al. Dias: Dynamic Rewriting of Pandas Code
Mehta Reusing Contextually Specialized JIT Precompiled Units
Postovalov Compilation of mathematical expressions in Kotlin
Lee et al. Object-Oriented Programming
Weiss et al. ScmToCpp: A configurable, intelligent back end for SuchThat

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090415

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110816

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111116

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111209

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120307

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120417