6.16.2 Why use word lists? ¶
人々がワードリストを使用する理由は以下のとおりです:
- 一連のワードが、 それらが有効なコンテキスト外で使用されるのを防ぐため。 この典型的な 2 つの例が、
統合エディター(すべての編集コマンドは別個のワードリストで定義されます。 エディターの起動時に検索順序スタック(the search
order)がエディターのワードリストに設定されます。 エディターが終了すると古い検索順序スタックが復元されます)。 )と、
統合されたアセンブラー(マシンのオペコードは、
CODE
ワードが定義されるときに使用される別のワードリストで定義されます)。
- アプリケーションまたはライブラリーのワードを、 ユーザーに表示される組(
forth-wordlist
または、
他の一般的なワードリスト内)と、 実装のためだけに使用されるヘルパー・ワードの組(別のワードリストに隠されている)に編成します。 これにより、
words
の出力が少なくなり、 実装とインターフェイスが分離され、 共通のワードリスト内で名前が競合する可能性が減ります。
- 同じ名前を持つ複数の定義間の名前空間の衝突を防ぐため。 たとえば、 クロス・コンパイラを構築する場合、
ターゲット・システムの条件付きコードを生成するワード
IF
が存在する場合があります。 この定義を別のワードリストに配置すると、
検索順序スタック上のワードリストの順序を制御することで、 ホスト・システムの IF
またはターゲット・システムの IF
を特定の文脈で使用するかどうかを制御できます。
ワードリストを使用する場合の欠点は以下のとおりです:
- デバッグがさらに面倒になります。
- ワードリストを使用して回避された名前の競合は依然として存在しており、 望ましい結果を得るには検索順序を慎重に調整する必要があります。 これを怠ると、
見つけにくいエラーが発生します(コンパイラーとは異なる方法でコードを読み取る場合と同様に、
see
は、 そのような場合に、
名前がいくつかの考えられるワードのうちのどれに解決(resolve)されるかを確認するのに役立ちます)。 see
はワードの名前だけを表示し、 ワードがどのワードリストに属しているかを表示しないため、 誤解を招く可能性があります。 一意の名前を使用することは、
名前の競合を避けるためのより良いアプローチです。
- あなたは、 検索順序スタック(the search order)の変更を明示的に元に戻す必要があります。 多くの場合、
これは暗黙的に行われた方が便利です。 Gforth は現在そのような機能を提供していませんが、 将来的には提供される可能性があります。