不完全にしてかなり言葉足らずな比較プログラミング言語学 - 西尾泰和のはてなダイアリー について PostScript とか Forth とかの場合
処理系依存の部分は PostScript は Ghostscript、Forth は Gforth を前提に。
if(x=0)
- PostScript
- 代入は def や store、比較は eq で全く違う。
- Forth
- 代入は ! や to、比較は = で全く違う。
関数へのポインタ
- PostScript
- PostScript で関数に相当する executable array はファーストクラスのオブジェクトだと思う。
- Forth
- execution token という関数ポインタのようなものがある。
関数呼び出しの括弧
元記事にあるので略
整数演算の結果が int の範囲を超えたときに自動的に表現力の大きい型に変更する
- PostScript
- 加減乗算で整数演算の結果が int の範囲を超えると浮動小数点数になる。ビット演算は整数のまま値が捨てられるなどする
- Forth
- 範囲を越えても int のまま。
ところで C のビット演算で結果が int で表現可能な範囲を越えた場合の挙動って、未定義でしたっけ、不定でしたっけ。
変数への再代入を許すかどうか
- PostScript
- 許す
- Forth
- Gforth や bigFORTH だと 12 constant a などとして定数を定義できるけど、移植性があるかどうかは知らない
演算子の優先順位について
- PostScript
- 無い
- Forth
- 無い
ループ
インデントと実際の構造の不一致
- PostScript
- インデントは関係ない。条件分岐やループのブロックは {} で囲む。
- Forth
- インデントは関係ない。条件分岐やループのブロックは if ... then、do ... loop のように閉じる。
文字列オブジェクトは破壊的に変更できるか?
- PostScript
- はい
- Forth
- 文字列オブジェクト? 文字列が入っているメモリのアドレスのこと?
文字列と数値を自動変換するか?
- PostScript
- しない
- Forth
- しない
1/2は何になる?
- PostScript
- 1 2 div は 0.5、1 2 idiv は 0
- Forth
オブジェクト指向
- PostScript
- 無い。欲しければ自分で作ること
- Forth
- Gforth には オブジェクト指向プログラミングパッケージが 3 個ある
真偽値
- PostScript
- 真と偽の値はこちらが用意する。それ以外を条件式に入れたら型エラーだぞ派
- Forth
- 0がfalse、それ以外は真だよ派
スコープ
- Postscript
- 動的スコープだよ派
- Forth
- 静的スコープだよ、だって動的スコープとか大変じゃん派
配列の範囲外アクセス
- PostScript
- 例外を投げる
- Forth
- 死ぬかも知れない