m4: 汎用テキストマクロプロセッサの詳細
m4は、
ブライアン・カーニハンとデニス・リッチーによって設計された汎用テキストマクロプロセッサです。名前の由来は、"macro"の頭文字である"m"と、デニス・リッチーが以前にAP-3ミニコンピュータ上で作成したマクロプロセッサ"m3"の次のバージョンであることを示しています。
テキストマクロプロセッサとは
テキストマクロプロセッサは、マクロと呼ばれるコマンドに従ってテキストを置換するツールです。プログラミングでは、ソースコードのプリプロセスでテキストをテンプレートとして再利用するために広く利用されていますが、あらゆる種類の文書における定型処理にも応用できます。
m4の歴史
m4は、
クリストファー・ストレイチーのGPMや、書籍『ソフトウェア作法』で解説されているマクロプロセッサ、そしてデニス・リッチーが開発したm3などを基に、1977年に開発されました。アセンブリ言語など特定のフォーマットに依存するのではなく、汎用性を重視して設計されており、高い拡張性を備えています。ただし、C言語的な構文に影響を受けている部分があるため、あらゆる用途に完全に対応できるわけではありません。初期の
Ratforの実装に使用され、
UNIXシステムにも付属しました。現在では、
Sendmailの設定ファイルや、特に
GNUプロジェクトのautoconfで広く利用されています。autoconfではGNU版m4が必須ですが、autoconfが生成したconfigureスクリプトの実行には通常m4は必要ありません。
m4は
チューリング完全であり、
コード生成に適していると考えられていますが、過度の利用は
デバッグを困難にする可能性があるという問題も指摘されています。この
デバッグの困難さには、m4の実装固有の問題と、マクロを利用したメタプログラミング全般に共通する問題の両方が含まれます。
m4の機能
m4は、以下のような機能を提供します。
- - テキスト置換
- - パラメータ置換
- - ファイルのインクルード
- - 文字列操作
- - 条件付き評価
- - 数式表現
- - システムインターフェース
- - プログラマ診断
m4はもともとFORTRANの方言である
Ratforの開発を契機として開発されましたが、その適用範囲は特定の
プログラミング言語や自然言語に限らず、汎用的に利用できます。他のマクロプロセッサとは異なり、m4は
チューリング完全である点が特徴です。
m4の使用例
以下は、HTML生成ライブラリの一部を示したコード例です。この例では、自動的に節見出しに番号を振るマクロを定義しています。
m4
define(`SECTION', `
`)
SECTION(`Introduction')
SECTION(`Main content')
m4でこのコードを処理すると、以下のテキストが生成されます。
html
m4の実装
オリジナルの
UNIX版m4は、現在では
OpenSolarisから派生したHeirloom Projectでフリー版が配布されています。FreeBSD、
NetBSD、
OpenBSDなどのBSD系OSでは、1990年頃にOzan S. Yigitが作成した実装がベースとなっています。GNU版m4は、同じく1990年頃にRené Seindalが作成した実装をベースにしています。これらの実装をWindowsで実行できるようにビルドしたバイナリも存在します。
標準化
m4はPOSIXで標準化されています。
参考文献
- - Brian W. Kernighan and Dennis M. Ritchie. The M4 macro processor. Technical report, Bell Laboratories, Murray Hill, New Jersey, USA, 1977. pdf
- - Kenneth J. Turner. Exploiting the m4 macro language. Technical Report CSM-126, Department of Computing Science and Mathematics, University of Stirling, Scotland, September 1994. pdf
- - René Seindal. GNU M4 Manual. GNU Press. 2004. html
関連項目
外部リンク