[論文レビュー] Compiling Language Definitions: The ASF+SDF Compiler
本論文では、ASF+SDFメタ言語で記述された高レベル言語定義を、最適化されたCコードに変換するASF+SDFコンパイラを提示する。最大部分項共有(ハッシュコンスイング)と直接的Cコード生成を活用することで、関数型言語およびリライト言語コンパイラを上回る性能を達成し、最大10,000ルールおよび100万個以上のノードを含む大規模な言語定義の効率的実行を可能にする。
The ASF+SDF Meta-Environment is an interactive language development environment whose main application areas are definition of domain-specific languages, generation of program analysis and transformation tools, production of software renovation tools, and general specification and prototyping. It uses conditional rewrite rules to define the dynamic semantics and other tool-oriented aspects of languages, so the effectiveness of the generated tools is critically dependent on the quality of the rewrite rule implementation. The ASF+SDF rewrite rule compiler generates C code, thus taking advantage of C's portability and the sophisticated optimization capabilities of current C compilers as well as avoiding potential abstract machine interface bottlenecks. It can handle large (10 000+ rule) language definitions and uses an efficient run-time storage scheme capable of handling large (1 000 000+ node) terms. Term storage uses maximal subterm sharing (hash-consing), which turns out to be more effective in the case of ASF+SDF than in Lisp or SML. Extensive benchmarking has shown the time and space performance of the generated code to be as good as or better than that of the best current rewrite rule and functional language compilers.
研究の動機と目的
- 複雑なプログラム解析、変換、ソフトウェア刷新タスクをサポートする、ASF+SDF言語定義向けの高性能コンパイラの開発。
- 項リライトシステムにおけるインタプリタ実行の性能ボトルネックを解消し、効率的でポータブルなCコードを生成すること。
- 大規模な言語定義(最大10,000ルール)および巨大な項構造(100万ノード以上)のスケーラブルな処理を可能にすること。
- 最大部分項共有によるランタイム効率の向上により、メモリ使用量の削減と項の等価性チェックの高速化を実現すること。
提案手法
- Cコンパイラの最適化を活用し、仮想マシンのオーバーヘッドを回避するため、ASF+SDF言語定義をポータブルで最適化されたCコードに直接コンパイルする。
- 最大部分項共有(ハッシュコンスイング)に基づくランタイムストレージ機構を採用し、メモリ割り当てを最小限に抑え、項比較を高速化する。
- 条件付きリライトルール、連想リスト、デフォルトルールを用いて、言語定義における複雑な意味論および制御フローを表現する。
- ATermライブラリを統合し、項の表現および操作を効率的に行い、厳密評価および遅延評価の両パターンをサポートする。
- メモリおよび時間集約的なワークロード(例:evalexp, evaltree)を用いたベンチマークを実施し、ストレス状態下での性能を評価する。
- ASF+SDFコンパイラ自身を自己コンパイルすることでツールチェーンの妥当性を検証し、実世界の大規模定義における性能を測定する。
実験結果
リサーチクエスチョン
- RQ1高レベル言語定義言語からCへの直接コンパイルアプローチが、既存の関数型言語およびリライト言語コンパイラと同等またはそれ以上の性能を達成できるか。
- RQ2最大部分項共有が、大規模な項リライトシステムにおけるメモリ使用量の削減および項の等価性性能の向上にどの程度効果的か。
- RQ3生成されたCコードが、大規模な言語定義(例:10,000ルール以上)および巨大な項構造(例:100万ノード以上)を性能劣化なしに処理できるか。
- RQ4直接的Cコード生成と効率的な項ストレージの組み合わせが、インタプリタ的または仮想マシンベースの実行よりも優れた性能を実現できるか。
- RQ5遅延評価および高頻度の項再利用を要するメモリ集約的ワークロードにおいて、コンパイラが効果的にスケーリングできるか。
主な発見
- ASF+SDFコンパイラは、時間的および空間的効率の両面で、現在最高水準の関数型言語およびリライト言語コンパイラと同等またはそれ以上の性能を発揮するCコードを生成する。
- 最大部分項共有は、最大90%のメモリ使用量削減を実現し、特にevaltreeのようなメモリ集約的ベンチマークで顕著な性能向上をもたらす。
- コンパイラは大規模定義を効果的に処理できる:ASF+SDFコンパイラ自身は、共有を有効にした場合216秒でコンパイル可能で、無効の場合は661秒。メモリ使用量は16MB(共有時)対117MB(非共有時)。
- Rislaエクスパンダは、共有を有効にした場合9秒(非共有時18秒)でコンパイル可能で、メモリ使用量はわずか8MBに留まり、ドメイン特化言語処理におけるスケーラビリティを示している。
- evaltreeベンチマークでは、n=20を超える段階で、最大部分項共有を採用したASF+SDFのみがスケーリングを維持し、他のシステムが失敗するのに対し、適切なメモリ使用量を維持している。
- 実行時間比較において、一部のベンチマークでClean(遅延評価)のみがASF+SDFを上回るが、差は小さく、ASF+SDFの強力な競争力が裏付けられている。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。