ロード トップ 最近 履歴 差分 逆検索 検索 ヘルプ 編集

[logo] Forth


よく知りませんが,PostScriptなんかの元になった手続き型言語らしいです.

構文解析が不要なので実装が小さくて済むので,組込み用途やブートローダに使われたりする.

ふ〜ん,スタック,ワード(辞書)ってのがキーワードらしい.


リテラル(オペランド)だったらオペランドスタックにpushして,オペレータ (オペコード)だったらスタックからオペランドをpopしてきて実行,結果を pushする.オペレータを自分で定義していけるところがForthの面白そうな ところ.このオペレータの定義が連想記憶されているのが辞書と考えればいいと.

普通の言語だと、手続きにシグネチャ(っていうんでしたよね。 引数や返り値の数/型/名/roleとかのことを)ってものがあるんで、 それのバリエーションを醸し出す方法を言語に内包しないと いけないわけですが、Forth系だとなんでもかんでもStackで 話が済んでしまうんで、オペレータそのものを"呼ぶ"だけで 全部オッケーという感じ。引数(??)を面倒見るのは オペレータ側の仕事であって言語コアの仕事じゃない。

具体的に言えば、実際に工夫が必要な所は 辞書に登録されたモノが手続き実体 (PostScriptなら実行可能配列と呼ぶ) であるか否かによって処理を分岐する、という所だけ(^^; -戯


スタック型言語(?)ってJavaバイトコードしかしらないんだけど, コード追うのが大変.レジスタマシン?アセンブラなら(x86なんて特に レジスタ数少ないし),記憶しておくことが少ないので楽だけど, スタックマシンだとスタックを一々図に書きながらじゃないと追えない. う〜ん,単に慣れの問題なのかな?
もちろんレジスタマシンでもスタックを使うから,そこは図を書きながら 追ってますが.

ある有名なプログラマがプログラマに一番必要な能力は何かと問われたとき 「記憶力」と答えたという話を聞いたことがあります. 手続き型言語だとそうなのかなという気がしますね. 必要な情報を局所にまとめようというのが,構造化,オブジェクト指向化の 流れだとしたら,いまでも有効な話なのかは疑問ですが.

ただ私の知ってるスーパプログラマな先輩は大学を卒業してもう何年にもなるのに 作っていたCコンパイラ(gcc]]より全然小さいですが)の内部を完全に覚えていますね. 昔書いたプログラムは他人が書いたプログラムってのは,まだまだ素人プログラマ な証拠なのかもしれない(^^;)

プログラマに必要という意味での"記憶力"って奴は、普通の意味でのソレというよりも、 なんというか印象力とでも呼ぶべきものなんじゃないかなあ。 自分が書いているコードの各部を、いかに劇的に印象深かった事柄として じぶんの脳に焼き付けているか、という意味。勿論焼きつけることそのものは 役に立つわけじゃなくて、それだけ内容の濃いコードを書いたことの証 というか裏返しという意味で、価値があるんだと思います。
一方、 うねりコード なんぞを書きまくっている奴は、それこそ自分のコードに持つ印象が 薄かったりするんじゃないかなと邪推します。 -戯

あと、人間様が(も)書く言語として使われるスタック言語ならば、 言語仕様に構造化を導入することで理解しやすくすると思われます。 PostScript(と、ばぶばぶ(笑))ならば{}で括ることによる構造化をします。 で、{}の中には、理解可能な範囲の十分少ない命令しか、書いちゃいけないって ことなんだと思います。その範囲が言語ごとに違う(スタック言語系だと かなり少ない。多分10も書いたら多いほうだと思うべきかと。Cなら100くらいまでは 許せるかな、とか)というのが、つまり言語の個性なんじゃないかなあ。


MindStorms界隈の話

Forthって組込み分野で強いそうですが.いやはや.


TRON界隈の話


ブートローダ界隈の話


AgendaというかFLTK界隈の話
(最終更新 Tue Aug 14 09:52:00 2007)