2 part forth (907レス)
前次1-
抽出解除 レス栞

451
(2): デフォルトの名無しさん [sage] 2008/10/05(日) 19:02:41 AAS
>442
442(2): デフォルトの名無しさん [sage] 2008/10/05(日) 07:20:41 AAS
>>437
メモリアクセスできない純粋なスタックマシンなら、スタックが二本ないと
チューリング等価ではないかも知れないが、FORTHはメモリアクセス @ ! が
あるから、たとえスタック一本であってもチューリング等価じゃね?
考えてみればわかるが、メモリアクセスがあるとスタックの本数を自由に増やせる。

FORTHとスタックマシンとConcatenative言語は、それぞれ別の概念で、
単純に等号で結べないから、何について話しているのか意識しないと混乱すると思われ。
大雑把にはこんな感じかね。
・データスタック: 引数&戻り値
・リターンスタック: 実行する命令列(辞書で展開された単語含む)

リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね
452: デフォルトの名無しさん [sage] 2008/10/05(日) 19:25:44 AAS
リターンアドレスを積んでいるからリターンスタック
それでいいと思うが、難しく考えすぎじゃね?>>451
486
(2): 464 [sage] 2008/10/09(木) 08:54:40 AAS
>485
485(1): デフォルトの名無しさん [sage] 2008/10/09(木) 06:24:10 AAS
リターンスタックに積んであるリターンアドレスは、
「これから実行される命令列」へのポインタそのものと見なせるから、
そのアイデアが新しいとは思えないけどな。
Forthぐらいバーチャルマシンの実装が簡単な言語もないし。

ただ、リターンスタックの意味がよくわからないままに、
他の言語のように抽象構文木を再帰的に処理するような
実装にしていると、リターンスタック操作の実装で悩むの
かもしれない。
>463
463(4): デフォルトの名無しさん [sage] 2008/10/06(月) 21:49:04 AAS
・リターンスタックが普通のCPUで言うとことの「スタック」。
 ワード(Cで言うところの関数、実際にはサブルーチン)
 を呼ぶと呼び出し戻るためのアドレスを積む。

# 普通のCPUでCALL命令(68系だとBSR、JSR)を実行すると
# リターンアドレスがスタックに積まれるのは理解しているよね?

・データスタックってのは、言ってみれば「無限に増えるアキュムレータ」って感じ。

・「辞書」が命令コードストレージ、C言語でいえばTEXTセグメント

Forthの本質は上記3点をおさえて置けば理解できるんだが。

BPがリターンスタックと等価なんて言ってる人とか、

>・リターンスタック: 実行する命令列(辞書で展開された単語含む)
>リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね

なんて言っている人、本当に理解できてるの?
は呼び出したWORDを積むことを前提にしているし、>451 >472
472(3): 464 [sage] 2008/10/07(火) 23:32:13 AAS
>465
いや、スタックポインタ(レジスタ)じゃなくてスタック。>467 の通りですな。>463で『アドレスを積む』とか
書いているからHWスタックのことかと思った。
スタックを内部に持つCPUの話があった記憶があったので勘違いしたわ。すまんね。

forthあんまり詳しくないんで済まんのだけど、『リターンスタックには、ワードを呼ぶと呼び出し戻るため
のアドレスを積む』んだっけ?
正規化の観点からは『まだ実行していないWORD』もリターンスタックに積めた方が便利だと思うけど。
WORDコンパイルの実装で手が抜けなくなるし……
で言ってるのが >463 >473
思い切り否定されてるので、forthじゃそういう考え方無いのかな、と思った。
もしforthでもそういう使い方しているんだったらおいらの不勉強だね。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.423s*