利用者:Foxtrot/Forth
パラダイム | 手続き型、スタック指向 |
---|---|
登場時期 | 1970年代 |
設計者 | チャールズ・ムーア |
型付け | なし |
主な処理系 | Forth, Inc., GNU Forth, MPE |
影響を受けた言語 | バロースの大型システム、LISP, APL |
影響を与えた言語 | PostScript[1]、Factor、Joy, Cat |
概要
編集スタック
編集保守
編集歴史
編集標準規格
編集- Forth-77 Standard
- Forth-78 Standard
- Forth-79 Standard
- Forth-83 Standard
- ISO/IEC 15145:1997(E) - Information technology - Programming languages - Forth (First edition: 1997-04-15)
プログラマの観点
編集(25 * 10 +
50)
の結果を取得することができる。
25 10 * 50 + . <cr> 300 ok
*
がスタックの一番上にあるふたつの数を乗算し、その積に置き換える。
+
がこれに先ほどの積を加算する。最後に、.
コマンドがユーザの端末に結果を出力する。[13]
4 5 + .これは、スタックに4を積み、さらに5を積み、スタック上の2つの値を取り出して加算、その結果をスタックに戻し、スタックの値を表示する操作を示している。 上記のように入力してエンター︵リターン︶を打鍵すると、画面上には下記のように結果が表示される。
4 5 + . 9 ok
Forth の構造化機能でさえもスタックベースである。たとえば、
: FLOOR5 ( n -- n' ) DUP 6 < IF DROP 5 ELSE 1 - THEN ;このコードは 次のコマンドを使うことによって
FLOOR5
が呼ばれる新しいワード(繰り返すが、﹁ワード﹂という単語はサブルーチンとして使われている)を定義する。DUP
はスタックの数値を複製する。6
がスタックの一番上に6を配置する。ワード <
はスタックの一番上の二つの数(6と DUP
で複製された入力の値)を比較し、真偽値で置き換える。IF
は真偽値をとり、その直後のコマンドを実行するか、ELSE
までスキップするかを選択する。DROP
スタックの上の値を放棄する。そして、THEN
は条件分岐の終端である。括弧に囲まれたテキストは、このワードが期待するスタックの数と帰り値を返すかどうかを説明するコメントである。ワード FLOOR5
はC言語で書かれた次の関数に相当する。
int floor5(int v) { return v < 6 ? 5 : v - 1; }この関数はより簡潔につぎのように書かれる。
: FLOOR5 ( n -- n' ) 1- 5 MAX ;このワードは次のように実行できる。
1 FLOOR5 . <cr> 5 ok 8 FLOOR5 . <cr> 7 ok最初にインタプリタは数値(1もしくは8)をスタックにプッシュし、それからこの数値を再びポップし結果をプッシュする FLOOR5 を呼び出す。最後に、﹁.﹂の呼び出しは帰り値をポップし、ユーザの端末にそれを表示する。
機能
編集:
︵コロン︶から始まり、;
(セミコロン)で終了する。たとえば、
: X DUP 1+ . . ;のコードはワード
X
をコンパイルし、辞書にこの名前が発見できるようにする。コンパイルと言っても、文頭にコロン、その後にワードの名称を置き、そこから一連の式を並べておいて、文末にセミコロンを付加するだけでよい。10 X
をコンソールに入力して実行すると、11
10
が表示されるようになるだろう。[15]
例えば、前述の式をfooという語︵ワード︶としてコンパイルするには、以下の通り記述する。記述法はコロン記号で始まりセミコロン記号で終わるので、﹁コロン定義﹂と呼ばれる。
: foo 4 5 + . ;コンパイルすることにより、FORTHの辞書︵ディクショナリ︶に、この語︵ワード︶が登録されることになる︵この場合はfooが登録される︶。 実のところ、FORTHでは﹁+﹂や﹁.﹂などの演算子や出力機能などの全てがワードである。こういった組み込み済みのワードと、ユーザが後からコロン定義︵コンパイラ︶で追加したワードと、2つの間に本質的な差異はない。コンパイルしたワードはただちに環境に組み込まれ、インタプリタより単独で実行できるようになる。つまり、そのFORTH処理系を拡張するのである。このような点より、FORTHは自己拡張性が高いと云われる。 プログラムの開発においては、処理毎に区切ってワードとして順次構築していくので、注意深く進めていけば自然ときれいに構造化されることになる。ワードは単独で実行できるため、部分に分けてのデバッグも容易である。また、それらのワードを使ってテスト用の処理︵ワード︶を気軽に作成して実行・テストできる。
多くの Forth システムは実行可能なワードを生成する特殊化されたアセンブリ言語を含む。このアセンブラはコンパイラの特殊な方言である。Forth アセンブラはしばしば命令の前に引数がくる逆ポーランド記法を使う。Forth アセンブラの普通の設計では命令をスタック上に構築し、それからこれを最後の段階でメモリにコピーする。Forth システムでは、番号(0..n, 実際のオペレーションコードとして使われる)付けされるかその目的に応じて名づけられた、製作者によって使われる名前でレジスタは参照されることもある。たとえば、スタックポインタとして使われるレジスタは﹁S﹂など。 [16]
オペレーティングシステムとファイル、マルチタスク
編集BLOCK
はディスクスペースの1キロバイトサイズのブロックの数値からデータを格納しているバッファのアドレスへの変換に割り当てられ、Forth システムによって自動的に管理される。固定されたディスクブロック範囲にファイルが配置されるときには、システムのディスクアクセスが使われる実装もある。たいていはこれらはディスクブロックごとのレコードの整数をつかって、固定長バイナリレコードして実装される。高速な検索はキーデータ上のハッシュアクセスによって実現される。
ふつうは cooperative なラウンドロビンスケジューリングであるマルチタスクは、通常利用可能である(ただし、マルチタスキング・ワードとサポートは ANSI Forth 規格ではカバーされていない)。ワード PAUSE
は、次のタスクの配置や実行コンテキストのリストアための 現在のタスクの実行コンテキストの保存に使われる。どちらのタスクも自分自身のスタックやいくつかのコントロール変数のコピー、スクラッチエリアを持っている。タスクのスワップは単純で、効率的である。その結果、Forth マルチタスクは Intel 8051, Atmel AVR, and TI MSP430のような非常に単純なマイクロコントローラでさえ有効である。[17]
その一方で、Microsoft WindowsやLinux、Unixのようなホストオペレーティングシステムのもとで実行され、ソースやデータのファイルのためにホストオペレーティングシステムのファイルシステムを利用する Forth システムもある。ANSI Forth 規格では I/O のために使われたワードについて書かれている。他の標準的でない機能はホストOSやウィンドウシステムへのシステムコールを発行するためのメカニズムも含み、多くはオペレーティングシステムから提供されるスケジューリングを採用する拡張を提供する。典型的には、タスク作成、一時停止、解体、および優先順位の変更のために、スタンドアロンのForthの PAUSE
ワードとは大きくて異なったワードのセットを持っている。
セルフコンパイルとクロスコンパイル
編集すべてのソースコードとともに十分な機能を有する Forth システムは自身をコンパイルすることができ、Forth プログラマはこのようなテクニックを普通メタ・コンピレーション(meta-compilation)と呼ぶ(ただし、この用語は普通の定義であるメタコンピレーションとは厳密には一致しない)。通常の方法はコンパイルされたビットをメモリにを配置する一握りのワードの再定義である。コンパイラのワードはメモリ内のバッファエリアにリダイレクトされることができるフェッチとストアの、特別に命名されたバージョンを使う。このバッファエリアはコードバッファというより異なるアドレスから始まるメモリ領域へのシミュレートやアクセスをする。このコンパイラは対象のコンピュータのメモリとホストの(コンパイルする)コンピュータのメモリの両方にアクセスするワードを定義する。[18]
フェッチやストア操作がコード空間に再定義されたあと、コンパイラやアセンブラなどはフェッチやストアの新たな定義を使って再コンパイルされる。これはコンパイラとインタプリタのすべてのコードの効果的な再利用である。それから、Forth システムのコードはコンパイルされるが、このバージョンはバッファに格納される。このメモリ内のバッファはディスクに書きこまれ、これをテストのために一時的にメモリにロードする方法が提供される。新たなバージョンがきちんと機能するようなら、これは以前のバージョンに上書きされる。
異なる環境のためのバリエーションが多数存在する。組み込みシステム向けには、代わりに他のコンピュータのためにコードが書かれることになるが、このテクニックはクロスコンピレーションとして知られ、シリアルポートや単独の TTL ビット越しでさえ、その上オリジナルのコンパイルするコンピュータのワード名やディクショナリの他の実行されない部分も維持する。このようなForthコンパイラのための最小の定義は バイト単位のフェッチやストアをするワードと、実行される Forth ワード を命令するワードである。しばしばもっとも多くの時間のかかるリモートのポートへの書き込みの部分は、フェッチやストア、実行を実装するための初期化プログラムの構築であるが、多くの現代的なマイクロプロセッサ(Motorola CPU32など)は、このタスクを排除する統合されたデバッグ機能を持っている[19]
言語の構造
編集ディクショナリのエントリ
編集structure byte: flag \ 3bit flags + length of word's name char-array: name \ name's runtime length isn't known at compile time address: previous \ link field, backward ptr to previous word address: codeword \ ptr to the code to execute this word any-array: parameterfield \ unknown length of data, words, or opcodes end-structure forthwordこの名前フィールドはワードの名前の長さ(典型的には32バイト)を与えるプリフィックスで開始し、何ビットかはフラグ用である。それからワードの名前の文字表現がプリフィックスのあとに続く。特定のForth実装に依存するが、アラインメントのためひとつ以上の NUL('\0')バイトがあるかもしれない。 リンクフィールドは以前に定義されたワードへのポインタを含む。このポインタは次に古い隣接するワードへの、相対的な変位かもしれないし、絶対的なアドレスかもしれない。 このコードフィールドポインタは コードを実行するワードのアドレスか、パラメータフィールド内のデータか、プロセッサ直接実行するであろうマシンコードの開始のいずれかになるだろう。ワードを定義するコロンでは、コードフィールドポインタはリターンスタック上の現在の Forth 命令ポインタ(instruction pointer, IP) を保存し、ワードを実行継続するための新たなアドレスを用いてIPをロードするワードを指し示す。これはプロセッサの call/return 命令が行っているのと同様である。
コンパイラの構造
編集IF
and WHILE
といった制御構造である。Forth のすべての制御構造とほとんどすべてのコンパイラはコンパイル時ワードとして実装される。すべての Forth 制御フローワードは、プリミティブなワードBRANCH
や?B
RANCH
(もしfalseなら分岐する)の各種の組み合わせをコンパイルするために、コンパイルの間に実行される。コンパイルの間、データスタックは制御構造のバランシング、ネスティング、ブランチアドレスのバックパッチングをサポートするのに使われる。コード断片
... DUP 6 < IF DROP 5 ELSE 1 - THEN ...は定義の内側では次のような一連にコンパイルされる。
... DUP LIT 6 < ?BRANCH 5 DROP LIT 5 BRANCH 3 LIT 1 - ...
BRANCH
のあとの数のは相対的なジャンプアドレスを表している。LIT
は﹁リテラル﹂数値をデータスタックにプッシュするためのプリミティブなワードである。
コンピレーションステートとインタープリテーションステート
編集:
(コロン) は名前を引数として構文解析し、ディクショナリエントリを作り(記述法はコロン記号で始まりセミコロン記号で終わるので、コロン定義, colon definition)、コンピレーションステートに突入する。インタプリタは ユーザ入力デバイスから空白区切りのワード読み込みを継続する。もしワードが発見されれば、インタプリタはインタープリテーションセマンティクス(interpretation semantics)の代わりに、そのワードに関連付けられたコンピレーションセマンティクス(compilation semantics)を実行する。ワードのデフォルトのコンピレーションセマンティクスは、そのインタープリテーションセマンティクスを現在の定義に追加することである。[15]
ワード;
(セミコロン)は現在の定義を終了し、インタプリテーション状態へと復帰する。これはコンピレーションセマンティクスがデフォルトと異なるワードの一例である。;
とほとんどの制御フローワード、いくつかの他のワードのインタープリテーションセマンティクスは ANS Forth では未定義であり、これはこれらのワードは定義の内部だけで使われなければならず、対話的コマンドラインでは使われないことを意味している。[15]
インタープリタ状態はワード [
(左大括弧) 及び ]
(右大括弧)を用いて手動で変更させることができ、それぞれインタープリテーション状態とコンピレーション状態に突入する。これらのワードはワード LITERAL
ととも使われ、コンピレーションのあいだに値を計算し、現在のコロン定義に計算された値を挿入する。LITERAL
は、データスタック上のそのオブジェクトを配置するために、データスタックからオブジェクトを取り出し、現在のコロン定義にセマンティクスを追加するコンピレーションセマンティクスを持つ。
ANS Forthでは、現在のインタプリタの状態はフラグ STA
TE
から読み取ることができ、コンピレーションステートなら true、そうでなければ false の値がこれに格納されている。このインタプリタの現在の状態による振る舞いの変化によって、いわゆるステートスマートワード(state-smart words)の実装を可能にする。
イミディエイトワード
編集IMMEDIATE
は、最も最近のコロン定義を、そのコンピレーションセマンティクスをそのインタープリテーションセマンティクスに効率的に置き換える、イミディエイトワード(immediate word)としてマークする。[22] イミディエイトワードは通常はコンパイル後ではなくコンピレーションの間に実行されるが、どちらのステートにおいてもプログラマにオーバーライドされることができる。;
はイミディエイトワードの一例である。ANS Forth では、ワードがイミディエイトとしてマークされていても、ワード POST
PONE
は名前を引数としてとり、名前のつけられたワードのコンピレーションセマンティクスを現在の定義に追加する。Forth-83 は別々のワード COMPILE
と [COMPILE]
を定義し、それぞれイミディエイトでないワードとイミディエイトのワードのコンピレーションを強制する。
無名ワードと実行トークン
編集:NONAME
を用いて、次の;
(セミコロン)までの後続のワードをコンパイルし、実行トークン(execution token)をデータスタック上に残す、無名のワードが定義できる。この実行トークンはC言語における関数ポインタと同様にコンパイルされたセマンティクスのための不明瞭なハンドル提供する。
実行トークンは変数に格納できる。ワード EXECUTE
はデータスタックから実行トークンを取り出し、関連づけられたセマンティクスを実行する。ワード COMPILE,
(COMPILE コンマ)は、データスタックから実行トークンを取り出し、関連するセマンティクスを現在の定義に追加する。
ワード '
(tick)は、ワード名を引数としてとりデータスタック上のワードに関連づけられた実行トークンを返す。インタープリテーションステートにおいて、' RANDOM-WORD EXECUT
E
は RANDOM-WORD
と等価である。[23]
ワードの構文解析とコメント
編集:
(colon)、POSTPONE
、'
(tick)と :NONAME
は、データスタックの代わりにユーザからの入力からそれらの引数をとる構文解析ワード(parsing words)の例である。別の例では、コロン定義において、次の右括弧を含む後続のワードを読み込んで無視し、コメントを配置するのに使われる (
(左括弧)がある。同様に、ワード \
(バックスラッシュ)は現在の行の終端まで続くコメントのために使われる。正確にパースするためには、(
(括弧) と \
(バックスラッシュ)は後続のコメント文から空白文字で分けられなければならない。
コードの構造
編集データオブジェクト
編集VARIABLE
初期化されていないものを命名する、one-cell memory location。 VARIABLE
のインスタンスの振る舞いはそのスタック上のアドレスを返す。
CONSTANT
値を命名する(CONSTANT
の引数として指定する)。インスタンスの振る舞いは値を返す。
CREATE
位置を命名する。空間がこの場所に確保されるか、さもなくばこれは文字列か他の初期化された値を格納するためにそれがセットされることができる。インスタンスの振る舞いは、この空間の開始のアドレスを返す。
Forth は、カスタム定義の振る舞いとインスタンスの振る舞いを指定する、新しいアプリケーション特有の定義ワードをプログラマが定義できる機能もまた提供する。円形バッファ、I/Oポート上で命名されたビット、自動的にインデックス化された配列などの例がある。
これらに定義されたデータオブジェクトと同様のワードはスコープにおいてグローバルである。他の言語でローカル変数から提供された関数は、Forth ではデータスタックから提供される(しかし、Forth も真のローカル変数は持っている)。Forth のプログラミングスタイルは他の言語に比べ、ごく少数の名付けられたデータオブジェクトを使う。典型的にはこのようなデータオブジェクトは、たくさんのワードやタスク(マルチタスクの実装においては)によって使われるデータを格納するのに使われる。[25]
Forth はデータタイプの使いかたの整合性を強制しない。値のフェッチおよびストアや他のデータ操作の実行で適切な演算子を使うのは、プログラマの責任である。
プログラミング
編集Forth で書かれたワードは実行可能な形式にコンパイルされる。古典的な indirect threaded 実装は、順に実行されるワードのアドレスのリストをコンパイルする。多くの現代的なシステムは実際のマシンコードを生成する(いくつかの外部ワードの呼び出しと、適当な場所に展開された他者のためのコードを含む)。最適化コンパイラをもつシステムもある。一般的に言えば、Forth プログラムはコンパイルされたバージョンがロードされたとき実行される単独のコマンド(e.g., RUN)でコンパイルされたプログラムのメモリイメージとして保存される。
開発中、プログラマは小さなコード片をそれが開発されたときに実行およびテストするのにインタプリタを使う。そのためほとんどの Forth プログラマは 緩やかなトップダウン設計と、絶え間ないテストと結合によるボトムアップ開発を支持する。[26]
トップダウン設計はたいてい最終的なプログラムを書くためのツールの高レベルなセットとして使われる、「語彙」(vocabularies)へのプログラムの分割である。よく設計された Forth プログラムは自然言語のように読め、ただひとつではない解決策だが、しかし関係する問題を解決するためのツールのセットもまた実装する[27]。
コード例
編集Hello world
編集: HELLO ( -- ) CR ." Hello, world!" ; HELLO <cr> HELLOワード
CR
(Carriage Return) は後続の出力を新しい行の上に表示するようにする。構文解析ワード ."
(dot-quote) はダブルクオートで区切られた文字列を読み、構文解析された文字列が実行時に表示されるように現在の定義にコードを追加する。文字列 Hello, world!
からこの空白文字で区切っているワード ."
は、文字列には含まれていない。これは構文解析器が ."
を Forth ワードとして認識するために必要である。
標準的な Forth システムはインタプリタでもあり、同じ出力は次のコード片を Forth コンソールに入力することで得ることができる。
CR .( Hello, world!)
.(
(dot-paren) は括弧で囲まれた文字列を構文解析し、これを表示するイミディエイトワードである。."
と同様に、Hell
o, world!
から空白文字で区切られた.(
は文字列の一部ではない。
ワード CR
は表示する文字列の前にくる。慣例的に、Forth インタプリタは新規行に出力を開始しない。また、慣例により、インタプリタは直前の行の終端、ok
プロンプトの後でで入力を待つ。他のプログラミング言語で時々そうであるような、Forth の CR
にはバッファをフラッシュする暗黙の動作はない。
コンピレーションステートとインタープリテーションステートの混用
編集Q
を発行するワード EMIT-Q
の定義がある。
: EMIT-Q 81 ( the ASCII value for the character 'Q' ) EMIT ;この定義は
Q
のASCII値(81)を直接を使うことで書かれている。括弧の間の文字列はコメントで、コンパイラに無視される。ワード E
MIT
はデータスタックから値をとり、対応する文字を表示する。
次の EMIT-Q
の再定義は、ワード[
(左大括弧)、]
(右大括弧), CHAR
、LITERAL
をインタプリタステートを一時的に切り替えるために使っており、文字 Q
のAscii値を計算し、コンピレーションステートを返し、計算した値を現在のコロン定義に追加する。
: EMIT-Q [ CHAR Q ] LITERAL EMIT ;構文解析ワード
CHAR
は空白で区切られたワードをパラメータとしてとり、データスタック上のその最初の文字の値を置く。ワード [
CHAR]
は CHAR
のイミディエイトバージョンである。 [
CHAR]
を使って、 EMIT-Q
の定義例は次のように書くことができる。
: EMIT-Q [CHAR] Q EMIT ; \ Emit the single character 'Q'この定義はコメントを書くために
\
(バックスラッシュ) を使っている。
CHAR
と [CHAR]
の両方は ANS Forth では事前に定義される。IMMEDIATE
と POSTPONE
と使って、[CHAR]
はこのように定義することができる。
: [CHAR] CHAR POSTPONE LITERAL ; IMMEDIATE
完全な RC4 暗号プログラム
編集0 VALUE ii 0 VALUE jj CREATE S[] 256 CHARS ALLOT
: ARCFOUR ( c -- x ) ii 1+ DUP TO ii 255 AND ( -- i ) S[] + DUP C@ ( -- 'S[i] S[i] ) DUP jj + 255 AND DUP TO jj ( -- 'S[i] S[i] j ) S[] + DUP C@ >R ( -- 'S[i] S[i] 'S[j] ) OVER SWAP C! ( -- 'S[i] S[i] ) R@ ROT C! ( -- S[i] ) R> + ( -- S[i]+S[j] ) 255 AND S[] + C@ ( -- c x ) XOR ;
: ARCFOUR-INIT ( key len -- ) 256 MIN LOCALS| len key | 256 0 DO I S[] I + C! LOOP 0 TO jj 256 0 DO ( key len -- ) key I len MOD + C@ S[] I + C@ + jj + 255 AND TO jj S[] I + DUP C@ SWAP ( c1 addr1 ) S[] jj + DUP C@ ( c1 addr1 addr2 c2 ) ROT C! C! LOOP 0 TO ii 0 TO jj ;これはこのコードを検証する多くのテストのひとつである。
CREATE KEY: 64 CHARS ALLOT
: !KEY ( c1 c2 ... cn n—store the specified key of length n ) DUP 63 U> ABORT" key too long (<64)" DUP KEY: C! KEY: + KEY: 1+ SWAP ?DO I C! -1 +LOOP ; HEX 61 8A 63 D2 FB 5 !KEY
KEY: COUNT ARCFOUR-INIT
CR DC ARCFOUR 2 .R SPACE EE ARCFOUR 2 .R SPACE 4C ARCFOUR 2 .R SPACE F9 ARCFOUR 2 .R SPACE 2C ARCFOUR 2 .R
CR .( Should be: F1 38 29 C9 DE )
実装
編集Forth 仮想マシンは実装が単純で規格のリファレンス実装を持たないため、大量の言語実装が存在する。標準的な各種デスクトップコンピュータシステム(POSIX, Microsoft Windows, Mac OS X)をサポートしていることに加え、これらの多くの Forth システムは各種の組み込みシステムもまた対象としている。1994年の ANS Forth 規格に準拠するさらに有名ないくつかのシステムが列挙する。
- Gforth - GNUプロジェクトによる移植性の高い ANS Forth 実装
- Forth Inc. - Forth の開発者たちによって設立され、デスクトップ向け(SwiftForth)と組み込み向け(SwiftX) ANS Forth ソリューションを販売している
- MPE Ltd. - 高度に最適化されたデスクトップ (VFX) と 組み込み ANS FOrth コンパイラ
- Open Firmware - ANS Forh に準拠したブートローダと BIOS の規格
- Freely available implementations
- Commercial implementations
- プラットフォームごとにまとめられたより最新の一覧は Forth systems
FORTHに類するもの
編集関連項目
編集脚注
編集OPERATOR
or within a private task."
(26)^ Brodie, Leo (1984) (paperback). Thinking Forth. Prentice-Hall. ISBN 0-13-917568-7
(27)^ The classic washing machine example describes the process of creating a vocabulary to naturally represent the problem domain in a readable way.
参考文献
編集- Brodie, Leo (2007). Marcel Hendrix. ed (Online book). Starting Forth. Marlin Ouverson (Web edition ed.). FORTH, Inc. 2007年9月29日閲覧。
- Brodie, Leo (2004). Bernd Paysan. ed (PDF Online book). Thinking Forth. ISBN 0-9764587-0-5 2008年9月15日閲覧。
- Conklin, Edward K.; Elizabeth D. Rather et al. (8 September 2007) (paperback). Forth Programmer's Handbook (3rd ed.). BookSurge Publishing. pp. 274. ISBN 1-4196-7549-4
- Rather, Elizabeth D. (spiral bound). Forth Application Techniques. Forth Inc.. pp. 158. ISBN 0-9662156-1-3
- Pelc, Stephen F. (spiral bound). Programming Forth. MicroProcessor Engineering Ltd. pp. 188
- Kelly, Mahlon G.; Nicholas Spies. FORTH: A Text and Reference. Prentice-Hall. ISBN 0-13-326331-2
- Koopman, Jr, Philip J. (1989) (hardcover). Stack Computers: The New Wave. Ellis Horwood Limited. ISBN 0-7458-0418-7
- Pountain, Dick (1987) (paperback). Object-oriented Forth: Implementation of Data Structures. Harcourt Brace Jovanovich. ISBN 0-12-563570-2
- Payne, William (19 December 1990). Embedded Controller Forth for the 8051 Family. Elsevier. pp. 528. ISBN 978-0125475709
外部リンク
編集- Forth Interest Group (FIG)
- Gforth(GNUによるフリーのForth処理系)
- comp.lang.forth - Usenet newsgroup with active Forth discussion
- Forth Chips Page — Forth in hardware
- A Beginner's Guide to Forth by J.V. Noble
- Forth Links
- Various Forth variants and ANSI docs
- Starting FORTH online version of the book Starting FORTH by Leo Brodie published in 1981.
- Thinking Forth Project includes the seminal (but out of print) book Thinking Forth by Leo Brodie published in 1984.
- Computerworld Interview with Charles H. Moore on Forth
- FORTH Retro Podcast in two parts (part I, part II)
- Forth - DMOZ(英語)
- comp.lang.forth - 活発な Forth の議論のあるUsenetニュースグループ
- Forth Chips Page — ハードウェアにおける Forth
- A Beginner's Guide to Forth by J.V. Noble
- Forth Links
- Various Forth variants and ANSI docs
- Starting FORTH Leo Brodie により 1981年に出版された FORTH 入門書のオンラインバージョン
- Thinking Forth Project 1984年に Leo Brodie により出版された独創的な (ただし絶版) 書籍 Thinking Forth を含む
- Computerworld Interview with Charles H. Moore on Forth
- FORTH Retro Podcast in two parts (part I, part II)
- Forth - DMOZ(英語)