この付録は 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で実装されるだろう。