[ 捕捉確認済アンテナ ] 日記観察 *BSD Diary Links わっちりんく(す) はこんだらウォッチ 天野アンテナ HNN日記バード しっぽあんてな しぐなるぽ〜と |
|
著者公式ホームページ によると、1月10日発売予定らしいぞ。
あは、あれ3本を「直列つなぎ」なんだ。
FreeBSD 2.x + XFree86 にペンオペレーション機能を実装する (*1)
(http://www.gssm.otsuka.tsukuba.ac.jp/staff/ohki/amity)
ドラッグ & ドロップでスクリプトの記述が可能なシェル
(http://ltm.cs.uec.ac.jp/usr/hiroron/report/report.html)
Windows機にインストール。しかしインストールオプションに現れる
ってなんだー?
「WonderSwan + WonderWitchをPDAとして使おう」というページ Unreasonable Palm
Forth に関する興味深い記事
(http://www.kt.rim.or.jp/~tyamamot/forth/c4th.html)
OS側の IM から日本語を入力できるようにするパッチが SML に流れている。早速とり入れて見よう。
しかし SqueakCE だけはいまのところだめみたい。
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 の章だけでも読まなきゃ。
全部打ち込んでバグまで発見 した人がいたとは。
とりあえず買った10年前の当時(学生)は C もろくに知らん状態だったので、ちんぷんかんぷんでした。 大学の端末室( しゅがいさん のいる近辺)で Emacs の終り方も分からずおろおろしたり、
tree / &
とかやっていつまでも終らなくておろおろしたり(こればっか)、楽しい時代でした。
fgets して動くやつを適当に作って見る。MitnStack.c の最後にある isnum() と main() を main.c にコピってからちょっと変える。
while ( fgets( buf, 1024, stdin ) ) { char *p; p = strrchr( buf, '\n' ); if ( p != NULL ) *p = '\0'; eval( buf ); MitnStack_GarbageCollect(); MitnStack_Status(); printf( "> " ); } printf( "\nbye.\n" );
こんな感じ。
おう動いた動いた。10 20 add == とすると無事 30 と出る。 しかし (hello) == とやってもだんまり。
なんか CellType が間違っているような。どこで壊れているんだろう。
GhostScript のスキャナのコードを眺める。
うー、巨大なひとつの switch 文だ…。
gs5.50/src $ wc -l iscan.c 1128 iscan.c gs5.50/src $ grep case iscan.c | wc -l 157 gs5.50/src $ egrep "[a-zA-Z]*:" iscan.c | grep -v case | wc -l 42 gs5.50/src $ grep goto iscan.c | wc -l 48
160 近い case 分岐と 40 にものぼるラベルと 50 近い goto 文か。
きっつー。
任意の共用体をキーとしたハッシュ関数って、どう書くんだ?
~/src/toy $ ls CVS/ Str.h dict.c myctype.h prim_func.h Makefile cell.c dict.h prim.c scan.l Str.c cell.h main.c prim_func.c testmain.c
という訳で辞書の実装で収集がつかなくなってきたのでゴミ箱ポイポイのポイ。
もう一度始めからやり直し。とりあえず symbol -> symID のテーブルから再度挑戦。
ID から名前を逆引きする必要ってある?
ひょっとしてリリースする時にコメント(多分日本語)を削って 7-bit Through にするスクリプトをかましてるんじゃなかろうか?
あれだけの規模で本文中に覚書きがひとつもないのはねぇ。
… CVS ツリーの中はどうなっているんでしょう? > anyone knows.
是非 会長に直接 おっしゃって下さい。\(⌒∇⌒;)/
♯Referer 見てないんだろうな…
Lisp の場合
> foo => *** Symbol value is void: foo > 'foo => foo
GhostScript の場合
> foo => Error: /undefined in foo > /foo => /foo
Ruby の場合
> foo => NameError: undefined local variable or method `foo' for #<Object:0x80f2ecc> > :foo => 12385
Smalltalk の場合
> foo => nil > #foo => foo
単に「シンボル」というオブジェクトの外部表現が異なるというだけなんだろうか?
それともなにか本質的な部分が違う?
会社のWin機で試してみる。なかなか。しかし常用はできないなー。 僕は普通の人なので。(ぉ
そんなこというデスクトップマスコットって、初めて見たよ。
年末は想像を絶する状況。
のこちゃんと下の子が風邪で具合が悪く夜も眠れない。 家事に手が回らなくなって家の中がだんだん…。
年賀状もなかなか手がつかない。もう今日で今年最後の日だというのに。
以上、18日分です。
[Top] [PocketBSD] [シュミプロ] [ぽめれちょう掲示板] [きまたま日記] [最新版] [一覧] [戻る]
このページはTsDiarySystemを用いて生成されています。
Cake (SHIMADA Keiki)