2 part forth (907レス)
上下前次1-新
401: 2008/08/09(土)18:30 AAS
Cは捨てるのがよろしいかと。
C++をbetter Cとして使う方がまだましだと思う。
C++を使えないようなリソースのキツい環境で使うんだったらforthを直書きした方が良いんじゃね?
402: 2008/08/10(日)00:15 AAS
>C++をbetter Cとして使う
それ最悪
403: 2008/08/11(月)00:15 AAS
402 と同感だが、better Cとして使うのは FORTH 実装にはない(価値が少ない)だろ。
自己学習として作るならまだしも、
FORTHに期待される動作環境だったらアセンブリレベルの設計が必要だろ。
C++使うならC++的設計をしろって。
404(1): 2008/08/27(水)00:31 AAS
forthチック俺言語のプロセスが回った記念カキコ。
forthだと引数管理がけっこう面倒だと思うけど、wordの名前に
引数の数の情報を盛り込んだら楽にならんかね?
俺言語ではこんな感じでドットの数=引数の数にしているんだけど、どう思う?
1 2 ..sum
1 2 3 .:sum
名前の衝突も起こりにくくなって一石二鳥かと思うんだけど。
405(1): 2008/08/27(水)09:31 AAS
ドット打つのがひたすらめんどくさそう
ifだと.:ifになるの?
406(1): 2008/08/27(水)21:05 AAS
こういう風にしたらどう?
・引数可変のワードは # で始まることとする
・ワード [ は現在のパラメータスタックポインタの値を
リターンスタックに積む
・ワード ] は現在のパラメータスタックポインタの値と
リターンスタックポインタのトップの値の差から
パラメータ数を計算しパラメータスタックに積む
たとえば
[ 10 20 30 ] #sum
と書くと、#sum実行直前にはパラメータスタックは
10 20 30 3
となっていて、#sumは3つの数の和を求めればいいことがわかる。
407(1): 404 2008/08/27(水)22:38 AAS
>405
そこは構文糖使った方がよろしいかと (a ? b ! cの三項演算子とか)
>406
それも考えたけど、そうするとConcatenativeのメリットが死ぬんだよね。
できるだけ前の計算結果に依存しないように考えると、セパレータのようなものを
スタックに積むのは良くないので、ワード単体で引数までを意味するようにしたい、
ということですな。
408: 2008/08/28(木)02:39 AAS
prologみたいにsum/3みたいにするとか。
よく判ってないが。
409: 2008/09/19(金)17:01 AAS
引数管理しなきゃいけないようなコードの構成だと崩壊しそう
410: 2008/09/25(木)03:11 AAS
しばらくforthやってたら他の言語がいじれなくなってて驚いた。
のめり込むのは危険だなw
411(1): 2008/09/25(木)03:16 AAS
>>407
そのセパレータってリスト終端のnullに相当するから
あながち間違ってないと思う。
412(1): 2008/09/25(木)21:54 AAS
concatenativeの論理を詰めて行くと、
スタックの機構はコード設計のための因子から外されるのかも。
413: 2008/09/25(木)22:34 AAS
>411
Wordの中でWordを呼ぼうとすると破綻するよ。
>412
結局はトップを基点とした対称性(みたいなもの)になるからな。
対称性があれば何でもOK
414: 2008/10/01(水)00:29 AAS
スタック型プログラミング言語の最少命令セットを探して
Whitespaceに辿りついたのですが、
これよりも言語仕様的に小さいスタック型言語ってあります?
415: 2008/10/01(水)01:55 AAS
define
call
return
conditional jump
push
pop
これだけで足りるかな?
416: 2008/10/01(水)07:09 AAS
callに条件をつければjumpも省けるんじゃないか?
417(1): 2008/10/02(木)03:17 AAS
それより、ひと目で何やってるか判るforth作ってくれないかな。
>>54-65とか何やってるのかわからん。
記号覚えればいいんだろうけど。
: は定義っぽいということは文脈で判った。許す。
>rとかr>は何かと。
;は文の終り?
LISPでいう 'a は (quote a)です、みたいに特殊記号をあまり使わずに
誰が見ても大体判るように、平易な形にならないかな。
418: 2008/10/02(木)17:56 AAS
>>417
: word
でワードの定義開始、;で定義の終端
>r,r>はリターンスタックへのプッシュとポップ
>>54の括弧内はそのワードを実行するとデータスタックの状態がどう変わるかをコメントで表している
他の言語と違って裸のスタックが丸見えなんよ
419(1): 2008/10/03(金)02:22 AAS
リターンスタックに何をプッシュ(とポップ)するの?TOSの内容ってこと?
>rとr>って判りにくいと思う。
一瞬で見分けられないというか。
不等号ちがうんかと。
記号使わずに全部記述的にできないかな。
mindとかそんなのかな。
420: 2008/10/03(金)03:00 AAS
わかりやすい文法が欲しいのならforth系はあきらめた方がいいと思うよ
421: 2008/10/03(金)06:08 AAS
: pushTOStoReturnStack postpone >r ; immediate
: popFromReturnStackToTOS postpone r> ; immediate
422: 2008/10/03(金)12:26 AAS
自分も420に賛成する、forthは裸の2スタックマシンのアセンブラと思えばいいんだけど、それがつらいとちょっときついと思う
ただ、それがインタラクティブ環境を作るあたりと小さな核で構築できるのが非常に面白いのでがんばって覚えてみてよ。
逆に言うと簡単にぶっ壊れるとも言う
423: 2008/10/03(金)16:59 AAS
Cとかの他の言語の常識持ち込もうとしてるヤツいないか?
「Forthではこう書く」ってのに納得いかないなら
悪いことは言わんから、使うのやめとけ
424: 2008/10/03(金)17:54 AAS
スタックっつうのはあくまで機械にやさしいものであってユーザーフレンドリーなものじゃないしな
425: 2008/10/03(金)18:38 AAS
頻繁にスタックを意識しないといけないのは悪いForthコード
426(1): 2008/10/03(金)20:05 AAS
正直アセンブラの方が楽だよ
427: 2008/10/03(金)20:24 AAS
慣れると気持ちいいよJoy。forthは知らんけど
428: 2008/10/03(金)20:29 AAS
>426
Forthは仮想スタックマシンのアセンブラだから、
(仮想)マシンの理解度によるだろな。
429: 2008/10/03(金)22:29 AAS
いや、もっと視認しやすい記号セットを使ってくれって話だろ。
ハイライトできるエディタで単語登録するか、トランスレータでもかますのがいいと思う。
430(3): 2008/10/03(金)23:01 AAS
ところでリターンスタックって別に必要なの?
普通のCPUは1本だよね。
スタックに対して相対アドレッシングがないからってことかな?
上下前次1-新書関写板覧索設栞歴
あと 477 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.010s