Weak Consを用いたマクロ再定義時の自動再コンパイル
スポンサーリンク
概要
- 論文の詳細を見る
Lisp処理系には,インタプリタとコンパイラの両方を備えた処理系が多いが,その両方を併用する場合は,マクロを使用した関数のコンパイルに注意を要する.インタプリタでは,マクロ展開はマクロ式の評価時に行うため,いつでも最新のマクロ定義が使われる.一方,コンパイラでは,コンパイル時に展開を行うため,コンパイル時におけるマクロ定義が使われる.そのため,マクロを使用した関数をコンパイルする場合は,必要なマクロがあらかじめ定義されていなければならない.またコンパイルされた関数では,マクロ式はすでに展開されているので,マクロを再定義してもその変更はコンパイルされた関数には反映されない.このようにコンパイラでは,マクロの定義時期やマクロの再定義によって,動作がインタプリタと変わってしまうことがある.そこで本論文では,関数とマクロの依存関係グラフを保持し,マクロの(再)定義時にそのマクロに依存する関数やマクロを自動再コンパイルまたは自動再定義することにより,コンパイラを使用した場合でもインタプリタと同じように動作させる方法を提案する.提案する方法では,weak consを用いることによって,不必要な再コンパイルを避けることができ,また不要な再コンパイル情報を捨てることができる.本方法は,本文で述べるように,インタプリタと同じ動作をさせることができない場合があるが,それはきわめて特殊な場合であり,実用上は問題ないと考えられる.
- 一般社団法人情報処理学会の論文
- 1995-06-15
著者
関連論文
- SIMD型超並列計算機における素因数分解
- 階層的グループ化に基づくコピー型ごみ集めによる局所性改善
- ISLisp(Lisp言語のISO標準化案)とその動向
- 共有メモリプログラミングのための拡張C言語
- 4L-8 継続の共有化による継続ベースWebサーバのメモリ使用量削減(要求定義とプログラミング言語・設計・実装,学生セッション,ソフトウェア科学・工学)
- 4L-6 Webアプリケーションのための動的適応可能な処理分担機構の設計と実装(要求定義とプログラミング言語・設計・実装,学生セッション,ソフトウェア科学・工学)
- L-Closureを用いた真に末尾再帰的なSchemeインタプリタ
- 実時間処理に適したメモリ管理を行うLisp処理系の設計と実装
- 入れ子関数を利用する動的負荷分散と高水準記述(言語処理系)
- 細粒度マルチスレッド言語における例外処理の効率良い実装
- 組み込みシステムにおける複数のフリーリストに割り振るメモリ量の最適化
- Java上のScheme処理系「ぶぶ」の実装
- call/ccからcall/iocへの自動変換
- 無制限の寿命を持つ単一呼出継続
- Indefinite One-time Continuation
- Future ベースの並列 Scheme における継続の拡張
- 4P-1 ページ遷移を考慮したWebアプリケーション記述言語の設計と実装(プログラミング言語,学生セッション,ソフトウェア科学・工学,情報処理学会創立50周年記念)
- オブジェクト指向並列言語OPAのための遅延正規化手法
- 遅延タスク生成の反復計算向け拡張(並列処理)
- オブジェクト指向並列言語OPAのためのコード生成手法
- マルチコンテキスト管理をサポートする実装用言語
- 3Z-7 並列言語OPAにおける一貫性制御に対応した差分プログラミング
- Scheme処理系におけるC言語拡張コードへのライトバリア自動挿入
- Scheme処理系におけるC言語拡張コードへのライトバリア自動挿入
- SIMD型超並列計算機におけるリバモアループの並列化とその評価
- 共有メモリ向けプリミティブとそのGCCを使った実現
- 1Q-4 WebアプリケーションにおけるJavaScript計算の移送機構(プログラミング言語・実装・支援,学生セッション,ソフトウェア科学・工学)
- データ並列計算のための拡張C言語NCX
- SIMD型超並列計算機SM-1
- 入れ子関数を利用した動的負荷分散
- Java上のScheme処理系「ぶぶ」における単一のクラスローダを用いたオブジェクトシステムの実装
- プログラムの部分移送に基づく遠隔実行機構とその知的インタフェースへの応用
- 3Z-6 並列Schemeにおける即時タスク生成法と遅延タスク生成法の融合
- リターン・バリア
- 継続の生成におけるスタックコピーの遅延
- SchemeにおけるEvaluation Strategyの設計と実装
- 4L-6 ISLISPコンパイラの実装
- SIMD型超並列計算機SM-1における仮想プロセッサ機能の実現
- スタックの直接操作を必要としない一級継続の実装
- 入れ子関数を利用したマルチスレッドの実現
- Javaと相互呼び出し可能なScheme処理系「ぶぶ」における継続機能と例外処理機能の実装
- サーバ・クライアント処理の動的分割・再配置機能を備えたWebアプリケーション用言語
- Javaクラスライブラリに対する言語間インタフェース
- TUPLE: SIMD 型超並列計算のための拡張 Common Lisp
- 共有メモリ関連命令を生成可能な実装用言語の設計
- MPIを用いたデータ並列C言語NCXの実装
- ソフトウェア紹介 TUTScheme
- Weak Consを用いたマクロ再定義時の自動再コンパイル