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

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', `

$1

`)
SECTION(`Introduction')
SECTION(`Main content')


m4でこのコードを処理すると、以下のテキストが生成されます。

html

Introduction


Main content




m4の実装



オリジナルの
UNIX版m4は、現在ではOpenSolarisから派生したHeirloom Projectでフリー版が配布されています。FreeBSD、NetBSDOpenBSDなどの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

関連項目




外部リンク



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。