m4 (プログラミング言語)
m4 は、ブライアン・カーニハンとデニス・リッチーが設計した汎用マクロプロセッサである。その名称は、"macro" が "m" と残り4文字から成ることに由来する。
目次 |
使用 [編集]
マクロプロセッサ(あるいはプリプロセッサ)は、テキスト置換ツールである。主にプログラミングでテキストをテンプレートとして再利用するのに使われるが、文書の編集に使われることもある。
歴史 [編集]
アセンブリ言語がプログラミングの主流だった頃、マクロプロセッサもよく使われていた。アセンブリ言語で書かれるプログラムは同じテキスト(ニーモニックの並び方)の繰り返しが多い。単純な方法として、テキスト(コードブロック)の再利用が行われるようになった。間もなく、パラメータ(命令のオペランド)を違う値に置換することで、再利用の範囲が広がることがわかってきた。そこで、マクロプロセッサが登場したのである。
m4 は1977年、クリストファー・ストレイチーの考えに基づいて開発された。それまでのアセンブリ言語専用のマクロプロセッサと異なり、完全な自由形式のマクロプロセッサであり、高度な拡張性を備えていた(例えば、マクロの引数は走査時と挿入時の2回展開される)。Ratforの最初の実装で使われ、UNIXにも搭載された。今日これを最もよく使っているのはGNUの autoconf である。また、メール転送エージェント sendmail でも設定に使われている。一般に、チューリング完全であることからコード生成に向いているとされるが、デバッグが困難という問題がある。
機能 [編集]
- テキスト置換
- パラメータ置換
- ファイルのインクルード
- 文字列操作
- 条件付き評価
- 数式表現
- システムインタフェース
- プログラマ診断
それ以前のマクロプロセッサとは異なり、特定のコンピュータ言語や自然言語を対象としたものではない。ただし、本来はFORTRANの方言であるRatforの開発で使うためのものだった。他のマクロプロセッサとは異なり、m4 は一般的なプログラミング言語と同様、チューリング完全である。
例 [編集]
Hello Worldコード
define(`print', `Hello World!') print
以下のコード断片はHTML生成ライブラリの一部を示したものである。自動的に節見出しに番号を振るマクロを定義している。
define(`H2_COUNT', 0) define(`H2', `define(`H2_COUNT', incr(H2_COUNT))' dnl `<h2>H2_COUNT. $1</h2>') H2(First Section) H2(Second Section) H2(Conclusion)
m4 でこれを処理すると、次のようなテキストが生成される。
<h2>1. First Section</h2> <h2>2. Second Section</h2> <h2>3. Conclusion</h2>
フリーソフトウェア実装 [編集]
GNU版のm4が存在する。FreeBSD、NetBSD、OpenBSD にも m4 の独自の実装が存在する。さらに OpenSolaris から派生した Heirloom Project でも m4 のフリー版が存在する。Windows版もある。
関連項目 [編集]
参考文献 [編集]
- 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.
- René Seindal. GNU M4 Manual. GNU Press. 2004. [1]