M4_(プログラミング言語)とは - わかりやすく解説 Weblio辞書 (original) (raw)

m4

パラダイム マクロプロセッサ
登場時期 1977年
設計者 ブライアン・カーニハンデニス・リッチー
主な処理系 GNU m4
テンプレートを表示

GNU m4

開発元 GNUプロジェクト
最新版 1.4.19 / 2021年5月28日 (3年前) (2021-05-28)[1]
対応OS Unix系
種別 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_COUNT. $1

')

H2(First Section) H2(Second Section) H2(Conclusion)

m4 でこれを処理すると、次のようなテキストが生成される。

1. First Section

2. Second Section

3. Conclusion

実装

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

標準

POSIXで標準化されている[6]

参考文献

脚注

  1. ^ Eric, Blake (28 May 2021). "[M4-announce] m4-1.4.19 released [stable]" (Mailing list). info-gnu. 2023年12月18日閲覧。
  2. ^ C. Strachey:『A General Purpose Macrogenerator』、The Computer Journal 誌、8(3):225–241, 1965.
  3. ^ プログラミングツールの考え方を世に広めた書籍。
  4. ^ _Software Tools_とm3は、どちらが先なのか資料によって書いてあることが異なり、よくわからない。
  5. ^ GNU M4 - GNU Project - Free Software Foundation
  6. ^ m4

関連項目

外部リンク

Unixコマンド
ファイルとファイルシステム管理 cat chattr(英語版chmod chown chgrp cksum cmp cp dd du df(英語版file fsck fuser(英語版ln ls lsof mkdir mount mv pax pwd rm rmdir size split tee touch type(英語版) umask(英語版
プロセス管理 at bg chroot cron fg kill killall nice pgrep pidof pkill ps pstree(英語版reboot shutdown time top
ユーザ管理/環境 clear env exit finger history(英語版id logname(英語版mesg passwd su sudo uptime talk tput(英語版uname w wall who whoami write
テキスト処理 awk banner basename comm(英語版) csplit(英語版cut diff dirname ed ex(英語版fmt fold(英語版head iconv join(英語版less m4 more nkf nl paste(英語版patch printf(英語版) read(英語版sed sort spell(英語版strings tail tr troff uniq vi wc xargs yes
シェルビルトイン alias cd echo test(英語版unset wait
通信 dig host(英語版ifconfig inetd ip (iproute2) netcat netstat nslookup ping rdate(英語版rlogin route ssh traceroute
検索 find grep locate(英語版) whatis(英語版) whereis(英語版
マニュアル apropos(英語版) help(英語版man
ソフトウェア開発 ar ctags lex make nm strip(英語版yacc
その他 bc dc cal date expr false lp(英語版lpr od sl sleep stty true tty
Category:UNIXのソフトウェア UNIXユーティリティの一覧