2 part forth
1デフォルトの名無しさん
NGNG 第四世代
374デフォルトの名無しさん
2008/03/21(金) 07:42:46 >>371-373
サンクス
http://www.geocities.jp/naosacra/mops/particle2/immediate.html
これ見てるけどimmediateの意味がいまいちわからん…
何のためのものなんだ?
: ( 29 WORD DROP ; IMMEDIATE
例えば↑にimmediateがついてなかったらどういう動作になるんだろう
サンクス
http://www.geocities.jp/naosacra/mops/particle2/immediate.html
これ見てるけどimmediateの意味がいまいちわからん…
何のためのものなんだ?
: ( 29 WORD DROP ; IMMEDIATE
例えば↑にimmediateがついてなかったらどういう動作になるんだろう
375デフォルトの名無しさん
2008/03/21(金) 08:55:03 仮に ( がイミディエイトワードで無かったとすると、
: hoge ほげほげ ( ほげほげ ) ;
とか書いた場合に、hoge の定義の一部として、実行される部分になって
しまいます。定義中でも直ちに実行されるワードがイミディエイトワードです。
: hoge ほげほげ ( ほげほげ ) ;
とか書いた場合に、hoge の定義の一部として、実行される部分になって
しまいます。定義中でも直ちに実行されるワードがイミディエイトワードです。
376デフォルトの名無しさん
2008/03/22(土) 10:18:31377デフォルトの名無しさん
2008/03/27(木) 22:38:05 最近、Concatenativeな言語というもの目にしたんでage
378デフォルトの名無しさん
2008/03/28(金) 00:23:41 なんか酷いのみつけてきたwwwww
ちょっと草植えときますね型言語 Grass
http://www.blue.sky.or.jp/grass/doc_ja.html
スタックマシン使ってるってだけみたいだが(俺には良く分からん)
ちょっと草植えときますね型言語 Grass
http://www.blue.sky.or.jp/grass/doc_ja.html
スタックマシン使ってるってだけみたいだが(俺には良く分からん)
379デフォルトの名無しさん
2008/03/31(月) 10:36:35 forth厨はなんでもかんでもスタックマシンにするな
380デフォルトの名無しさん
2008/04/03(木) 02:09:52 factorでHelloWorldのCGIやってみた
httpdからのfactor起動はバッチファイルで
USING: io ;
"Content-type: text/html; charset=Shift_JIS\n\n" print
"<HTML><head><title></title></head>\n<body>" print
"はろ〜factor表\示可能\" print
"<br>\n</body></HTML>" print
なんか楽しいw
httpdからのfactor起動はバッチファイルで
USING: io ;
"Content-type: text/html; charset=Shift_JIS\n\n" print
"<HTML><head><title></title></head>\n<body>" print
"はろ〜factor表\示可能\" print
"<br>\n</body></HTML>" print
なんか楽しいw
381デフォルトの名無しさん
2008/04/10(木) 03:00:58 あれ?factorの新しいの入れたら日本語出なくなった
エンコード関係?
エンコード関係?
382デフォルトの名無しさん
2008/05/14(水) 14:10:30 factorソースから入れるのめんどくさいな・・・
gitなんて初めて知ったよ
gitなんて初めて知ったよ
383デフォルトの名無しさん
2008/06/03(火) 17:56:33 何か面白い話無い?
384デフォルトの名無しさん
2008/06/05(木) 11:05:57 スタック1本で動作する処理系作れ
385デフォルトの名無しさん
2008/06/05(木) 16:18:58 バロースのメインフレームはシングルスタックなんだぜ?
386デフォルトの名無しさん
2008/06/05(木) 18:37:49 wikipediaより
> スタックを1つしか持たないスタックマシンは、
> 計算モデルとしては非常に弱い。例えば、1-スタックマシンでは、
> 0n1n(0の並びの後に同じ個数の1が並ぶ言語)のような単純な言語も認識できない。
> 1-スタックマシンの計算能力は、有限オートマトンよりも高いが、
> 決定性プッシュダウン・オートマトンよりも低い。
> 一方、複数のスタックを持つスタックマシンはチューリング機械と等価である。
> 例えば、2-スタックマシンでは、チューリング機械をエミュレートできる
> (チューリング機械のヘッド位置から左側のテープをひとつのスタックが代替し、
> 右側のテープをもうひとつのスタックが代替する)。
へぇ〜
> スタックを1つしか持たないスタックマシンは、
> 計算モデルとしては非常に弱い。例えば、1-スタックマシンでは、
> 0n1n(0の並びの後に同じ個数の1が並ぶ言語)のような単純な言語も認識できない。
> 1-スタックマシンの計算能力は、有限オートマトンよりも高いが、
> 決定性プッシュダウン・オートマトンよりも低い。
> 一方、複数のスタックを持つスタックマシンはチューリング機械と等価である。
> 例えば、2-スタックマシンでは、チューリング機械をエミュレートできる
> (チューリング機械のヘッド位置から左側のテープをひとつのスタックが代替し、
> 右側のテープをもうひとつのスタックが代替する)。
へぇ〜
387デフォルトの名無しさん
2008/07/17(木) 00:50:58 factorのドキュメント消えてら
388デフォルトの名無しさん
2008/08/01(金) 21:55:57 V
http://en.wikipedia.org/wiki/V_(programming_language)
Onyx
http://www.canonware.com/onyx/
Forthもこれらも俺には使いこなせないんだけどね orz
http://en.wikipedia.org/wiki/V_(programming_language)
Onyx
http://www.canonware.com/onyx/
Forthもこれらも俺には使いこなせないんだけどね orz
389388
2008/08/01(金) 21:57:15390デフォルトの名無しさん
2008/08/02(土) 03:04:06 Forthの実装中sage
実装法のドキュメント付きで晒すかも
実装法のドキュメント付きで晒すかも
391デフォルトの名無しさん
2008/08/02(土) 04:01:08392デフォルトの名無しさん
2008/08/02(土) 06:07:26 久々にレスキタワァ*・゜゚・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜゚・* !!!!!
393デフォルトの名無しさん
2008/08/02(土) 08:44:15 >>390
http://www.google.co.jp/search?hl=ja&q=codepad&btnG=%E6%A4%9C%E7%B4%A2&lr=
どんな言語使って作るかしらん
こんなの補助として使ってみるのも便利かもしらん
http://www.google.co.jp/search?hl=ja&q=codepad&btnG=%E6%A4%9C%E7%B4%A2&lr=
どんな言語使って作るかしらん
こんなの補助として使ってみるのも便利かもしらん
394390
2008/08/02(土) 14:40:33 過疎っぷりに見てる人もいないと思ったら、意外といたのね。
>>391
Forthの実装は初めてなので、古典的で教科書通りのIndirect Threaded Code、
Cで書いた仮想マシンの上で動かすってかんじで。
今はMac OS XとLinux(x86)とLinux Zaurus(arm)の上でぽちぽち書いてる。
ポータビリティーは良いのでメモリがあって速度も気にしなければ
簡単にマイコンにも移植可能だと思う。H8なら余裕かな。
今月のトラ技の78K0基板持ってるんだけど、こっちはきついかも。
>>392
あばばばばばば
>>393
おお、こんな面白いのがあったのね。
とりあえずアカウント取ってみた。
このスレに落書きしつつ、blogにまとめてけばいいかな。
ANS-ForthのCORE準拠を目指して
http://www.taygeta.com/forth/dpans.html
読んでるんだけど、けっこうめんどいなあ。
ある程度実装の目処がたったらコード晒してくつもり。
少々お待ちを。
>>391
Forthの実装は初めてなので、古典的で教科書通りのIndirect Threaded Code、
Cで書いた仮想マシンの上で動かすってかんじで。
今はMac OS XとLinux(x86)とLinux Zaurus(arm)の上でぽちぽち書いてる。
ポータビリティーは良いのでメモリがあって速度も気にしなければ
簡単にマイコンにも移植可能だと思う。H8なら余裕かな。
今月のトラ技の78K0基板持ってるんだけど、こっちはきついかも。
>>392
あばばばばばば
>>393
おお、こんな面白いのがあったのね。
とりあえずアカウント取ってみた。
このスレに落書きしつつ、blogにまとめてけばいいかな。
ANS-ForthのCORE準拠を目指して
http://www.taygeta.com/forth/dpans.html
読んでるんだけど、けっこうめんどいなあ。
ある程度実装の目処がたったらコード晒してくつもり。
少々お待ちを。
395デフォルトの名無しさん
2008/08/04(月) 22:59:11 Forth は実装が簡単だって聞いてたんで、
自分も作ってみようとちょっと調べたんだけど、
仕組みがよく分からなかったし(ワードの定義とか)、
規格に沿った物にしようとすると意外に仕様が大きくて、
挫折しますた><
自分も作ってみようとちょっと調べたんだけど、
仕組みがよく分からなかったし(ワードの定義とか)、
規格に沿った物にしようとすると意外に仕様が大きくて、
挫折しますた><
396390
2008/08/05(火) 23:09:27 >>395
辞書まわりは次の10個のワードがあればOK(たぶんね)
CREATE
COMMA(,)
[
]
IMMEDIATE
TICK(')
COLON(:)
SEMICOLON(;)
FIND
WORD
このあたりのワードの挙動は、
http://www.annexia.org/forth
ここのjonesforthを参考にすればいいと思う。
これをインスパイヤしたCと日本語のドキュメントを書いてるんだが・・・仕事が忙しくてね・・・
これをざーっと読んで、yforthあたりの簡単な処理系のコード眺めて
実際に動作を確かめればANS-Forthの準拠もそう難しくないかと。
たださ、ANS-Forthって処理系の内部の規定しすぎじゃね?
もっと好きなようにやらしてくれよ。一回確保したWORDが二度と解放できないとか、
文字列はヌル終端しない代わりに文字数を記憶するとか、ちょっと気持ち悪い気がする。
辞書まわりは次の10個のワードがあればOK(たぶんね)
CREATE
COMMA(,)
[
]
IMMEDIATE
TICK(')
COLON(:)
SEMICOLON(;)
FIND
WORD
このあたりのワードの挙動は、
http://www.annexia.org/forth
ここのjonesforthを参考にすればいいと思う。
これをインスパイヤしたCと日本語のドキュメントを書いてるんだが・・・仕事が忙しくてね・・・
これをざーっと読んで、yforthあたりの簡単な処理系のコード眺めて
実際に動作を確かめればANS-Forthの準拠もそう難しくないかと。
たださ、ANS-Forthって処理系の内部の規定しすぎじゃね?
もっと好きなようにやらしてくれよ。一回確保したWORDが二度と解放できないとか、
文字列はヌル終端しない代わりに文字数を記憶するとか、ちょっと気持ち悪い気がする。
397デフォルトの名無しさん
2008/08/05(火) 23:23:59 >文字列はヌル終端しない代わりに文字数を記憶する
これは正当だと思う。ヌル終端がどれだけのバグを生み出しているか……
これは正当だと思う。ヌル終端がどれだけのバグを生み出しているか……
398デフォルトの名無しさん
2008/08/06(水) 21:05:50 実装としては文字列をヌル終端にしても可。
但し、文字数は必要、かつ、
ヌル終端を当てにしたコードを書いても一般には動く保証なし。
が規定の内容と思われます。他の規定も同様。
但し、文字数は必要、かつ、
ヌル終端を当てにしたコードを書いても一般には動く保証なし。
が規定の内容と思われます。他の規定も同様。
399デフォルトの名無しさん
2008/08/08(金) 19:23:22 ASCIIZはねーよマジで
400デフォルトの名無しさん
2008/08/09(土) 16:38:27 でも、C言語で作られたプログラムとの連携したいときは、NUL文字終端がいいよね。
C言語で作られたプログラムの数の多さ、便利さから言うと、無視できないなと。
C言語で作られたプログラムの数の多さ、便利さから言うと、無視できないなと。
401デフォルトの名無しさん
2008/08/09(土) 18:30:35 Cは捨てるのがよろしいかと。
C++をbetter Cとして使う方がまだましだと思う。
C++を使えないようなリソースのキツい環境で使うんだったらforthを直書きした方が良いんじゃね?
C++をbetter Cとして使う方がまだましだと思う。
C++を使えないようなリソースのキツい環境で使うんだったらforthを直書きした方が良いんじゃね?
402デフォルトの名無しさん
2008/08/10(日) 00:15:50 >C++をbetter Cとして使う
それ最悪
それ最悪
403デフォルトの名無しさん
2008/08/11(月) 00:15:21 402 と同感だが、better Cとして使うのは FORTH 実装にはない(価値が少ない)だろ。
自己学習として作るならまだしも、
FORTHに期待される動作環境だったらアセンブリレベルの設計が必要だろ。
C++使うならC++的設計をしろって。
自己学習として作るならまだしも、
FORTHに期待される動作環境だったらアセンブリレベルの設計が必要だろ。
C++使うならC++的設計をしろって。
404デフォルトの名無しさん
2008/08/27(水) 00:31:36 forthチック俺言語のプロセスが回った記念カキコ。
forthだと引数管理がけっこう面倒だと思うけど、wordの名前に
引数の数の情報を盛り込んだら楽にならんかね?
俺言語ではこんな感じでドットの数=引数の数にしているんだけど、どう思う?
1 2 ..sum
1 2 3 .:sum
名前の衝突も起こりにくくなって一石二鳥かと思うんだけど。
forthだと引数管理がけっこう面倒だと思うけど、wordの名前に
引数の数の情報を盛り込んだら楽にならんかね?
俺言語ではこんな感じでドットの数=引数の数にしているんだけど、どう思う?
1 2 ..sum
1 2 3 .:sum
名前の衝突も起こりにくくなって一石二鳥かと思うんだけど。
405デフォルトの名無しさん
2008/08/27(水) 09:31:38 ドット打つのがひたすらめんどくさそう
ifだと.:ifになるの?
ifだと.:ifになるの?
406デフォルトの名無しさん
2008/08/27(水) 21:05:33 こういう風にしたらどう?
・引数可変のワードは # で始まることとする
・ワード [ は現在のパラメータスタックポインタの値を
リターンスタックに積む
・ワード ] は現在のパラメータスタックポインタの値と
リターンスタックポインタのトップの値の差から
パラメータ数を計算しパラメータスタックに積む
たとえば
[ 10 20 30 ] #sum
と書くと、#sum実行直前にはパラメータスタックは
10 20 30 3
となっていて、#sumは3つの数の和を求めればいいことがわかる。
・引数可変のワードは # で始まることとする
・ワード [ は現在のパラメータスタックポインタの値を
リターンスタックに積む
・ワード ] は現在のパラメータスタックポインタの値と
リターンスタックポインタのトップの値の差から
パラメータ数を計算しパラメータスタックに積む
たとえば
[ 10 20 30 ] #sum
と書くと、#sum実行直前にはパラメータスタックは
10 20 30 3
となっていて、#sumは3つの数の和を求めればいいことがわかる。
407404
2008/08/27(水) 22:38:18 >405
そこは構文糖使った方がよろしいかと (a ? b ! cの三項演算子とか)
>406
それも考えたけど、そうするとConcatenativeのメリットが死ぬんだよね。
できるだけ前の計算結果に依存しないように考えると、セパレータのようなものを
スタックに積むのは良くないので、ワード単体で引数までを意味するようにしたい、
ということですな。
そこは構文糖使った方がよろしいかと (a ? b ! cの三項演算子とか)
>406
それも考えたけど、そうするとConcatenativeのメリットが死ぬんだよね。
できるだけ前の計算結果に依存しないように考えると、セパレータのようなものを
スタックに積むのは良くないので、ワード単体で引数までを意味するようにしたい、
ということですな。
408デフォルトの名無しさん
2008/08/28(木) 02:39:56 prologみたいにsum/3みたいにするとか。
よく判ってないが。
よく判ってないが。
409デフォルトの名無しさん
2008/09/19(金) 17:01:15 引数管理しなきゃいけないようなコードの構成だと崩壊しそう
410デフォルトの名無しさん
2008/09/25(木) 03:11:26 しばらくforthやってたら他の言語がいじれなくなってて驚いた。
のめり込むのは危険だなw
のめり込むのは危険だなw
411デフォルトの名無しさん
2008/09/25(木) 03:16:06412デフォルトの名無しさん
2008/09/25(木) 21:54:56 concatenativeの論理を詰めて行くと、
スタックの機構はコード設計のための因子から外されるのかも。
スタックの機構はコード設計のための因子から外されるのかも。
413デフォルトの名無しさん
2008/09/25(木) 22:34:55 >411
Wordの中でWordを呼ぼうとすると破綻するよ。
>412
結局はトップを基点とした対称性(みたいなもの)になるからな。
対称性があれば何でもOK
Wordの中でWordを呼ぼうとすると破綻するよ。
>412
結局はトップを基点とした対称性(みたいなもの)になるからな。
対称性があれば何でもOK
414デフォルトの名無しさん
2008/10/01(水) 00:29:26 スタック型プログラミング言語の最少命令セットを探して
Whitespaceに辿りついたのですが、
これよりも言語仕様的に小さいスタック型言語ってあります?
Whitespaceに辿りついたのですが、
これよりも言語仕様的に小さいスタック型言語ってあります?
415デフォルトの名無しさん
2008/10/01(水) 01:55:39 define
call
return
conditional jump
push
pop
これだけで足りるかな?
call
return
conditional jump
push
pop
これだけで足りるかな?
416デフォルトの名無しさん
2008/10/01(水) 07:09:50 callに条件をつければjumpも省けるんじゃないか?
417デフォルトの名無しさん
2008/10/02(木) 03:17:37 それより、ひと目で何やってるか判るforth作ってくれないかな。
>>54-65とか何やってるのかわからん。
記号覚えればいいんだろうけど。
: は定義っぽいということは文脈で判った。許す。
>rとかr>は何かと。
;は文の終り?
LISPでいう 'a は (quote a)です、みたいに特殊記号をあまり使わずに
誰が見ても大体判るように、平易な形にならないかな。
>>54-65とか何やってるのかわからん。
記号覚えればいいんだろうけど。
: は定義っぽいということは文脈で判った。許す。
>rとかr>は何かと。
;は文の終り?
LISPでいう 'a は (quote a)です、みたいに特殊記号をあまり使わずに
誰が見ても大体判るように、平易な形にならないかな。
418デフォルトの名無しさん
2008/10/02(木) 17:56:08419デフォルトの名無しさん
2008/10/03(金) 02:22:08 リターンスタックに何をプッシュ(とポップ)するの?TOSの内容ってこと?
>rとr>って判りにくいと思う。
一瞬で見分けられないというか。
不等号ちがうんかと。
記号使わずに全部記述的にできないかな。
mindとかそんなのかな。
>rとr>って判りにくいと思う。
一瞬で見分けられないというか。
不等号ちがうんかと。
記号使わずに全部記述的にできないかな。
mindとかそんなのかな。
420デフォルトの名無しさん
2008/10/03(金) 03:00:42 わかりやすい文法が欲しいのならforth系はあきらめた方がいいと思うよ
421デフォルトの名無しさん
2008/10/03(金) 06:08:32 : pushTOStoReturnStack postpone >r ; immediate
: popFromReturnStackToTOS postpone r> ; immediate
: popFromReturnStackToTOS postpone r> ; immediate
422デフォルトの名無しさん
2008/10/03(金) 12:26:50 自分も420に賛成する、forthは裸の2スタックマシンのアセンブラと思えばいいんだけど、それがつらいとちょっときついと思う
ただ、それがインタラクティブ環境を作るあたりと小さな核で構築できるのが非常に面白いのでがんばって覚えてみてよ。
逆に言うと簡単にぶっ壊れるとも言う
ただ、それがインタラクティブ環境を作るあたりと小さな核で構築できるのが非常に面白いのでがんばって覚えてみてよ。
逆に言うと簡単にぶっ壊れるとも言う
423デフォルトの名無しさん
2008/10/03(金) 16:59:48 Cとかの他の言語の常識持ち込もうとしてるヤツいないか?
「Forthではこう書く」ってのに納得いかないなら
悪いことは言わんから、使うのやめとけ
「Forthではこう書く」ってのに納得いかないなら
悪いことは言わんから、使うのやめとけ
424デフォルトの名無しさん
2008/10/03(金) 17:54:20 スタックっつうのはあくまで機械にやさしいものであってユーザーフレンドリーなものじゃないしな
425デフォルトの名無しさん
2008/10/03(金) 18:38:23 頻繁にスタックを意識しないといけないのは悪いForthコード
426デフォルトの名無しさん
2008/10/03(金) 20:05:40 正直アセンブラの方が楽だよ
427デフォルトの名無しさん
2008/10/03(金) 20:24:33 慣れると気持ちいいよJoy。forthは知らんけど
428デフォルトの名無しさん
2008/10/03(金) 20:29:08 >426
Forthは仮想スタックマシンのアセンブラだから、
(仮想)マシンの理解度によるだろな。
Forthは仮想スタックマシンのアセンブラだから、
(仮想)マシンの理解度によるだろな。
429デフォルトの名無しさん
2008/10/03(金) 22:29:45 いや、もっと視認しやすい記号セットを使ってくれって話だろ。
ハイライトできるエディタで単語登録するか、トランスレータでもかますのがいいと思う。
ハイライトできるエディタで単語登録するか、トランスレータでもかますのがいいと思う。
430デフォルトの名無しさん
2008/10/03(金) 23:01:49 ところでリターンスタックって別に必要なの?
普通のCPUは1本だよね。
スタックに対して相対アドレッシングがないからってことかな?
普通のCPUは1本だよね。
スタックに対して相対アドレッシングがないからってことかな?
431デフォルトの名無しさん
2008/10/03(金) 23:57:29 >419
>rとr>は確かに見た目がわかりにくい。
よほどのことが無い限り使わない。
localがあれば要らない。
>430
呼出しのときにデータスタックで直接パラメターを渡すためでしょう。
>rとr>は確かに見た目がわかりにくい。
よほどのことが無い限り使わない。
localがあれば要らない。
>430
呼出しのときにデータスタックで直接パラメターを渡すためでしょう。
432デフォルトの名無しさん
2008/10/04(土) 00:00:27 >>430
普通のアーキテクチャだと関数呼び出しのスタックにパラメータも突っ込んじゃうけど
forthはデータのpushと関数呼び出しの戻りアドレスが入るスタックが別なんよ。
っていうか別だから面白いことができるので、一緒だったらループとかで涙が出そうだと思う。
普通のアーキテクチャだと関数呼び出しのスタックにパラメータも突っ込んじゃうけど
forthはデータのpushと関数呼び出しの戻りアドレスが入るスタックが別なんよ。
っていうか別だから面白いことができるので、一緒だったらループとかで涙が出そうだと思う。
433デフォルトの名無しさん
2008/10/04(土) 00:10:21 SP, BPレジスタに相当するものがあれば良いのでは
434デフォルトの名無しさん
2008/10/04(土) 17:45:11 リターンスタックとデータスタックが一緒だと、
リターンアドレスを壊さないようにデータをいじるのがメンドイ。
リターンアドレスが詰まれている位置を避けるようにして
スタックをアクセスしなきゃいけないから。
それはSPとBPがあってもメンドイことに変わりはない。
リターンアドレスを壊さないようにデータをいじるのがメンドイ。
リターンアドレスが詰まれている位置を避けるようにして
スタックをアクセスしなきゃいけないから。
それはSPとBPがあってもメンドイことに変わりはない。
435デフォルトの名無しさん
2008/10/04(土) 19:46:33436デフォルトの名無しさん
2008/10/04(土) 21:37:24 factorだともうひとつスタックあるよ
437デフォルトの名無しさん
2008/10/04(土) 23:25:44 データスタックとリターンスタックがないと
チューリングマシンと等価じゃないらしいぞ
チューリングマシンと等価じゃないらしいぞ
438デフォルトの名無しさん
2008/10/05(日) 00:17:09439デフォルトの名無しさん
2008/10/05(日) 01:12:05 今理解した。
リターンスタックってそのままBP相当じゃん。
ほんとはBPポインタ一個あれば十分だよね?
素直にBPを持たずにわざわざリターンスタックなんて用意してるのは、
スタックマシンと言えなくなるからかね。
なんだかなあ。
リターンスタックってそのままBP相当じゃん。
ほんとはBPポインタ一個あれば十分だよね?
素直にBPを持たずにわざわざリターンスタックなんて用意してるのは、
スタックマシンと言えなくなるからかね。
なんだかなあ。
440デフォルトの名無しさん
2008/10/05(日) 03:10:12 BPあってもメモリがないとな
441デフォルトの名無しさん
2008/10/05(日) 03:49:49 今理解した。
BPってそのままリターンスタック相当じゃん。
ほんとはリターンスタックあれば十分だよね?
素直にリターンスタックを持たずに、わざわざBPなんて用意してるのは、
レジスタマシンと言えなくなるからかね。
なんだかなあ。
BPってそのままリターンスタック相当じゃん。
ほんとはリターンスタックあれば十分だよね?
素直にリターンスタックを持たずに、わざわざBPなんて用意してるのは、
レジスタマシンと言えなくなるからかね。
なんだかなあ。
442デフォルトの名無しさん
2008/10/05(日) 07:20:41 >>437
メモリアクセスできない純粋なスタックマシンなら、スタックが二本ないと
チューリング等価ではないかも知れないが、FORTHはメモリアクセス @ ! が
あるから、たとえスタック一本であってもチューリング等価じゃね?
考えてみればわかるが、メモリアクセスがあるとスタックの本数を自由に増やせる。
FORTHとスタックマシンとConcatenative言語は、それぞれ別の概念で、
単純に等号で結べないから、何について話しているのか意識しないと混乱すると思われ。
メモリアクセスできない純粋なスタックマシンなら、スタックが二本ないと
チューリング等価ではないかも知れないが、FORTHはメモリアクセス @ ! が
あるから、たとえスタック一本であってもチューリング等価じゃね?
考えてみればわかるが、メモリアクセスがあるとスタックの本数を自由に増やせる。
FORTHとスタックマシンとConcatenative言語は、それぞれ別の概念で、
単純に等号で結べないから、何について話しているのか意識しないと混乱すると思われ。
443デフォルトの名無しさん
2008/10/05(日) 09:51:29 ForthのVMとしては、
論理的には最低限二つの区別されたスタックがある。
標準的な実装での利点(v.s.スタックフレーム方式)は、
サブルーチン間でのデータのコピーが減らせること。
スタックフレーム一本でやるのはCとかでも標準的な実装だけど、
VMという同じ抽象度で比べれば、Cにはスタックは無い。
VMが実装できれば機械自体の仕組みはどうでも良い。
論理的には最低限二つの区別されたスタックがある。
標準的な実装での利点(v.s.スタックフレーム方式)は、
サブルーチン間でのデータのコピーが減らせること。
スタックフレーム一本でやるのはCとかでも標準的な実装だけど、
VMという同じ抽象度で比べれば、Cにはスタックは無い。
VMが実装できれば機械自体の仕組みはどうでも良い。
444デフォルトの名無しさん
2008/10/05(日) 13:26:57 込み入った話は分からんけど、
とりあえずBF書けたらチューリング完全じゃなかったっけ?
とりあえずBF書けたらチューリング完全じゃなかったっけ?
445デフォルトの名無しさん
2008/10/05(日) 14:12:31 なんか話が噛み合ってない気がする。
446デフォルトの名無しさん
2008/10/05(日) 15:11:57 なんでそこまでチューリングマシンにこだわるのかわからん。
Forthがチューリングマシンであろうとなかろうと
Forthで実用的なプログラムは書ける。
あともう一人、やたらリターンスタックを排除したがる奴も
何をしたいのかさっぱりわからん。
Forthがチューリングマシンであろうとなかろうと
Forthで実用的なプログラムは書ける。
あともう一人、やたらリターンスタックを排除したがる奴も
何をしたいのかさっぱりわからん。
447デフォルトの名無しさん
2008/10/05(日) 17:47:31 まず当たり前の大前提の確認からだけど、Forthはチューリング完全だから。
仮にForthの仕様からリターンスタックだけを排除したとしても(それはForthとは呼べないだろうが)
チューリング完全だ。理由は>>442
リターンスタックがBPで代用できるとか正直意味わからん。
スタック演算自体理解してない希ガス。
仮にForthの仕様からリターンスタックだけを排除したとしても(それはForthとは呼べないだろうが)
チューリング完全だ。理由は>>442
リターンスタックがBPで代用できるとか正直意味わからん。
スタック演算自体理解してない希ガス。
448デフォルトの名無しさん
2008/10/05(日) 18:27:08 リターンスタックという名前がいかんのだろ。
449デフォルトの名無しさん
2008/10/05(日) 18:35:04 >>437
スタックオートマトンとスタックマシンをごっちゃにしてる気がする。
スタックオートマトンとスタックマシンをごっちゃにしてる気がする。
450デフォルトの名無しさん
2008/10/05(日) 18:39:13 >>448
むしろリターンスタック以外の名前があるなら知りたいものだが。
むしろリターンスタック以外の名前があるなら知りたいものだが。
451デフォルトの名無しさん
2008/10/05(日) 19:02:41 >442
大雑把にはこんな感じかね。
・データスタック: 引数&戻り値
・リターンスタック: 実行する命令列(辞書で展開された単語含む)
リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね
大雑把にはこんな感じかね。
・データスタック: 引数&戻り値
・リターンスタック: 実行する命令列(辞書で展開された単語含む)
リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね
452デフォルトの名無しさん
2008/10/05(日) 19:25:44 リターンアドレスを積んでいるからリターンスタック
それでいいと思うが、難しく考えすぎじゃね?>>451
それでいいと思うが、難しく考えすぎじゃね?>>451
453デフォルトの名無しさん
2008/10/05(日) 19:28:44 Aスタック←→Bスタック
だったら勘違いが起きなかったと思う。
だったら勘違いが起きなかったと思う。
454デフォルトの名無しさん
2008/10/05(日) 19:34:19 >>453
むしろ勘違いを引き起こしそうなんだが。
リターンスタックが難しいんじゃなくて、
リターンアドレスをスタックに積むという
当たり前の関数呼び出し規約を説明しなければ、
理解されない時代になったということか…
むしろ勘違いを引き起こしそうなんだが。
リターンスタックが難しいんじゃなくて、
リターンアドレスをスタックに積むという
当たり前の関数呼び出し規約を説明しなければ、
理解されない時代になったということか…
455デフォルトの名無しさん
2008/10/05(日) 21:59:43 なんでリターンスタックの名前で混乱とか勘違いがあるの?
ひょっとして、リターンと聞いて戻り値を連想しちゃう人がいる、とか?
だとしたらかなりキビシい状況だな。
ひょっとして、リターンと聞いて戻り値を連想しちゃう人がいる、とか?
だとしたらかなりキビシい状況だな。
456デフォルトの名無しさん
2008/10/06(月) 01:09:11 カールスタックの方が一般的じゃね?
457デフォルトの名無しさん
2008/10/06(月) 01:09:52 あ、カールじゃなくてコールスタック
458デフォルトの名無しさん
2008/10/06(月) 01:24:45 カールはスナックだな
459デフォルトの名無しさん
2008/10/06(月) 07:35:22 カールと言えば薄べったいのが出てることを最近知った。
従来品に比べて口の裏に張り付きにくいのはメリットだが、
少し物足りない気がした。
従来品に比べて口の裏に張り付きにくいのはメリットだが、
少し物足りない気がした。
460デフォルトの名無しさん
2008/10/06(月) 11:21:56 Forth では昔からリターンスタックと呼んできたので、その伝統に則ればいいと
思うんだけどな。Wikipedia だと項目はコールスタックで立てられているが。
思うんだけどな。Wikipedia だと項目はコールスタックで立てられているが。
461デフォルトの名無しさん
2008/10/06(月) 12:10:36 コールスタック->カールスナック->コーンスターチ->張り付かないならカールじゃない
勉強し過ぎでしょう。
勉強し過ぎでしょう。
462461
2008/10/06(月) 12:30:27 補:そもそもForthが一般的じゃない
463デフォルトの名無しさん
2008/10/06(月) 21:49:04 ・リターンスタックが普通のCPUで言うとことの「スタック」。
ワード(Cで言うところの関数、実際にはサブルーチン)
を呼ぶと呼び出し戻るためのアドレスを積む。
# 普通のCPUでCALL命令(68系だとBSR、JSR)を実行すると
# リターンアドレスがスタックに積まれるのは理解しているよね?
・データスタックってのは、言ってみれば「無限に増えるアキュムレータ」って感じ。
・「辞書」が命令コードストレージ、C言語でいえばTEXTセグメント
Forthの本質は上記3点をおさえて置けば理解できるんだが。
BPがリターンスタックと等価なんて言ってる人とか、
>・リターンスタック: 実行する命令列(辞書で展開された単語含む)
>リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね
なんて言っている人、本当に理解できてるの?
ワード(Cで言うところの関数、実際にはサブルーチン)
を呼ぶと呼び出し戻るためのアドレスを積む。
# 普通のCPUでCALL命令(68系だとBSR、JSR)を実行すると
# リターンアドレスがスタックに積まれるのは理解しているよね?
・データスタックってのは、言ってみれば「無限に増えるアキュムレータ」って感じ。
・「辞書」が命令コードストレージ、C言語でいえばTEXTセグメント
Forthの本質は上記3点をおさえて置けば理解できるんだが。
BPがリターンスタックと等価なんて言ってる人とか、
>・リターンスタック: 実行する命令列(辞書で展開された単語含む)
>リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね
なんて言っている人、本当に理解できてるの?
464デフォルトの名無しさん
2008/10/07(火) 00:25:52 >463
いや、別にWORDがサブルーチンである必要はないんじゃない?WORD毎の環境要らないんだし。
Cとの相性を考えるとサブルーチンにした方が良いと思うけど。
あと、CPUのアーキテクチャには疎いんだけど、最近のCPUでスタック持ってるのってあったっけ?
いや、別にWORDがサブルーチンである必要はないんじゃない?WORD毎の環境要らないんだし。
Cとの相性を考えるとサブルーチンにした方が良いと思うけど。
あと、CPUのアーキテクチャには疎いんだけど、最近のCPUでスタック持ってるのってあったっけ?
465デフォルトの名無しさん
2008/10/07(火) 06:15:51466デフォルトの名無しさん
2008/10/07(火) 06:37:45 >>464
前半は実装と仕様が混乱してそう。
後半は、たぶん、CPUの「レジスタアーキテクチャ」「スタックアーキテクチャ」と
データ構造としてのスタックを混同している。
Wikipediaやblog読んで理解した気にならないで実際に自分で手を動かしてみなよ。
ちょっと恥ずかし過ぎるぞ、あんた。
前半は実装と仕様が混乱してそう。
後半は、たぶん、CPUの「レジスタアーキテクチャ」「スタックアーキテクチャ」と
データ構造としてのスタックを混同している。
Wikipediaやblog読んで理解した気にならないで実際に自分で手を動かしてみなよ。
ちょっと恥ずかし過ぎるぞ、あんた。
467デフォルトの名無しさん
2008/10/07(火) 12:34:16468デフォルトの名無しさん
2008/10/07(火) 13:28:27 post,preのincやdec付きレジスタ間接参照命令があればデータスタックと等価だよね?
リターンスタックってのはサブルーチンコール時に戻りアドレスをpushする為のレジスタの事でしょう?
なら今時のCPUで無い物の方が珍しいと思うんだけど
リターンスタックってのはサブルーチンコール時に戻りアドレスをpushする為のレジスタの事でしょう?
なら今時のCPUで無い物の方が珍しいと思うんだけど
469デフォルトの名無しさん
2008/10/07(火) 20:49:02 x86って俺の生まれる前からあるな。
定年過ぎた方には最近なんでしょうけど。
定年過ぎた方には最近なんでしょうけど。
470デフォルトの名無しさん
2008/10/07(火) 21:09:44 定年過ぎて無く立ってプロセッサ自体30年の歴史しかないじゃないか
471デフォルトの名無しさん
2008/10/07(火) 21:36:31 最近のCPUは古いアーキテクチャのものがほとんどだよね。
細かいところは違うんだろが。
>>468
>戻りアドレスをpushする為のレジスタ
レジストリって意味?
RISCだと、戻りアドレスを保存するレジスタがあること多いよね。
まあ、リターンスタックは、
リターンアドレスを積むため専用(原則)のスタック
ってことがわかれば、いいじゃない。
データスタックと別にある利点もわかってるわけでしょ。
本当は「リターンスタックがあること」じゃなくて、
データスタックが複数のワードを横断して固定されていること、
の方が特徴だよね。
普通の言語の実装だと、
データスタックがサブルーチンごとに別々にリターンスタックの中にあって、
受け渡すデータはコピーする、
という感じなわけだ。比喩的に言えば。
アセンブリレベルでもリターンアドレスのpush/popが自動になってるなら、
気付かない人がいてもしょうがない。
細かいところは違うんだろが。
>>468
>戻りアドレスをpushする為のレジスタ
レジストリって意味?
RISCだと、戻りアドレスを保存するレジスタがあること多いよね。
まあ、リターンスタックは、
リターンアドレスを積むため専用(原則)のスタック
ってことがわかれば、いいじゃない。
データスタックと別にある利点もわかってるわけでしょ。
本当は「リターンスタックがあること」じゃなくて、
データスタックが複数のワードを横断して固定されていること、
の方が特徴だよね。
普通の言語の実装だと、
データスタックがサブルーチンごとに別々にリターンスタックの中にあって、
受け渡すデータはコピーする、
という感じなわけだ。比喩的に言えば。
アセンブリレベルでもリターンアドレスのpush/popが自動になってるなら、
気付かない人がいてもしょうがない。
472464
2008/10/07(火) 23:32:13 >465
いや、スタックポインタ(レジスタ)じゃなくてスタック。>467 の通りですな。>463で『アドレスを積む』とか
書いているからHWスタックのことかと思った。
スタックを内部に持つCPUの話があった記憶があったので勘違いしたわ。すまんね。
forthあんまり詳しくないんで済まんのだけど、『リターンスタックには、ワードを呼ぶと呼び出し戻るため
のアドレスを積む』んだっけ?
正規化の観点からは『まだ実行していないWORD』もリターンスタックに積めた方が便利だと思うけど。
WORDコンパイルの実装で手が抜けなくなるし……
いや、スタックポインタ(レジスタ)じゃなくてスタック。>467 の通りですな。>463で『アドレスを積む』とか
書いているからHWスタックのことかと思った。
スタックを内部に持つCPUの話があった記憶があったので勘違いしたわ。すまんね。
forthあんまり詳しくないんで済まんのだけど、『リターンスタックには、ワードを呼ぶと呼び出し戻るため
のアドレスを積む』んだっけ?
正規化の観点からは『まだ実行していないWORD』もリターンスタックに積めた方が便利だと思うけど。
WORDコンパイルの実装で手が抜けなくなるし……
473デフォルトの名無しさん
2008/10/07(火) 23:56:37レスを投稿する
ニュース
- 高市総理の周辺「小さな火種が火事になりかけている。早く鎮火しないといけない」 ★6 [Hitzeschleier★]
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★2 [煮卵★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★2 [蚤の市★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- NHK、受信料の未払い世帯に督促強化へ 民事手続きの新組織を設置 差し押さえなどの強制執行も [1ゲットロボ★]
- ウクライナ、フランス製の戦闘機「ラファール」最大100機購入へ−AFP [1ゲットロボ★]
- 愛国者ナザレンコ「左翼は自己中な差別主義者で偽善者。日本人ファーストを叩いておいて台湾人が死んでも知らな〜いでしょ。中露の犬」 [856698234]
- 【悲報】有名ウヨ論客、「現実的に考えて中国と仲直りするしかなくね?」と言ったら野良ウヨから総叩きにあう [856698234]
- 【高市早苗】日本大使館「中国在留邦人は安全確保して!!!」 [115996789]
- 【高市悲報】経団連会長、高市と面談「おい!ちゃんと中国と対話しろよ!😨」 [359965264]
- おじゃる丸をまったり待機するスレ🏡
- TV「港区美女スペシャル」👉すべからくカリカリが出てきて界隈に衝撃が走る [329329848]
