2 part forth (907レス)
2 part forth http://mevius.5ch.net/test/read.cgi/tech/1073673931/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
514: デフォルトの名無しさん [sage] 2008/10/11(土) 06:54:12 >>464のやり方だと実行の度にリターンスタックに命令列のコピーが発生するわけだな。 対して普通のForthはリターンアドレス一つのコピーで済む。 Forthでは関数の戻り場所を実行時に入れ替えたりできる( >>59, >>62 ) わけだけど、 >>464のやり方だと命令列自体の入れ替えになるから相当面倒。 Forthの自由度をわざわざ減らしている気がするんだけどな。 でも作るというならがんがれ。 様々な進化があってこそ発展もある。 http://mevius.5ch.net/test/read.cgi/tech/1073673931/514
515: 464 [sage] 2008/10/11(土) 13:07:00 >513 いや、実装はこっちの方がシンプルだよ。辞書の解釈を全部WORDに押し付けることができるから。 ただ、スタック操作が増えるから重くなる方向だけどね。 >514 リターンアドレス前提だと難しいよね。作業用スタックがもう一本ありゃいいんだけど。 俺言語のVMだと自前スタックで実装しているので大した話じゃないです。 http://mevius.5ch.net/test/read.cgi/tech/1073673931/515
516: 464 [sage] 2008/10/11(土) 13:22:12 >514 ちょっと補足。 複数のWORDを押し込もうとすると確かに面倒だね。 俺言語でも 1. 無名WORDを作る 2. 1.のWORDに実行するWORDを押し込む 3. 1.のWORDをリターンスタックに押し込む といったパック化が必要になります。 http://mevius.5ch.net/test/read.cgi/tech/1073673931/516
518: 464 [sage] 2008/10/11(土) 13:38:04 >514 思い出した……>59を実現するにはreverse自体のパック化も必須なんだっけ。 そういや>59みたいな操作をどうしようか悩んだな。 ただ、こういったWORDを跨ぐ暗黙的なリターンスタック制御てけっこう危険じゃない? 個人的にはWORDはデータスタックの状態にのみ依存すべきだと思うけど、WORDを越えた 範囲までリターンスタックを操作できるようにすると、WORD同士の依存関係が出てしまって 連鎖性(concatenative)が崩れるような気がする。 forthの条件分岐でも、セパレーターを使った明示的な制御をしているわけだし。 http://mevius.5ch.net/test/read.cgi/tech/1073673931/518
522: 514 [sage] 2008/10/11(土) 18:35:01 >>518 普通はリターンスタックとか継続とか触れない言語の方が多いから、 Forthではなく俺言語を作るつもりなら、言語デザイナであるお前様自身の 判断で実現可能にしてもいいし、そうでなくしてもいいと思うよ。 ただForthは言語レベルでリターンスタックを操れる結果、協調的マルチタスクやら コルーチンやら言語実装のレベルで普通対処するものも、ライブラリレベルで実現できる柔軟さがある。 リターンスタックは他の言語にはないForthの特徴の一つだからね。 俺言語でなんとか実現する方法を悩んでみるのも楽しいんじゃない? http://mevius.5ch.net/test/read.cgi/tech/1073673931/522
523: 514 [sage] 2008/10/11(土) 18:47:48 あとForthのVMって相当シンプルだよ。 アセンブリ言語で書かれた昔のForthとかコアの部分はアセンブリ言語で数行レベルだった気がする。 どのへんが複雑だと思ったのかは興味がある… http://mevius.5ch.net/test/read.cgi/tech/1073673931/523
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.033s