Forth (言語)について詳しく解説

導入

Forth は、1960 年代に Charles H. Moore によって発見された (彼が好んで言うように) 非典型的な対話型プログラミング言語です。

 Forth (言語)について詳しく解説

歴史的

1958 年、衛星軌道の計算を担当していたチャールズ ムーアという若いコンピューター科学者は、日々の作業を容易にするために コマンド インタプリタの形をしたツールボックスの構築に着手しました。このインタプリタは年々改良され、ホスト マシンから独立しています。 1968 年に、それは Forth という名前になり、1970 年には、「対話型コンピューティングのための言語」として最初の出版物の主題となるのに十分に成熟しました。

1971 年に最初の主要なアプリケーションが登場しました。ムーアは Forth を使用して、2 台の 16 ビット ミニコンピューターでキット ピーク電波望遠鏡 (アリゾナ) を制御するソフトウェアを開発しました。すぐに、2 番目の Forthプログラマーとなったエリザベス・ラザーがそこに加わりました。その性能と使用の柔軟性により、このアプリケーションはすぐに他の天文台の関心を引き、1976 年に Forth は国際天文学連合によって標準として採用されました。

1973 年に Kitt Peak のソフトウェアを最初に最新化した後、Moore と Rather はこの言語とそのアプリケーションを促進するために Forth, Inc. を設立しました。 1976 年に、8 ビット マイクロプロセッサ上で実行可能な最初のバージョンが MicroFORTH という名前で入手可能になりました。

1978 年に、できるだけ多くのプロセッサ上で言語の「パブリック ドメイン」バージョンを推進し、ジャーナル「Forth Dimensions 」を発行するために、協会である Forth Interest Group (FIG) が設立されました。 MicroFORTHとは一味違うFIG-FORTHは言語の普及に大きく貢献します。

誰もが望むように変更できる言語の標準化の必要性が明らかになりました。最初の試み (FORTH77) により、最初に広く配布された標準である FORTH79 が誕生しました。この標準は 4 年後に FORTH83 に進化しましたが、2 つのバージョン間の非互換性により移植性の問題が発生し、FORTH プログラマ コミュニティの分裂の原因となりました。

原則

データスタック

この言語の重要な機能は、Forth プログラムの構成要素であるワード間で引数を渡すためにデータ スタックを使用することです。

簡単な例: 式2+3*4は、逆ポーランド表記では2 3 4 * +として変換されます。

この一連の単語はデータ スタックに作用し、その効果は次のとおりです。

  • 値を 2、3、4 と順に積み重ねます
  • 次に、スタックの一番上の 2 つの数字 (3 と 4) を積 12 に置き換えます。
  • そして最後に、スタックの一番上の 2 つの数字 (2 と 12) をその合計の 14 に置き換えます。

+、*、DUP (スタックの最上位の要素を複製する)、SWAP (最上位の 2 つの要素を交換する) などの事前定義された言語単語から。プログラマは独自の単語を定義してアプリケーションの語彙を構築し、それを再利用します。

 : ダップスクエア * ; (SQUARE の定義) 11 SQUARE (スタックの先頭で 121 を取得します): CUBE DUP SQUARE *; (定義内での SQUARE の使用) 2 CUBE (8 を返す)

スタックを使用することの重要な結果は、ローカル変数名が事実上不要になることです。

 Forth (言語)について詳しく解説

リターンパイル

ほとんどすべての言語と同様に、Forth はスタックを使用して、現在実行中のサブルーチンの戻りアドレスを保存します。ここでの独自性は、データ スタックとリターン スタックの転送を可能にする 2 つの演算子を使用して、主にデータの一時保存のためにこのスタックをプログラマが利用できるようにすることです。

サブルーチン

Forth ワードは、他の言語のサブルーチン、関数、またはプロシージャに相当します。ただし、ムーア氏は単語を C スタイルの関数としてではなく、略語として説明しています。Forth のキーワードは因数分解、つまり、アプリケーションを 1 ~ 2 行に基づいて定義する小さな単語に分割することです。

Forth の「単語」は「コンパイル」、つまり実行可能な形式に変換されて単語辞書に追加されます。実行可能形式は、使用するコンパイラ/インタプリタによって異なります。たとえば、マシンコードまたはバイトコードの直接生成です (多くの中間バリアントがあります)。

 Forth (言語)について詳しく解説

その他の機能

GOTO文はありません。 IF…ELSE…THEN 命令の特定の構文により、構造化プログラミングでは、絶対に必要な場合に追加のブール変数を導入することになる「n+1/2 反復」の問題をエレガントに解決できます。 GOTOは避けたい。

「=」代入演算子はありません。変数はデータではなく、プログラマによって明示的に割り当てられたデータを含むメモリ領域へのポインタです。データ転送は 2 つの演算子 @ (フェッチ) と ! によって行われます。 (store) は、アセンブラの LDA (Load Accumulator) 命令と STA (Store Accumulator) 命令に対応し、ここでのスタックはアキュムレータの役割を果たします。

 変数トトトト3! (totoの宣言と初期化) VARIABLE titi (titiの宣言) toto @titi! (totoをtitiにコピー)

foo を呼び出すと、foo 変数のアドレスがスタックにプッシュされます。 @ は、このアドレスを foo に含まれる値、つまり 3 に置き換えます。次に、titi の呼び出しにより、titi のアドレスがスタックにプッシュされます。この時点では、スタックには 2 つの値 3 と adr(titi) が含まれています。ついに、 !メモリのアドレス titi に 3 を書き込み、スタックを空のままにします。

 Forth (言語)について詳しく解説
  1. فورث (لغة برمجة) – arabe
  2. Форт (мова праграмавання) – biélorusse
  3. Forth – bulgare
  4. Forth – catalan
  5. Forth (programovací jazyk) – tchèque
  6. Forth (Programmiersprache) – allemand

Forth (言語)について詳しく解説・関連動画

サイエンス・ハブ

知識の扉を開け、世界を変える。