M4_(プログラミング言語)
[Wikipedia|▼Menu]

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 でフリー版が配布されている。FreeBSDNetBSDOpenBSD といった 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


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:19 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef