m4 (プログラミング言語)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

m4 は、ブライアン・カーニハンデニス・リッチーが設計した汎用マクロプロセッサである。その名称は、"macro" の "m" と、AP-3ミニコンピュータでデニス・リッチーがそれ以前に書いたマクロプロセッサ "m3" の次、というところから来ている。

使用[編集]

マクロプロセッサとは、マクロと呼ばれるコマンドに従ってテキストを置換するテキスト処理ツールである。プログラミングにおいて、ソースコードのプリプロセス(前処理。プリプロセッサを参照)でテキストをテンプレートとして再利用する、といった用途に多用されるが、あらゆる文書における定型処理のようなものに使うことができる。

歴史[編集]

アセンブリ言語がプログラミングの主流だった頃、マクロプロセッサもよく使われていた。アセンブリ言語で書かれるプログラムは同じテキスト(ニーモニックの並び方)の繰り返しが多い。単純な方法として、テキスト(コードブロック)の再利用が行われるようになった。間もなく、パラメータ(命令のオペランド)を違う値に置換することで、再利用の範囲が広がることがわかってきた。そこで、マクロプロセッサが登場したのである。

クリストファー・ストレイチーのGPMなどを基に、1977年にm4は開発された。アセンブリ言語用などの特定のフォーマットに強く依存したマクロプロセッサではなく、多くの任意のテキストファイルを扱える自由形式のマクロプロセッサであり、高度な拡張性を備えている。Ratforの最初の実装で使われ、UNIXにも添付された。sendmail の設定ファイルにも使われているが、おそらく今日これを最もよく使っているのはGNUautoconf である(autoconfにはGNU版m4が必須である。なお、autoconfが生成したconfigureスクリプトの実行だけであれば通常はm4は必要ない)。チューリング完全であり、コード生成に向いているとされることもあるが、過度の利用はデバッグを困難にするという問題がある(ある程度はデバッグを支援する情報の出力などといったm4の実装の問題であり、ある程度はマクロ的なものを利用するメタプログラミングに遍在する問題である)。

機能[編集]

  • テキスト置換
  • パラメータ置換
  • ファイルのインクルード
  • 文字列操作
  • 条件付き評価
  • 数式表現
  • システムインタフェース
  • プログラマ診断

それ以前のマクロプロセッサとは異なり、特定のコンピュータ言語自然言語を対象としたものではない。ただし、もとは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>

実装[編集]

元々の M4 の実装である UNIX 版は、現在は OpenSolaris から派生した Heirloom Project でフリー版が配布されている。FreeBSDNetBSDOpenBSD といった BSD の子孫の M4 は、1990年頃 Ozan S. Yigit が書いた実装がベースである。GNU版[1]は、やはり1990年頃に René Seindal が書いた別の実装がベースである。以上のどれかをWindowsで実行できるようビルドしたWindows用バイナリもある。

標準[編集]

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.
  • René Seindal. GNU M4 Manual. GNU Press. 2004. [1]

[編集]

  1. ^ http://www.gnu.org/software/m4/

外部リンク[編集]