[go: up one dir, main page]

JP2013539130A - ユーザ定義型のコンパイル時境界検査 - Google Patents

ユーザ定義型のコンパイル時境界検査 Download PDF

Info

Publication number
JP2013539130A
JP2013539130A JP2013531616A JP2013531616A JP2013539130A JP 2013539130 A JP2013539130 A JP 2013539130A JP 2013531616 A JP2013531616 A JP 2013531616A JP 2013531616 A JP2013531616 A JP 2013531616A JP 2013539130 A JP2013539130 A JP 2013539130A
Authority
JP
Japan
Prior art keywords
boundary
user
type
code
memory
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
JP2013531616A
Other languages
English (en)
Other versions
JP2013539130A5 (ja
JP5893038B2 (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 JP2013539130A publication Critical patent/JP2013539130A/ja
Publication of JP2013539130A5 publication Critical patent/JP2013539130A5/ja
Application granted granted Critical
Publication of JP5893038B2 publication Critical patent/JP5893038B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs

Landscapes

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

Abstract

ユーザ定義型のコンパイル時最適化境界検査を提供する。ユーザ定義クラスは、注釈付けられるメモリアクセスメソッドと、境界および呼び出されると境界を返すメソッドを包含する整数フィールドなどの、注釈付けられる境界提供メンバとを有する。ユーザ定義の境界検査は、プログラミング言語を有していないところに境界検査を提供できるし、または、例えば、内蔵配列型またはガーベジコレクタ管理型をラップすることによって既存の境界検査を補足することができる。境界検査は、配列、およびレイアウトがコンパイラによって制御される他の型にとどまらず拡張可能であり、それによって、管理コード環境で効率的なシステムプログラミングができるようにさせる。境界検査表現は、コンパイラによって中間言語で挿入される。最適化は、その後重複した境界検査を減らす。

Description

本発明は、コンピュータプログラミングに関する。
変数がある指定された境界内にあるかどうかを検出する境界検査(bounds checking)は、コンピュータプログラムにおいて行うことができる。例えば、ある値が配列中のインデックスとして使用されて、その値が配列の境界内にあるかどうかを判定される前に、その値を検査することができる。この種の境界検査は、インデックス検査または範囲検査と呼ばれることもある。誤った境界の検査は、例外信号などのランタイムエラーを生成する場合もある。配列または他の変数の境界外にアクセスしようとすると、プログラミングエラーを示すことが多い。しかし、境界検査によってプログラムの実行時間が増えるため、境界変数を使用する度、その前に実行される境界検査が必ずしも行われるわけではない。
コンパイラは、必要ないと判断された境界検査を自動的になくすこともある。例として、プログラムコードが配列内のある位置からある値を読み取り、その後別の値(または同じ値)をその同じ位置に戻して記憶すると仮定する。最適化しない場合、このコードは、配列の位置がその配列から読み取られる時に行う第1の境界検査と、その配列の同じ位置が書き込まれる時に行う第2の境界検査とを含むかもしれない。しかし、コンパイラまたは他の最適化ツールは、その配列のサイズが変わらないこと、およびその配列の同じ位置が読み取られて、その後書き込まれることを判定した後に、第2の境界検査を自動的になくすことができる。より一般的には、冗長な境界検査を自動的に減らすまたはなくすためのさまざまな最適化がコンパイラおよび他のツールに使用されている。
配列アクセスに対して自動化される境界検査は、それが実際の(または認識された)影響をプログラム性能に及ぼすために、必ずしも使用されるわけではない。しかし、自動境界検査は、それにもかかわらず、配列により安全にアクセスするために選択して使用する開発者にとって容易に利用可能である。しかし、あるいは単純な配列とは別に、開発者がより複雑な構造を有するカスタムデータ型を使用する場合、アクセス違反の検査は、境界検査コードを手動で挿入することを伴うこともある。残念ながら、開発者が境界検査を明示的に書き込む場合、境界検査コードの用途をコンパイラに明らかにすることができない。従ってコンパイラは、コンパイラに冗長な境界検査を解除するようにさせるであろう情報に欠ける。
本明細書で説明するいくつかの実施形態は、ユーザ定義型(user-defined types)の自動コンパイル時境界検査(automatic compile-time bounds checking)を提供し、一部は、明示的に割り当てられるメモリに安全にアクセスするためにソースコード内のユーザ定義クラス(user-defined class)を特定することによって提供する。ユーザ定義クラスは、ユーザ定義の境界検査注釈(user-defined-bounds check annotation)、例えば、コードがメモリマップドバッファ(memory-mapped buffer)または他の明示的に割り当てられるメモリにアクセスすることをコンパイラに示す注釈を用いて、開発者によって注釈付けられたメモリアクセスコードメンバ(memory-accessing code member)を有する。ユーザ定義クラスは、メモリアクセスコード上で境界検査を生成するための境界情報を提供することをコンパイラに示すように、開発者によって注釈付けられる境界提供メンバ(bound-providing member)も有する。境界提供メンバは、例えば、境界を包含する整数フィールドであってよいし、または呼び出されると境界を返すメソッドであってもよい。
ユーザ定義の境界検査は、プログラミング言語を有していないところに境界検査を提供できるし、または、例えば、内蔵配列型(built-in array type)またはガーベジコレクタ管理型(garbage-collector-managed type)をラップすることによって既存の境界検査を補足することができる。境界検査は、配列、およびレイアウトがコンパイラによって制御される他の型にとどまらず拡張可能である。どの多要素配列型(multi-element array type)も構成型として使用せずに、ユーザ定義クラスを定義できる。
ユーザ定義の境界検査注釈の境界検査表現は、コンパイラによって中間言語コードで挿入される。最適化は、その後、実行可能コードで発生するであろう重複した境界検査を自動的に減らす。最適化は、中間言語の境界検査表現および挿入された境界検査コード、またはその両方に適用されてよい。
所与の例は、例示にすぎない。この発明の概要は、特許請求される主題の主要な特徴または不可欠な特徴を明らかにすることを意図せず、特許請求される主題の範囲を限定するのに使用されることも意図しない。むしろ、この発明の概要は、以下の発明を実施するための形態でさらに説明される、いくつかの概念を簡易な形式で紹介するために与えられる。本革新は、特許請求の範囲で定義され、この発明の概要が特許請求の範囲と相反する範囲において、特許請求の範囲に従わなければならない。
添付の図面を参照してより詳細に説明する。これらの図面は、選択された態様を例示しているにすぎず、従って発明の対象範囲を完全に決めるものではない。
複数のネットワークノード上に存在し得るオペレーティング環境において少なくとも1つのプロセッサ、少なくとも1つのメモリ、少なくとも1つのプログラムソースコード、および他の項目を有するコンピュータシステムを示し、さらに構成された記憶媒体の実施形態を示すブロック図である。 任意に複雑なユーザ定義のデータ型のコンパイル時境界検査をアーキテクチャの一例において示すブロック図である。 いくつかの処理のステップおよび構成された記憶媒体の実施形態を示すフローチャートである。
概要
今日の管理コードシステム、例えば、Microsoft(登録商標).NETやJava(登録商標)環境(それぞれ、マイクロソフト社、オラクルアメリカ社の登録商標である)のような管理コードシステムは、管理コードプログラムによって使用されるすべてのメモリが割り当てられ、そして自動的に管理されることを前提としていることが多い。しかし、システムプログラミングにおいて、特にデバイスドライバプログラミングにおいて、この前提が成り立たないこともある。いくつかの事例において、デバイスドライバによって使用されるメモリは、デバイスのバッファが特定のアドレスセットにメモリマップされる時などに、物理的デバイスによって位置が固定される。他の事例において、メモリは、データの不必要な複製を回避するように、または一定の制限時間内にバッファを再使用するように明示的に管理される。
C#などのいくつかの言語において、プログラムが明示的に割り当てられるメモリを使用する場合、プログラマは、unsafeポインタを管理されていないデータ構造に利用することが多い。ポインタにアクセスするまたはポインタ演算を行う時にエラーを回避するように細心の注意が必要となる。unsafeポインタは、誤ったポインタ演算がメモリ破損またはプログラムクラッシュにつながる恐れがあるので、管理コードの正確性の利点を否定することがある。そのようなエラーは、特にガーベジコレクションが機能している中でデバックするのが困難になる。プログラマがカスタムデータ構造を書き込み、且つ安全のために境界検査を実行したいと望む場合、プログラマは、ソースコードの行に境界検査を明示的に書き込むこともある。そのようなコードの用途は、コンパイラによってそのコードの他の行の用途と区別できない。この事例において、コンパイラは、コンパイラに明示的な境界検査を解除するようにさせる情報に欠ける。
本明細書で説明するいくつかの実施形態は、管理コードが明示的に割り当てられるメモリに安全且つ効率的にアクセスするようにさせる。管理コードは、従ってシステムプログラミングに効率的に使用されることができる。本明細書で説明するように、コンパイル時に最適化される境界検査を用いて管理コードをシステムプログラミングに使用することによって、プログラマは、管理コードで効率的なデバイスドライバを書き込み、そしてオペレーティングシステムクラッシュの原因になることが多いデバイスドライバの共通のエラーをなくすことができる。
本明細書で説明するいくつかの実施形態は、より広い文脈で見られてもよい。例えば、メモリアクセス、変数境界、ソースコードの注釈、およびコンパイルなどの概念は、特定の実施形態と関連することもある。しかし、それでは、発明の独占権が、本明細書では抽象的な考えに求められる広い文脈の利用から得られない。発明の独占権は、抽象的な考えではない。むしろ、本開示は、特定の実施形態を適切に提供することに重点を置いている。例えば、他の媒体、システム、およびメモリアクセスを伴うメソッド、境界検査、コンパイル、および/またはソース注釈は、本発明の範囲外である。従って、曖昧さおよびそれに付随する証明問題も、本開示の適切な理解によって回避される。
図面に例示したような模範的な実施形態を言及するにあたり、特定の用語を本明細書では同じ説明に使用する。しかし、本開示の従来技術(複数)およびそれを占有している当業者が思い付くであろう、本明細書で例示した機能の改変およびさらなる変更、および本明細書で例示した発明の原理の付加的な適用を特許請求の範囲の範囲内と見なさなければならない。
用語の意味は、本開示で明確にされ、従ってこのような明確化に十分注意しながら特許請求の範囲を読まなければならない。特定の例が与えられているが、従来技術(複数)の当業者は、他の例も、使用される用語の意味の範囲内であり、且つ1または複数の特許請求の範囲の範囲内であってよいことを理解するであろう。用語は、ここでは一般的な用法、特定の産業の用法、または特定のディクショナリまたはディクショナリのセットの用法を有するものと必ずしも同じ意味ではない。用語の意味の幅を示すのに役立つように、さまざまな言い回しを用いて参照番号を使用してよい。参照番号を所与の文章から省略するのは、図面の内容が文字によって論じられていないことを必ずしも意味するわけではない。発明者は、自身で辞書編集する自分の権利を主張して行使する。用語は、ここでは発明を実施するための形態および/またはアプリケーションファイル内のどこかで明示的または暗示的のいずれかで定義されてもよい。
本明細書で使用される際、「コンピュータシステム」は、例えば、1または複数のサーバ、マザーボード、処理ノード、パーソナルコンピュータ(携帯用またはそれ以外のもの)、パーソナルデジタルアシスタント、セルまたはモバイル電話、および/または少なくとも一部は命令によって制御される1または複数のプロセッサを提供するデバイス(複数)を含んでよい。その命令は、メモリおよび/または専用回路内のソフトウェアの形式であってよい。特に、ワークステーションまたはラップトップコンピュータ上で実行する多くの実施形態を思い付くかもしれないが、他の実施形態を計算デバイス上で実行でき、そのような任意のデバイスの1または複数は、所与の実施形態の一部であってよい。
「マルチスレッド」コンピュータシステムは、複数の実行スレッドをサポートするコンピュータシステムである。用語「スレッド」は、同期する能力があるまたは同期に従う任意のコードを含むことを理解しておく必要があり、例えば、「タスク」、「処理」、または「コルーチン」などの、他の呼び名も知っておいた方がよい。スレッドは、並行して、逐次に、または並行実行(例えば、多重処理)と逐次実行(例えば、時間スライス)とを組み合わせて実行できる。マルチスレッド環境は、さまざまな構成で設計されている。実行スレッドは、並行して実行してよいし、または実行スレッドは、並行実行に組織されてもよいが、実際には順番に逐次に実行する。マルチスレッディングは、例えば、多重処理環境において異なるスレッドを異なるコア上で実行することによって、異なるスレッドを単一のプロセッサコア上で時間スライスすることによって、または時間スライスとマルチプロセッサスレッディングとをいくつか組み合わせることによって実装されてもよい。スレッドの文脈切り替えを、例えば、カーネルのスレッドスケジューラによって、ユーザ空間信号によって、またはユーザ空間の動作とカーネルの動作との組み合わせによって開始できる。スレッドは、例えば、順番に共有データに動作できるし、または各スレッドは、自身のデータに動作できる。
「論理プロセッサ」または「プロセッサ」は、単一の独立したハードウェアスレッド処理ユニットである。例えば、1コア当たり2スレッドを実行するハイパースレッドクアドコアのチップは、8つの論理プロセッサを有する。プロセッサは、汎用であってよいし、またはグラフィック処理、信号処理、浮動小数点演算、暗号化、I/O処理などの、特定の使用に合わせてもよい。
「マルチプロセッサ」コンピュータシステムは、複数の論理プロセッサを有するコンピュータシステムである。マルチプロセッサ環境は、さまざまな構成で発生する。所与の構成において、すべてのプロセッサが機能的に同等であることもあれば、一方別の構成において、いくつかのプロセッサが異なるハードウェア能力、異なるソフトウェア割り当て、またはその両方を有することによって他のプロセッサと異なることもある。構成に応じて、プロセッサを単一のバスに互いに強固に結合してもよいし、緩く結合してもよい。ある構成において、プロセッサは、中央メモリを共有し、ある構成において、プロセッサは、それぞれが自身のローカルメモリを有し、そしてある構成において、共有メモリとローカルメモリとの両方が存在する。
「カーネル」は、オペレーティングシステム、ハイパーバイザ、仮想マシン、および同様のハードウェアインタフェースソフトウェアを含む。
「コード」は、プロセッサの命令、データ(定数、変数、およびデータ構造を含む)、または命令とデータとの両方を意味する。
「プログラム」は、本明細書では広範に使用され、アプリケーション、カーネル、ドライバ、割り込みハンドラ、ライブラリ、およびプログラマ(開発者とも呼ばれる)によって書き込まれる他のコードを含む。
「自動的に」は、自動化していないものとは対照的に、自動化の使用(例えば、本明細書で説明する特定の演算を行うソフトウェアによって構成される汎用計算ハードウェアの使用)を意味する。特に、「自動的に」実行されるステップは、手書きまたは誰かの考えによって実行されない。それらのステップは、マシンを用いて実行される。しかし、「自動的に」は、必ずしも「即時に」を意味するわけではない。
この文書全体を通じて、任意の複数「(s)」は、示された機能のうちの1または複数が存在することを意味する。例えば、「注釈(複数)」は、「1または複数の注釈」または同等に「少なくとも1つの注釈」を意味する。
この文書全体を通じて、明示的に別段の定めをした場合を除き、処理中のどのステップの基準(reference)も、受益者によって直接実行され、および/または中間機構および/または中間エンティティを通じて受益者によって間接的に実行されてもよく、なおもステップの範囲内であると仮定する。即ち、受益者によってステップを直接実行することは、直接の実行が明示的に定められた用件でない限り要求されない。例えば、「送信する」、「送る」、「通信する」、「適用する」、「挿入する」、「注釈付ける」、「表す」、「指定する」などの、受益者による動作を伴うステップ、あるいは送り先を対象とするステップは、別の受益者によって転送する、複製する、アップロードする、ダウンロードする、符号化する、復号する、圧縮する、展開する、暗号化する、解読するなどの、中間動作を伴う場合もあり、なおも受益者によって直接実行されると理解してよい。
データまたは命令の参照が行われる時はいつも、それらの項目は、コンピュータ可読メモリを構成し、それよって、例えば、単に紙上に存在し、誰かの考えによるものとは対照的に、または有線の一過性信号とは対照的に、そのメモリを特定の項目に変換することが理解されよう。
オペレーティング環境
図1に関して、実施形態のオペレーティング環境100は、コンピュータシステム102を含む。コンピュータシステム102は、マルチプロセッサコンピュータシステムであってもよいし、そうでなくてもよい。オペレーティング環境は、所与のコンピュータシステム内に1または複数のマシンを含むことができ、そのコンピュータシステムは、クラスタ、クライアントサーバネットワーク、および/またはピアツーピアネットワークであってもよい。
人間ユーザ104は、ディスプレイ、キーボード、および他の周辺機器106を使用することによってコンピュータシステム102と対話できる。システムの管理者、開発者、技術者、およびエンドユーザは、それぞれ特定のタイプのユーザ104である。1または複数の人間の代わりに動作する自動化されるエージェントもユーザ104にしてよい。いくつかの実施形態において、記憶デバイスおよび/またはネットワークデバイスを周辺機器と見なしてよい。図1に示していない他のコンピュータシステムは、コンピュータシステム102と対話できるし、または例えば、ネットワークインタフェース機器経由で1または複数の接続を使用して、別のシステムの実施形態と対話できる。
コンピュータシステム102は、少なくとも1つの論理プロセッサ110を含む。コンピュータシステム102は、他の適したシステムのように、1または複数のコンピュータ可読の持続性記憶媒体112も含む。媒体112は、異なる物理的タイプであってよい。媒体112は、揮発性メモリ、不揮発性メモリ、位置が固定されている媒体、取り外し可能な媒体、磁気媒体、光媒体、および/または他のタイプの持続性媒体(単に信号を伝搬する有線などの一過性媒体とは対照的である)であってよい。特に、CD、DVD、メモリスティックなどの、構成媒体(configured medium)114、または他の取り外し可能な不揮発性メモリ媒体は、挿入あるいはインストールされた時にコンピュータシステムの機能的部分になり、そのコンテンツがプロセッサ110によって使用されるようアクセス可能にすることができる。取り外し可能な構成媒体114は、コンピュータ可読記憶媒体112の一例である。コンピュータ可読記憶媒体112のその他の例は、内蔵RAM、ROM、ハードディスク、およびユーザ104によって容易に取り外すことができない他の記憶デバイスを含む。
構成媒体114は、プロセッサ110によって実行可能である命令116によって構成される。「実行可能」は、本明細書では、例えば、マシンコード、解釈可能コード、および仮想マシン上で実行するコードを含む広い意味で使用される。構成媒体114は、データ118によっても構成され、そのデータは、作成され、変更され、参照され、および/あるいは命令116の実行によって使用される。命令116およびデータ118は、それらが常駐する構成媒体114を構成する。そのメモリが所与のコンピュータシステムの機能部分である場合、命令116およびデータ118は、そのコンピュータシステムも構成する。いくつかの実施形態において、データ118の部分は、製品特性、在庫、物理的測定、設定、画像、読み取り、ターゲット、ボリュームなどの、現実世界の項目表現である。そのようなデータはまた、本明細書で説明する柔軟性のあるコンパイル時最適化境界検査(compile-time optimized bounds checking)によって変換され、例えば、挿入する、適用する、指定する、注釈付ける、表す、結合する、展開する、実行する、変更する、表示する、作成する、読み込む、および/または他の動作によって変換される。
プログラム120(例えば、ソースコード122、中間言語コード124、および実行可能コード126を用いる)、デバッガ、コンパイラおよび他の展開ツール136、他のソフトウェア、および図に示した他の項目は、1または複数の媒体112内に部分的または完全に常駐でき、それによってそのような媒体を構成する。中間言語コード124は、中間表現と呼ばれることもある。プログラム120は、例えば、内蔵型128およびガーベジコレクタ管理型130を含むことができる。多くの展開構成において、配列型132は、内蔵型と管理型との両方である。プロセッサ(複数)110に加え、オペレーティング環境は、例えば、ディスプレイ、メモリマップドデバイス134、バス、電源、およびアクセラレータなどの、他のハードウェアを含んでよい。
所与のオペレーティング環境100は、調整されたソフトウェア開発ツールのセットを開発者に提供する、統合開発環境(IDE)138を含むことができる。特に、いくつかの実施形態に適したオペレーティング環境のうちのいくつかは、プログラム開発をサポートするように構成されたMicrosoft(登録商標)Visual Studio(登録商標)開発環境(マイクロソフト社の登録商標である)を含むまたはその作成に役立つ。いくつかの適したオペレーティング環境は、Java(登録商標)環境(オラクルアメリカ社の登録商標である)を含み、いくつかのオペレーティング環境は、C++またはC#(「Cシャープ」)などの、言語を利用する環境を含む。しかし、本明細書の教示は、各種のプログラミング言語、プログラミングモデル、およびプログラムに適用可能である。
図1の概略図に1または複数の項目を示し、それらの項目が必ずしも例示されたオペレーティング環境の一部というわけではないことを強調しているが、本明細書で論じるようなオペレーティング環境の項目と相互運用できる。いずれの図またはいずれの実施形態においても、概略図にない項目が必然的に必要ということではない。
システム
図2は、いくつかの実施形態の使用に適しているアーキテクチャを示す。ユーザ定義クラス202などのユーザ定義型204は、開発者の境界検査の意思を、コンパイラに境界検査だけでなく冗長な境界検査の解除も提供するようにさせる方法でコンパイラ224に伝達する注釈206を有する。注釈は、例えば、ユーザ定義型のメモリアクセス(memory-accessing)208コードおよび境界提供(boundary-providing)210コードを特定できる。メモリアクセスコードを、例えば、インライン化ステートメント(inline statements)および/または個別メソッド(distinct methods)にできる。境界提供コードは、境界218を包含するフィールド212および/または呼び出されると境界218を返すメソッド214であってよい。
配列インデックス検査は、非常に有用であるに違いないが、本明細書の重点は、他の種類の境界検査、即ち、単なる配列ではないユーザ定義構造(user-defined structures)の境界検査に置かれる。よく知られた配列型132とは違って、クラス202または他のユーザ定義型204は、内蔵型ではなく、それゆえコンパイラ224によって制御されないデータレイアウト216を有することができる。
いくつかの実施形態において、コンパイラ224は、注釈206に応答して中間言語コード124で境界検査表現220を挿入する。境界検査コード222は、その後、境界検査表現220に応答して実行可能コード126内に置かれる。中間言語コードのよく知られた表記法は、境界検査表現220によって遵守され、生成された境界検査コード222は、よく知られた条件付きジャンプ命令などを含むことができる。しかし、このようなよく知られた表記法および命令の文脈は、本用途では、単なる配列ではなく、且ついくつかの実施形態においてその配列を構成型としても使用していない、ユーザ定義型である。
いくつかの実施形態において、オプティマイザ226は、実行可能コード126で発生するであろう冗長な境界検査を解除するために、最適化(複数)228を境界検査表現220、境界検査コード222、またはその両方に適用する。オプティマイザ226は、コンパイラ224に統合されてもよいし、またはコンパイラ224によってまたは開発者によって呼び出される別個のツールであってもよいが、実施形態によって異なる。配列境界検査に使用される最適化を、代わりにユーザ定義型に適応させて適用することができる。例えば、注釈206の利点が型204に与えられれば、オプティマイザは、そのユーザ定義型204の変数に対するループ内のすべてのアクセスは、その変数が許容可能なメモリアドレス境界内であると判定でき、従ってオプティマイザは、ループを実行する結果として発生するであろう複数の境界検査を解除することができる。
図2で提案したように、ユーザ定義型および最適化されたコンパイル時境界検査は、デバイスドライバ230コードを開発する際のプログラム120として特に有用である。管理コードをシステムプログラミングに使用することができ、そしてデバイスドライバを、明示的に割り当てられないメモリのガーベジコレクションを提供するシステムで実行するIDE138を使用して開発することができる。明示的に割り当てられるメモリ、それゆえガーベジコレクトされないメモリは、境界検査を犠牲にせずに、且つ極めて非効率な境界検査を強いることをせずに開発者のコードによって管理されることができる。例えば、クラス202を、注釈付けられたバッファアクセス208メソッドまたはバッファを読み取る/書き込むメソッドを用いて、デバイス134に明示的に割り当てられるメモリマップドバッファ232を含むように定義することができる。バッファのサイズを、動的に判定し、その後bufferBoundフィールド212またはgetBufferBound()メソッド214などの、注釈206および境界提供210機構を経て境界検査コードに提供できる。
図1に関して、いくつかの実施形態は、本明細書で説明するように最適化されたコンパイル時境界検査のサポートによってコード122、コード124、コード126を変換するために回路、ファームウェア、および/またはソフトウェアによって構成される論理プロセッサ110およびメモリ媒体112をコンピュータシステム102に提供する。そのメモリは、論理プロセッサと動作可能に通信する。メモリに常駐するソースコード122は、ユーザ定義型204を有する。ユーザ定義型は、ユーザ定義の境界検査注釈206で注釈付けられる、メモリアクセス208メソッドを有する。ユーザ定義型は、境界提供210フィールドまたはメソッドなどの、少なくとも1つの境界指定子も有する。メモリに常駐するコンパイラ224は、ユーザ定義の境界検査注釈による中間言語コード124の境界検査表現220に挿入するように構成される。メモリに常駐するオプティマイザ226は、重複した境界検査を減らすために、最適化228を中間言語コードに適用するように構成される。
いくつかの実施形態において、注釈付けられたソースコードは、デバイスドライバ230のソースコード122を含み、そしてユーザ定義型204は、メモリマップドバッファ232に対応する。メモリマップドバッファは、単なる一例であり、いくつかの実施形態において、注釈付けられたデバイスドライバコードは、明示的に割り当てられた他のメモリ112にアクセスする。
いくつかの実施形態において、注釈付けられたソースコードは、ガーベジコレクトされたデータ型130を含み、そしてユーザ定義型は、明示的に割り当てられるメモリに対応する。いくつかの実施形態において、ユーザ定義型204は、コンパイラ224によって制御されないデータレイアウト216を有する。いくつかの実施形態において、ユーザ定義型204は、どの多要素配列型も構成型としないように定義される。他の実施形態において、ユーザ定義型204は、1または複数の配列を構成型として有するが、配列よりも複雑である。いくつかの実施形態において、ユーザ定義型204は、配列型をラップし、そして補足的な境界検査、例えば、配列に割り当てられた空間内にあるだけでなく、更新された要素を保持している空間内にあるか、または指定された値のセットを保持するように開発者によって意図された配列の下位部分内にある、配列アクセスの検査を提供する。
いくつかの実施形態において、境界指定子(例えば、境界提供210機構)は、以下の、ユーザ定義のデータ型204のフィールド212がメモリアクセス208メソッドの境界218を包含することを示したフィールド包含境界注釈(field-contains-bound annotation)206と、ユーザ定義のデータ型204の境界取得メソッド(bound-getting method)214がメモリアクセス208メソッドの境界218を返すことを示した境界ゲッタメソッド注釈(bound-getter-method annotation)206とのうちの少なくとも1つを含む。
いくつかの実施形態において、システム102は、メモリに常駐する中間言語コード124を含み、そしてそのコード124は、ユーザ定義の境界検査注釈206の境界検査表現220で注釈付けられる。いくつかの実施形態において、コンパイラ224は、ユーザ定義の境界検査注釈206だけでなく、内蔵型128にも境界検査コード222を挿入するように構成される。いくつかの実施形態において、ユーザ定義の境界検査注釈206は、補足的な境界検査を示し、その中でユーザ定義型204は、任意のユーザ定義の境界検査注釈206が存在しているかどうかにかかわらず、コンパイラ224が境界検査を終了するように構成された内蔵型128をラップする。
いくつかの実施形態において、人間ユーザのI/Oデバイス(スクリーン、キーボード、マウス、タブレット、マイクロフォン、スピーカ、動きセンサなど)などの周辺機器106は、1または複数のプロセッサ110およびメモリと動作可能に通信する際に存在する。しかし、ある実施形態は、どの人間ユーザ104もその実施形態と直接対話しないように、システムに深く組み込まれることもある。ソフトウェアの処理はユーザ104が行ってもよい。
いくつかの実施形態において、システムは、ネットワークによって接続される複数のコンピュータを含む。ネットワークインタフェース機器は、例えば、パケット交換ネットワークインタフェースカード、無線トランシーバ、または電話ネットワークインタフェースなどの、コンポーネントを使用して、ネットワーク108へのアクセスを提供することができ、それらのコンポーネントは、コンピュータシステムに存在する。しかし、ある実施形態は、直接メモリアクセス、取り外し可能な不揮発性媒体、または他の情報記憶−読み出しおよび/または送信アプローチを通じて通信することもできるし、またはコンピュータシステムの実施形態は、他のコンピュータシステムと通信せずに動作できる。
処理
図3は、いくつかの処理の実施形態をフローチャート300で例示している。図面に示した処理は、いくつかの実施形態で自動的に、例えば、ユーザ入力をほとんどまたはまったく必要としないスクリプトの制御下でコンパイラ224およびオプティマイザ226によって、またはユーザ定義型204をユーザ供給仕様(user-supplied specifications)から生成する自動化されたソースコード122ジェネレータによって実行されることができる。処理を、一部では自動的に、および表示がなければ一部では手動で実行することもできる。所与の実施形態において、例示された0または1以上の処理のステップを繰り返してもよく、恐らく動作する異なるパラメータまたはデータを用いるであろう。実施形態のステップは、図3に並べられた上から下への順序とは異なる順序で行われてもよい。ステップは、順次に、部分的に重なる方法で、または完全に並行して実行されてもよい。フローチャート300が処理中に実行されるステップを示すためにトラバースする順序は、ある処理の実行から別の処理の実行までさまざまになり得る。フローチャートのトラバース順序も、ある処理の実施形態から別の処理の実施形態までさまざまになり得る。ステップは、実行される処理が動作可能で、且つ少なくとも1つの特許請求の範囲に従うという条件で、省略され、組み合わされ、名前を変えられ、再グループ化され、あるいは例示されたフローから離れてもよい。
テクノロジーの態様を明らかにするのに役立つ例を本明細書で与えるが、本文書内で与えられる例は、考えられる実施形態をすべて説明しているわけではない。実施形態は、本明細書で与えられる特定の実装、配置、表示、機能、アプローチ、またはシナリオに限定されない。所与の実施形態は、例えば、付加的または異なる機能、機構、および/またはデータ構造を含んでもよく、本明細書で与えられた例から逸脱しなければよい。
ユーザ定義型を特定するステップ302において、実施形態は、ソースコードのユーザ定義型204を特定する。ステップ302は、本明細書で説明するようなユーザ定義型204を特定するように適応した、例えば、字句アナライザ、パーサおよび/または他の機構を使用して実現できる。具体的には、よく知られたソースコードの注釈を認識するのに使用される機構を適応させて、キーワードによって注釈206を認識できる。
境界検査表現を挿入するステップ304において、実施形態は、対応する注釈付けられたソースコードのコンパイル中、境界検査表現220を中間言語コード124に挿入する。ステップ304は、本明細書で説明するような境界検査注釈206を表現するために適応した、例えば、解析木、抽象構文木、属性、汎用のドープベクトル、および/または他の機構を使用して実現できる。
最適化を適用するステップ306において、実施形態は、最適化(複数)228を適用して、冗長な境界検査を減らすまたはなくす。最適化をソースコード、中間コード、および/または実行可能コードに適用して、実行可能コードで発生するであろう重複した境界検査を減らすことができる。ステップ306は、境界検査に従うメモリアクセスは、実行中、結果として許可された境界外のメモリアクセスになるであろう値を想定することができないと分析的に判定することによって実現できる。例えば、ポインタが、コードの第1のポイントにおいて境界検査された場合、およびその境界およびポインタ値が、コードの実行の後に第2のポイントにおいて変更されなかった場合、第2のポイントにおける境界検査は必要ない。別の例として、、ポインタが、コードの第1のポイントにおいて境界検査された場合、および所与の指示で変更されたポインタ値が、コードの実行の後に第2のポイントにおいてその指示で変更された境界ほど変更されなかった場合、第2のポイントにおける境界検査は必要ない。さらに別の例として、メモリアクセスが、コードの実行中にどのフロー制御によっても到達不可能な場合、そのメモリアクセスの境界検査は必要ない。
境界検査コードを挿入するステップ308において、実施形態は、対応する注釈付けられたソースコードのコンパイラ中に境界検査コード222を実行可能コード126に挿入する。いくつかの実施形態は、中間言語コード124および実行可能コード126を別個に、例えば、別個のファイルに保持し、一方他の実施形態は、中間言語コード124および実行可能コード126を混合する。従って、ステップ308は、中間言語コード124として作業しているメモリの同じファイルまたは同じブロックに示される実行可能コード126に境界検査コード222を挿入することも起こり得る。ステップ308は、例えば、解析木、抽象構文木、選択命令、スケジューリング命令、レジスタ割り当て、および/または他の機構を使用して、境界検査コード222を挿入するように適応することを実現できる。
境界検査を補足するステップ310において、実施形態は、例えば、内蔵型の境界検査または単純な配列型の境界検査などの、すでに提供された境界検査を補足する。ステップ310は、例えば、境界検査された構成型を有する型204を定義することによって、またはそのような型をコンパイルすることによって実現できる。従って、境界検査を補足するステップ310は、境界検査表現を挿入するステップ304中および/または境界検査コードを挿入するステップ308中に、その挿入が以前に提供された境界検査を補足する場合に発生し得る。境界検査を補足するステップ310は、以前に示した境界検査にさらに境界検査を追加するように注釈付けられる型204を定義する開発者によって実行されることもできる。
特定の型を定義するステップ312において、ユーザは、配列型132でない型204、即ち、配列型を持たない型204を構成型として定義する。クラス202は、ユーザ定義型204の一例であると見なされる。整数変数などの単一値の変数は、配列の特殊な例と見なされない。ステップ312の用途として、配列は、少なくとも2つの要素を有する。ステップ312によって定義される型の配列の欠如は、よく知られた配列専用の境界検査と比較して、本明細書で説明するようなコンパイル時境界検査による柔軟性の改善を強調する働きをする。よく知られたソースコード編集ツールおよび開発環境138を、開発者によってステップ312中に定義される型204を受け取るのに使用されてもよい。
ソースコードを取得するステップ314において、開発者または開発者の代わりに動作する実施形態は、ソースコード122を取得する。ステップ314は、ファイルシステム、ネットワーク、IDE138、および/または他のよく知られた機構を使用して実現できる。
型を指定するステップ316において、開発者または開発者の代わりに動作する実施形態は、ソースコード122のユーザ定義型204(例えば、ユーザ定義クラス202であってよい)を指定する。よく知られたソースコード編集ツールおよび開発環境138は、開発者によってステップ316中に型204を指定するのに使用されてもよい。特定の実施形態において、ステップ316は、特定の型を定義するステップ312および/または境界検査を補足するステップ310を含むことができる。
メソッドを見つけるステップ318において、開発者または開発者の代わりに動作する実施形態は、ユーザ定義型204によって定義される(例えば、指定されるステップ316)メモリにアクセスするメソッド320を見つける。そのようなメソッド320は、一般にメモリアクセスコードの例である。ステップ318は、よく知られたソースコード編集ツールおよび開発環境138を使用して実現でき、特に、キーワード検索能力で実現できる。
注釈付けるステップ(複数)322において、開発者または開発者の代わりに動作する実施形態は、ユーザ定義型204のオブジェクトまたは他の変数を保持するために明示的に割り当てられるメモリの境界検査情報をコンパイラ224に提供するソースコードを注釈付ける。例えば、メモリアクセスコードは、ユーザ定義の境界検査(user-defined-bounds-check)324の注釈206で注釈付けられ、それは、注釈206を持たない言語環境によってどんな検査が提供されても、そのコードが、明示的に境界検査に割り当てられるおよび/あるいは従うメモリにアクセスする(またはアクセスできる)ことを示す。明示的に割り当てられるメモリにアクセスする(またはアクセスできる)コードは、明示的に割り当てられるメモリへのアクセス(accesses-explicitly-allocated-memory)326の注釈206によってコンパイラ224に特定されることができる。境界提供210の注釈206は、境界を包含するフィールド(field-contains-bound)328の注釈206で注釈付けるステップ322のフィールド212によって、または境界ゲッタメソッド(bound-getter-method)330の注釈206で注釈付けるステップ322のメソッド214によってなどで境界を示す、注釈付けるステップ322の機構に置かれてもよい。
ラップするステップ332において、開発者または開発者の代わりに動作する実施形態は、ユーザ定義型204の既存の型をラップする。即ち、ユーザは、既存の型を構造型として有する、型204を定義(指定する)し、それによって、必要であれば、既存の型の境界検査を補足するステップ310を用いる。ステップ322は、よく知られたソースコード編集ツールおよび開発環境138を使用して実現できる。
第2の境界を表すステップ334において、開発者または開発者の代わりに動作する実施形態は、ユーザ定義型204の第2の境界218の条件を表す。即ち、ユーザは、異なる境界を指定することによってユーザ定義型の境界検査を補足するステップ310を用いる。例えば、型は、割り当てられた全メモリを反映する第1の境界を有し、および割り当てられたメモリの実際の使用を反映する第2の境界も有することができ、例えば、「古い(obsolete)」とマークされたレコードは、たとえメモリに常駐していてレコードを保持するために割り当てられていても、境界外と見なされる。ステップ324は、よく知られたソースコード編集ツールおよび開発環境138を使用して実現できる。
重複した境界検査を減らすステップ336において、実施形態は、例えば、少なくとも1つの冗長な境界検査を見つけて、そして解除するのに成功した、最適化(複数)228を適用するステップ306によって、重複した境界検査を減らす。
コンパイルするステップ338において、実施形態は、注釈付けるステップ322のソースコードをコンパイルする。ステップ338は、よく知られたコンパイルツール、および本明細書で説明するようなユーザ定義型のコンパイル時に最適化される境界検査(compile-time-optimized bounds checking)を提供するように適応された技術を使用して実現できる。
メモリを構成するステップ340において、メモリ媒体112は、ユーザ定義型204と、コンパイラ224を最適化する226と、および/あるいは本明細書で説明するようなユーザ定義型のコンパイル時最適化境界検査に接続することによって構成される。
前述のステップおよびそれらの相互関係は、さまざまな実施形態に関連して以下により詳細に論じる。
いくつかの実施形態は、ユーザデータ型のコンパイル時境界検査の処理を提供する。この処理は、ソースコードから中間言語コードを通じて実行可能コードに流れるプログラムのコンパイル中に実行されるステップを含む。ソースコードのユーザ定義クラス202または他の型204の特定は、特定するステップ302を用いる。ユーザ定義クラスは、例えば、明示的に割り当てられるメモリに安全にアクセスすることを意図する場合もある。いくつかの実施形態において、ユーザ定義クラスは、多要素配列型でない任意の型を構成型として定義されるステップ312を用いる。ユーザ定義クラスは、メモリアクセス208コードを注釈メンバとして有することができ、そのコードの注釈は、ユーザ定義の境界検査324の注釈206で注釈付けるステップ322を用いる。クラス202は、境界提供210メンバを注釈メンバとしても有することができ、その提供メンバの注釈は、メモリアクセスコードの境界検査を生成するための境界218情報を提供することを示すように注釈付けるステップ322を用いる。注釈付けられた型204に応答して、ユーザ定義の境界検査の注釈の境界検査表現220は、中間言語コードに挿入されるステップ304を用いて、場合によっては、最適化228は、実行可能コードで発生するであろう重複した境界検査を減らすために適用するステップ306を用いる。
いくつかの実施形態において、処理は、境界検査表現に応答して、境界検査コードを中間言語に挿入するステップ308を含み、ステップの適用は、最適化を境界検査表現(複数)に適用するよりはむしろ、挿入された境界検査コードに最適化を適用するステップ306を用いる。いくつかの実施形態において、ステップの適用は、最適化を境界検査コード222に適用するよりはむしろ、最適化を境界検査表現(複数)220に適用するステップ306を用いる。
いくつかの実施形態において、ステップの特定は、明示的に割り当てられるメモリへのアクセス326の注釈で注釈付けられたステップ322のメモリにアクセスするメソッド320を特定するステップ302を用いる。いくつかの実施形態において、ステップの特定は、内蔵型128のシステム定義の境界検査(system-defined bounds checking)を補足するステップ310を意図する、ユーザ定義の境界検査を示す注釈206を特定するステップ302を用いる。いくつかの実施形態において、ステップの特定は、ガーベジコレクタ管理型130のシステム定義の境界検査を補足するステップ310を意図した、ユーザ定義の境界検査を示す注釈206を特定するステップ302を用いる。
いくつかの実施形態は、ユーザ定義型、即ち、内蔵ではない型のコンパイル時境界検査を管理する処理をプログラム開発者に提供する。その処理は、コンピュータプログラムのソースコード取得するステップ314と、(例えば、型204を書き込むことによってまたは以前に書き込まれた型を受け取ることによって)そのソースコードのユーザ定義型を指定するステップ316とを含む。処理はまた、ユーザ定義のデータ型によって定義される、メモリにアクセスするメソッド320を見つけるステップ318と、例えば、明示的に割り当てられるメモリへのアクセス326または他の注釈206でメモリにアクセスするメソッドを注釈付けるステップ322とを含む。さらに、処理は、以下の、ユーザ定義のデータ型204によって定義されるフィールド212が、メモリにアクセスするメソッドの境界218の値を包含することを示した、境界を包含するフィールド328の注釈206と、ユーザ定義のデータ型によって定義される境界取得メソッド214が、メモリにアクセスするメソッドの境界218の値を返すことを示した、境界ゲッタメソッド330の注釈206とのうちの少なくとも1つでソースコードを注釈付けるステップ322を含む。
いくつかの実施形態において、開発者は、メモリにアクセスするメソッドの第2の境界を表すステップ334の注釈206でソースコードを注釈付けるステップ322を用いる。いくつかの実施形態において、ユーザ定義型204は、内蔵された128の配列型132をラップするステップ332を用いる。いくつかの実施形態において、ユーザ定義型204は、内蔵された128の管理型130をラップするステップ332を用いる。
構成媒体
いくつかの実施形態は、構成されたコンピュータ可読記憶媒体112を含む。媒体112は、ディスク(磁気ディスク、光ディスクその他)、RAM、EEPROMまたは他のROM、および/または、特に持続性のコンピュータ可読媒体(有線または他の伝搬信号媒体とは対照的である)を含む、他の構成可能メモリを含んでもよい。構成される記憶媒体は、特に、CD、DVD、またはフラッシュメモリなどの、取り外し可能な記憶媒体114であってもよい。取り外し可能でも取り外し不能でもよく、且つ揮発性でも不揮発性でもよい、汎用メモリは、ユーザ定義型204(それらの注釈206を含む)、および/または(注釈206を処理するように適応した)オプティマイザ226などの、項目を使用した実施形態に、取り外し可能な媒体114および/またはネットワーク接続などの別のソースから読み取って構成媒体を形成する、データ118および命令116の形式で構成されることができる。構成媒体112は、コンピュータシステムに、本明細書で説明するような注釈とコンパイル時に最適化される柔軟性のある境界検査とを通じて、ソースコードまたは他のコードを変換する処理ステップを実行するようにさせる能力がある。従って図1から図3までは、構成された記憶媒体の実施形態および処理の実施形態、ならびにシステムおよび処理の実施形態を明らかにするのに役立つ。特に、図3に例示した、あるいは本明細書で教示した処理ステップのいずれも、構成媒体の実施形態を形成する記憶媒体を構成するのに役立つように使用できる。
付加的な例
付加的な詳細および設計考察を以下に与える。本明細書の他の例と同様に、説明する機能は、所与の実施形態において、個々におよび/または組み合わせて使用されてもよいし、または全く使用されなくてもよい。
当業者は、実装の詳細は、専用APIおよび専用サンプルプログラムなどの、特定のコードに関連する場合もあり、従って、それぞれの実施形態で示す必要がないことを理解するであろう。当業者は、詳細を論じるのに用いるプログラム識別子および他のテクノロジーは、実装時固有のものであり、従ってそれぞれの実施形態に関連する必要がないことも理解するであろう。それらの詳細は、必ずしもここで提示される必要があるわけではないが、そのような詳細は、一部の読み手に文脈を与えて読み易くできるし、および/または本明細書で論じたテクノロジーの多くの考えられる実装のうちのいくつかを明らかにできるため、提供される。
本明細書で説明するいくつかの実施形態は、以下の態様を与える。
第一に、プログラマに、明示的に割り当てられるメモリに安全な形でアクセスするデータ型204(例えば、クラス202)を定義するようにさせる方法である。プログラマは、プログラマがデータ型によって定義されるメソッドに置く、注釈206のセットを使用することができる。ある種類の注釈206は、注釈付けられたメソッドが、明示的に割り当てられるメモリにアクセスし、そして境界検査によって保護されなければならないことを示す。別の種類の注釈206は、データ型のフィールド212が、メモリアクセスの境界218を包含することを示す。3番目の種類の注釈206は、データ型のメソッド214が、メモリアクセスの境界を返すことを示す。2番目の種類の注釈または3番目の種類の注釈のいずれか(または両方)を、第1の種類の注釈の特定のインスタンスに使用できる。
第二に、コンパイラ224は、このような注釈206を、その中間表現で、即ち、中間言語コードで表現する。
第三に、中間表現の注釈に基づいて、コンパイル224は、明示的に割り当てられるメモリにアクセスするメソッド320を呼び出す前に、境界検査を挿入する。
第四に、境界検査を挿入するステップ304/308の後、コンパイラは、不必要な境界検査を減らす(なくすこともあり得る)ステップ336の最適化を行う。このような最適化228は、注釈付けられた中間表現を理解し、そして単なる配列よりも複雑である明示的に割り当てられるメモリにアクセスするメソッドを呼び出す前に挿入される境界検査をなくすように配列の最適化を拡張することによって、リテラチャー(literature)によくある最適化によって現在の文脈で使用されるように適応されることができる。コンパイラ224または他のオプティマイザ226は、境界アクセスまたは境界アクセスを返すメソッドを包含するフィールド、および機能を呼び出す前に挿入される検査を比較して特定し、その後その検査を安全になくすことができるかどうかを(アレイの不必要な境界検査をなくすためのよく知られた技術によって適応されるアプローチを経て)シンボルで判定する。
このようにして、プログラマは、明示的に割り当てられるメモリを比較的安全な形で使用することができる。これによって、明示的に割り当てられるメモリに管理コードで効率的よく、安全にアクセスすることができるようになる。
いくつかの実施形態において、コンパイラ224は、単なる配列ではないデータ構造を含む、データ構造に任意に適用することができる属性のセットを提供する。この方法で、これらの実施形態は、一般化され、そして例えば、内蔵言語型のような配列に特有な作業などの、境界検査の初期作業に柔軟性を付加する。これらの実施形態は、プログラマが、境界検査をそのプログラマによって定義される代替データ構造に適用できるようにさせ、特に、コンパイラおよび言語システムがデータレイアウト216を制御しないか、またはそこでのデータレイアウト216が任意であってよい状況で境界検査ができるようにさせる。
いくつかの実施形態は、プログラミング言語による配列の実装に使用された「ドープベクトル」の考えから思い付いたものであり、プログラマが、プログラミング言語の実装によって定義されるデータ構造の代わりに、境界検査されるデータ構造を定義できる実施形態に到達する過程でその概念を変更している。よく知られたドープベクトルは、配列要素、配列境界、および可能であれば他の情報を包含するメモリブロックのポインタを包含する。いくつかの実施形態は、プログラムが、よく知られた配列境界検査と本明細書で教示した柔軟性のあるユーザ定義型204の境界検査との両方に対してより効率的になるように、配列境界検査をなくす、よく知られた作業に統合されるまたは統合されることができる。
いくつかの実施形態において、注釈206は、必要に応じてランタイム時に強制される、ライブラリ動作のハイレベルではない意味のプロパティ(semantic property)の正確性検査を記述する。オプティマイザ226は、不必要な検査をなくすように試みる。他の作業では、対照的に、オプティマイザは、ライブラリの意味のプロパティを記述する注釈を使用して、そのライブラリの使用法(usage)を、本明細書で説明するような不必要で安全な検査を減らすステップ336を用いずに、最適化する。
いくつかの実施形態は、ジャストインタイム(JIT)コンパイル、ガーベジコレクション(GC)、ランタイムリフレクション他などの、サービスおよび機能を含む比較的大規模なランタイムである、Microsoft(登録商標)の共通言語ランタイム(CLR)を包含したオペレーティング環境100を有する。一部のGCが、型安全性のために提供されることもあるが、いくつかの実施形態は、従来のコンパイル(事前コンパイルと呼ばれることもある)を用いてC言語モデルに密接に従う。
いくつかの実施形態において、C#は、以下のメソッドの属性に従って使用することができるように、返り値を注釈付けできるようにする。
[return;SomeAttribute]
intSomeMethod(){...}
いくつかの実施形態において、コンパイラ生成およびコンパイラ解除の境界検査(compiler-generated and compiler-removed bounds checks)は、、管理されていないリソース、典型的には、メモリのインデックスプールを有するデータ構造に利用可能であるが、これに限定されない。プログラマは、コンパイラ224が、ランタイム時に(例えば、境界違反の例外を送出することによって)配列境界検査と同様にふるまう境界検査と、よく知られたオンデマンドの配列境界検査(ABCD)アプローチまたはABCDの代わりとなるよく知られた最適化で適応したアプローチによって解除される境界検査とを生成するように、プログラマのデータ構造を注釈付けることができる。
いくつかの実施形態において、3つのカスタム属性を提供する。
BoundsChecking属性は、注釈付けられるメソッド320に適用される。それに応じて、コンパイラ224は、呼位置(call site)における境界検査をBoundsCheckingとマークされたメソッドに挿入する。一実施形態において、コンパイラ224は、BoundsCheckingメソッドに、少なくとも1つの引数を有することを要求し、そしてその第1の引数がInt32型であることを要求する。境界検査は、第1の引数がゼロとBoundとマークされたフィールド(以下を参照)との間であることを検査する。この実施形態において、BoundsCheckingメソッドを有するすべての型は、Boundとマークされたのと同じ1つのInt32フィールドを有する。BoundsCheckingを付加することによる安全検査の解除は、ブレイク変更と見なさなければならない。
Bound属性は、注釈付けられるフィールド212に適用される。一実施形態において、そのフィールドは、Int32であり、同じ型204のBoundsCheckingメソッドによって生成される境界検査によって使用される。
BoundGetter属性は、注釈付けられるメソッド214に適用される。一実施形態において、Boundを返すメソッドがインライン化されない場合、そのメソッドは、BoundGetterとマークされ、そしてそのメソッドの呼は、そのBoundへのアクセスとして処理される。
いくつかの実施形態において、コンパイラ224は、上記の要件を検査するが、Boundが意味のあるフィールドに唯一適用されること、およびBoundGetterがBound(またはそのBound未満の値)を返すメソッド(複数)に唯一適用されることを確認するのは、プログラマの責任である。境界検査を解除するための最適化に基づいて適応した配列を有する一実施形態において、その境界検査は、Boundフィールドが変化していない場合、安全でない解除が行われる恐れがある。
いくつかの実施形態は、アプローチに基づく型をとり、そしてユーザが配列に似た形の型を書き込むことを予測し、そしてユーザにその形(レングスメソッドの場所、アクセス機構の場所)をコンパイラに記述するように求める。しかし、構造型は、それぞれの実施形態では必要ない。いくつかの実施形態において、関与する特性は、ユーザコードの位置が、あるユーザ変数の検査を必要とし、そしてコンパイラは、その検査を構築する方法を命令されるという要因を含む。いくつかの実施形態は、実装の選択として、配列検査[0,長)に似た利用可能な検査の形をとる。
いくつかの実施形態は、メソッド320に[BoundsChecking]を付ける。いくつかの実施形態はまた、以下の例のような、他のメモリアクセス208コードでそれらを直接ソースコードに置く。
voidFoo(int i){
byte*p=...
[BoundsChecking](or[BoundsChecking(i)]
...*(p+i)...
実際、この種類の注釈は、あるソース言語の標準から外れているかもしれない。それは、ECMA335標準の実装である、マイクロソフト中間言語(MSIL)に従っていないが、他の言語に従うことができる。
いくつかの実施形態は、明示的に注釈付けられるメモリの保護に限定されない。例えば、ある実施形態では、ラップするステップ332の管理配列がこのようになる。
class List{
int[]arr=new int[20];
[Bound]
int count=0;
void Aあdd(int i){
arr[coount]=i;
count=count+1;

[BoundsChecking]
void Get(int i){
return arr[i];

この例において、プログラム言語は、arrで既存の配列境界検査を提供するが、開発者は、iが20未満であることだけでなく、リストに付加された項目数よりも少ないことも確認するためにより強固な補足的な検査も必要とする。両方の検査は、配列境界検査および/または他の最適化が済むと解除の候補となる。
排除
本明細書で説明される柔軟性のあるコンパイル時境界検査と先行アプローチとの違いをさらに明らかにするために、よく知られた配列境界検査の考察を以下に与える。この考察で説明する概念およびテクノロジーは、本明細書で教示された実施形態と互いに使用されないようにするという点において、実際に置き換えられるが、それらは、ここでは保護が求められる実施形態の範囲外にある。
境界属性の収束の文脈において、あるアプローチは、ポインタまたはC#配列または配列型のフィールド、パラメータ、または返り値で示すことができる属性を記す。
[StaticBound(n)]、ここでのnは、ある整数リテラルである。
[BoundedBy(ident)]、ここでのidentは、以下のいずれかの識別子である。
即座に構造を包含する同じメンバである整数型のその他のフィールド。
または、同じ手順/メソッドのその他の仮パラメータ。
または、返り値の例において、実際にメソッドにアタッチされる返り値。
これらの識別子は、引数が{string|int}と定義されることが許可される場合、単一の属性に折り畳まれる。第2の属性名を必要としなくてもよい。
これらの属性を搬送するフィールド/パラメータがポインタである場合、属性のプレゼンスは、そのポインタを通じたインデックス動作を検査しなければならないというコントラクトを搬送する。社会的観点から、バックオフを適合した方が逆のやり方よりも簡単であることに留意されたい。
パラメータ、フィールド、またはインデックス(ある整数型によって構成されなければならない)として機能する返り値で示すことができる属性。
[Range(begin,end)]、ここでのbeginおよびendは、整数リテラル、またはstringで符号化される識別子のいずれであってもよく、そして通常の予測では、beginは、ゼロのリテラル定数になる。
この属性が、仮パラメータで表示される時、仮パラメータは、コーラ(caller)が実パラメータを範囲検査/解除しなければならないことを示す。
この属性が、フィールドで表示される時、フィールドは、右側(RHS)の割り当てまたは初期化が範囲検査または同等に解除されなければならないことを示す。
この属性が、メソッドで表示される時、メソッドは、そのメソッドが値を返す前に検査/解除しなければならないという返り値の用件を示す。
マングリングおよびラッピングを通じたバブルバージョンに関して、それが望ましいと証明されれば、関与しないコーラ(oblivious caller)と互換するようにダウンロードすることが可能である。
範囲をより精密に保存できる。
[Range(inclusiveBase,ExclusiveBound)]
排他境界の損得に関して、ある不利点は、intsでの符号化(例)MAXINTが不可能なことである。代替[Range(inclusiveBase,InclusiveBound)]は、ユースケース形式:[Range(0,bound|dent−1)]にほとんど変換しないであろう。それによって、動作がぎこちなく見え、属性の表現に問題が生じる。
その問題は、表現可能な最大値を範囲に含めなければならない場合に、異なる属性を使用することによって直接解決することができる。
[AtLeast(lowerBound)]or[GreaterThanOrEqualTo(lowerBound)]
どのC#型もその型の結果として範囲境界を元来有するという事実に基づいて、下位のパラメータを解放して、上位境界を暗示的に指定する。
BoundedByおよびRange属性を分離することができる。
属性は、所与のパラメータの位置において「int関数またはstring関数」をとるように指定されてよい。ある属性は、その属性が同じ位置で異なる型をとることができるように、複数のコンストラクタをカスタム属性用に書き込むか、またはこれを名前付きパラメータで行うことができる。
これで排除の考察を終了する。
結論
特定の実施形態を、本明細書では、処理として、構成媒体として、またはシステムとして明確に説明しているが、ある種類の実施形態の考察はまた、概して別の種類の実施形態にまで及ぶことが認識されよう。例えば、図3と関連した処理の説明も、構成媒体を説明するのに役立ち、そして他の図面と関連して論じたようなシステムおよび製品の動作を説明するのにも役立つ。それは、一実施形態の制限を、必然的に別の実施形態を制限する意味に解釈するということではない。特に、処理は、システムまたは構成メモリなどの製品を論じている間に提示されたデータ構造および配置に必ずしも限定されるというわけではない。
図面に示したすべての項目が、どの実施形態にも存在するというわけではない。反対に、1つの実施形態は、図面に明確に示した項目(複数)を包含してよい。いくつかの可能性を、ここでは特定の例による文章および図で説明しているが、実施形態は、そのような例から逸脱してもよい。例えば、1つの例の特定の機能は、省略され、名前を変えられ、異なってグループ化され、繰り返され、ハードウェアおよび/またはソフトウェアに異なってインスタンス生成され、または例のうちの2または3以上に示される機能の組み合わせにされてもよい。いくつかの実施形態において、ある場所で示した機能性は、異なる場所で提供されてもよい。
参照は、参照番号によって図全体で行われている。所与の参照番号と関連する言い回しにおいて、図面においてまたは文章においての明白な矛盾のいずれも、その番号によって参照された内容の範囲を単に広げたものとして理解されたい。
本明細書では、「1つの(a)」または「その(the)」などの用語は、示された項目またはステップのうちの1または複数を包括する。特に、特許請求の範囲において、項目への言及は、概してそのような項目の少なくとも1つが存在することを意味し、そしてステップへの言及は、そのステップのうちの少なくとも1つのインスタンスが実行されることを意味する。
見出しは、唯一便宜上のものである。所与の論説(topic)についての案内は、見出しがその論説を示す節の外側に見られる。
出願されるすべての特許請求の範囲は、この明細書部分である。
模範的な実施形態を上記に図示して説明しているが、多くの変更は、本発明の原理および特許請求の範囲に記載した概念から逸脱せずに行うことが可能であり、そしてそのような変更は、すべての抽象的概念を網羅する必要がないことが当業者には明らかであろう。本発明の主題は、構造的特徴および/または手順の動作に特有の用語で説明されているが、添付の特許請求の範囲で定義された本発明の主題は、特許請求の範囲の上記で説明された特定の特徴または動作に必ずしも限定されるわけではないことを理解されたい。所与の定義または例で特定されたすべての手段または態様が、必ずしもすべの実施形態において提示されまたは利用される必要があるわけではない。むしろ、説明した特定の特徴または動作は、特許請求の範囲を実装する場合に考慮される例として開示される。
すべての抽象的考えを網羅する範囲内であるが、特許請求の範囲の等価の意味および範囲内であるすべての変更は、法律の及ぶ限りそれらの範囲内に包含されるものとする。

Claims (15)

  1. データと、少なくとも1つのプロセッサによって実行された時に、前記プロセッサにユーザ定義型のコンパイル時境界検査の処理を実行させる命令と、によって構成されるコンピュータ可読の持続性記憶媒体であって、前記処理は、ソースコードから中間言語コードを通じて実行可能コードとなるプログラムのコンパイル中に実行されるステップであって、
    メモリに安全にアクセスするために前記ソースコード内のユーザ定義クラス、即ち、ユーザ定義の境界検査の注釈で注釈付けられるメモリアクセスコードを注釈メンバとして有し、さらに前記メモリアクセスコードにおける境界検査を生成するための境界情報を提供することを示すように注釈付けられる境界提供メンバを別の注釈メンバとして有するユーザ定義クラスを特定するステップと、
    前記ユーザ定義の境界検査の注釈の境界検査表現を前記中間言語コードに挿入するステップと、
    前記実行可能コードで発生するであろう重複した境界検査を減らす最適化を適用するステップと
    を備えることを特徴とするコンピュータ可読の持続性記憶媒体。
  2. 境界検査表現に応答して境界検査コードを前記中間言語コードに挿入するステップをさらに備え、
    前記適用するステップは、前記最適化を境界検査表現に適用するよりはむしろ、前記最適化を、挿入された境界検査コードに適用すること、
    を特徴とする請求項1に記載のコンピュータ可読の持続性記憶媒体。
  3. 前記適用するステップは、前記最適化を前記中間言語コード内の境界検査コードに適用するよりはむしろ、前記最適化を境界検査表現に適用することを特徴とする請求項1に記載のコンピュータ可読の持続性記憶媒体。
  4. 前記特定するステップは、明示的に割り当てられるメモリへのアクセスの注釈で注釈付けられたメモリアクセスメソッドを特定することを特徴とする請求項1に記載のコンピュータ可読の持続性記憶媒体。
  5. 前記特定するステップは、内蔵型のシステム定義の境界検査を補足することを、ユーザ定義の境界検査に示す注釈を特定することを特徴とする請求項1に記載のコンピュータ可読の持続性記憶媒体。
  6. 前記特定するステップは、ガーベジコレクタ管理型のシステム定義の境界検査を補足することを、ユーザ定義の境界検査に示す注釈を特定することを特徴とする請求項1に記載のコンピュータ可読の持続性記憶媒体。
  7. ユーザ定義型、即ち、内蔵ではない型のコンパイル時境界検査を管理するプログラム開発者のための処理であって、
    コンピュータプログラムのソースコードを取得するステップと、
    ユーザ定義のデータ型を前記ソースコードで特定するステップと、
    前記ユーザ定義のデータ型によって定義されるメモリアクセスメソッドを見つけるステップと、
    前記メモリアクセスメソッドを、明示的に割り当てられるメモリへのアクセスの注釈で注釈付けるステップと、
    前記ユーザ定義のデータ型によって定義されるフィールドが前記メモリアクセスメソッドについての境界を包含することを示す境界を包含するフィールドの注釈、および
    前記ユーザ定義のデータ型によって定義される境界取得メソッドが前記メモリアクセスメソッドについての境界を返すことを表示した境界取得メソッドの注釈、のうちの少なくとも1つによって前記ソースコードを注釈付けるステップと、
    を備えることを特徴とする処理。
  8. 前記ユーザ定義型は、内蔵配列型および内蔵管理型のうちの少なくとも1つをラップすることを特徴とする請求項7に記載の処理。
  9. 論理プロセッサと、
    前記論理プロセッサと動作可能に通信するメモリと、
    前記メモリに常駐し、ユーザ定義型を有するソースコードであって、前記ユーザ定義型は、ユーザ定義の境界検査の注釈で注釈付けられるメモリアクセスメソッドを有し、前記ユーザ定義型は、少なくとも1つの境界指定子をも有する、ソースコードと、
    前記メモリに常駐し、前記ユーザ定義の境界検査の注釈の境界検査表現を、中間言語コードに挿入するように構成されたコンパイラと、
    前記メモリに常駐し、重複した境界検査を減らすために最適化を中間言語コードに適用するように構成されたオプティマイザと、
    を備えるコンピュータシステム。
  10. 前記注釈付けられるソースコードは、デバイスドライバのソースコードを備え、前記ユーザ定義型は、メモリマップドバッファに対応することを特徴とする請求項9に記載のシステム。
  11. 前記ソースコードは、ガーベジコレクトされたデータ型を備え、前記ユーザ定義型は、明示的に割り当てられるメモリに対応することを特徴とする請求項9に記載のシステム。
  12. 前記ユーザ定義型は、多要素配列型ではない、構成型として定義されることを特徴とする請求項9に記載のシステム。
  13. 前記境界指定子は、
    ユーザ定義のデータ型におけるフィールドが、前記メモリアクセスメソッドについての境界を包含することを示す境界を包含するフィールドの注釈、および
    ユーザ定義のデータ型における境界取得メソッドが、前記メモリアクセスメソッドについての境界を返すことを示す境界ゲッタメソッドの注釈、のうちの少なくとも1つを備えることを特徴とする請求項9に記載のシステム。
  14. 前記メモリに常駐し、前記ユーザ定義の境界検査の注釈の境界検査表現で注釈付けられる中間言語コードをさらに備えることを特徴とする請求項9に記載のシステム。
  15. 前記ユーザ定義型は、前記コンパイラによって制御されないデータレイアウトを有することを特徴とする請求項9に記載のシステム。
JP2013531616A 2010-09-28 2011-09-09 ユーザ定義型のコンパイル時境界検査 Expired - Fee Related JP5893038B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/892,291 US8533695B2 (en) 2010-09-28 2010-09-28 Compile-time bounds checking for user-defined types
US12/892,291 2010-09-28
PCT/US2011/051023 WO2012047447A1 (en) 2010-09-28 2011-09-09 Compile-time bounds checking for user-defined types

Publications (3)

Publication Number Publication Date
JP2013539130A true JP2013539130A (ja) 2013-10-17
JP2013539130A5 JP2013539130A5 (ja) 2014-10-02
JP5893038B2 JP5893038B2 (ja) 2016-03-23

Family

ID=45872016

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013531616A Expired - Fee Related JP5893038B2 (ja) 2010-09-28 2011-09-09 ユーザ定義型のコンパイル時境界検査

Country Status (8)

Country Link
US (1) US8533695B2 (ja)
EP (1) EP2622466B1 (ja)
JP (1) JP5893038B2 (ja)
KR (1) KR101786156B1 (ja)
CN (1) CN102402451B (ja)
CA (1) CA2810986A1 (ja)
ES (1) ES2733516T3 (ja)
WO (1) WO2012047447A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018158909A1 (ja) * 2017-03-02 2018-09-07 三菱電機株式会社 情報処理装置およびアクセス管理プログラム

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8291393B2 (en) * 2007-08-20 2012-10-16 International Business Machines Corporation Just-in-time compiler support for interruptible code
US10705804B2 (en) * 2012-02-26 2020-07-07 Logistics Research Centre SIA Strongly typed metadata access in object oriented programming languages with reflection support
US9195442B2 (en) 2012-07-10 2015-11-24 Oracle International Corporation System and method for compiling lambda expression in a programming language environment
US8954939B2 (en) * 2012-12-31 2015-02-10 Microsoft Corporation Extending a development environment
US9098269B2 (en) 2013-01-04 2015-08-04 Microsoft Technology Licensing, Llc System and method to ensure resource access safety with immutable object types
US20140196015A1 (en) * 2013-01-04 2014-07-10 Microsoft Corporation Declaration of lifetime of resource reference
US9772828B2 (en) * 2014-04-22 2017-09-26 Oracle International Corporation Structural identification of dynamically generated, pattern-instantiation, generated classes
US9684492B2 (en) 2015-09-28 2017-06-20 Semmle Limited Automatic determination of compiler configuration
US9672015B2 (en) * 2015-09-28 2017-06-06 Semmle Limited Automatic determination of compiler configuration
US10706164B2 (en) * 2017-09-29 2020-07-07 Intel Corporation Crypto-enforced capabilities for isolation
CN108459873B (zh) * 2018-03-05 2021-09-24 中国人民解放军国防科技大学 一种提高开源代码注释率及注释质量的方法
US11023214B2 (en) * 2018-07-30 2021-06-01 Roger James Poon System and method for eliminating runtime out-of-bounds errors and exceptions
KR102322965B1 (ko) 2020-03-23 2021-11-09 주식회사 티맥스 소프트 Transpiler를 통하여 전환된 언어와 source 언어간 범용 런타임 검증 시스템
US10963228B1 (en) * 2020-12-22 2021-03-30 Temper Systems, Inc. Preventing garbage object accumulation on minimal runtimes
US20230090973A1 (en) * 2021-09-21 2023-03-23 Intel Corporation Immediate offset of load store and atomic instructions
US20230315412A1 (en) * 2022-03-30 2023-10-05 Microsoft Technology Licensing, Llc Scalable behavioral interface specification checking
US20240104013A1 (en) * 2022-09-28 2024-03-28 Intel Corporation Deterministic adjacent overflow detection for slotted memory pointers
US20240272885A1 (en) * 2023-02-13 2024-08-15 Oracle International Corporation Modeling java source code in a symbolic description language
US12436749B2 (en) * 2023-03-31 2025-10-07 Veracode, Inc. Inferring type definitions of user-defined types of variables in application program code

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10275087A (ja) * 1997-03-28 1998-10-13 Fujitsu Ltd コンパイル装置
JP2000081983A (ja) * 1998-07-10 2000-03-21 Internatl Business Mach Corp <Ibm> ル―プに対するバ―ジョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベ―シック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコ―ドを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4584666A (en) 1984-06-21 1986-04-22 Motorola, Inc. Method and apparatus for signed and unsigned bounds check
US5075845A (en) * 1989-12-22 1991-12-24 Intel Corporation Type management and control in an object oriented memory protection mechanism
US5644709A (en) 1994-04-21 1997-07-01 Wisconsin Alumni Research Foundation Method for detecting computer memory access errors
US5694539A (en) * 1994-08-10 1997-12-02 Intrinsa Corporation Computer process resource modelling method and apparatus
DE69713400T2 (de) 1996-01-24 2002-10-31 Sun Microsystems, Inc. Prozessor mit Bereichsüberprüfung bei Matrixzugriffen
US6149318A (en) 1997-04-15 2000-11-21 Samuel C. Kendall Link-time and run-time error detection, and program instrumentation
US6343375B1 (en) 1998-04-24 2002-01-29 International Business Machines Corporation Method for optimizing array bounds checks in programs
US7260817B2 (en) * 1999-07-09 2007-08-21 International Business Machines Corporation Method using array range check information for generating versioning code before a loop for execution
JP3564445B2 (ja) * 2001-09-20 2004-09-08 松下電器産業株式会社 プロセッサ、コンパイル装置及びコンパイル方法
WO2005029241A2 (en) 2003-09-15 2005-03-31 Plum Thomas S Automated safe secure techniques for eliminating
US20050108695A1 (en) * 2003-11-14 2005-05-19 Long Li Apparatus and method for an automatic thread-partition compiler
US7448029B2 (en) * 2004-04-26 2008-11-04 International Business Machines Corporation Modification of array access checking in AIX
US7325007B2 (en) * 2005-03-07 2008-01-29 Microsoft Corporation System and method for supporting non-native data types in a database API
US7650346B2 (en) * 2005-04-01 2010-01-19 Microsoft Corporation User-defined type consistency checker
US7810085B2 (en) * 2005-12-07 2010-10-05 Microsoft Corporation Removal of unnecessary read-to-update upgrades in software transactional memory
US8484613B2 (en) * 2010-01-28 2013-07-09 Synopsys, Inc. Optimizing bounds checking using computer algebra

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10275087A (ja) * 1997-03-28 1998-10-13 Fujitsu Ltd コンパイル装置
JP2000081983A (ja) * 1998-07-10 2000-03-21 Internatl Business Mach Corp <Ibm> ル―プに対するバ―ジョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベ―シック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコ―ドを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6015039145; Matthew M. Papi et al.: '"Pluggable Type-checking for Custom Type Qualifiers in Java"' Computer Science and Artificial Intelligence Laboratory Technical Report , 20070917, pp.1-10, MIT *
JPN6015039146; 酒匂 寛: '"Eiffel-仕様記述能力をもつオブジェクト指向言語-"' 情報処理 第35巻,第3号(通巻349号), 19940315, pp.204-214, 社団法人情報処理学会 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018158909A1 (ja) * 2017-03-02 2018-09-07 三菱電機株式会社 情報処理装置およびアクセス管理プログラム
JPWO2018158909A1 (ja) * 2017-03-02 2019-06-27 三菱電機株式会社 情報処理装置およびアクセス管理プログラム

Also Published As

Publication number Publication date
CN102402451B (zh) 2014-07-23
CN102402451A (zh) 2012-04-04
US20120079465A1 (en) 2012-03-29
KR101786156B1 (ko) 2017-10-16
CA2810986A1 (en) 2012-04-12
EP2622466A4 (en) 2014-10-01
JP5893038B2 (ja) 2016-03-23
EP2622466B1 (en) 2019-04-10
US8533695B2 (en) 2013-09-10
KR20130101037A (ko) 2013-09-12
EP2622466A1 (en) 2013-08-07
ES2733516T3 (es) 2019-11-29
WO2012047447A1 (en) 2012-04-12

Similar Documents

Publication Publication Date Title
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
CN114041117B (zh) 用于代码优化的语法图的持续注释
JP5851396B2 (ja) 処理方法
US8843920B2 (en) Systems and methods for deferring software implementation decisions until load time
US20120317556A1 (en) Optimizing execution of kernels
MX2013003339A (es) Sistemas y metodos para la vectorizacion basada en compilador de codigo no hoja.
AU2014215529B2 (en) A method for modeling source code having code segments that lack source location
Chen et al. Type-preserving compilation for large-scale optimizing object-oriented compilers
US11972237B1 (en) Member invocation declarative interception
Bueno et al. The Ciao Preprocessor
US20250165237A1 (en) Methods, systems, and computer program products for processing an excludable addressable entity
US20200241857A1 (en) Methods, systems, and computer program products for processing an excludable addressable entity
Shivam et al. OpenACC Routine Directive Propagation Using Interprocedural Analysis
Lee Pro Objective-C
US20160266879A1 (en) Methods, systems, and computer program products for processing an excludable addressable entity
Stork Concurrent Programming via Access Permissions
XL Getting Started with XL C
SVOBODA ARCHITECTURE INFORMATION FOR LLVM COMPILER OPTIMIZATIONS
Kovalov Context-sensitive Points-To Analysis: Comparing precision and scalability FFFFFFFF00000000000005005400650078007400310000000B0055006E00640065007200720075006200720069006B0000000000000000000000000000000000000000000000

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130712

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130719

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140812

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140812

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

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150929

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151224

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160223

R150 Certificate of patent or registration of utility model

Ref document number: 5893038

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees