[ 捕捉確認済アンテナ ] 日記観察 *BSD Diary Links わっちりんく(す) はこんだらウォッチ 天野アンテナ HNN日記バード しっぽあんてな しぐなるぽ〜と |
|
Win32 用の FORTH32W と Unix 用の pfe (Portable Forth Environment) を探して来てそれぞれの環境に仕込む。 前者は作者が日本人で、Forth に関する親切なチュートリアルがついていたのでかなり参考になった。
うーん、シンプルでコンパクトではあるものの、エレガントさでは LISP にかなわず、逆にマシンをがりがり Hack するぜ、的雰囲気。
変数とは ユーザー用に 辞書内に (*1) 割り当てられた領域を指すアドレス値をスタックに積む命令である、とか、 文字列の扱いが非常に軽視されている、とか。 (*2)
結局整数以外は命令である、という文法であるため、型という概念やセンダ・レシーバ・メッセージの区別を採り入れにくいです。
いや、Object 型(Delphi)っつうか id 型(objc)だけがあればいいんですがね。
という訳で、 こんな風に書けると嬉しいな、という夢を妄想してみるテスト。 (*3)
variable aWindow \ --> aWindow という入れ物を宣言 Window @ \ --> Window という入れ物に入っているハンドル値をスタックに積む new \ --> ハンドルを参照してオブジェクトに「インスタンスを生成してそのハンドルをスタックに積め」というメッセージを送信する aWindow \ --> aWindow という入れ物のポインタをスタックに積む ! \ --> aWindow という入れ物に Window クラスの新しいインスタンスオブジェクトへのハンドルを代入
という感じ? もっとそれっぽく書くと
variable aWindow variable aBotton "Push Me!" :lambda "Pushed" print exit ; Botton @ new aBotton ! 5 5 30 20 Rectangle @ new "Hello world" Window @ new aWindow ! aBotton aWindow @ component aWindow @ show mainloop
なんか雰囲気でてきた?
コードの見た目が
パラメータ
パラメータ
レシーバ メッセージ
というL字型になるみたい。慣れれば読みやすく感じるようになるかも。
もともとの Foth が持つ「数字だけ特別扱い」という制限をまず打破したい。
最低限必要なリテラル表現は数字、文字列、リスト、ハッシュくらいか。
12 5 + . \ --> 17 "Hello" " " "world" + + . \ --> "Hello world" [ 12 5 "Hello" "world" ] . \ --> ( 12, 5, "Hello", "world" ) { "Hello" 2 "world" 15 } . \ --> { "Hello" => 12, "world" => 5 }
あう、リストとハッシュはワード表現になってしまった。でも
variable anObject String @ new anObject ! anObject @ . \ --> ""
とか、
"12" to_i 5 + . \ --> 17 12 to_s "5" + . \ --> "125" 2 1 [ "Hello" ] [ "world" ] + at at . \ --> "r"
みたいなことはやりたいですねぇ。
新規クラス (*1) 定義のためのスキームはどうするか、ですよね。
class EncodedString \ --> クラス用の辞書に対して宣言 String @ subclass EncodedString ! [ "encoding" ] EncodedString @ instanceVariable :method EncodedString setEncoding ( str -- self ) >sender \ --> センダのスタックからとって来る encoding ! self @ sender> \ --> センダのスタックに返す ;
オブジェクトの中にはローカルなスタックがあり、 センダのスタックにも制限付きでアクセスできるという想定。
メソッドの最後で必ず作用後のselfを返すような作りにしておくと、
パラメータ2
パラメータ1
レシーバ メッセージ1 メッセージ2
みたいにメッセージを連鎖できるかも。 でもやっぱりカスケード式のようなのもあると便利なのかな?
5年くらい前に RPN 電卓を作ったんだった。
プラットフォームは PC-9801n で、プロトタイピングに jgawk 、実装には LSI-C86 試食版というありがちな組み合せ。
ソースはとっくにどっかいってるけど。
「UNIX プログラミング環境」の第8章、hoc の開発のところ。
再々々々挑戦くらい?
UNIX用パッケージを落としてみた。 マニュアルをちょりっとだけ読んでみる。
送り仮名はパース時にオミットされるとか、全角でも半角でも同じとみなされるとか。
うーん、気持ち悪いのは、単なる慣れの問題なんだろうか。
Sophia Snowden ってだれだろう?
「CFチェック」 カードの認識状況を表示したり、認識後に指定したアプリを実行したりするソフト。 http://homepage2.nifty.com/snow_home/labo.html
あざといトコ狙ってるなあ…、絵柄がモロ吉崎系だし…、とか言いつつ読んでしまう弱さ。(ぉ
8080 stream tcp nowait nobody /usr/bin/gs gs -dNODISPLAY -q /home/pugo/src/postscript/pshttpd/pshttpd.ps
爆笑。
一瞬 printcap かと思ったよ。
「不死身のマッスルマン・ドリアンの似顔絵を描いて送ろう!」
いいんですか、それで本当にいいんですか編集さん・・・。
「PostScript プログラム・デザイン」をげっちゅー。
B-Free プロジェクトの PostScript サブセットなコマンドインタプリタ Mitten のソースを読んでいるところ。
全部で 1900 行弱とコンパクトながら (*1) マーク&スイープ方式の GC を装備していたりしてあなどれない。 ライセンスは GPL なので FreeBSD 汎用 (*2) なスクリプトに改変してみようかなとも思ったり。
たかのさんのパッチを取り込んだ版をリリース。
下準備が済んだ。あともう少しで DocumentRoot の機能も追加できそう。
ああっ、 欲しくなる電波 が…。
あうー、「文芸的プログラミング」もまだちゃんと読んでない…。METAFONT の章だけでも読まなきゃ。
以上、7日分です。
[Top] [PocketBSD] [シュミプロ] [ぽめれちょう掲示板] [きまたま日記] [最新版] [一覧] [戻る]
このページはTsDiarySystemを用いて生成されています。
Cake (SHIMADA Keiki)