JP2003233499A - 複数の意味レベルによるアスペクト指向プログラミングのための方法 - Google Patents

複数の意味レベルによるアスペクト指向プログラミングのための方法

Info

Publication number
JP2003233499A
JP2003233499A JP2003006816A JP2003006816A JP2003233499A JP 2003233499 A JP2003233499 A JP 2003233499A JP 2003006816 A JP2003006816 A JP 2003006816A JP 2003006816 A JP2003006816 A JP 2003006816A JP 2003233499 A JP2003233499 A JP 2003233499A
Authority
JP
Japan
Prior art keywords
stage
code block
propagator
programming
loop
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
JP2003006816A
Other languages
English (en)
Other versions
JP4346316B2 (ja
Inventor
John O Lamping
オー ランピング ジョン
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.)
Xerox Corp
Original Assignee
Xerox 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 Xerox Corp filed Critical Xerox Corp
Publication of JP2003233499A publication Critical patent/JP2003233499A/ja
Application granted granted Critical
Publication of JP4346316B2 publication Critical patent/JP4346316B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/316Aspect-oriented programming techniques

Landscapes

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

Abstract

(57)【要約】 【課題】 複数の意味レベルによるアスペクト指向プロ
グラミングの方法を提供する。 【解決手段】 アスペクトには、1つまたは複数のオブ
ジェクトのプログラム・データに関して、基本レベルで
利用可能な情報よりも多くの情報へのアクセスを必要と
するものがある。アスペクト指向プログラミング・シス
テム、方法、および環境のアスペクトは、1段階で計算
結果を調べる。このアスペクトは、後続の計算段階だけ
に影響を及ぼし、したがって循環は存在しない。また、
局所的または大域的なカスタム・フロー分析を各段階で
実施して、非局所的な情報をプロパゲートすることもで
きる。コード・ブロックを操作することではなく、様々
な計算段階の結果を操作することからみてプログラミン
グを容易にすることができるので、「マクロ」スタイル
のプログラミングを削減または回避することができる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、汎用の意味不変コ
ンストラクト言語を使用したアスペクト指向プログラミ
ングのための方法およびシステムに関する。
【0002】
【従来の技術】現在、複雑なソフトウェア・システムを
構成する際の主要な概念は、オブジェクト指向プログラ
ミング・パラダイムである。オブジェクト指向プログラ
ミングの背後にある考え方は、ソフトウェア・システム
をクラス、オブジェクト、メソッド(すなわち関数)な
どの小さなモジュラー・ユニットに細分するものであ
る。コンパイル時、オブジェクト指向プログラミングで
使用される各モジュラー・ユニットは、別々のコード・
ブロックにおよそ対応する。これらのコード・ブロック
は他のブロックの構造に関係なく実行されるので、不要
な冗長な演算がしばしば生じる。したがって、メソッド
同士が「話す」ことができれば、ソフトウェア・システ
ムの速度全体を向上させることができる。時間に依存す
る大きなソフトウェア・システムの中には、メソッド同
士が「話す」ことから大きな利益を得ることができるも
のがある。
【0003】アスペクト指向プログラミングでは、プロ
グラマは、オブジェクト指向プログラミングと同様に、
抽象化および分解を用いて大きな問題をより小さい管理
可能な下位部分に分割することができる。ただし、問題
は、関数に基づく分解ではなくアスペクトに基づく分解
に従って細分する。アスペクトは、メソッド間の「会
話」を容易にする。さらに、アスペクト同士が「話す」
または横断することができ、その結果、横断的な実行可
能プログラムが得られる。
【0004】
【特許文献1】米国特許第5,882,593号
【0005】
【発明が解決しようとする課題】既存の様々な汎用アス
ペクト指向プログラミング技法によれば、基本プログラ
ムの演算をインターセプトおよび調停することが可能で
ある。しかし、これらの技法は、オブジェクトまたはメ
ソッドの基本レベルで現在利用可能なプログラム・デー
タの限られた同じ視点によって制限される点で、制約を
受ける。アスペクトには、1つまたは複数のオブジェク
トのプログラム・データに関して、基本レベルで利用可
能な情報よりも多くの情報へのアクセスを必要とするも
のもある。
【0006】以上に示したアスペクト指向プログラミン
グの例のコンテキストでは、アスペクトの目的およびそ
の要件に循環があるせいで、望まれる多くの実装形態
で、従来のアスペクト指向プログラミング技法の実施に
明白な困難があることは明らかである。すなわち、特定
のアスペクトは、そのアスペクトが必要とするデータを
得るための計算にアクセスする必要がある。しかし、ア
スペクト自体が計算に影響を及ぼす。言い換えれば、ア
スペクトは、その演算を実施するために、アスペクトが
それに対して後で何をするかによって少なくとも部分的
に決定されることになるオブジェクトまたはモジュール
によって何かを見る必要がある。
【0007】
【課題を解決するための手段】オブジェクトがオブジェ
クト指向プログラム中の独特のコード・セットであるの
と同様に、「アスペクト」は、アスペクト指向プログラ
ム中の独特のコード・セットである。本発明によるシス
テム、メソッド、およびアスペクト指向プログラミング
言語環境の、様々な例示的実施形態では、アスペクト
は、1段階で計算結果を調べる。このアスペクトは、後
続の計算段階だけに影響を及ぼし、したがって循環は存
在しない。
【0008】本発明の一つの側面によれば、データ処理
デバイスを操作する命令にコンパイル可能なプログラミ
ング要素を単純化する方法であって、プログラミング要
素が少なくとも1つの部分を有し、前記方法が、プログ
ラミング要素を、その少なくとも1つの部分がすべて第
1段階に達するまで単純化して、現段階の単純化済みプ
ログラミング要素を生み出す工程と、現段階の単純化済
みプログラミング要素について少なくとも1つのプロパ
ゲータを決定することであって、プロパゲータがプログ
ラミング要素中に記述される工程と、決定した少なくと
も1つのプロパゲータを使用して、少なくとも1つのプ
ロジェクションを現段階の単純化済みプログラミング要
素に関連付ける工程と、現段階の単純化済みプログラミ
ング要素および関連するプロジェクションに少なくとも
部分的に基づいて、現段階の単純化済みプログラミング
要素を、その少なくとも1つの部分がすべて次の段階に
達するまで単純化して、次段階の単純化済みプログラミ
ング要素を生み出す工程とを含む。
【0009】
【発明の実施の形態】図1に、従来のアスペクト指向プ
ログラミング環境100の例示的な一実施形態を示す。
図1には特に、従来のアスペクト指向プログラミング言
語を使用してどのようにプログラミング要素が実行可能
ソフトウェア・モジュールに変換されるかを示す。図1
に示すように、1つまたは複数の高レベル・コンピュー
タ・プログラミング要素120が、アスペクト指向ウィ
ーバ(weaver)110に提供される。アスペクト
指向プログラミング環境100内のアスペクト指向ウィ
ーバ110は、高レベル・コンピュータ・プログラム要
素120のそれぞれを1つまたは複数の実行可能モジュ
ールにコンパイルする。アスペクト指向ウィーバ110
は、静的と動的のいずれかとすることができる。自動ア
スペクト指向ウィーバ110は、静的な織込みプロセス
(weaving process)を実装する。静的
な織込みプロセスは、クラス・ソース・コードなどの高
レベル・プログラミング要素120中のジョイン・ポイ
ントにアスペクト特有のステートメントを挿入すること
により、このような高レベル・プログラミング要素12
0を修正する。本質的に、アスペクト指向ウィーバ11
0は、所望のアスペクト・コードをクラスにインライン
する。この結果、高度に最適化された織込みコード(w
oven code)が得られる。
【0010】図1には、汎用アスペクト指向プログラミ
ング言語環境100のアスペクト指向ウィーバ110に
1つまたは複数の高レベル・プログラミング要素120
が入力されるのが示されている。第1段階で、アスペク
ト指向ウィーバ110は、織込みコードすなわち混ざり
合ったコードを生み出す。図1に示すように、高レベル
・コンピュータ・プログラミング要素120のうちの1
つからのプログラミング・ブロック122は、変数12
3と、変数123の1つまたは複数に作用する1つまた
は複数のプロセスまたはメソッド124とに細分され
る。次いでアスペクト指向ウィーバ110は、このプロ
グラミング・ブロック122を調べ、このプログラミン
グ・ブロック122の様々なプロセス124の1つまた
は複数の内部で1つまたは複数の変数123が重複する
箇所を決定する。次いでアスペクト指向ウィーバ110
は、コードを結合して、すなわち「織り込んで」、混ざ
り合ったソース・コード・ブロック130を生み出す。
【0011】織込みプロセスの第2段階で、結合したま
たは織り込んだプログラム・コード・ブロック130を
1つまたは複数の実行可能モジュール140にコンパイ
ルする。図1に示すように、この第2段階では、アスペ
クト指向ウィーバ110は、織込みコード・ブロック1
30のうちの1つをとる。アスペクト指向ウィーバ11
0は、この織込みコード・ブロック130の織り込まれ
た変数131および織り込まれたプロセス133を、1
つまたは複数の実行可能モジュール140にコンパイル
する。
【0012】様々な例示的実施形態で、本発明によるシ
ステムおよび方法は、エイブルソン、サスマン、サスマ
ンによる「The Structure and In
terpretation of Computer
Programs」に記述されているScheme言語
など、ラムダ算法に基づく言語に対して機能する。この
言語では、基本演算は関数生成および関数適用である。
関数はラムダ式で生成され、通常これは「lambda
(var*)exp」の形式である。例えば、式「la
mbda(xy)(+(*2x)y)」は、その第1の
引数を2倍にしてから、2倍にした第1の引数をその第
2の引数に加える関数を定義する。「exp」の部分は
ラムダ式の本体と呼ばれ、「var*」の部分はその引
数と呼ばれる。関数は「fnarg*」の形式の適用式
によって適用されるが、「fn」は適用される関数を指
し、「arg*」は引数である。「fn」の部分は、ラ
ムダ式でもよく、あるいは関数を評価する式ならどんな
ものでもよい。計算は、ラムダ式の適用を簡約すること
によって継続する。ラムダ式を簡約することは一般に、
それらの変数の出現にそれらの引数を代入することによ
って行う。
【0013】プログラミング言語は、式の値の考え方を
中心に構築される。プログラム・モジュールは本質的
に、式を値に変換することによって実行される。という
のは、値はプログラム・モジュールの実行中に順に回す
ことができるが、式はそうすることができないからであ
る。変数は、値を生み出す式に束縛されるのではなく、
これらの値に束縛される。式が評価された後で、変数が
束縛され、変数への後続の参照は、値だけにアクセスす
ることができる。
【0014】しかし本発明は、アスペクト指向プログラ
ミングにおいて、決定または計算された値だけではな
く、値がどのように計算または決定されたかに関係する
他の何らかの新生エンティティが、情報のクリティカル
な要素である場合があることを発見した。値の抽象化に
よって廃棄されるいくつかの新生エンティティがクリテ
ィカルな情報である場合があるので、関数に関数の引数
の値だけを提供すれば十分であるとは限らない。
【0015】プログラム・ブロックに関するちょうどよ
い種類の情報だけを保存して、そのプログラム・ブロッ
クに関する残りの情報は単純化する、プログラミング言
語またはプログラミング言語環境が必要とされている。
当然、本発明によれば、「ちょうどよい」ものは、どん
なプログラム要素が情報を使用しているかに応じて異な
ることになる。値だけよりも多くの情報が必要とされる
とき、本発明によるシステム、メソッド、およびアスペ
クト指向プログラミング環境は、必要とされる情報だけ
を提供すべきである。
【0016】式を評価するときは、値だけが欲しいとき
もあるが、より多くの情報が必要なときもある。例え
ば、ループの結果であるアレイだけが欲しいときもあ
り、アレイが特定のループまたは関数の結果であること
を知ることが重要なときもある。言い換えれば、式はア
レイを意味するときもあり、アレイだけよりも多くのも
のを意味するときもある。本発明によるシステム、方
法、およびプログラミング環境では、これらのあり得る
意味のそれぞれを、式の意義(significanc
e)と呼ぶ。式の値は、情報提供が最も少ない意義であ
る。その他の意義はどれも、値によって取り込まれる情
報よりも多くの情報を取り込むことになる。
【0017】本発明によるプログラミング・システム、
方法、およびプログラミング環境は、意義の概念を、計
算が作用することのできるものに変える。本発明による
プログラミング・システム、方法、およびプログラミン
グ環境では、計算プロセスは、式をその意義のカノニカ
ル表現になるまで単純化するものと考えることができ
る。当然、効率的な実装形態は、中間式をそれぞれ明示
的に構築することを避けるが、このような実装形態が行
う作業は、連続する中間式の間を進む作業に似ている。
【0018】計算の各ステップは、結果としての最終的
な意義を保存するので有効である。2つの意義に違いが
ある場合は、この2つの意義は同じ単純化ステップを許
可しないことになる。
【0019】本発明は、任意の2つの意義の違いが、ど
の計算単純化ステップがこの2つの意義によって許可さ
れるかという点だけにあると認識するシステム、方法、
およびプログラミング環境を実現する。このことは、式
の意義を決定することが、その意義によって許可される
計算単純化を実施することと等価であることを意味す
る。さらに、いくつかの意義が、より多くの情報を提供
するものからより少ない情報を提供するものまで順序付
けられる場合は、これらの意義を順に決定することがで
きる。これは、まず最も多くの情報を提供する意義によ
って許可される単純化を実施し、次いで、次に多くの情
報を提供する意義によって許可される単純化を実施し、
以下同様にすることを含む。
【0020】個別に書かれた各ライブラリがそれ自体の
意義を導入できるようにし、これらの導入された意義を
そのプログラム中で使用できることが望ましいので、す
べての意義に対する総合的な順序は必要ないことを理解
されたい。この結果、あらゆる意義は対応する処理段階
を有することになる。したがって、計算は、連続的な諸
段階を通して式を単純化することに対応し、各段階は、
連続的な意義の1つについての、式のカノニカル表現で
ある。
【0021】本発明によるシステム、方法、およびプロ
グラミング環境はまた、ある意義で利用可能な情報にア
クセスするだけでなく、いずれかの意義に対してどの単
純化を行うべきかを指定する言語コンストラクトも必要
とする。さらに、どの単純化を行うべきかを決定するこ
とは、どの関数呼出しを展開すべきかを決定することを
含む。後述するように、本発明によるシステムおよび方
法は、どの段階で関数を簡約すべきかを指定するプログ
ラミング形式を導入する。本質的にラムダ式は、簡約さ
れる段階まではデータ・オブジェクトのようにふるま
う。簡約された時点で、ラムダ式は関数のようにふるま
う。
【0022】他方で、意義によって提供される追加の情
報は、簡約されない関数呼出し中に含まれる。この情報
へは、式の意義が特定の関数の適用であるかどうかをプ
ログラムがテストすることのできる形式によってアクセ
スする。式の意義は、関数のデータへのアクセス主体の
ようにふるまう。
【0023】式の意義は、式の値の決定に向けた段階な
ので、意義は常に、少なくとも値と同量の情報を含む。
しかし、式の値の決定に向けた方向にない、式に関する
他の情報にも用途がある可能性がある。これをサポート
するために、本発明によるシステム、方法、およびプロ
グラミング環境は、プロジェクションを用いてこのよう
な情報をカプセル化する。プロジェクションは、意義に
対して相対的に定義され、追加情報(通常、所与の計算
の残りにおけるその意義の役割に関する)を提供する。
プロジェクションの結果は値とすることができる。ただ
し、結果は、プロジェクションがある段階の意義とする
こともできる。これは、プロジェクションが、後で総計
算に組み込むことのできる計算断片を覚えていることが
できることを意味する。
【0024】式の意義は基本的にその式に局所的なもの
だが、プロジェクションはこれとは異なり、より大きな
計算における式の役割を反映する。これは、フロー分析
と同種の技法を用いてプロジェクションが計算されるこ
とを意味する。これをサポートするために、本発明によ
るシステム、方法、およびプログラミング環境は、「プ
ロパゲータ」と呼ぶ機構を提供する。プロパゲータは、
マッチする意義それぞれに対して実行され、そのような
マッチする意義と、そのようなマッチする意義の引数と
の、1つまたは複数のプロジェクションを調査および更
新する。
【0025】プロパゲータは、上方向と下方向の両方の
データ・フローを行うことができる。上方向プロパゲー
タは、引数プロジェクションを調べ、式全体のプロジェ
クションを更新する。対照的に、下方向プロパゲータ
は、所与の式全体のプロジェクションを調べ、引数プロ
ジェクションを更新する。
【0026】プロパゲータは更新を実施するので、特定
の意義の中に埋め込まれた識別の意味を公開する。プロ
パゲータが所与の意義のプロジェクションを更新すると
き、この更新は、同じ意義への他の参照からしか見えな
い。プロパゲータは意義に対して定義されるので、意義
の識別が問題となる。
【0027】図2に示すように、本発明によるシステ
ム、方法、およびプログラミング環境では、織込みプロ
セスはいくつかの段階を通して行われる。所与のプログ
ラム要素が、連続する意義段階を通して単純化される
が、これらの段階の多くはコンパイル時に行われる。異
なる程度の処理が様々な段階によって表されているが、
最も単純な織込みは、2つの段階、すなわち第1段階お
よび最終段階を生成するだけである。
【0028】図2に示すように、様々な例示的実施形態
で、第1段階は構文段階210である。この構文段階2
10では、所与の高レベル・コード・ブロック122か
らの局所的情報は廃棄されておらず、コンテキスト情報
は利用不可能である。これは、この高レベル・コード・
ブロック122の元の構文に対応する。本発明によるシ
ステム、方法、およびアスペクト指向プログラミング環
境では、アスペクト指向ウィーバ110は、高レベル・
コード・ブロック122から構文段階210を「織り込
む」。構文段階210は、織込みコード・ブロック22
0を含む。次いで構文段階210は、構文段階210で
生成した織込みコード・ブロック220を次の中間段階
230に出力する。次の中間段階230は、アスペクト
指向ウィーバ110によって織込みコード・ブロック2
20から織り込まれる。各段階210、230、25
0、270の後、段階210、230、または250に
対応する織込みコード・ブロック220、240、また
は260中で定義された1つまたは複数のプロパゲータ
が実行されて、その段階210、230、または250
で定義されるプロジェクションが決定される。次いで、
これらのプロジェクションは、後続の段階230、25
0、および270でそれぞれ利用可能である。
【0029】図2に示すように、第1段階210が織り
込まれた後で、第1の中間段階230が織り込まれる。
これは、高レベル・コード・ブロック122に含まれる
プログラム・コードをさらに最適化することにつなが
る。前と同様、この第1の中間段階230の織込みコー
ド・ブロック240は、次の中間段階に入力される。最
後の中間段階250が前の中間段階(図示せず)から織
込みコード・ブロック245を受け取るまで、これが繰
り返し行われる。
【0030】図2に示すように、最後の中間段階250
で、すべての最適化織込みが完了する。この最後の中間
段階250から出力される織込みコード・ブロック26
0が、最終織込み段階270に入力される。最終織込み
段階270は、処理済み値の段階である場合が多いこと
を理解されたい。次いで、最終織込み段階270から出
力される織込みコード280が、実行可能プログラム・
モジュールに、または実行可能プログラム・モジュール
のセットにコンパイルされる。
【0031】式が値に簡約されていないときであって、
その式の適用を簡約すべきかどうかを本発明によるシス
テム、方法、およびプログラミング環境が知る必要があ
るとき、本発明によるシステム、方法、およびプログラ
ミング環境は、その式を現段階中に簡約すべきでないと
推定する。
【0032】プロパゲータが完全に実行されるように、
プロパゲータは、プログラムまたはプログラム要素セッ
トが中間段階にある間は、プログラムまたはプログラム
要素セットと距離を置いた関係を維持する。プロパゲー
タは、プログラムまたはプログラム要素セットからの、
意義に束縛された変数を有することになる。しかしプロ
パゲータは、制約された方式でしかこれらの変数を使用
することができない。最初にプロパゲータは、プロパゲ
ータが動作する段階まで論理的に実行されるが、これら
の変数の束縛にはアクセスできない。すなわち、このよ
うな変数は本質的に、未束縛の変数として扱われる。次
いで、プログラムまたはプログラム要素セットから、各
変数が適切な意義に束縛され、プロパゲータは実行を終
了する。しかし、プロパゲータは一般に、プログラムま
たはプログラム要素セットに束縛された変数に後の意義
を要求することができない。後の意義にアクセスしよう
としても、やはりこのような変数を未束縛と見なすこと
になる。プロパゲータがその結果として意義を出力でき
るようにするために、プロパゲータは、後述する特別な
形式を用いて、プロパゲータがアクセスしている意義以
上に単純化すべきでないコードを囲むことができる。
【0033】プログラマが、様々な演算をアレイに対し
て実施するコードを書きたいと思っているとする。通
常、プログラマは、各アレイにわたってループして新し
いアレイを生み出すコードを書くことになる。プログラ
マは、様々なプリミティブ演算を行うルーチンを定義
し、次いで、定義したプリミティブ演算を使用する高レ
ベル演算を構築する。プログラマは、あるルーチンの出
力アレイを別のルーチンの入力アレイとして使用するこ
とはしばしばある。この場合、プログラマは、融合ルー
プを使用して結合演算を行いたい。これは、普通の関数
プログラミングでは行うことができない。というのは、
第2の演算を実行できるようになる前に第1の演算を実
行しなければからである。ループ融合を自動的に行うオ
プティマイザもあるであろうが、オプティマイザは通
常、不明瞭である。したがって、様々な例示的実施形態
で、先に概説したシステム、方法、およびプログラミン
グ環境を使用して、プリミティブ演算のライブラリを生
み出すことができる。このライブラリ中では、演算はど
のように相互と融合するかを知っており、ライブラリ・
ルーチンが組み合わせて使用されるときに融合が起こ
る。したがって、様々な例示的実施形態で、先に概説し
たシステム、方法、およびプログラミング環境によれ
ば、ライブラリ・プログラマが、ルーチンが共に融合す
るように定義することができる。
【0034】様々な例示的実施形態で、先に概説したシ
ステム、方法、およびプログラミング環境は、ライブラ
リ・ルーチンがループ融合を行えるようになるにはどの
機能を最低必要とするかを尋ねることにより、ループ融
合に適用することができる。概して言えば、潜在的なル
ープは、「自分の入力が、あるループによって計算され
たことになる場合は、そのループの内部演算およびそれ
が作用したことになるアレイを与えよ。そうすれば、そ
れを自分のループ中で使用する。」と尋ねることができ
る必要がある。このように言う擬似コードの例は以下の
とおりである。 (define pointwise (lambda (fn arg) (case arg ((ptw-loop inner-fn inner-arg) (inner-fn inner-arg) (ptw-loop (lambda (x) (fn (inner-fn x))) inner-arg)) (else (ptw-loop fn arg)))))
【0035】ここで、「pointwise」は、アレ
イにわたって関数をマッピングする関数だが、「poi
ntwise」は、ループ融合について知っている。こ
のケース形式は、「(ptw−loop inner−
fn inner−arg)の形式の式によって「ar
g」が計算されたことになるか?」と言っている。構文
「(inner−fn inner−arg)」は、パ
ターン定数である「ptw−loop」に対して、「i
nner−fn」および「inner−arg」がパタ
ーン変数であることを示す。引数がマッチする場合は、
内部ループの関数は、「pointwise」からの関
数で構成されるべきである。この場合、構成された関数
を使用して単一ループを実施すべきである。そうでない
場合は、単純なループを使用する。具体的には、以下に
示すように「ptw−loop」を定義して、実際のル
ープを実施することができる。
【0036】以下のライブラリ・コードが式と共に使用
される場合は、「double−plus」の実装は、
各要素を2倍にしてから1を足す単一ループであるべき
である。
【0037】「pointwise」の定義の鍵は、ケ
ース・ステートメントの意味「...によって「ar
g」が計算されたことになるか」の中の「ことになる」
である。このケースは、引数を計算したことになるルー
プをテストする必要がある。具体的には、「point
wise」は、得られるアレイまでずっと見ることな
く、ループによって計算される関心のある情報を、その
引数の表面的な構造を通して見ることを欲する。
【0038】したがって、「pointwise」は、
関数とマクロとの間の何かである必要がある。具体的に
は、「pointwise」は、それが関心を持つ情報
を見ることができるように、その引数が部分的に処理さ
れるようにする必要がある。しかし、「pointwi
se」の引数が完全に評価されると、「pointwi
se」が関心を持つまさにその情報を除去することにつ
ながるので、「pointwise」はそうしたくはな
い。したがって、様々な例示的実施形態で、先に概説し
た本発明によるシステム、方法、およびプログラミング
環境は、これらの両極間の処理レベルを認識し、認識し
たこれらの処理レベルへのアクセスを提供する。
【0039】以下、本発明によるシステム、方法、およ
びプログラミング環境の基本的な形式、すなわちステー
トメントおよび/またはコンストラクトを示す。本発明
によるシステム、方法、およびプログラミング環境の
「case」ステートメントの一般的な形式は以下のと
おりである。case stage value (model (var*) exp*)* [(else exp)]
【0040】「case」ステートメントでは、各モデ
ルは式である。変数は、モデル中では解放されており、
式中では束縛されている。値は、連続して各モデルと比
較される。値にマッチする第1のモデルでは、その式が
ケースの値として選択される。式はモデルの変数にアク
セスすることができ、これらの変数は束縛されてマッチ
を形成する。
【0041】比較は、指定の意義の値とモデルとの間で
論理的に行われる。比較は、指定の処理段階の後は行わ
れない。また、式の単純化はゆっくりと行われる。
【0042】以下に示す「if」ステートメントは、ス
テートメント「case value exp1 (nil ( ) exp3) (else
exp2))」に対する追加の構文構造を提供する。
【0043】if exp1 exp2 exp3 以下に示す「deconstruct」ステートメント
は、ステートメント「case stage value (model (var*)
exp*) (else (error))」に対する追加の構文構造を提
供する。deconstruct stage value model (var*) exp*
【0044】ステートメント「reduction s
tage」は、「exp」の値の呼出しを指定の段階で
簡約すべきであることを指定する。reduction-stage stage exp
【0045】適用ステートメントは、関数の本体がその
簡約段階に達したときに簡約されることを表す。このス
テートメントにはキーワードがないが、単に関数「f
n」を示す式で始まる。fn exp*
【0046】「lambda」ステートメントは、以下
の関数を定義する。lambda (var* [.var] [=> var]) exp*
【0047】形式「=>var」は、表される変数を定
義される関数の結果に束縛するのに使用される。
【0048】ステートメント「stage」は、段階を
宣言し、宣言した段階が所与の段階よりも後であること
を定義する。stage name [:below stage]
【0049】ステートメント「projection」
は、段階に関する情報を提供するプロジェクションを宣
言する。projection name :depends-on stage
【0050】ステートメント「propagator」
は、プロパゲータを生成する関数を宣言するように働
く。propagator stage [:bottom-up | :top-down] function
【0051】一般に、プロパゲータは、いくつかの項の
プロジェクションを調べ、その他を更新することにな
る。プロジェクタの動作は、プロパゲータが調べたが更
新はしなかったプロジェクションによって決まると仮定
される。これらのプロジェクションがこの段階で動作す
る他のプロパゲータによって変更された場合は、このプ
ロパゲータは再実行される。「:bottom−up」
および「:top−down」のヒントは、再計算の必
要を最小限に抑えるための、プロパゲータを実行する最
も効率的な順番を識別する。
【0052】プロパゲータが見る項は、ラムダ定義、ラ
ムダ変数、適用、およびケース形式である。ラムダ式が
簡約されている場合、プロパゲータは、簡約の結果を見
ることになる。これにより、プログラム・ツリーは効果
的に有向グラフに変わる。具体的には、ラムダ本体の中
でラムダ変数を参照した各ポイントで、実際の引数が、
すべて変数使用であったものの間で共用されて現れるこ
とになる。プロパゲータからは、意義に束縛された変数
が見られることはなく、意義だけしか見られないことを
理解されたい。
【0053】ステートメント「update」は、プロ
パゲータの実行中だけに現れることのある形式を定義す
る。update old new
【0054】このステートメントは、プロパゲータが適
用される段階における項プロジェクションを評価すべき
「old」の値を、「new」の値で更新する。
【0055】ステートメント「same freque
ncy」は、プロパゲータの実行中だけに生じることの
ある形式を定義する。same-frequency exp
【0056】このステートメントは、式評価の頻度とプ
ロパゲータが扱っている項の頻度が同じである場合に真
を返す。
【0057】これが意味することの例として、以下の式
を考えてみる。 (let ((x (+1 2))) (lambda (y) (*xy))
【0058】「let」コマンドまたは演算は、最も早
い処理段階で展開されることを理解されたい。ここで、
乗算項の引数の1つは、加算演算である。ラムダが介在
するので、この加算演算は、乗算演算と同じ回数にわた
って実行されることにはならない。プロパゲータは、こ
れに反応できる必要がある。実行頻度が異なる場合は他
に、あるケース・ブランチ中の項がケース外の変数を参
照するときにも生じる。
【0059】別の見方では、プロパゲータがランタイム
の前に実行されるので、プロパゲータの1つの呼出し
が、それが処理する意義の多くの呼出しに対応すること
がある。これは、プロパゲータが処理するすべての下位
項が主要項の呼出しごとに1度呼び出される限りは問題
ではない。しかし、例が示すように、常にそうであると
は限らない。プロパゲータは、異なる頻度の意義に関連
する情報を更新する際は注意する必要がある。「sam
e frequency」ステートメントは、プロパゲ
ータがこの状況を検出する方法を提供する。
【0060】図3乃至5に、ループ融合を実施するため
のサンプル・コード・セグメントを示す。このサンプル
・コードは、あるループの結果が他のいくつかのループ
によって使用される場合の、すべてではないが多くを扱
うものである。
【0061】行1〜3は、フロー処理が作用することの
できる種々の情報を記述する。この情報は、単純化の最
も少ないレベルにおける、式についての異なる3つの意
義と項についての固有の識別子とを含む。行2は、この
値をハッシュ・テーブルから得るためのキーを定義す
る。行3は、おそらく他にもある中でこの値を計算する
ことになるループを定義する。共用を可能にするため
に、行3で定義されるプロジェクションは、このループ
によって計算される値のうちの1つだけについてループ
を保持することになる。他の値に対するプロジェクショ
ンは、このループによって計算される他の何らかの値に
ついての(loop−referencevalue)
を保持することになる。この連鎖に従うことにより、最
終的にはこのループを保持する値に至る。
【0062】行4〜6は、トップ・レベル関数を定義す
る。行7〜(終わり)は、簡約されたpointwis
e演算を定義するサブルーチン・ライブラリを定義す
る。行8は、トップ・レベルのラムダ式を簡約できるよ
うにし、効果的にand!の定義をマクロにする。行1
1〜39は、各形式をその値を計算するループで装飾す
るプロパゲータを定義する。行37が実行されたとき
は、これは、このケースが「pointwise」でな
いことを示し、留意されるように出力が必要であるよう
にする。行39〜46は、値を計算するpointwi
seループを返す。これは、必要ならトリビアルなルー
プを作ることを含む。行43および44は、簡約をルー
プ融合後に簡約可能にする。行47〜50は、値がルー
プによって計算された場合にそのループを返すことを示
す。行51〜57は、引数を計算するためのループを保
持するcomputing−loopを伴う値を返す。
行58〜69は、結果に対するこの形式の需要を記録す
る。行70〜79は、引数に対する実際のアレイが必要
とされることを示す。
【0063】行80〜100では、pointwise
ループの構造すなわち「ptw−loop」が、複数の
値でループを生成することを含めて融合を容易にするよ
うに設計される。これを可能にするために、入力および
出力にはキーで名前が付けられ、これにより、名前付け
は融合の下でも変化する必要はない。これらのキーは、
ループ融合時の間だけ存在する。すなわち、これらのキ
ーは、ランタイムまでには単純化されて取り去られるこ
とになる。行93では、ステートメント「fn」が、キ
ー/値の対のリストと、それに対するキー/値の対の増
補リストをとる。「入力」は、「fn」によって期待さ
れるIDを含めた、キー/アレイの対のリストである。
「出力」は、キーのリストであり、これらのキーは、f
nが出力するキーの中になければならない。ループは、
アレイの対応要素にわたって関数をマッピングし、出力
ID中の各キーに対するエントリを有するキー/アレイ
の対のリストを返す。行101〜103は、前段階でプ
ロパゲータによって構築された、その結果を計算するル
ープから、正しい結果を返すためのpointwise
演算を定義する。
【0064】行104〜117は、2つのpointw
iseループの作業を結合して行ってそれらの入力およ
び出力を結合するループを返す。行115は、内部定義
された関数がループ融合後に簡約可能であることを示
す。行118〜125は、対のリスト中にキーがあると
推定して、リスト中でキーを検索する。行119は、こ
れがランタイム前に行われることを示す。行126およ
び127は、2つのリストをマージする動作が、リスト
中でIDを見つける動作と同様にしてコード化されるこ
とを示す。
【0065】ウィーバの基本動作は次のとおりである。
プログラムから開始する。プログラムのすべての部分が
第1段階に達するまで、プログラムを単純化する。この
段階についてのプロパゲータを実行して、単純化された
プログラムをプロジェクションで装飾する。次に、プロ
グラムのすべての部分が次の段階に達するまで、プログ
ラムをもう少し単純化する。この単純化の間、前段階か
らの単純化済みプログラムと、プロパゲータによって加
えられる装飾は、さらに単純化されたプログラムがどの
ようなものかを決定するのに利用可能なデータである。
このプロセスを、プログラムの最終段階に達するまで繰
り返す。プログラムの各部分は、各段階で意義を有す
る。問題は、プログラムのこのような部分のいずれかを
ある段階から次の段階まで簡約して、その部分が次の段
階でその意義を正しく示すようにしなければならないか
どうかである。
【0066】図6に、本発明によるシステム、方法、お
よびプログラミング環境を用いた、プログラムのコンパ
イル中または織込み中における図2に示した段階間の関
係の例示的な一実施形態を示す。図6に示すように、1
つまたは複数のプログラミング要素のセット120が、
コンパイルされるようにアスペクト指向ウィーバ110
に入力される。アスペクト指向ウィーバ110は、1つ
または複数のプログラミング要素のセット120に共通
の変数および演算があるかどうか調べ、1つまたは複数
のプログラミング要素120を適切な意義に簡約する命
令310を与える。図6に示すように、1つまたは複数
のプログラミング要素のセット120中で、3つの意義
A、B、Cが識別される。3つの意義A、B、Cは、図
2に関して先に概説した第1段階210に対応する第1
段階の分析の結果として生成される、第1段階織込みコ
ード・ブロック320に組み込まれる。
【0067】次に、アスペクト指向ウィーバ110は、
プロパゲータ間可視性パス325に沿って命令を送るこ
とにより、プロジェクタ330を呼び出す。プロジェク
タ330は、第1段階織込みコード・ブロック320を
調べ、意義A、B、Cのうちのどれが次の織込み中に更
新可能かを決定する。例えば、図6に示す例示的な実施
形態では、プロジェクタ330は、意義AおよびBが更
新可能と識別する。プロジェクタ330は、意義Aおよ
びBに対する更新が未来にあればそれらを実施するため
に、プロジェクタ/プロパゲータ・パス327に沿って
プロパゲータ335を生み出す。次いで、アスペクト指
向ウィーバ110は次の織込み段階に進む。
【0068】第2の織込み段階では、図2に関して先に
概説したように、アスペクト指向ウィーバ110は、第
1段階織込みコード・ブロック320を第2段階または
中間段階の分析への入力として使用する。アスペクト指
向ウィーバ110は、第1段階織込みコード・ブロック
320を調べて、共通の変数および/または演算があれ
ば識別し、第1段階織込みコード・ブロック320を適
切な意義に簡約する命令332を送る。図6に示すよう
に、第1段階織込みコード・ブロック320中で、3つ
の意義D、E、Fが識別される。3つの意義D、E、F
は、図2に関して先に概説した中間段階230に対応す
る第2段階の分析の結果として生成される、第2段階織
込みコード・ブロック340に組み込まれる。
【0069】再びアスペクト指向ウィーバ110は、プ
ロパゲータ間可視性パス345に沿って命令を送ること
により、プロジェクタ350を呼び出す。プロジェクタ
350は、未来の織込みによってもたらされるかもしれ
ない意義が第2段階織込みコード・ブロック340中に
あるかどうか調べる。例えば、図6に示す例示的な実施
形態では、プロジェクタ350は、意義Eがこの基準に
合うと決定する。プロジェクタ350は、プロジェクタ
/プロパゲータ・パス347を使用して、意義Eについ
てのプロパゲータ355を生み出す。次いでプロパゲー
タ355は、プロパゲータ間可視性パス337を使用し
てプロパゲータ335と通信して、更新すべきものがあ
るかどうかを決定する。この特定の例では、共通の重要
性はない。すなわち、第1段階織込みコード・ブロック
320と第2段階織込みコード・ブロック340の両方
で継続する意義はない。したがって更新は必要ない。
【0070】続いて第3の織込み段階で、アスペクト指
向ウィーバ110は、第2段階織込みコード・ブロック
340を最後の段階の分析への入力として使用する。前
述のように、アスペクト指向ウィーバ110は、第2段
階織込みコード・ブロック340を調べて、共通の変数
および/または演算があれば識別し、第2段階織込みコ
ード・ブロック340を適切な意義に簡約する命令34
2を送る。図6に示すように、第2段階織込みコード・
ブロック340中で、3つの意義A、G、Hが識別され
る。3つの意義A、G、Hは、図2に関して先に概説し
た最終段階270に対応する第3段階の分析の結果とし
て生成される、第3段階織込みコード・ブロック360
に組み込まれる。
【0071】次いで、アスペクト指向ウィーバ110
は、相互運用性パス365に沿って命令を送ることによ
り、第3のプロジェクタ370を呼び出す。プロジェク
タ370は、意義AおよびHが更新可能と決定する。プ
ロジェクタ370は、意義AおよびHについてのプロパ
ゲータ375を、プロジェクタ/プロパゲータ・パス3
67に沿って生み出す。次いでプロパゲータ375は、
プロパゲータ間可視性パス357に沿ってプロパゲータ
355と通信する。プロパゲータ375は、第2段階コ
ード・ブロック340と第3段階コード・ブロック36
0との間に共通の意義がなく、更新が必要ないと決定す
る。
【0072】プロパゲータ375はまた、別のプロパゲ
ータ間可視性パス377に沿ってプロパゲータ335と
も通信し、第1段階織込みコード・ブロック320と第
3段階織込みコード・ブロック360との間で意義Aが
共通であると決定する。次いでプロパゲータ375は、
第1段階織込みコード・ブロック320および第3段階
織込みコード・ブロック360中の、意義Aへの参照す
べてを更新する。これにより、織込みコードが後に正し
く実行されることが確実になる。前述のようにこのプロ
セスは、すべてのコードが完全に織り込まれ、したがっ
て完全に最適化されるまで継続する。
【0073】図7に、ループ融合の例についての織込み
プロセスを示す。アスペクト指向ウィーバ110は、高
レベル・プログラム・コード・ブロック420を読み込
む命令410を構文段階430に与える。この高レベル
・プログラム・コード・ブロック420は、織込みプロ
セスの第1段階すなわち構文段階430で第1段階コー
ド・ブロックとして使用されるように提供される。次い
で、アスペクト指向ウィーバ110は、構文段階430
で第1段階コード・ブロック420を調べて、第1段階
コード・ブロック420全体で共通の変数および演算を
識別する。アスペクト指向ウィーバ110は、命令43
5を使用して構文段階430を制御する。この例では、
構文段階430と最終段階480との間に2つの中間段
階がある。構文段階430から出力された織込みコード
・ブロック440は、第1の中間段階450に入力され
るが、この例示的な実施形態では、この第1の中間段階
450はループ構造段階と呼ぶことができる。
【0074】次に、アスペクト指向ウィーバ110は、
第1段階織込みコード・ブロック440を調べ、ループ
構造段階450に命令455を与える。ループ構造段階
450の間の処理で、第1段階コード・ブロック420
のループによって計算されるアレイの候補ループ構造が
公開される。ループ構造段階は、第2段階織込みコード
・ブロック460を出力する。ループ構造はアレイにわ
たって明示的なマッピング関数を実施するので、残念な
がら、特定ループの値をループ構造段階450から直接
計算することはできない。この状況では、ランタイム前
に内部ループ関数を簡約する方が望ましい。したがっ
て、ループ構造を簡約済みループに変形する必要があ
る。この変形は、計算段階470によって実現される。
【0075】続いてアスペクト指向ウィーバ110は、
第2段階織込みコード・ブロック460に含まれるルー
プ構造を簡約する命令475を計算段階470に与え
る。これに応答して、計算段階470は、第3段階織込
みコード・ブロック480を出力する。これは、完全に
織り込まれた最終的な段階である。この最終段階コード
・ブロック480はまた、値段階コード・ブロック48
0とも呼ぶ。次いで、最終段階コード・ブロック480
は、コンパイラ490に出力される。コンパイラ490
は、信号チャネル495を介したアスペクト指向ウィー
バ110の制御下で、完全に織り込まれた値段階ブロッ
ク480をコンパイルして、実行可能コード・ブロック
500を形成する。実行可能コード・ブロック500
は、コンパイラ490から出力される。
【0076】問題は、ライブラリがループを融合する度
に、ライブラリは、その引数のループの新しい作業実行
を必要とする場合があることである。引数が共用される
場合、重複する計算が生じる。これに対する解決法の1
つは、引数が共用される場合にはループを融合しないこ
とである。別の解決法は、共用される引数の使用すべて
を反映する単一のループを生成することである。
【0077】前述の解決法のいずれかを採用する場合、
引数がプログラム中の他の箇所でどのように使用される
かに関する情報を知ることが必要である。すなわち、ラ
イブラリ・コードは、その直接の引数だけでなく、より
広いコンテキストに関するいくらかの情報にアクセスで
きる必要がある。ライブラリ・コードは、その引数に関
係する何らかのデータ・フロー情報を必要とする。これ
には、より多くの言語機能が必要である。
【0078】より単純な回答を実現するには、引数が共
用されるなら融合しない場合に、ライブラリ・コード
は、「自分に渡されようとしている引数が他の箇所でも
使用されるか?」といったように尋ねる必要がある。こ
の質問には、どの段階かにかかわらず、単にその引数を
計算するコードを見るだけでは回答できないことを理解
されたい。この質問への回答は、引数がどのように計算
されるかではなく、どのように使用されるかにある。さ
らに、この質問への回答は、引数識別の認識、すなわ
ち、同じ引数が他の箇所で使用されることが意味するも
のの認識に依拠する。
【0079】したがって、これをサポートするために、
様々な例示的実施形態で、先に概説したシステム、方
法、およびプログラミング環境は、項プロジェクション
の概念をサポートする。プロジェクションは、項に関す
る情報を提供する。この情報は通常、項自体からは入手
不可能だがその使用のコンテキストからは入手可能な情
報である。したがって、様々な例示的実施形態で、先に
概説したシステム、方法、およびプログラミング環境
は、プロジェクション・コンテキスト情報を計算するた
めに、別のコンストラクトとして前述のプロパゲータを
導入する。プロパゲータは、適切な段階の項と照合さ
れ、次いで項または項の下位項のプロジェクションに関
する情報を公開することができる形式である。最初、プ
ロジェクションの値は、項が空のコンテキスト中で見ら
れることを意味するデフォルトに設定される。プロパゲ
ータが実行される中で、プロパゲータはコンテキストの
ピクチャを埋める。したがってプロパゲータは、命令的
にコード化される間、項のコンテキストに関する限界を
インクリメンタルに上げるように動作する。
【0080】以下の擬似コードは、項が2回以上使用さ
れるかどうかを計算する。
【0081】この例が機能するようにするには、新しい
段階として、ループ融合段階の前に実施される動作段階
を導入する必要がある。ループの結合である「doub
le」のような定義は、この段階で簡約され、それによ
り、ループ結果の使用が見えるようになる。このように
すれば、長い範囲のフロー分析は必要ない。問題となる
のはプログラマが関心を持つプロシージャだけなので、
いくつかのプロシージャを通して1つの形式に従う必要
はない。ループ構造決定時に形式構造へのアクセスを有
するプロシージャが、それを直接受け取るプロシージャ
である。
【0082】ただし、この機構は、長い範囲のフロー分
析を実施することもできる。これは、途中で情報を蓄積
してプロパゲートすることによって行う。実際、この機
構は、図2および6に関して先に論じたような、共有の
第2の手法すなわち単一の大きな融合ループの生成を表
すのに十分なものである。
【図面の簡単な説明】
【図1】 プログラミング間の従来の関係を示す図であ
る。
【図2】 本発明のシステムおよび方法による、意味ベ
ースのアスペクト指向プログラミング環境でプログラミ
ング要素の様々な段階によって表される種々の処理程度
の例示的な一実施の形態である。
【図3】 本発明によるシステムおよび方法を用いてル
ープ融合を達成するためのプログラムの例示的な擬似コ
ード・リストである(図3乃至5でひとつの疑似コード
・リストを示す)。
【図4】 本発明によるシステムおよび方法を用いてル
ープ融合を達成するためのプログラムの例示的な擬似コ
ード・リストである(図3乃至5でひとつの疑似コード
・リストを示す)。
【図5】 本発明によるシステムおよび方法を用いてル
ープ融合を達成するためのプログラムの例示的な擬似コ
ード・リストである(図3乃至5でひとつの疑似コード
・リストを示す)。
【図6】 図2に示した段階間の関係の例示的な一実施
の形態をより詳細に示す図である。
【図7】 本発明のシステムおよび方法による意味ベー
スのアスペクト指向プログラミング環境をループ融合動
作に適用したときの例示的な一結果を示す図である。
【符号の説明】
110 アスペクト指向ウィーバ、120 プログラミ
ング要素、122 高レベル・コード・ブロック、21
0 構文段階(第1段階)、220,240,245,
260 織込みコード・ブロック、230 第1の中間
段階、250最後の中間段階、270 最終織込み段
階、320 第1段階織込みコード・ブロック、32
5,337,345,377 プロパゲータ間可視性パ
ス、327,347,367 プロジェクタ/プロパゲ
ータ・パス、330,350,370 プロジェクタ、
335,355,375 プロパゲータ、340 第2
段階織込みコード・ブロック、360 第3段階織込み
コード・ブロック、365相互運用性パス、420 第
1段階コード・ブロック、430 構文段階、450
第1の中間段階、ループ構造段階、440 第1段階織
込みコード・ブロック、460 第2段階織込みコード
・ブロック、470 計算段階、480 最終段階コー
ド・ブロック、第3段階織込みコード・ブロック、値段
階コード・ブロック、490 コンパイラ、495 信
号チャネル、500 実行可能コード・ブロック。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 データ処理デバイスを操作する命令にコ
    ンパイル可能なプログラミング要素を単純化する方法で
    あって、プログラミング要素が少なくとも1つの部分を
    有し、前記方法が、 プログラミング要素を、その少なくとも1つの部分がす
    べて第1段階に達するまで単純化して、現段階の単純化
    済みプログラミング要素を生み出す工程と、 現段階の単純化済みプログラミング要素について少なく
    とも1つのプロパゲータを決定することであって、プロ
    パゲータがプログラミング要素中に記述される工程と、 決定した少なくとも1つのプロパゲータを使用して、少
    なくとも1つのプロジェクションを現段階の単純化済み
    プログラミング要素に関連付ける工程と、 現段階の単純化済みプログラミング要素および関連する
    プロジェクションに少なくとも部分的に基づいて、現段
    階の単純化済みプログラミング要素を、その少なくとも
    1つの部分がすべて次の段階に達するまで単純化して、
    次段階の単純化済みプログラミング要素を生み出す工程
    とを含むことを特徴とする方法。
  2. 【請求項2】 プログラミング要素を、データ処理デバ
    イスを操作する命令にコンパイル可能な複数の織込みコ
    ード・ブロックに変換する方法であって、 (a)プログラミング要素中で、少なくとも1つの共通
    の変数と少なくとも1つの共通のプロセスとのうちの少
    なくとも1つを識別する工程と、 (b)識別した、少なくとも1つの共通の変数と少なく
    とも1つの共通のプロセスとのうちの少なくとも1つに
    基づいて、プログラミング要素を少なくとも1つの意義
    に簡約する工程と、 (c)少なくとも1つの意義を第1の織込みコード・ブ
    ロックに組み込むこと、 (d)組み込んだ意義のうち、方法の後続のステップで
    更新可能なものを0個、1個、または複数決定する工程
    と、 (e)決定の結果に基づいて、第1の織込みコード・ブ
    ロックの決定された更新可能な意義に対して任意の所望
    の更新を実施するのに使用できるプロパゲータを呼び出
    す工程と、 工程(a)〜(e)を少なくとも1回繰り返して、直前
    に生み出された織込みコード・ブロックに基づいて後の
    織込みコード・ブロックを生み出す工程とを含み、さら
    に、 (f)前に生み出された少なくとも1つの織込みコード
    ・ブロックのプロパゲータと通信して、前記前に生み出
    された少なくとも1つの織込みコード・ブロックの意義
    のいずれかが後の織込みコード・ブロックと共通かどう
    かを決定する工程と、および (g)少なくとも1つの後の織込みコード・ブロックお
    よび前に生み出された少なくとも1つの織込みコード・
    ブロック中で、後の織込みコード・ブロックと前記前に
    生み出された少なくとも1つの織込みコード・ブロック
    とに共通の意義があればそれを更新する工程とを含むこ
    とを特徴とする方法。
JP2003006816A 2002-01-16 2003-01-15 複数の意味レベルによるアスペクト指向プログラミングのための方法 Expired - Fee Related JP4346316B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/046,200 2002-01-16
US10/046,200 US7140007B2 (en) 2002-01-16 2002-01-16 Aspect-oriented programming with multiple semantic levels

Publications (2)

Publication Number Publication Date
JP2003233499A true JP2003233499A (ja) 2003-08-22
JP4346316B2 JP4346316B2 (ja) 2009-10-21

Family

ID=27658132

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003006816A Expired - Fee Related JP4346316B2 (ja) 2002-01-16 2003-01-15 複数の意味レベルによるアスペクト指向プログラミングのための方法

Country Status (2)

Country Link
US (1) US7140007B2 (ja)
JP (1) JP4346316B2 (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7143407B2 (en) * 2001-07-26 2006-11-28 Kyocera Wireless Corp. System and method for executing wireless communications device dynamic instruction sets
GB0229669D0 (en) * 2002-12-19 2003-01-29 Ibm A method for capturing computer application diagnostics
JP3966518B2 (ja) * 2004-03-12 2007-08-29 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム解析装置、その解析方法及びプログラム
US20060069759A1 (en) * 2004-06-28 2006-03-30 International Busines Machines Corporation Programmatic server page re-tooling
US20060149550A1 (en) * 2004-12-30 2006-07-06 Henri Salminen Multimodal interaction
US20060156418A1 (en) * 2005-01-10 2006-07-13 Ibm Corporation Method and apparatus for preventing unauthorized access to data
GB0510657D0 (en) * 2005-05-25 2005-06-29 Ibm Generating an application software library
US20070157073A1 (en) * 2005-12-29 2007-07-05 International Business Machines Corporation Software weaving and merging
US20070257354A1 (en) * 2006-03-31 2007-11-08 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Code installation decisions for improving aggregate functionality
US8739137B2 (en) * 2006-10-19 2014-05-27 Purdue Research Foundation Automatic derivative method for a computer programming language
US8020143B2 (en) * 2007-01-10 2011-09-13 International Business Machines Corporation Remote aspect advising for an aspect-oriented program
US8489740B2 (en) * 2007-05-18 2013-07-16 Red Hat, Inc. Method and an apparatus to generate message authentication codes at a proxy server for validating a web session
US8452882B2 (en) * 2007-05-18 2013-05-28 Red Hat, Inc. Method and an apparatus to validate a web session in a proxy server
US8103495B2 (en) * 2007-08-08 2012-01-24 Microsoft Corporation Feature oriented protocol modeling
US20090198496A1 (en) * 2008-01-31 2009-08-06 Matthias Denecke Aspect oriented programmable dialogue manager and apparatus operated thereby
US20090249021A1 (en) * 2008-03-26 2009-10-01 Morris Robert P Method And Systems For Invoking An Advice Operation Associated With A Joinpoint
US7881304B2 (en) * 2008-05-29 2011-02-01 Red Hat, Inc. Using distributed aspects to reorder online application workflows
US8180854B2 (en) * 2008-05-29 2012-05-15 Red Hat, Inc. Aspect services
US8103607B2 (en) * 2008-05-29 2012-01-24 Red Hat, Inc. System comprising a proxy server including a rules engine, a remote application server, and an aspect server for executing aspect services remotely
US9910688B2 (en) * 2008-11-28 2018-03-06 Red Hat, Inc. Implementing aspects with callbacks in virtual machines
JP5613255B2 (ja) * 2009-11-25 2014-10-22 テレフオンアクチーボラゲット エル エム エリクソン(パブル) サービスを管理するためのアプリケーションサーバ及び方法
US10241761B2 (en) * 2014-12-29 2019-03-26 Nvidia Corporation System and method for compiler support for compile time customization of code

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3781814A (en) * 1971-10-07 1973-12-25 Raytheon Co Method and apparatus for applying source language statements to a digital computer
US5822593A (en) * 1996-12-06 1998-10-13 Xerox Corporation High-level loop fusion
US6018625A (en) 1997-08-27 2000-01-25 Northern Telecom Limited Management system architecture and design method to support reuse
US6233610B1 (en) 1997-08-27 2001-05-15 Northern Telecom Limited Communications network having management system architecture supporting reuse
US6745384B1 (en) * 1998-05-29 2004-06-01 Microsoft Corporation Anticipatory optimization with composite folding
US6467086B1 (en) * 1999-07-20 2002-10-15 Xerox Corporation Aspect-oriented programming
US6539390B1 (en) * 1999-07-20 2003-03-25 Xerox Corporation Integrated development environment for aspect-oriented programming
US7441232B2 (en) * 1999-11-08 2008-10-21 British Telecommunications Public Limited Company Task management

Also Published As

Publication number Publication date
US20030149959A1 (en) 2003-08-07
JP4346316B2 (ja) 2009-10-21
US7140007B2 (en) 2006-11-21

Similar Documents

Publication Publication Date Title
JP4346316B2 (ja) 複数の意味レベルによるアスペクト指向プログラミングのための方法
KR950001416B1 (ko) 프로그램처리장치 및 프로그램처리방법
US6078744A (en) Method and apparatus for improving compiler performance during subsequent compilations of a source program
US6530079B1 (en) Method for optimizing locks in computer programs
US5142681A (en) APL-to-Fortran translators
US7143388B1 (en) Method of transforming software language constructs to functional hardware equivalents
US7565364B1 (en) Annotation processor discovery
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
WO2002093383A2 (en) System and method for combinatorial test generation in a compatibility testing environment
Odersky Functional nets
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
US7499956B1 (en) Annotation processing from source files and class files
US6009273A (en) Method for conversion of a variable argument routine to a fixed argument routine
US20070074185A1 (en) Identifier expressions
Danelutto et al. Introducing parallelism by using REPARA C++ 11 attributes
Gestwicki et al. Interactive visualization of Java programs
US8762974B1 (en) Context-sensitive compiler directives
JP2001166946A (ja) 階層の平坦化によりソースコードをコンパイルする方法及び装置
US20060107258A1 (en) Program, program code optimization method, program code compile method, program code, and information processing system
EP0692115B1 (en) System for conversion of loop functions to continuation-passing style
US5404531A (en) Method and apparatus for compiler processing on program related to data transfer and calculation, and method of managing memory
Oliveira et al. From circus to jcsp
US6233732B1 (en) Compiling system using intermediate codes to store a plurality of values
Oliveira et al. A tactic language for refinement of state-rich concurrent specifications
JPH09282174A (ja) プログラム実行方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060111

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090127

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090422

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090714

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120724

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130724

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees