研究概要 |
Lisp 言語の一方言である Scheme がもつ継続機能は強力な制御機能である反面,その処理が非常に重いという欠点がある.一方,本研究代表者の研究グループでは,これまでにIndefinite One-time Continuation(以下,IOCと略す)と呼ばれる新しい継続機能を提案・実現している.IOCとは呼出しを一回に限るがいつどこからでも呼び出すことができる継続であり,従来の継続より大幅に実行効率がよい. 継続がプログラムの実行中に一回しか呼び出されないことがわかれば,継続を生成する関数call/ccをIOCを生成する関数call/iocで置き換えることによって,プログラムの性能を大幅に向上させることができる.しかし,ある継続が一回しか呼び出されないかどうかを判定することは一般に難しい. 本研究では,一種のアブストラクト・インタプリテーションによってプログラム全体の解析を行い,call/iocで置き換えることができるcall/ccを自動検出するためのアルゴリズムを開発した.また,このアルゴリズムに基づき,置き換え可能なcall/ccを自動的にcall/iocに変換するシステムを実装し,継続を用いたいくつかの実際的なSchemeプログラムを解析した.その結果,このアルゴリズムはプログラム中の静的な情報だけを用いるので,原理的にcall/iocで置き換えることができる call/cc をすべて検出できるとは限らないが,call/ccを用いた実際的なプログラムにおいては,置き換え可能なほとんどの call/cc を検出できることがわかった.
|