m4パラダイムマクロプロセッサ
登場時期1977年
設計者ブライアン・カーニハン、デニス・リッチー
主な処理系GNU m4
テンプレートを表示
GNU m4開発元GNUプロジェクト
最新版1.4.19 / 2021年5月28日 (2年前) (2021-05-28)[1]
対応OSUnix系
種別m4マクロプロセッサ
ライセンスGNU General Public License
公式サイトgnu.org/s/m4
m4 は、ブライアン・カーニハンとデニス・リッチーが設計した汎用テキストマクロプロセッサである。その名称は「macro」(マクロ)の「m」と、AP-3ミニコンピュータでデニス・リッチーがそれ以前に書いたマクロプロセッサ「m3」の次、というところから来ている。 テキストマクロプロセッサとは、マクロと呼ばれるコマンドに従ってテキストを置換するテキスト処理ツールである。プログラミングにおいて、ソースコードのプリプロセス(前処理)でテキストをテンプレートとして再利用する、といった用途に多用されるが、あらゆる文書における定型処理のようなものに使うことができる。 クリストファー・ストレイチーのGPM[2]、『ソフトウェア作法』[3]で例題として解説されているマクロプロセッサ、AP-3ミニコンピュータでデニス・リッチーがそれ以前に書いたマクロプロセッサm3、などを基に[4]、1977年にm4は開発された。アセンブリ言語用などの特定のフォーマットに強く依存したマクロプロセッサではなく、汎用のマクロプロセッサであり、高度な拡張性を備えている(しかし、C言語的な構文に縛られている部分があるため、どんな対象にも必ずしも対応できるわけではない)。Ratforの最初の実装で使われ、UNIXにも添付された。Sendmailの設定ファイルにも使われているが、おそらく今日これを最もよく使っているのはGNUプロジェクトのautoconfである(autoconfにはGNU版m4が必須である。なお、autoconfが生成したconfigureスクリプトの実行だけであれば通常はm4は必要ない)。チューリング完全であり、コード生成に向いているとされることもあるが、過度の利用はデバッグを困難にするという問題がある(ある程度はデバッグを支援する情報の出力などといった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 でフリー版が配布されている。FreeBSD、NetBSD、OpenBSD といった BSD の子孫の m4 は、1990年頃 Ozan S. Yigit が書いた実装がベースである。GNU版[5]は、やはり1990年頃に Rene Seindal が書いた別の実装がベースである。以上のどれかをWindowsで実行できるようビルドしたWindows用バイナリもある。 POSIXで標準化されている[6]。
使用
歴史
機能
テキスト置換
パラメータ置換
ファイルのインクルード
文字列操作
条件付き評価
数式表現
システムインタフェース
プログラマ診断
例
実装
標準
参考文献
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
Rene Seindal. GNU M4 Manual. GNU Press. 2004. ⇒html
脚注^ .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation.cs-ja1 q,.mw-parser-output .citation.cs-ja2 q{quotes:"「""」""『""』"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}Eric, Blake (28 May 2021). "[M4-announce] m4-1.4.19 released [stable]" (Mailing list). info-gnu. 2023年12月18日閲覧。
^ C. Strachey:『A General Purpose Macrogenerator』、The Computer Journal 誌、8(3):225?241, 1965.
^ プログラミングツールの考え方を世に広めた書籍。
^ Software Toolsとm3は、どちらが先なのか資料によって書いてあることが異なり、よくわからない。
^ GNU M4 - GNU Project - Free Software Foundation
^ m4
関連項目
Cプリプロセッサ
プリプロセッサ
テンプレートエンジン
make (UNIX)
PHP (プログラミング言語)
外部リンク
⇒GNU M4 website
⇒M4 tutorial
表
話
編
歴
Unixコマンド
ファイルとファイルシステム管理
cat
chattr
chmod
chown
chgrp
cksum
cmp
cp
dd
du
df(英語版)
file
fsck
fuser(英語版)
ln
ls
lsof
mkdir
mount
mv