Forth
出典: フリー百科事典『ウィキペディア(Wikipedia)』
| Forth | |
|---|---|
| パラダイム | 手続き型、スタック指向 |
| 登場時期 | 1970年代 |
| 設計者 | チャールズ・ムーア |
| 型付け | なし |
| 主な処理系 | Forth, Inc., GNU Forth, MPE |
| 影響を受けた言語 | バロースの大型システム、LISP, APL |
| 影響を与えた言語 | PostScript[1]、Factor、Joy, Cat |
Forthは、1968年アメリカのチャールズ・ムーアによって開発された、逐次型の手続き型言語。仮想スタックマシンの概念を用いており、主として制御用に使われる。
目次 |
[編集] 概要
Forthはスタックの概念をうまく利用しており、演算は逆ポーランド記法により記述される。このため構文解析が極めて単純となり、プログラムおよび処理系が小さくて済む。これは、機器組み込み用プログラムでは有利な特徴である。
また、ルーチンは「ワード」単位で記述され、コンパイルされる。これらの「ワード」を集積して「ディクショナリ」を形成する。一般的なFORTH処理系におけるプログラミングは、インタプリタ上でのワード作成の積み重ねであり、対話的に行える。開発中でも部分的な処理を動かしてのテストがやりやすく、それらを適宜組み合わせてのテストも容易である。
以上の特徴より、組み込み分野やロボット制御などの分野でよく利用されている。ただし、馴れていない者にはプログラムが読みにくいものとなる傾向が強い。
[編集] 由来
1960年代、チャールス・ムーアはソフトウェア開発のために自家製のソフトウェアを作成・改造を続けていたが、1968年、家具と絨毯を扱う企業に雇われた際、このソフトウェアをミニコン上でFORTRANを使って書き直したものがForthの原型である、という。ムーアは、アセンブラ・FORTRAN・BASICに続く4番目の言語という意味で、このソフトウェアに「fourth」と名付けるつもりだったが、このミニコンで取り扱えるファイル名は最大5文字であったため「FORTH」という名になった。その後、1971年にアメリカ国立電波天文台の制御用ソフト作成において、ムーアはFORTHを完成させた。
Forthにはいくつかの言語仕様があり、有名なものとしては1979年に制定されたForth-79、83年に制定されたForth-83、ISO/IEC 15145:1997(E)のベースとなった ANS Forth (ANSI INCITS 215-1994 (R2001))などがある。
[編集] 標準規格
- 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)
[編集] FORTH文法と逆ポーランド記法
FORTHの演算は、スタックを用いた逆ポーランド記法をとっている。大まかには、数値を記述することはスタック上に数値を置くことを示し、演算子はスタック上に置かれた値を1つ、または複数取って演算し、演算結果をスタックに戻すことを行う。
一般のFORTH処理系はインタプリタとなっており、端末への入力と表示で、演算を実行し確かめることができる。
4 5 + .
これは、スタックに4を積み、さらに5を積み、スタック上の2つの値を取り出して加算、その結果をスタックに戻し、スタックの値を表示する操作を示している。
上記のように入力してエンター(リターン)を打鍵すると、画面上には下記のように結果が表示される。
4 5 + . 9 ok
[編集] FORTHにおけるプログラミング
通常、FORTH処理系にはインタプリタだけでなくコンパイラも含まれており、前節のような数値や演算子の記述をまとめて1つの「ワード」にコンパイルすることができる。
コンパイルと言っても、文頭にコロン、その後にワードの名称を置き、そこから一連の式を並べておいて、文末にセミコロンを付加するだけでよい。
例えば、前述の式をfooという語(ワード)としてコンパイルするには、以下の通り記述する。記述法はコロン記号で始まりセミコロン記号で終わるので、「コロン定義」と呼ばれる。
: foo 4 5 + . ;
コンパイルすることにより、FORTHの辞書(ディクショナリ)に、この語(ワード)が登録されることになる(この場合はfooが登録される)。
実のところ、FORTHでは「+」や「.」などの演算子や出力機能などの全てがワードである。こういった組み込み済みのワードと、ユーザが後からコロン定義(コンパイラ)で追加したワードと、2つの間に本質的な差異はない。コンパイルしたワードはただちに環境に組み込まれ、インタプリタより単独で実行できるようになる。つまり、そのFORTH処理系を拡張するのである。このような点より、FORTHは自己拡張性が高いと云われる。
プログラムの開発においては、処理毎に区切ってワードとして順次構築していくので、注意深く進めていけば自然ときれいに構造化されることになる。ワードは単独で実行できるため、部分に分けてのデバッグも容易である。また、それらのワードを使ってテスト用の処理(ワード)を気軽に作成して実行・テストできる。
[編集] FORTHに類するもの
- PostScriptはForthと同じくスタック言語であり、演算も逆ポーランド記法を用いるため言語仕様がForthによく似ている。イラストレータなどのソフトを使って複雑な画像操作を指定すると、出力側でスタックオーバーなどのエラーが発生することがある。
- Java仮想マシン仕様はForth仮想マシンの仕様をベースにしている。
- Forthをベースにしてワードを日本語で記述可能にした言語としてMindがある
- Forthをベースに、オブジェクト指向に改良したMac OS向けの開発システムMopsも有名。オブジェクト指向とマルチスレッド対応のPalo Alto Shipping Co.製のMach1(まっはわん)がある。
- そもそもオブジェクト指向の基本アイデアはForthから生まれたという説がある。Forthではグローバル変数を必要とせず、完全に他から独立したワードが定義可能である。
- サン・マイクロシステムズ社が考案・提唱したOpen FirmwareはForthがベースである。OpenBootROM(同社製プラットフォームのファームウェア)、およびMacintoshの起動用ファームウェアはOpen Firmware仕様を実装したものである。
- Forthを元にしたコマンド言語であるFiclはFreeBSDのブートローダの実装に使われている。
- TeleScript General Magic社が開発・提供していた次世代エージェント指向の通信用プログラム言語。Forthアーキテクチャで実装されていた。
- インテル 80x87 浮動小数演算コプロセッサのアーキテクチャはForthベースであった。コプロセッサ内部に独立したスタックがあり、ネイティブな命令コードにはそのスタック操作が多く含まれている。
- 1985年ごろ、服飾メーカーとして知られるJUN(株式会社ジュン)が開発したコンピュータグラフィックシステム4D-Boxのオペレーション言語0DLはForthであった。
[編集] 脚注
- ^ (1985年) “First”, PostScript Language - Tutorial and Cookbook (paperback), Adobe Systems Inc., First (English), Addison-Wesley, 243. ISBN 0-201-10179-3. “The PostScript language contains elements of many programming languages, but most closely resembles the Forth language.”
[編集] 関連項目
[編集] 外部リンク
- Forth Interest Group (FIG)
- Gforth(GNUによるフリーのForth処理系)

