Next: , Previous: Quotation and Nested Macros, Up: M4 Quotation


8.1.4 changequoteの弊害

特に夜も遅くなると,適切な引用符をバイパスする誘惑が大きくなることも多い ものです.そして,経験豊富なAutoconfのハッカーの多くは,最終的に暗黒の力 に支配され,最終兵器を持ち出します.それはchangequoteです.

M4組み込みのchangequoteは,言語の構文を必要に応じて調整することを 可能にするプリミティブの組に属しています.例えば,M4では引用符としてデフォ ルトで‘`’と‘'’を使用しますが,シェルプログラムの文脈(そして, ほとんどの実際のプログラミング言語)では,それは利用可能なものの中での最 悪の選択です.シェルコードでの(‘'this'’と‘`that`’ のような)文 字列とバッククオートされた式と,通常のプログラミング言語で使用される (‘'0'’のような)リテラル文字のため,多くの対にならない‘`’と ‘'’が存在します.そのような文脈での厳密なM4の引用符が(変更)不可能な 場合は,悪夢になります.そのような文脈でM4を役立たせるため,それを設計し た人は別の引用符の組の選択を可能にするchangequoteを装備しました. M4sugar,M4sh,Autoconf,そしてAutotestでは,すべてのものが‘[’と ‘]’の使用を選択しています.それらが滅多に使用されない文字という理由 だけでなく,対にならないことも滅多に無い文字という理由もあります

構文形式がコメントだということを指定するため(M4がHTMLページを生成するた めに使用されるとき,‘changecom(<!--, -->)’が一般的だと分かるでしょ う)のchangecomと,それ以外の構文の詳細を変更するための changewordchangesyntax(n番目の引数を示す,デフォルトで ‘$’となっている文字や,引数の周りを囲むカッコなど)のような,それ以 外のマジックプリミティブもあります.

これらのプリミティブは,特定の分野に対してM4がより役に立つようにするため, 本当に意味があるものです.それらはコマンドラインオプションのように考える べきです.それらは,--quotes--comments--words,そして--syntaxのようなものです.それにもかかわ らず,M4ライブラリ自身が含まれる(追加のオプションが必要無い)ように,M4の 組み込みとして実装されています.

そこに問題があります...


問題は,M4スクリプトの途中で,その初期化を目的としてそれを使用するときに 発生します.これは,あまり注意していない場合,甚大な影響があるはずです. 実行の途中で言語を変更しているようなものです.構文の変更とそれか らの復帰が十分でないことが多いものです.その間でマクロの呼び出しを行なっ た場合,現在の構文はおそらくマクロを実装していないので,これらのマクロは 失われることになります.