プロセッサ依存です。 Gforth の整列(alignment)ワードは自然な整列(natural alignment)を実行します(たとえば、 サイズ
8 のデータに対して整列されたアドレスは 8 で割り切れます)。 通常、 非整列アクセス(unaligned accesses)では -23
THROW
が発生します。
EMIT
と非表示文字: ¶文字(character)は C 言語のライブラリー関数(実際にはマクロ) putc
を使用して出力されます。
ACCEPT
と EXPECT
の文字編集: ¶これは、 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
文字 [\]^_'
は、 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?)
s" address-units-bits" environment? drop .
で得られます。 現在はすべてのプラットフォームで 8
プロセッサに依存します。 現在のすべてのプラットフォームでは 2 進数は 2 の補数表現です。
インストールに依存します。 MAX-N
と MAX-U
と MAX-D
と MAX-UD
の環境クエリ(environmental queries)を作成します。 符号なし(および正)型の下限は 0 です。 2 の補数マシンおよび 1
の補数マシンの符号付き型の下限は、 その上限に 1 を加算することで計算できます。
Forth データ空間全体が書き込み可能です。
WORD
のバッファのサイズ: ¶PAD HERE - .
で得られます。 32 ビット マシンでは 104 文字。 バッファは、 数値表示出力文字列(pictured
numeric output string)と共有されます。 PAD
の上書きが許容される場合、
そのサイズは残りの辞書スペースと同じになりますが、 実用になるのはカウンタ付き文字列に収まる範囲程度です。
1 cells .
で得られます。
1 chars .
で得られます。 現在のすべてのプラットフォームで 1
さまざまです。 lp@ tib - .
を使用して、 特定の時点でのサイズを確認できます。 これは、
現在のファイルを含むファイルのローカル変数スタックおよび TIB と共有されます。 コマンド・ライン・オプション -l
を使用して、
Gforth 起動時に TIB とローカル変数スタックのスペースの量を変更できます。
PAD HERE - .
で得られます。 32 ビット マシンでは 104 文字。 バッファは WORD
と共有されます。
PAD
によって返されるスクラッチ領域のサイズ: ¶ディクショナリー・スペースの残りまるごと。 unused pad here - - .
で得られます。
ディクショナリーの検索では大文字と小文字が区別されません(TABLE
を除く)。 ただし、 上記 character-set
extensions で説明したように、 非 ASCII 文字のマッチングは使用しているロケールによって決まります。 デフォルトの C
ロケールでは、 すべての非 ASCII 文字は大文字と小文字を区別して照合されます。
インタープリター状態では ok
で、 コンパイル状態では compiled
です。
通常の除算ワード / mod /mod */ */mod
は、フロア除算(floored division)を実行します (Gforth
のデフォルトのインストールを使用の場合)。 s" floored" environment? drop .
でこれを確認できます。
特定の除算の四捨五入が必要なプログラムを作成する場合は、 移植性を高めるために fm/mod
または sm/rem
を使用するのが最適です。
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
で起動)の除算オーバーフローやゼロ除算では、 例外が生成されずに偽の結果が返される可能性があります。
DOES>
の後ろで見つかる(可視)かどうか: ¶いいえ(No)。