Next: , Previous: , Up: The Core Words   [Contents][Index]


9.1.1 実装毎オプション(Implementation Defined Options;idef)

セル単位に整列されたアドレス:

プロセッサ依存です。 Gforth の整列(alignment)ワードは自然な整列(natural alignment)を実行します(たとえば、 サイズ 8 のデータに対して整列されたアドレスは 8 で割り切れます)。 通常、 非整列アクセス(unaligned accesses)では -23 THROW が発生します。

EMIT と非表示文字:

文字(character)は C 言語のライブラリ関数(実際にはマクロ) putc を使用して出力されます。

ACCEPTEXPECT の文字編集:

これは、 Emacs のようなキー・バインディングを備えた GNU readline ライブラリ(see Command Line Editing in The GNU Readline Library)をモデルにしています。 Tab を入力するたびに (すべての補完に共通のプレフィックスを生成するのではなく)完全なワード語補完を生成するという点で少し異なります。 See Command-line editing

文字セット:

あなたのコンピュータと表示デバイスの文字セット。 Gforth は 8 ビットクリーンです(ただし、 システム内の他のコンポーネントが問題を引き起こす可能性があります)。

文字単位に整列されたアドレスの要件:

インストールに依存します。 現在、 文字は C言語の unsigned char で表されます。 (リクエストへのコメントですけども、 )将来的には wchar_t に切り替える可能性があります。

文字セット拡張と名前の照合:

ASCII NUL 文字を除く任意の文字を名前に使用できます。 照合では大文字と小文字が区別されません(TABLE を除く)。 照合は C 言語ライブラリ関数 strncasecmp を使用して実行されますが、 その関数はおそらくロケールの影響を受けます。 たとえば、C ロケールではアクセントとウムラウトが認識されないため、 そのロケールでは大文字と小文字が区別されて照合されます。 移植性の理由から、 C ロケールで動作するようにプログラムを作成することが最善です。 そうすれば、 ポーランド人のプログラマ(ISO Latin-2 でエンコードされた文字を含むワードを使用する可能性がある)と、 フランスのプログラマ(ISO Latin-1)が作成したライブラリを同じプログラム内で使用できます(もちろん、 WORDS は一部のワードに対して愉快な結果を生成します(どのワードでそうなるかは、 使用しているフォントによって異なります))。 また、 あなたのご希望のロケールが他のオペレーティング・システムでは利用できない場合もあります。 Unicode がいつかこれらの問題を解決してくれることを願っています。

制御文字がスペース区切り文字と一致する条件:

word がスペース文字を区切り文字として使用して呼び出された場合、 すべての空白文字(C 言語マクロ isspace() で識別される)が区切り文字になります。 一方、 parse はスペースを他の区切り文字と同様に扱います。 parse-name はデフォルトで外部インタープリター (別名テキスト・インタープリター) によって使用され、 すべての空白文字を区切り文字として扱います。

制御フロースタックの形式:

データ・スタックは制御フロー・スタックとして使用されます。 制御フロー・スタック項目のセル単位でのサイズは、 constant cs-item-size によって与えられます。 この記事の執筆時点では、 制御フロー・スタック項目はローカル変数リスト(3番目)、 コード内のアドレス(2 番目)、 アイテムを識別するためのタグ(TOS) で構成されています。 タグとして次のタグが使用されています: defstart, live-orig, dead-orig, dest, do-dest, scopestart

35を超える「数字」の変換

文字 [\]^_' は、 10 進数値で 36〜41 の「数字」として解釈されます(訳注: 基数による)。 それより大きな「数字」の多くは(直接)入力する方法がありません。

ACCEPT および EXPECT で入力が終了した後の表示:

入力した文字列の末尾にカーソルが移動します。 Return キーを使用して入力を終了する場合は、 スペースが入力されます。

ABORT" の 例外中止(exception abort)シーケンス:

エラー文字列は変数 "error に保存され、 -2 throw が実行されます。

入力行終端文字:

対話入力の場合は、 C-m (CR) および C-j (LF) で行を終了します。 通常、 これらの文字は、 Enter キーまたは Return キーを入力したときに生成されます。

カウンタ付き文字列の最大サイズ:

s" /counted-string" environment? drop . で得られます。 現在、 すべてのプラットフォームで 255 文字ですが、 これは変更される可能性があります。

パースされる字列の最大サイズ:

constant /line によって与えられます。 現在 255 文字です。

定義名の最大サイズ(文字単位):

MAX-U / 8 (s" max-u" environment? drop 8 u/ u.)

ENVIRONMENT? の最大文字列長(文字単位):

MAX-U / 8 (s" max-u" environment? drop 8 u/ u.)

ユーザー入力デバイスを選択する方法:

ユーザー入力デバイスは標準入力です。 現時点では、 Gforth 内から変更する方法はありません。 ただし、 入力は通常、Gforth を起動するOSコマンド・ラインでリダイレクトできます。

ユーザー出力デバイスを選択する方法:

EMIT および TYPE は、値 outfile-id (デフォルトでは stdout) に格納されているファイル ID に出力します。 Gforth は、ユーザー出力デバイスが端末の場合はバッファなしの出力を使用します。 それ以外の場合、 出力はバッファリングされます。

ディクショナリのコンパイル方法:

わざわざここで文書化する必要ある?(What are we expected to document here?)

アドレス単位 1 つ分のビット数:

s" address-units-bits" environment? drop . で得られます。 現在はすべてのプラットフォームで 8

数値の表現と算術演算:

プロセッサに依存します。 現在のすべてのプラットフォームでは 2 進数は 2 の補数表現です。

整数型の範囲:

インストールに依存します。 MAX-NMAX-UMAX-DMAX-UD の環境クエリ(environmental queries)を作成します。 符号なし(および正)型の下限は 0 です。 2 の補数マシンおよび 1 の補数マシンの符号付き型の下限は、 その上限に 1 を加算することで計算できます。

読み取り専用データ空間領域:

Forth データ空間全体が書き込み可能です。

WORD のバッファのサイズ:

PAD HERE - . で得られます。 32 ビット マシンでは 104 文字。 バッファは、 数値表示出力文字列(pictured numeric output string)と共有されます。 PAD の上書きが許容される場合、 そのサイズは残りの辞書スペースと同じになりますが、 実用になるのはカウンタ付き文字列に収まる範囲程度です。

アドレス単位での 1 セルのサイズ:

1 cells . で得られます。

アドレス単位での 1 文字のサイズ:

1 chars . で得られます。 現在のすべてのプラットフォームで 1

キーボード・ターミナル・バッファのサイズ:

さまざまです。 lp@ tib - . を使用して、 特定の時点でのサイズを確認できます。 これは、 現在のファイルを含むファイルのローカル変数スタックおよび TIB と共有されます。 コマンド・ライン・オプション -l を使用して、 Gforth 起動時に TIB とローカル変数スタックのスペースの量を変更できます。

表示数値出力(pictured numeric output)バッファのサイズ:

PAD HERE - . で得られます。 32 ビット マシンでは 104 文字。 バッファは WORD と共有されます。

PAD によって返されるスクラッチ領域のサイズ:

ディクショナリ・スペースの残りまるごと。 unused pad here - - . で得られます。

システムが英大文字・小文字を区別するか(case-sensitivity characteristics):

ディクショナリの検索では大文字と小文字が区別されません(TABLE を除く)。 ただし、 上記 character-set extensions で説明したように、 非 ASCII 文字のマッチングは使用しているロケールによって決まります。 デフォルトの C ロケールでは、 すべての非 ASCII 文字は大文字と小文字を区別して照合されます。

システムのプロンプト:

インタプリタ状態では ok で、 コンパイル状態では compiled です。

除算の四捨五入(division rounding):

通常の除算ワード / mod /mod */ */mod は、フロア除算(floored division)を実行します (Gforth のデフォルトのインストールを使用の場合)。 s" floored" environment? drop . でこれを確認できます。 特定の除算の四捨五入が必要なプログラムを作成する場合は、 移植性を高めるために fm/mod または sm/rem を使用するのが最適です。

true の場合の STATE の値:

-1.

算術オーバーフロー後に返される値:

2 の補数マシンでは、 1倍長の場合は 2**bits-per-cell 、 2倍長の場合はセルあたり 4**bits-per-cell を法として演算(modulo)が実行されます(符号付き型では適切なマッピングを使用)。 ゼロによる除算は通常、 -55 throw (Floating-point unidentified fault) または -10 throw (divide by zero) を引き起こします。 整数除算のオーバーフローにより、 -55 throw-10 throw 、 または -11 throw が発生する可能性があります。 gforth-fast エンジン(OSコマンドラインから gforth-fast で起動)の除算オーバーフローやゼロ除算では、 例外が生成されずに偽の結果が返される可能性があります。

現在の定義(current definition)が DOES> の後ろで見つかる(可視)かどうか:

いいえ(No)。


Next: Ambiguous conditions, Previous: The Core Words, Up: The Core Words   [Contents][Index]