ゼロコスト抽象化とは?
ぜろこすとちゅうしょうか
ゼロコスト抽象化とは、高レベルの抽象的なコードを書いても、手書きの低レベルコードと同等の実行効率が得られるプログラミング言語の設計原則です。
ゼロコスト抽象化(Zero-Cost Abstraction)は、C++の設計者ビャーネ・ストロヴストルップが提唱した原則で、「使わない機能にはコストを払わない」「使う機能は手書きコードより良くはできないが、それと同等のコードが得られる」という二つの要件から成ります。
この原則の本質は、コンパイラが抽象化のオーバーヘッドを最適化でゼロに削減できるということです。プログラマは可読性や安全性を高めるための抽象化(テンプレート、イテレータ、スマートポインタなど)を自由に使いながら、実行時には最適化された機械語が生成されます。
ゼロコスト抽象化が実現される仕組みには以下があります。
- インライン展開:小さな関数呼び出しを呼び出し元に展開してコール/リターンのコストを除去
- モノモーフィゼーション(単相化):ジェネリクス(総称型)を型ごとの具体的なコードに展開(Rust・C++テンプレート)
- デッドコード除去:実際に使われないコードパスをコンパイル時に削除
C++とRustがゼロコスト抽象化の代表的な言語として知られており、一方でJavaのジェネリクス(型消去による実装)やPythonのダックタイピングはこの原則に当てはまりません。組み込みシステムやゲームエンジン、OSカーネルなど、パフォーマンスが最優先される分野でこの概念が特に重視されます。
使い方・例文
RustでイテレータチェーンをC言語風の生のforループに書き直しても実行速度はほぼ変わらず、コンパイラが同等のアセンブリコードを生成する場面がゼロコスト抽象化の典型例です。
この用語をシェア
最終更新: