JP6272336B2 - 外部参照がないことを表明する参照属性アノテーション - Google Patents

外部参照がないことを表明する参照属性アノテーション Download PDF

Info

Publication number
JP6272336B2
JP6272336B2 JP2015537021A JP2015537021A JP6272336B2 JP 6272336 B2 JP6272336 B2 JP 6272336B2 JP 2015537021 A JP2015537021 A JP 2015537021A JP 2015537021 A JP2015537021 A JP 2015537021A JP 6272336 B2 JP6272336 B2 JP 6272336B2
Authority
JP
Japan
Prior art keywords
computer
object graph
returned
component
immutable
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.)
Active
Application number
JP2015537021A
Other languages
English (en)
Other versions
JP2015531529A (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 JP2015531529A publication Critical patent/JP2015531529A/ja
Application granted granted Critical
Publication of JP6272336B2 publication Critical patent/JP6272336B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/288Entity relationship models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • 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/468Specific access rights for resources, e.g. using capability register
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Storage Device Security (AREA)
  • Devices For Executing Special Programs (AREA)

Description

[0001] コンピューティングシステムは、ソフトウェアプログラムを実行することにより高度の機能性を得る。プログラムは、ハードドライブ、コンパクトディスク、thumbdrive、フラッシュメモリ等々でなど、何らかの永続的な形式で維持されるコンピュータ実行可能命令からなる。実行の間、そのようなコンピュータ実行可能命令は、揮発性メモリ内にロードされ、コンピューティングシステムにタスクを実行させる、コンピューティングシステムの1つまたは複数のプロセッサにより実行される場合が多い。
[0002] 複数のプロセッサまたは複数のプロセッサコアを有するコンピューティングシステムは、複数の同時に実行するタスクにプログラムを区分することが多い。そのような同時実行は、応答性および処理効率を向上させることが可能であるが、同時実行によって、コンピューティングシステム内で(「共有状態」として知られている)同じデータにアクセスすることを試行する異なるタスクが結果として生じ得る。
[0003] これに対して、共有状態へのアクセスが制約されないと、検出、再現、および解決するのが困難である問題につながる場合がある。これらの問題の中には、データ競合がある。データ競合は、タスクがメモリ内のオブジェクトの無効状態を察知することが可能であり、一方で別のタスクが、同じ時にそのオブジェクトの状態をミューテートしている状況である。同時性の有益性を活用し、一方でデータ競合を回避することは、歴史的に解決するのが困難な問題であった。
[0004] 本明細書で説明する少なくとも1つの実施形態は、実行可能コンポーネントからの返される参照のアノテーションに関する。返される参照は、特定のオブジェクトグラフを参照する。1)実行可能コンポーネントへの入力引数が存在しないこと、または、2)各々の入力引数が、イミュータブル(immutable)であるか、オブジェクトグラフであって、そのオブジェクトグラフ内を指し示す外部ミュータブル(mutable)参照を有さず、外部オブジェクトを参照する内部的ミュータブル参照を有さない、オブジェクトグラフを表すかのいずれかであることのいずれかである場合、特定の属性が、返される参照に割り当てられる。特定の属性は、1)返される参照により参照される特定のオブジェクトグラフへの(または、特定のオブジェクトグラフの内部のいずれのオブジェクトへも)外部参照が存在しないこと、および、2)オブジェクトグラフの外側のいずれのオブジェクトへも、オブジェクトグラフの内部のミュータブル参照が存在しないことを表明する。したがって返される参照は、どのようなアクセスパーミッションでも、返される参照に割り当てられたパーミッションの範囲内で、その返される参照に自由に割り当てられる。実例として、返される参照が、書き込み可能(writable)と宣言されるならば、返される参照は、返される参照が、任意のパーミッションを割り当てられ得る、および/または、分離型(isolated)メモリロケーションに割り当てられ得ることを表すように、特定の属性によってアノテートされ得るが、そのような割り当てによって、返される参照は特定の属性を失うことになる。このように、本明細書で説明する原理は、それへの外部参照が存在しない参照の適正な検出およびアノテーションを考慮に入れたものである。
[0005] この概要は、請求する主題の主要な特徴または本質的な特徴を識別することは意図されず、この概要は、請求する主題の範囲を決定する一助として使用されることもまた意図されない。
[0006] 上記で列挙した、および他の、利点および特徴が得られ得る様式を説明するために、様々な実施形態のより詳細な説明を、添付の図面を参照することにより行う。これらの図面は、単なる見本の実施形態を図示するものであり、したがって本発明の範囲に関して限定的であると考えるべきではないことを理解して、実施形態を、付随する図面の使用によって、追加的な特異性および細部とともに、説明および解説する。
[0007]本明細書で説明する一部の実施形態が用いられ得るコンピューティングシステムを抽象的に例示する図である。 [0008]オブジェクトグラフの分離およびミュータビリティを追跡するフレームワーク、ならびにアノテーションコンポーネントを含む環境を例示する図である。 [0009]図2のアノテーションコンポーネントなどのアノテーションコンポーネントが、少なくとも、特定のオブジェクトグラフを参照する参照を返す実行可能コンポーネントを評価するための、および、実行可能コンポーネントにより返される参照をアノテートするための方法のフローチャートを例示する図である。 [0010]実行可能コンポーネントが入力引数を受け取り、返される参照を生成する環境を例示する図である。
[0011] 本明細書で説明する実施形態によって、実行可能コンポーネントから返される参照のアノテーションを説明する。返される参照は、特定のオブジェクトグラフを参照する。1)実行可能コンポーネントへの入力引数が存在しないこと、または、2)各々の入力引数が、イミュータブルであるか、オブジェクトグラフであって、そのオブジェクトグラフ内を指し示す外部ミュータブル参照を有さず、外部オブジェクトを参照する内部的ミュータブル参照を有さない、オブジェクトグラフを表すかのいずれかであること、のいずれかである場合、特定の属性が、返される参照に割り当てられる。特定の属性は、1)返される参照により参照される特定のオブジェクトグラフへの(または、特定のオブジェクトグラフの内部のいずれのオブジェクトへも)外部参照が存在しないこと、および、2)オブジェクトグラフの外側のいずれのオブジェクトへも、オブジェクトグラフの内部のミュータブル参照が存在しないことを表明する。したがって返される参照は、どのようなアクセスパーミッションでも、返される参照に割り当てられたパーミッションの範囲内で、その返される参照に自由に割り当てられる。実例として、返される参照が、書き込み可能と宣言されるならば、返される参照は、返される参照が、したがって任意のパーミッションを割り当てられ得る、および/または、分離型メモリロケーションに割り当てられ得ることを表すように、特定の属性によってアノテートされ得るが、そのような割り当てによって、返される参照は特定の属性を失うことになる。このように、本明細書で説明する原理は、それへの外部参照が存在しない参照の適正な検出を考慮に入れたものである。コンピューティングシステムのある程度の導入の論考を、図1に関して説明する。次いでアノテーションの動作の原理を、図2〜図4に関して説明する。
[0012] コンピューティングシステムは、今ではますます多種多様の形式をとっている。コンピューティングシステムは例えば、ハンドヘルドデバイス、電気器具、ラップトップコンピュータ、デスクトップコンピュータ、メインフレーム、分散型コンピューティングシステム、さらには、従来はコンピューティングシステムとは考えられていなかったデバイスであり得る。本説明では、および特許請求の範囲では、用語「コンピューティングシステム」は、少なくとも1つの物理的な、および有形のプロセッサと、プロセッサにより実行され得るコンピュータ実行命令を有することが可能な物理的な、および有形のメモリとを含む、任意のデバイスまたはシステム(またはそれらの組み合わせ)を含むと幅広く定義される。メモリは、任意の形式をとり得るものであり、コンピューティングシステムの性質および形式に依存し得る。コンピューティングシステムは、ネットワーク環境を介した分散型である場合があり、複数の構成物のコンピューティングシステムを含み得る。
[0013] 図1に例示するように、その大部分の基本構成において、コンピューティングシステム100は典型的には、少なくとも1つの処理ユニット102およびメモリ104を含む。メモリ104は、揮発性、不揮発性、またはその2つの何らかの組み合わせであり得る物理的システムメモリであり得る。用語「メモリ」は本明細書では、物理的記憶媒体などの不揮発性大容量記憶装置を指すためにもまた使用され得る。コンピューティングシステムが分散型である場合、処理、メモリ、および/または記憶能力は同様に分散型であり得る。本明細書では用語「実行可能モジュール」または「実行可能コンポーネント」は、コンピューティングシステム上で実行され得るソフトウェアオブジェクト、ルーティング、またはメソッドを指し得る。本明細書で説明する異なるコンポーネント、モジュール、エンジン、およびサービスは、コンピューティングシステム上で実行するオブジェクトまたはプロセスとして(例えば、別々のスレッドとして)実装され得る。
[0014] 後に続く説明では、実施形態を、1つまたは複数のコンピューティングシステムにより実行される動作に関して説明する。そのような動作がソフトウェアで実装される場合、動作を実行する関連するコンピューティングシステムの1つまたは複数のプロセッサが、コンピュータ実行可能命令を実行したことに応答してコンピューティングシステムの動作を指図する。例えばそのようなコンピュータ実行可能命令は、コンピュータプログラム製品を形成する1つまたは複数のコンピュータ可読媒体上で実施され得る。そのような動作の例は、データの操作を必然的に含む。コンピュータ実行可能命令(および操作されたデータ)は、コンピューティングシステム100のメモリ104に記憶され得る。コンピューティングシステム100は、通信チャネル108もまた内包し得るものであり、その通信チャネル108によってコンピューティングシステム100は、例えばネットワーク110を介して他のメッセージプロセッサと通信することが可能になる。
[0015] 本明細書で説明する実施形態は、下記でより詳細に論考するように、例えば1つまたは複数のプロセッサおよびシステムメモリなどのコンピュータハードウェアを含む、専用または汎用のコンピュータを、備え得る、または利用し得る。本明細書で説明する実施形態は、コンピュータ実行可能命令および/またはデータ構造を搬送または記憶するための、物理的な、および他のコンピュータ可読媒体もまた含む。そのようなコンピュータ可読媒体は、汎用または専用のコンピュータシステムによりアクセスされ得る任意の利用可能な媒体であり得る。コンピュータ実行可能命令を記憶するコンピュータ可読媒体は、物理的記憶媒体である。コンピュータ実行可能命令を搬送するコンピュータ可読媒体は、伝送媒体である。このように例として、および限定としてではなく、本発明の実施形態は、少なくとも2つの明確に異なる種類のコンピュータ可読媒体、すなわち、コンピュータ記憶媒体および伝送媒体を備え得る。
[0016] コンピュータ記憶媒体は、コンピュータ実行可能命令またはデータ構造の形式での所望のプログラムコード手段を記憶するために使用され得る、および、汎用または専用のコンピュータによりアクセスされ得る、RAM、ROM、EEPROM、CD−ROMもしくは他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、任意の他の媒体を含む。
[0017] 「ネットワーク」は、コンピュータシステムおよび/またはモジュールおよび/または他の電子デバイスの間での電子データの移送を可能にする、1つまたは複数のデータリンクとして定義される。情報が、ネットワークまたは別の通信接続(ハードワイヤード、ワイヤレス、または、ハードワイヤードもしくはワイヤレスの組み合わせのいずれか)を介して、コンピュータに転送または提供されるとき、コンピュータは当然のことながら、接続を伝送媒体とみなす。伝送媒体は、コンピュータ実行可能命令またはデータ構造の形式での所望のプログラムコード手段を搬送するために使用され得る、および、汎用または専用のコンピュータによりアクセスされ得る、ネットワークおよび/またはデータリンクを含み得る。上記のものの組み合わせもまた、コンピュータ可読媒体の範囲内に含めるべきである。
[0018] さらに、様々なコンピュータシステムコンポーネントに達する際に、コンピュータ実行可能命令またはデータ構造の形式でのプログラムコード手段は、伝送媒体からコンピュータ記憶媒体に(またはその逆に)自動的に転送され得る。例えば、ネットワークまたはデータリンクを介して受信される、コンピュータ実行可能命令またはデータ構造は、ネットワークインターフェースモジュール(例えば「NIC」)の内部のRAMにバッファリングされ得るものであり、次いで、コンピュータシステムRAMに、および/または、コンピュータシステムでのより揮発性でないコンピュータ記憶媒体に最終的に転送され得る。このように、コンピュータ記憶媒体が、伝送媒体をもまた(さらには、主として)利用するコンピュータシステムコンポーネントに含まれ得ることを理解されたい。
[0019] コンピュータ実行可能命令は例えば、プロセッサで実行されるときに、汎用コンピュータ、専用コンピュータ、または専用処理デバイスに、ある決まった機能または機能の群を実行させる、命令およびデータを含む。コンピュータ実行可能命令は例えば、バイナリ、アセンブリ言語などの中間フォーマット命令、さらにはソースコードであり得る。主題は構造的特徴および/または方法論的動作に対しての具体的な文言で説明されているが、添付の特許請求の範囲において定義される主題は、説明された特徴または上記で説明された動作に必ずしも限定されないことを理解されたい。むしろ、説明された特徴および動作は、特許請求の範囲を実装する例の形式として開示されるものである。
[0020] 当業者であれば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの、またはプログラマブルな家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、ページャ、ルータ、スイッチ等々を含む、多くのタイプのコンピュータシステム構成によってネットワークコンピューティング環境で本発明が実践され得ることを十分認識するであろう。本発明は分散型システム環境でもまた実践され得るものであり、その環境では、ネットワークによって(ハードワイヤードデータリンク、ワイヤレスデータリンクによって、または、ハードワイヤードデータリンクおよびワイヤレスデータリンクの組み合わせによってのいずれかで)リンクされる、ローカルおよびリモートのコンピュータシステムが、両方ともタスクを実行する。分散型システム環境ではプログラムモジュールは、ローカルおよびリモートの両方のメモリ記憶デバイス内に設けられ得る。
[0021] 図2は、本明細書で説明する原理が動作することが可能である環境200を例示する。環境200は、オブジェクトグラフの分離およびミュータビリティを追跡するフレームワーク210を含む。フレームワーク210は、オブジェクトグラフへの様々な参照221を、参照へのアクセスを制御することにより組織化する。参照は、ローカル変数、メソッドパラメータ、オブジェクトフィールド、または、オブジェクトグラフへの任意の他の参照であり得る。例示される実施形態では参照221は、参照221Aから221Eまでを含むように例示されるが、省略符号221Fは、フレームワーク210が任意の数の参照220へのアクセスを管理することが可能であることを記号的に表す。
[0022] フレームワーク210は、参照221へのアクセスを、参照にパーミッションを割り当てることにより管理する。「パーミッション」は、参照がミューテートされ得るかどうかに関する何らかのプロパティを指示する参照に関するアノテーションである。そのようなパーミッションが、図2でのパーミッション211により抽象的に表される。パーミッションは、読み込み可能パーミッション(readable permission)211A、書き込み可能パーミッション211B、および、イミュータブルパーミッション211Cを含む。「読み込み可能」パーミッション211Aは、対応するオブジェクト(およびそのフィールドのすべて、およびそのフィールドのフィールドのすべて等々)が読み込まれ得るのみであることを意味する。「書き込み可能」パーミッション211Bは、対応するオブジェクトが書き込まれ得ることを意味する。「イミュータブル」パーミッション211Cは、読み込み可能パーミッション211Aに類似するが、他のどのものも、このオブジェクトへの書き込み可能参照を有さないことをさらに保証する。イミュータブルパーミッション211Cは、このオブジェクトへの書き込み可能参照が決して再び存在しないことになることをさらに保証し得る。このようにイミュータブルパーミッション211Cは、対応するオブジェクトが決して書き込まれないことになり、同様に、そのフィールドのすべて、およびそのフィールドのフィールドのすべて等々が決して書き込まれないことになることを意味する。オブジェクト内のすべてのスタティックフィールドは、フレームワーク210によりイミュータブルパーミッション211Cを有するものとして扱われる。
[0023] フレームワーク210は、メモリロケーションを分離型であるとアノテートする、分離型メモリマネージャ212もまた含む。記憶ロケーションに関する「分離型」アノテーションは、ロケーションが、外部で一意的である値を記憶することを意味する。すなわち、そのロケーションに記憶されるいずれのオブジェクトに対しても、システム内のそのオブジェクトへの外部参照は存在せず、そしてまた、オブジェクトのフィールドのいずれへも、または、そのフィールドのいずれのフィールド等々へも、何らの参照も存在しない。実例として分離型メモリマネージャ212は、分離型メモリロケーション222を管理する。分離型メモリロケーションは、2つの分離型メモリロケーション222Aおよび222Bを含むように例示されるが、省略符号222Cは、分離型メモリロケーション222が任意の数の分離型メモリロケーションを含み得ることを表す。
[0024] アノテーションコンポーネント201が、フレームワーク210上に築造され、本明細書でさらに説明するように動作する。あるいは、または加えて、アノテーションコンポーネント201は、フレームワーク210の部分として動作し得る。アノテーションコンポーネント201は、図2の参照221の1つなどの参照を返す実行可能コンポーネントを評価するように構成される。図3は、アノテーションコンポーネントが、少なくとも、特定のオブジェクトグラフを参照する参照を返す実行可能コンポーネントを評価するための、および、実行可能コンポーネントにより返される参照をアノテートするための方法300のフローチャートを例示する。図3の方法300は図2のアノテーションコンポーネント201により実行され得るので、方法300を、図2および図3の両方を度々参照して説明する。
[0025] 方法300は、実行可能コンポーネントを評価して(動作311)、実行可能コンポーネントを実行する結果として生じることになる1つまたは複数の返される参照を識別する(動作312)工程を含む。方法300の残りは、返される参照を評価して、特定の属性が、返される参照に割り当てられ得るかどうかを決定する工程を必然的に含む。一部の事例では、方法の残りは、実行可能コンポーネントが宣言されるコードを最初に評価することにより実行され得る。他の事例では、実行コンポーネントが呼び出されるコードが、返される参照の主要な特性が宣言コードによって識別され得ない場合に評価される。
[0026] 図4は、実行可能コンポーネント401が入力引数411および412を受け取り、返される参照421および422を生成する環境400を例示する。しかしながら省略符号413が、実行可能コンポーネント401への任意の数の入力引数(0、1、または2以上でさえある)が存在し得ることを表す。省略符号423は、実行可能コンポーネント401の実行から結果として生じる、任意の正の数の(1つまたは複数の)返される参照が存在し得ることを表す。アノテーションコンポーネント201は、実行可能コンポーネント401を宣言する、または呼び出すコードを評価することが可能である。
[0027] 実行可能コードに関係する宣言コードが評価されているか、それとも実行可能コードに関係する呼び出しコードが評価されているかに関係なく、実行可能コンポーネントへの何らかの入力引数が存在するか否かが決定される(判断ブロック313)。入力引数が少しも存在しないならば(判断ブロック313での「いいえ」)、表明属性が、返される参照に割り当てられ得る(動作315)。表明属性は、1)返される参照により参照される特定のオブジェクトグラフへの(または、特定のオブジェクトグラフの内部のいずれのオブジェクトへも)外部参照が存在しないこと、および、2)オブジェクトグラフの外側のいずれのオブジェクトへも、オブジェクトグラフの内部のミュータブル参照が存在しないことを表明する。本説明では、および特許請求の範囲では、属性は、その属性が、1つまたは複数の主張のセットが真であることを表すとシステムにより解釈可能である場合、1つまたは複数の主張のセットを「表明する」。
[0028] 実例として、以下のコード例を考えてみる。
public class MyClass

int m_x;
public MyClass()

m_x = 0;

[0029] メソッドMyClassはコンストラクタである。一般的にはコンストラクタは、書き込み可能値を返す。この宣言を(例えば、ランタイムの前にでも)評価することにより、表現式「new MyClass()」が、外側世界から完全に分離されている値を返すことが察知され得る。コンストラクタへの入力引数は存在しない(判断ブロック313での「いいえ」)。したがって、新しく創出されるオブジェクトのフィールドに記憶されるいずれの値も、2つの場所のうちの1つから生ずるものであり、すなわち、1)それらの値は、オブジェクトのコンストラクタの内側で新しく創出される、または、2)それらの値は、スタティックフィールドから発生する。コンストラクタは、自由にメソッドを呼び出し、フィールド内に返り値を記憶するが、いずれのメソッド呼び出しの返り値も、それ自体は他動的に、それらの2つの場所のうちの1つから生ずる。
[0030] 本明細書で説明する原理は、フレームワーク210がイミュータブルスタティックを実装するか、それともミュータブルスタティックを実装するかに関係なく作用する。イミュータブルスタティックの事例では、フレームワーク210は、スタティックフィールドがイミュータブルであることを確実にする。したがって、イミュータブルスタティックフィールドから生ずる新しく創出されるフィールドは、表明属性により表明される保証を同じように有し得る。換言すれば、そのような新しく生成されるフィールドは、1)新しく創出されるフィールドにより参照される特定のオブジェクトグラフへの(または、特定のオブジェクトグラフの内部のいずれのオブジェクトへも)外部参照を有さず、および、2)オブジェクトグラフの外側のいずれのオブジェクトへも、オブジェクトグラフの内部のミュータブル参照が存在しないということである。
[0031] ミュータブルスタティックを実装するフレームワークの事例では、原理はやはり、実行可能コンポーネントが(プログラマによって、または、自動的にコンパイラによってのいずれかで)ミュータブルスタティックを使用してアノテートされる場合に適用される。このことは、メソッドの出力が、属性を割り当てる資格を得ないように、メソッドへの書き込み可能引数としてモデリングされ得る。
[0032] 実例として、メンタルモデルは以下のようになる。
void UsesMutableStatics(writable Statics s) {
// The static variable is just an ordinary writable
// reference. The compiler may plumb it through
// for you, or a developer might do it through
// a series of annotations (either opt-in or opt-out).
s.Type.staticVariable = 42;
[0033] このように動作315では、アノテーションコンポーネント201は、これらの新しくコンストラクトされる、エイリアスが作られない値をモデリングするために使用される、特殊な表明属性を割り当てる。表現式「new MyClass()」は、表明属性を有するものとして扱われる。一部の実施形態ではこの表明属性は、「フレッシュ」の値を有するパーミッションタイプである。その実施形態では、コンストラクタは入力を有さないので、返り値のパーミッション(通常は「書き込み可能」にすぎない)が、「書き込み可能」から「フレッシュ」に昇格させられる。フレッシュ参照は、任意のパーミッション−読み込み可能、書き込み可能、またはイミュータブルとともにロケーションに記憶され得るが、そのようにされた後で、フレッシュパーミッションは失われる。さらにそのフレッシュ参照は、分離型ロケーションにもまた記憶され得るものであり、そのことにより、その「フレッシュ」パーミッションを失う。ロケーションが、フレッシュと特色付けされることにはならないことに留意されたい。したがって、値がロケーションに記憶された後で、その値はエイリアスが作られ得るものであり、そのため、もはやフレッシュではない。したがってこのようにして、表明属性(例えば、フレッシュパーミッションステータス)は失われ得る。
[0034] 図3に返って、実行可能コンポーネントへの1つまたは複数の入力引数が存在するならば(判断ブロック313での、はい)、そのことは、入力引数が、イミュータブルであるか、オブジェクトグラフであって、そのオブジェクトグラフ内を指し示す外部ミュータブル参照を有さず、外部オブジェクトを参照する内部的ミュータブル参照を有さない、オブジェクトグラフを表すかのいずれかであるかどうかを決定する工程になる(判断ブロック314)。入力引数が存在し、それらの入力引数のすべてが、イミュータブルである、またはそうではない場合、これらの判定基準を満たすわけではないならば(判断ブロック314での「いいえ」)、表明属性(例えば、フレッシュパーミッション)は割り当てられない(動作316)。
[0035] これに対して、実行可能コンポーネントへの入力引数のすべてが、イミュータブルであるか、オブジェクトグラフであって、そのオブジェクトグラフ内を指し示す外部ミュータブル参照を有さず、外部オブジェクトを参照する内部的ミュータブル参照を有さない、オブジェクトグラフを参照するかのいずれかであるならば(判断ブロック314での「はい」)、表明属性(例えば、フレッシュパーミッション)が、この次第で同様に割り当てられ得る(動作315)。
[0036] コンストラクタが、イミュータブルであるいくつかの入力引数を取り入れる、以下のコード例を考えてみる。
public class MyClass2

int m_x;
string m_y;
immutable MyClass m_z;
public MyClass2(int x, string y, immutable MyClass z)

m_x = x;
m_y = y;
m_z = z;

[0037] この事例では、同じ分析が適用される。MyClass2のいずれの新しくコンストラクトされるインスタンスも、外側世界とはいかなるミュータブル状態も共有し得ない。したがって新しくコンストラクトされるMyClass2オブジェクトは、表明する属性付けされたもの(例えば、フレッシュパーミッション)が割り当てられ得る。このことは、MyClass2コンストラクタの宣言の分析によってランタイムの前に決定され得る。
[0038] 次に、コンストラクタが、常にイミュータブルであるとは限らないいくつかの引数を取る事例を考えてみる。
public class MyClass3

int m_x;
string m_y;
readable MyClass m_z;
public MyClass3(int x, string y, readable MyClass z)

m_x = x;
m_y = y;
m_z = z;

[0039] 読み込み可能パーミッションは、この参照がミューテーションを可能にしないことを指示するが、別のエンティティはそれでも書き込み可能参照を保持する場合があり、したがって参照のミューテーションが察知される場合があることを想起されたい。例として、最初の2つの入力引数xおよびyは両方ともイミュータブルであるが、第3の入力引数myClassは、イミュータブルではなく読み込み可能である。したがって、宣言だけの分析に基づいて、属性が、このコンストラクタによりコンストラクトされる返されるmyClassに割り当てられ得るかどうかは決定され得ない。
[0040] これに対して、myClassのインスタンスの実際の実行のランタイム環境(すなわち、呼び出しコード)を評価する際に、ことによると第3の入力引数は、イミュータブルステータスに高められ得るものであり、その理由は、イミュータブルパーミッションは、追加的な制約が課せられた、ある決まったタイプの読み込み可能パーミッションにすぎないからというものである。実際のランタイム環境では、それらの追加的な制約が察知されるならば、第3の入力引数はイミュータブルとなる。実例として、以下のランタイムコードを考えてみる。
public void Run2(immutable MyClass myClass)

immutable MyClass3 myClass3 = new MyClass3(5, "five", myClass);
[0041] この事例では、new表現式の実際の引数はすべてイミュータブルであることが察知され得る。したがってこの特定のインスタンスでは、返される参照は、同じコンストラクタが非フレッシュ値をしばしば生み出すことになる場合でも、表明属性(例えば、フレッシュパーミッション)が割り当てられ得る。上記の例のすべてでは、返される参照は、入力引数が表明属性(例えば、フレッシュパーミッション)をさらに有するならば、表明属性(例えば、フレッシュパーミッション)が割り当てられ得る。一部の事例ではアノテートコンポーネント201自体が、以前の時点で入力引数にフレッシュパーミッションを割り当てた場合がある。
[0042] ここまでは、これらの例のすべてはコンストラクタを使用していた。実際、同じ分析が随意の実行可能コンポーネントに対して作用する。以下の例を考えてみる。Incrementのパラメータリストの後の「読み込み可能」アノテーションは、「this」に関する、したがって、すべてのインスタンスフィールドアクセスまたはインスタンスメソッド呼び出しに対するパーミッションが読み込み可能であることを意味することに留意されたい。
public class Counter

int m_x;
public Counter()

m_x = 0;

public writable Counter Increment() readable

writable Counter c2 = new Counter();
c2.m_x = m_x + 1;
return c2;

public void Test()

immutable Counter c = (new Counter()).Increment().Increment().Increment();

[0043] 「new Counter()」への元の呼び出しは、上記で論考したように、Counter()への入力引数が存在しないので、フレッシュオブジェクトを返す。Increment()への最初の呼び出しは、フレッシュである1つの入力を有するものであり、その理由は、その入力がCounter()からの返される値であるからである。したがって、Increment()の返り値のパーミッションは「書き込み可能」であるので、返り値は安全に「フレッシュ」に昇格させられ得る。この論理が、順番に各々の呼び出しに適用される。1つのものの「フレッシュ」出力が、次のものの「フレッシュ」入力になる。Increment()への最終の呼び出しは「フレッシュ」値を返し、その「フレッシュ」値は次いで、「イミュータブル」に変換され得る。
[0044] 以下の表現式は、読み込み可能値を返す。
public readable Counter Increment() readable

writable Counter c2 = new Counter();
c2.m_x = m_x + 1;
return c2;
[0045] この事例では、同じ分析が適用されるが、返り値をフレッシュに昇格させることは安全でない。そのようにすることによって、その返り値はミューテートされることが可能になることになる。読み込み可能値を、書き込み可能値または分離型値に変換することは危険である。これに対して、返される値は、読み込み可能またはイミュータブルのパーミッションが割り当てられ得る。イミュータブルパーミッションは、常に読み込み可能に低下させられ得るので、読み込み可能値を返すメソッドは、仮定的にイミュータブルオブジェクトの何らかのフィールドを返している場合がある。この事例では、その返り値をフレッシュに昇格させることによって、イミュータブルデータがミューテートされることが可能になることになり、そのことは矛盾するものである。代わりに、異なる昇格規則が適用されるものであり、出力は、「フレッシュ」パーミッションではなく「イミュータブル」パーミッションを有するものとして扱われる。この昇格は前のように安全であり、すべての入力がイミュータブルまたはフレッシュであるならば、いずれのミュータブル状態も外側世界と共有することは可能ではなく、そのため、返り値(すでにミューテートされ得ない)はイミュータブルとして安全に扱われ得る。
[0046] したがって、本明細書で説明した原理によって、実行可能オブジェクトからの返される参照が、外部参照がオブジェクトにアクセスすることが可能であるかどうかを表明する属性を受け取ることが可能になる。
[0047] 本発明は、その趣旨または本質的な特性から逸脱することなく、他の具体的な形式で実施され得る。説明した実施形態は、すべての事項において単に例示的であり制約的ではないと考えるべきである。したがって本発明の範囲は、上述の説明によってではなく、添付の特許請求の範囲によって指示される。特許請求の範囲の同等性の趣意および領域の範囲内であるすべての変更は、特許請求の範囲の範囲内に包容されることになる。

Claims (10)

  1. コンピュータ実行可能命令を有するコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令が、コンピューティングシステムの1つまたは複数のプロセッサにより実行されるときに、前記コンピューティングシステムに、アノテーションコンポーネントをメモリ内でインスタンス生成させ、前記アノテーションコンポーネントが、少なくとも、特定のオブジェクトグラフを参照する参照を返す実行可能コンポーネントを評価するように、および、前記実行可能コンポーネントにより返される前記参照をアノテートするように構成され、前記アノテーションコンポーネントが、以下のこと、すなわち、
    前記実行可能コンポーネントへの何らかの入力引数が存在するかどうかを決定する動作と、
    前記実行可能コンポーネントへの1つまたは複数の入力引数が存在する場合の、各々の入力引数が、イミュータブルであるか、オブジェクトグラフであって、前記オブジェクトグラフ内を指し示す外部ミュータブル参照を有さず、外部オブジェクトを参照する内部的ミュータブル参照を有さない、オブジェクトグラフを表すかのいずれかであるかどうかを決定する動作と、
    前記実行可能コンポーネントへの入力引数が存在しないこと、または、各々の入力引数が、イミュータブルであるか、外部ミュータブル参照を有さず、外部オブジェクトを参照する内部的ミュータブル参照を有さない、オブジェクトグラフを表すかのいずれかであることのいずれかである場合の、表明属性を前記返される参照に割り当てる動作であって、前記表明属性が、1)前記返される参照により参照される前記特定のオブジェクトグラフへの外部参照が存在しないこと、および、2)前記オブジェクトグラフの外側のいずれのオブジェクトへも、前記オブジェクトグラフの内部のミュータブル参照が存在しないことを表明する、割り当てる動作と
    を実行するように構成される、コンピュータ可読記憶媒体
  2. 前記実行可能コンポーネントが入力引数を有さない、請求項1に記載のコンピュータ可読記憶媒体
  3. 前記実行可能コンポーネントが少なくとも1つの入力引数を有する、請求項1に記載のコンピュータ可読記憶媒体
  4. 前記アノテーションコンポーネントが、前記入力引数が前記表明属性をさらに有すると決定することにより、前記入力引数が、外部ミュータブル参照を有さないオブジェクトグラフを参照すると決定する、請求項3に記載のコンピュータ可読記憶媒体
  5. 前記実行可能コンポーネントの前記入力引数の前記表明属性がさらに、前記アノテーションコンポーネントにより割り当てられた、請求項4に記載のコンピュータ可読記憶媒体
  6. 前記アノテーションコンポーネントが、前記入力引数のイミュータブルパーミッションを評価することにより、前記入力引数がイミュータブルであると決定する、請求項3に記載のコンピュータ可読記憶媒体
  7. 前記アノテーションコンポーネントが、前記入力引数をイミュータブルであるように制約する、前記実行可能コンポーネントの実行コンテキストを評価することにより、前記入力引数がイミュータブルであると決定する、請求項3に記載のコンピュータ可読記憶媒体
  8. 前記実行可能コンポーネントが、前記返される参照を、読み込み可能であるように、ただし潜在的には他のエンティティにより書き込み可能でもあるように制約すると宣言され、前記表明属性が、前記返される参照がイミュータブルであることである、請求項1に記載のコンピュータ可読記憶媒体
  9. 前記実行可能コンポーネントが、前記返される参照を、読み込み可能であるように制約すると宣言されない、請求項1に記載のコンピュータ可読記憶媒体
  10. コンピューティングシステムのアノテーションコンポーネントが、少なくとも、特定のオブジェクトグラフを参照する参照を返す実行可能コンポーネントを評価するための、および、前記実行可能コンポーネントにより返される前記参照をアノテートするための方法であって、
    実行可能コンポーネントに対応するコードを評価する動作と、
    実行の際に前記実行可能コンポーネントにより返されることになる返される参照を識別する動作と、
    前記実行可能コンポーネントへの何らかの入力引数が存在するかどうかを決定する動作と、
    前記実行可能コンポーネントへの1つまたは複数の入力引数が存在する場合の、前記入力引数が、イミュータブルであるか、オブジェクトグラフであって、前記オブジェクトグラフ内を指し示す外部ミュータブル参照を有さず、外部オブジェクトを参照する内部的ミュータブル参照を有さない、オブジェクトグラフを表すかのいずれかであるかどうかを決定する動作と、
    前記実行可能コンポーネントへの入力引数が存在しないこと、または、各々の入力引数が、イミュータブルであるか、外部ミュータブル参照を有さず、外部オブジェクトを参照する内部的ミュータブル参照を有さない、オブジェクトグラフを表すかのいずれかであることのいずれかである場合の、表明属性を前記返される参照に割り当てる動作であって、前記表明属性が、1)前記返される参照により参照される前記特定のオブジェクトグラフへの外部参照が存在しないこと、および、2)前記オブジェクトグラフの外側のいずれのオブジェクトへも、前記オブジェクトグラフの内部のミュータブル参照が存在しないことを表明する、割り当てる動作と
    を含む、方法。
JP2015537021A 2012-10-15 2013-10-15 外部参照がないことを表明する参照属性アノテーション Active JP6272336B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/652,436 US9971578B2 (en) 2012-10-15 2012-10-15 Reference attribute annotation signifying no external reference
US13/652,436 2012-10-15
PCT/US2013/065139 WO2014062739A1 (en) 2012-10-15 2013-10-15 Reference attribute annotation signifying no external reference

Publications (2)

Publication Number Publication Date
JP2015531529A JP2015531529A (ja) 2015-11-02
JP6272336B2 true JP6272336B2 (ja) 2018-01-31

Family

ID=49582796

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015537021A Active JP6272336B2 (ja) 2012-10-15 2013-10-15 外部参照がないことを表明する参照属性アノテーション

Country Status (6)

Country Link
US (1) US9971578B2 (ja)
EP (1) EP2907026A1 (ja)
JP (1) JP6272336B2 (ja)
KR (1) KR102093531B1 (ja)
CN (1) CN104718529B (ja)
WO (1) WO2014062739A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9026993B2 (en) * 2008-06-27 2015-05-05 Microsoft Technology Licensing, Llc Immutable types in imperitive language
US9569282B2 (en) 2009-04-24 2017-02-14 Microsoft Technology Licensing, Llc Concurrent mutation of isolated object graphs
US9098269B2 (en) 2013-01-04 2015-08-04 Microsoft Technology Licensing, Llc System and method to ensure resource access safety with immutable object types
US10996945B1 (en) * 2014-09-17 2021-05-04 Amazon Technologies, Inc. Splitting programs into distributed parts
US10754644B2 (en) * 2015-08-04 2020-08-25 International Business Machines Corporation Annotations in software development
US11521744B1 (en) 2019-06-18 2022-12-06 Cigna Intellectual Property, Inc. Machine learning system for generating predictions according to varied attributes

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6721747B2 (en) * 2000-01-14 2004-04-13 Saba Software, Inc. Method and apparatus for an information server
US6925638B1 (en) 2000-09-21 2005-08-02 International Business Machines Corporation Mutability analysis in Java
US6785693B2 (en) * 2001-02-02 2004-08-31 International Business Machines Corporation Management of multiple links to a file in a file system
US7114152B2 (en) 2002-01-08 2006-09-26 International Business Machines Corporation Method, apparatus, and program to determine the mutability of an object at loading time
US7614037B2 (en) * 2004-05-21 2009-11-03 Microsoft Corporation Method and system for graph analysis and synchronization
CN101055518A (zh) 2007-05-31 2007-10-17 上海交通大学 基于面向对象的智能空间建模方法
CN100517224C (zh) 2007-06-13 2009-07-22 北京北大方正电子有限公司 对象的串行化存储和恢复的系统和方法
JP2009129127A (ja) 2007-11-22 2009-06-11 Fujitsu Ltd プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体
CN104123239B (zh) 2008-01-31 2017-07-21 甲骨文国际公司 用于事务缓存的系统和方法
US9569282B2 (en) * 2009-04-24 2017-02-14 Microsoft Technology Licensing, Llc Concurrent mutation of isolated object graphs

Also Published As

Publication number Publication date
CN104718529A (zh) 2015-06-17
US9971578B2 (en) 2018-05-15
KR102093531B1 (ko) 2020-03-25
JP2015531529A (ja) 2015-11-02
WO2014062739A1 (en) 2014-04-24
CN104718529B (zh) 2018-05-15
KR20150070152A (ko) 2015-06-24
EP2907026A1 (en) 2015-08-19
US20140108438A1 (en) 2014-04-17

Similar Documents

Publication Publication Date Title
JP6272336B2 (ja) 外部参照がないことを表明する参照属性アノテーション
EP3198425B1 (en) Compiler caching for runtime routine redundancy tracking
US20200264866A1 (en) Caching build graphs
EP3084597A1 (en) Property accesses in dynamically typed programming languages
Moyer Real World Multicore Embedded Systems
US20180246916A1 (en) Scalable object service data and metadata overflow
JP6255420B2 (ja) 不変オブジェクトタイプ
US8813258B2 (en) Selectively exposing base class libraries based on application execution context
US11422932B2 (en) Integrated reference and secondary marking
CN103400074A (zh) 一种隐藏进程的检测方法及装置
CN106598825B (zh) 电子设备、规范日志代码输出方法及装置
Schmidt et al. Representation learning for resource usage prediction
US10819752B2 (en) Systems and methods for quantitative assessment of a computer defense technique
US9229959B2 (en) Object graph partial immutability and isolation enforcement
Sha et al. Recent trends and opportunities in domain specific operating systems
Zhang et al. Formulating customized specifications for resource allocation problem of distributed embedded systems
Chard et al. Productive Parallel Programming with Parsl
Jacquet et al. Blackboard rules for coordinating context-aware applications in mobile ad hoc networks
De Nicola et al. Multi labelled transition systems: A semantic framework for nominal calculi
Kumar Efficient execution of fine-grained actors on multicore processors
EP3053032A1 (en) Build-time resolving and type checking references

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150610

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160914

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170726

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170823

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171116

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171228

R150 Certificate of patent or registration of utility model

Ref document number: 6272336

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250