移動先 先頭, , , 末尾 セクション, 目次.

Implementation Notes

この付録は gawkの実装や保守のときに主に有用な情報で ある。

上位互換性とデバッグ

セクション POSIX awkにはないgawkの機能を参照.に awk言語やプログラムに対するGNUの拡張に関してのまとめがある。そういっ た拡張機能はすべてgawk`-W compat'オプションか `-W posix' オプションを付けて起動することで無効にすることができる。

gawkがデバッグオプション`-DDEBUG'を付けてコンパイルされたならば、 もうひとつ、別のコマンドラインオプションが使用可能となる。

`-W parsedebug'
プログラムが解析された解析スタックの情報を出力する。

このオプションはgawkデベロッパにのみ適用され、一般のユーザーは使えな い。実行速度を低下させてしまうので、あなたの使っているgawkではこのオ プションが使えないようにコンパイルされているだろう。

将来の拡張予定

このセクションでは、現在我々がgawkに対して行なおうとしている拡張の説 明を簡単に行なう。配布キット中の`FUTURES'というファイルにはこのような 拡張がリストアップされている。

正規表現のRS
RSFSのように一般化する。
サブプロセスの環境の制御
gawkの配列変数ENVIRONに対する変更が、gawkから実行する サブプロセスにも伝わるようにする。
データベース
awkの配列にGDBM/NDBM/SDBMファイルをマッピングすることを可能にする。
単一キャラクタのフィールド
フィールドセパレータとしての空文字列""はフィールド分割を引き起こし、 split関数がキャラクタ毎に分割を行うようにする。従って、 split(a, "abcd", "")a[1] == "a"a[2] == "b"という 具合になる。
More lint warnings
移植性のために、より多くのチェックを行なうようにする。
固定長レコードを扱うためのRECLEN 変数
FIELDWIDTHSと同じく固定長レコードの処理をスピードアップする。
レコードの終端を保持する変数RT
この変数はRS変数に実際にマッチした文字列にアクセスするのを便利にする ものである。 RTはこのようなキャラクタを保持する。
restart キーワード
$0を変更した後で、restartはパターンマッチングルールを新しいレ コードを読み込まないでリスタートする。
`|&' によるリダイレクト
`|' の変わりに`|&'を使うことによって、サブプロセスとの (getline print printfを使った)通信のために二つのパイ プをオープンする。
IGNORECASEの効果をすべての比較に
IGNORECASE変数の効果を正規表現オペレーションだけではなく、全ての文字 列比較に一般化する。
コマンドラインに書いたプログラムとライブラリを混ぜて使う方法
新しいオプションを追加してコマンドラインから入力したプログラムからでも簡単に ライブラリを使えるようにする。
GNUスタイルの長いオプション
他のGNUプログラムとgawkとのコンパチビリティの為に、GNUスタイルの ロングオプションを付け加える(例えば、`-F:'と同じ働きをする `--field-separator=:'とか)。

改良案

以下に挙げるのは gawkハッカーが望むであろう幾つかの プロジェクトである。作業に要するのは数日から数週間であるが、 プロジェクトやプログラマーの能力にもよる。 もしなんらかの改良を行ったのなら、GNUプロジェクトの担当者まで 送って欲しい。

  1. awkプログラムのコンパイル。gawkは与えられた文法を解析木に変換 するのに(YACCに似た)Bisonパーサを使っている。解析木は単純な再帰的評価器に よって実行される。このやり方は、再帰的評価器が単純なことであっても多くの手続 きを呼出すために大きなオーバーヘッドを招く。 gawkがスクリプトを解析し、ユーザーがコンパイルできるような Cプログラ ムに変換するのを可能にする為に、普通のCコンパイラと、必要とされる関数全て (正規表現、フィールド、連想配列、type coercion など)を提供する 特別なgawkライブラリが使われる。 もっと実現しやすいのは、awkの中間フェイズで解析木をGNU Emacs Lispで 使用されているようなリニアバイトコードに変換するということである。再帰的評 価器はstraight line byte code インタプリタに置き換えられるだろう。このイン タプリタはコンパイルしたプログラムの実行速度とgawkの現在の動作 速度の中間で動作する。 これは多分gawkのバージョン3.0で実装されるだろう。
  2. エラーメッセージのセクションがこのマニュアルではまだ記述されていない。多分、 何人かの nice なベータテスターがメッセージのいくつかをドキュメントにしてく れるだろう。
  3. テスト用のプログラムをこのマニュアルに記述する。
  4. マニュアル中のプログラムとデータファイルを簡単に実験できるように別のファイ ルに分けられる様にする。
  5. そのほかのアイデアについては`FUTURES'というファイルを参照のこと。 もしここに挙げた以外に良いアイデアがあれば我々に教えて欲しい。

移動先 先頭, , , 末尾 セクション, 目次.