この付録は gawkの実装や保守のときに主に有用な情報で
ある。
セクション POSIX awkにはないgawkの機能を参照.に
awk言語やプログラムに対するGNUの拡張に関してのまとめがある。そういっ
た拡張機能はすべてgawkに`-W compat'オプションか `-W posix'
オプションを付けて起動することで無効にすることができる。
gawkがデバッグオプション`-DDEBUG'を付けてコンパイルされたならば、
もうひとつ、別のコマンドラインオプションが使用可能となる。
このオプションはgawkデベロッパにのみ適用され、一般のユーザーは使えな
い。実行速度を低下させてしまうので、あなたの使っているgawkではこのオ
プションが使えないようにコンパイルされているだろう。
このセクションでは、現在我々がgawkに対して行なおうとしている拡張の説
明を簡単に行なう。配布キット中の`FUTURES'というファイルにはこのような
拡張がリストアップされている。
RS
RSをFSのように一般化する。
gawkの配列変数ENVIRONに対する変更が、gawkから実行する
サブプロセスにも伝わるようにする。
awkの配列にGDBM/NDBM/SDBMファイルをマッピングすることを可能にする。
""はフィールド分割を引き起こし、
split関数がキャラクタ毎に分割を行うようにする。従って、
split(a, "abcd", "")は a[1] == "a"、a[2] == "b"という
具合になる。
lint warnings
RECLEN 変数
FIELDWIDTHSと同じく固定長レコードの処理をスピードアップする。
RT
RS変数に実際にマッチした文字列にアクセスするのを便利にする
ものである。 RTはこのようなキャラクタを保持する。
restart キーワード
$0を変更した後で、restartはパターンマッチングルールを新しいレ
コードを読み込まないでリスタートする。
getline print printfを使った)通信のために二つのパイ
プをオープンする。
IGNORECASEの効果をすべての比較に
IGNORECASE変数の効果を正規表現オペレーションだけではなく、全ての文字
列比較に一般化する。
gawkとのコンパチビリティの為に、GNUスタイルの
ロングオプションを付け加える(例えば、`-F:'と同じ働きをする
`--field-separator=:'とか)。
以下に挙げるのは gawkハッカーが望むであろう幾つかの
プロジェクトである。作業に要するのは数日から数週間であるが、
プロジェクトやプログラマーの能力にもよる。
もしなんらかの改良を行ったのなら、GNUプロジェクトの担当者まで
送って欲しい。
awkプログラムのコンパイル。gawkは与えられた文法を解析木に変換
するのに(YACCに似た)Bisonパーサを使っている。解析木は単純な再帰的評価器に
よって実行される。このやり方は、再帰的評価器が単純なことであっても多くの手続
きを呼出すために大きなオーバーヘッドを招く。
gawkがスクリプトを解析し、ユーザーがコンパイルできるような Cプログラ
ムに変換するのを可能にする為に、普通のCコンパイラと、必要とされる関数全て
(正規表現、フィールド、連想配列、type coercion など)を提供する
特別なgawkライブラリが使われる。
もっと実現しやすいのは、awkの中間フェイズで解析木をGNU Emacs Lispで
使用されているようなリニアバイトコードに変換するということである。再帰的評
価器はstraight line byte code インタプリタに置き換えられるだろう。このイン
タプリタはコンパイルしたプログラムの実行速度とgawkの現在の動作
速度の中間で動作する。
これは多分gawkのバージョン3.0で実装されるだろう。