研究課題/領域番号 |
20K11757
|
研究機関 | 神奈川大学 |
研究代表者 |
馬谷 誠二 神奈川大学, 理学部, 准教授 (40378831)
|
研究期間 (年度) |
2020-04-01 – 2023-03-31
|
キーワード | 静的解析 / 抽象解釈 / メタプログラミング |
研究実績の概要 |
今年度は,優れたメタプログラミング(マクロ)機能を備えたプログラミング言語の一つであるRacket言語を対象に,メタプログラムをより正確に静的解析するための抽象解釈器の実行モデルを提案し,そのプロトタイプ実装を行った. Lisp系言語は,少数の特殊形式だけからなるコア言語と,その他多数の構文を実現するためのマクロから構成され,マクロを使用したコードも最終的には特殊形式だけからなるコードへと変換されてから評価される.そのため,原理的には,実行時の振舞いを解析するには特殊形式だけを対象にした解析手法を用いれば十分と言える.しかし,実行コードを生成するマクロ定義を解析できると,デバック時などソフトウェア開発段階において有用である.Scheme言語をベースとするLisp系言語の一つであるRacket言語では,コードに対する低レベルな操作をRacket自身で記述するsyntax-caseを使用できる.さらに,Racketには局所的マクロ展開,定義文脈といったマクロ展開処理をコントロールするための機能,syntax-local-introduceといったスコープ健全性を逸脱するための機能が追加されており,マクロ展開の実行モデルは特殊形式の評価モデルと比べかなり複雑なものとなっている.そのため,今年度は,マクロ定義にとっての操作対象データである構文オブジェクトを適切に抽象化することに加え,マクロ展開の実行モデルの内部構造を抽象化することにより,マクロ定義コードを含めた解析が可能な抽象解釈器の構築を行った.
|
現在までの達成度 (区分) |
現在までの達成度 (区分)
2: おおむね順調に進展している
理由
予定していたメタプログラミングに関する言語機能を解析するための手法に関し,Racket言語の構文変換機能(マクロ)に対し,解析対象コードの処理系内部表現レベルでの静的解析を実現するための手法の設計を行った. また,今後の研究・実験に用いている解析器に対する提案手法のプロトタイプ実装も完了済みである.
|
今後の研究の推進方策 |
今年度までの成果を基に,マクロ機能をふんだんに利用する実用的なコードに対する解析精度の向上を目指す. 具体的には,抽象構文オブジェクトの表現方法の改良,具象構文オブジェクトと抽象構文オブジェクトの統合によるミックス抽象解釈の実現,展開フェーズ毎に独立した抽象ドメインの利用,モジュール解析など,抽象解釈器の内部構造をより本格的なプログラムにも対応可能なよう改良を行う.
|
次年度使用額が生じた理由 |
コロナ禍の状況にあり、学会発表や学会参加に必要となる旅費がかからなかったため。 また、研究に使用するサーバの購入についても、当初想定していた性能を備えながら、なおかつ、安価な新製品が手に入ったため、使用額が少額で済んだ。 次年度は、旅費についてはコロナ禍の収束の予測が困難であるが、引き続き、必要に応じて柔軟に使用するよう準備したい。 備品については、高性能デスクトップPC及びノートPCの購入を検討する。
|