プログラミング言語「Forth」

Forth
用途趣味・実用
実行様々
日本語
対応環境様々
入手様々

「オレは他のヤツらとは一味違うぜ」

多くのプログラミング言語、例えば BASIC では、2+3 を

   2+3   

と書きます。ところが Forth (フォース) 言語では、

   2 3 +   

と書きます。なんだそりゃ? しかし、ここが Forth の Forth らしいところ なんです。

BASIC のシステムは、「2+3」という全体を見てから 「そうか、2 と 3 を足したいんだな」と判断して、それから実行します。 つまり、その部分を全部解読してからでないと処理が始まりませんし、 カッコなんかがあってややこしい計算になると、それだけでも時間がかかってしまいます。

それに対して、Forth はスタックというしくみを使っています。 スタックは、「ストッキング」のようなものです。そう、女性が履く あの「ストッキング」です。Forth の処理システムは、前から順番に プログラムを見ていって、「2」に出くわすと、とりあえず「2」という数を 「ボール」に書いて「ストッキング」に放り込みます。次に読み進めると 「3」が出てくるので、「ボール」に「3」と書いて「ストッキング」に放り込みます。 次に「+」に出くわすと、これ数ではないので、何かの命令だな、と判断して、 手持ちの「辞書」を見ます。すると、「ストッキング」の中身を 上から 2 つ取り出して足しなさいと書いてあります。 「ストッキング」に手を突っ込むと、まず「3」が出てきて 次に「2」が出てきますね? これを足すと「5」になります。 そこで新しい「ボール」に「5」と書いて、また「ストッキング」に放り込みます。

というわけで、順番に見ていくので、BASIC よりは仕事に取り掛かるのが 早いことになりますが、他にも、Forth では上で出てきた「辞書」に 自分で書き足すことができます。それも、他のシステムのように C 言語を 使わないといけないのではなく、Forth のプログラムのかたちで 書き足すことができるのです。このため、難しい計算でも、一度「辞書」に そのやり方を書き加えておいて、簡単に計算できるようになります。

現在では、Forth に日本語を導入した Mind という 言語もあります。これを使うと先ほどのプログラムは

   2と 3を 足す   

となります。まさか、これを見て「難しそう」と思う人はいないでしょうね?

pForth を使ってみよう

Forth にもいろいろな種類が出回っていますが、無償で入手できるものも多くあります。 ここでは、 pForth の MS-DOS 版を紹介します。

MS-DOS 版は、pfthpc19.zip というパッケージに入っているので、 これをダウンロードして、インストールしたいディレクトリに解凍します。これで OK です。

インストールしたディレクトリに pForth.exe というファイルがあるので、 これを実行します。すると、こんなメッセージが出てきます。

   PForth V19                                       
   pForth loading dictionary from file pforth.dic   
        File format version is 7                    
        Name space size = 120000                    
        Code space size = 300000                    
        Entry Point     = 0                         
   Begin AUTO.INIT ------                           

これで準備完了です。さっきの「2+3」をやってみましょう。

   2 3 +   

と入力します。それぞれの間にスペースを忘れずに入れてください。 くっつけると、1 つの言葉だと思われてしまいます。「2 3 +」と打ち込んで、 Enter……すると、

      ok         
   Stack<10> 5   

と表示されます。"ok" は「ここまではちゃんと終わったよ」という意味で、 その次の行にあるのが、現在のスタック、さっきのたとえで言えば 「ストッキング」の様子です。「5」とあるので、「5」と書かれた「ボール」が あることを示しています。pForth ではこのようにスタックの様子が毎回報告されるので 「やー、計算完了」と思ってしまいますが、すべての Forth システムで そうだというわけはありません。その場合は、「.」という「言葉」を 使います。ピリオド、それから Enter。すると、

   5    ok       
   Stack<10>   

と表示されます。まずスタックにあった「5」が表示されて、 完了を示す「ok」。それからスタックの中身が出ますが、 何もなくなってしまいました。つまり、Forth 風にいうと、「.」という 「言葉」は、「スタックから 1 つ数をとってきて表示する」という機能を 持っているわけです。

もすこしヤヤコシイことをやると、「(2+3)×4」を計算して表示するには 「2 3 + 4 * .」と実行します。「*」は「かける」の意味です。 よく分からん! と思ったら、1 つうつ度に Enter を押してみてください。 「2」をうって、Enter、「3」をうって Enter、「+」で Enter……という風に。 表示されるスタックの内容を見ると、たしかに「2+3」をやって、 結果に 4 をかけているのがわかると思います。

Forth の醍醐味

最初は独特のやり方に戸惑う Forth ですが、慣れてしまうとあら不思議、 ちょっとややこしいことも簡単にできるようになります。一見やりにくそうな スタックの仕組みも、住めば都でけっこう使いやすいことに気づくはずです。 スタックの考え方は今でもあちこちで使われていて、Java の実行環境 (仮想マシン) が スタックを使っていたりするので、スタックの考え方を理解しておくと役立ちます。

そうそう、考案者のムーア氏は天文台職員だったというのも、 なんとなく (イメージ的に) いい感じがしませんか?

Forth 関係の主なサイト

Forth Interest Group
アメリカにある Forth のユーザー団体です。Forth の 標準規格である ANS FORTH のドラフト仕様や、各種 Forth コンパイラの 情報があります。
pForth
ANS 規格を基にした Forth 処理システム「pForth」をダウンロードできます。
pForth
用途趣味
実行インタプリタ
日本語×
対応環境Mac/MS-DOS/Amiga/Unix/他
入手無償
PocketForth
Mac 用の Forth。Toolbox をすべて利用できるという特徴を持ちながら、 Forth ならではの身軽さもそのままです。英語ですが、日本語のマニュアルも入手できるようです。 [Thanks to Umi Hikari さん]
PocketForth
用途汎用
実行インタプリタ?
日本語?
対応環境Mac
入手無償
Quartus Forth
Palm デバイス用の Forth。Palm OSのAPIを数多くサポートし、Palmデバイス上で PRCファイルを作成することも可能です。
Quartus Forth
用途汎用
実行コンパイラ
日本語?
対応環境Palm
入手シェアウェア (試用版あり)
ちどりや
Macintosh で利用できる、Forth を基にしたシステムを紹介しています。
Open Firmware
Mac などで使われている、オープン仕様の起動システム。 ANS Forth で記述されています。わかりやすさを保ちながら低水準のプログラミングにも 使えるという、Forth の長所の好例だといえると思います。 [Thanks to okuoku さん]

このほかにもご存知の方は、ご一報ください



Presented by 夏鰯 <sardine@toyfish.net>