ふりぽけ日記 (2000年12月中旬)

[ 捕捉確認済アンテナ ]
日記観察
*BSD Diary Links
わっちりんく(す)
はこんだらウォッチ
天野アンテナ
HNN日記バード
しっぽあんてな
しぐなるぽ〜と
  • 99:システムバックアップをとる
  • 90:mhttpd のテスト&デバッグ
  • 10:過去日記置場

2000.12.10 (Sun)

@ Forth の研究

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字型になるみたい。慣れれば読みやすく感じるようになるかも。

-----
*1:不正確だったので訂正。(2000.12.12)
*2:str-ptr と str-len をスタックに積んでワードを実行すると新しい str-ptr' と str-len' が返され、みたいな世界。
*3:舌足らずだったため加筆。(2000.12.12)


2000.12.11 (Mon)

@ Forth (妄想の)続き

もともとの 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

みたいにメッセージを連鎖できるかも。 でもやっぱりカスケード式のようなのもあると便利なのかな?

-----
*1:もちろん、クラスはメタクラスのインスタンスである普通のオブジェクト。


2000.12.12 (Tue)

@ そういえば

5年くらい前に RPN 電卓を作ったんだった。

プラットフォームは PC-9801n で、プロトタイピングに jgawk 、実装には LSI-C86 試食版というありがちな組み合せ。

ソースはとっくにどっかいってるけど。

@ 勉強せねば

「UNIX プログラミング環境」の第8章、hoc の開発のところ。

再々々々挑戦くらい?


2000.12.13 (Wed)

@ 日本語MIND

UNIX用パッケージを落としてみた。 マニュアルをちょりっとだけ読んでみる。

送り仮名はパース時にオミットされるとか、全角でも半角でも同じとみなされるとか。

うーん、気持ち悪いのは、単なる慣れの問題なんだろうか。

@ 謎漏Referer

Sophia Snowden ってだれだろう?

@ メモ

「CFチェック」 カードの認識状況を表示したり、認識後に指定したアプリを実行したりするソフト。 http://homepage2.nifty.com/snow_home/labo.html

@ シグシグまりおちゃん

あざといトコ狙ってるなあ…、絵柄がモロ吉崎系だし…、とか言いつつ読んでしまう弱さ。(ぉ

@ PS-HTTPD を inetd に登録するには

8080 stream tcp nowait nobody /usr/bin/gs gs -dNODISPLAY -q /home/pugo/src/postscript/pshttpd/pshttpd.ps

爆笑。

一瞬 printcap かと思ったよ。


2000.12.14 (Thu)

@ 今週の・・・

「不死身のマッスルマン・ドリアンの似顔絵を描いて送ろう!」

いいんですか、それで本当にいいんですか編集さん・・・。

@ いわゆる緑本

「PostScript プログラム・デザイン」をげっちゅー。


2000.12.17 (Sun)

@ Mitten

B-Free プロジェクトの PostScript サブセットなコマンドインタプリタ Mitten のソースを読んでいるところ。

全部で 1900 行弱とコンパクトながら (*1) マーク&スイープ方式の GC を装備していたりしてあなどれない。 ライセンスは GPL なので FreeBSD 汎用 (*2) なスクリプトに改変してみようかなとも思ったり。

-----
*1:mhttpd のほうが多い。無駄が多いのかも。
*2:それ、ちっとも汎用ではありません。

@ [mhttpd]Version 0.95

たかのさんのパッチを取り込んだ版をリリース。

下準備が済んだ。あともう少しで DocumentRoot の機能も追加できそう。


2000.12.18 (Mon)

@ 「プログラミング作法」

ああっ、 欲しくなる電波 が…。

あうー、「文芸的プログラミング」もまだちゃんと読んでない…。METAFONT の章だけでも読まなきゃ。


以上、7日分です。

[Top] [PocketBSD] [シュミプロ] [ぽめれちょう掲示板] [きまたま日記] [最新版] [一覧] [戻る]


このページはTsDiarySystemを用いて生成されています。

Cake (SHIMADA Keiki)