2 part forthat TECH
2 part forth - 暇つぶし2ch400:デフォルトの名無しさん
08/08/09 16:38:27 .net
でも、C言語で作られたプログラムとの連携したいときは、NUL文字終端がいいよね。
C言語で作られたプログラムの数の多さ、便利さから言うと、無視できないなと。

401:デフォルトの名無しさん
08/08/09 18:30:35 .net
Cは捨てるのがよろしいかと。
C++をbetter Cとして使う方がまだましだと思う。

C++を使えないようなリソースのキツい環境で使うんだったらforthを直書きした方が良いんじゃね?

402:デフォルトの名無しさん
08/08/10 00:15:50 .net
>C++をbetter Cとして使う
それ最悪

403:デフォルトの名無しさん
08/08/11 00:15:21 .net
402 と同感だが、better Cとして使うのは FORTH 実装にはない(価値が少ない)だろ。
自己学習として作るならまだしも、
FORTHに期待される動作環境だったらアセンブリレベルの設計が必要だろ。
C++使うならC++的設計をしろって。

404:デフォルトの名無しさん
08/08/27 00:31:36 .net
forthチック俺言語のプロセスが回った記念カキコ。

forthだと引数管理がけっこう面倒だと思うけど、wordの名前に
引数の数の情報を盛り込んだら楽にならんかね?
俺言語ではこんな感じでドットの数=引数の数にしているんだけど、どう思う?
 1 2 ..sum
 1 2 3 .:sum
名前の衝突も起こりにくくなって一石二鳥かと思うんだけど。


405:デフォルトの名無しさん
08/08/27 09:31:38 .net
ドット打つのがひたすらめんどくさそう
ifだと.:ifになるの?

406:デフォルトの名無しさん
08/08/27 21:05:33 .net
こういう風にしたらどう?

・引数可変のワードは # で始まることとする
・ワード [ は現在のパラメータスタックポインタの値を
 リターンスタックに積む
・ワード ] は現在のパラメータスタックポインタの値と
 リターンスタックポインタのトップの値の差から
 パラメータ数を計算しパラメータスタックに積む

たとえば

[ 10 20 30 ] #sum

と書くと、#sum実行直前にはパラメータスタックは

10 20 30 3

となっていて、#sumは3つの数の和を求めればいいことがわかる。

407:404
08/08/27 22:38:18 .net
>405
そこは構文糖使った方がよろしいかと (a ? b ! cの三項演算子とか)

>406
それも考えたけど、そうするとConcatenativeのメリットが死ぬんだよね。

できるだけ前の計算結果に依存しないように考えると、セパレータのようなものを
スタックに積むのは良くないので、ワード単体で引数までを意味するようにしたい、
ということですな。


408:デフォルトの名無しさん
08/08/28 02:39:56 .net
prologみたいにsum/3みたいにするとか。
よく判ってないが。

409:デフォルトの名無しさん
08/09/19 17:01:15 .net
引数管理しなきゃいけないようなコードの構成だと崩壊しそう

410:デフォルトの名無しさん
08/09/25 03:11:26 .net
しばらくforthやってたら他の言語がいじれなくなってて驚いた。
のめり込むのは危険だなw

411:デフォルトの名無しさん
08/09/25 03:16:06 .net
>>407
そのセパレータってリスト終端のnullに相当するから
あながち間違ってないと思う。

412:デフォルトの名無しさん
08/09/25 21:54:56 .net
concatenativeの論理を詰めて行くと、
スタックの機構はコード設計のための因子から外されるのかも。

413:デフォルトの名無しさん
08/09/25 22:34:55 .net
>411
Wordの中でWordを呼ぼうとすると破綻するよ。

>412
結局はトップを基点とした対称性(みたいなもの)になるからな。
対称性があれば何でもOK

414:デフォルトの名無しさん
08/10/01 00:29:26 .net
スタック型プログラミング言語の最少命令セットを探して
Whitespaceに辿りついたのですが、
これよりも言語仕様的に小さいスタック型言語ってあります?

415:デフォルトの名無しさん
08/10/01 01:55:39 .net
define
call
return
conditional jump
push
pop

これだけで足りるかな?


416:デフォルトの名無しさん
08/10/01 07:09:50 .net
callに条件をつければjumpも省けるんじゃないか?

417:デフォルトの名無しさん
08/10/02 03:17:37 .net
それより、ひと目で何やってるか判るforth作ってくれないかな。
>>54-65とか何やってるのかわからん。
記号覚えればいいんだろうけど。
: は定義っぽいということは文脈で判った。許す。
>rとかr>は何かと。
;は文の終り?

LISPでいう 'a は (quote a)です、みたいに特殊記号をあまり使わずに
誰が見ても大体判るように、平易な形にならないかな。

418:デフォルトの名無しさん
08/10/02 17:56:08 .net
>>417
: word
でワードの定義開始、;で定義の終端
>r,r>はリターンスタックへのプッシュとポップ
>>54の括弧内はそのワードを実行するとデータスタックの状態がどう変わるかをコメントで表している
他の言語と違って裸のスタックが丸見えなんよ

419:デフォルトの名無しさん
08/10/03 02:22:08 .net
リターンスタックに何をプッシュ(とポップ)するの?TOSの内容ってこと?
>rとr>って判りにくいと思う。
一瞬で見分けられないというか。
不等号ちがうんかと。
記号使わずに全部記述的にできないかな。
mindとかそんなのかな。

420:デフォルトの名無しさん
08/10/03 03:00:42 .net
わかりやすい文法が欲しいのならforth系はあきらめた方がいいと思うよ

421:デフォルトの名無しさん
08/10/03 06:08:32 .net
: pushTOStoReturnStack postpone >r ; immediate
: popFromReturnStackToTOS postpone r> ; immediate

422:デフォルトの名無しさん
08/10/03 12:26:50 .net
自分も420に賛成する、forthは裸の2スタックマシンのアセンブラと思えばいいんだけど、それがつらいとちょっときついと思う
ただ、それがインタラクティブ環境を作るあたりと小さな核で構築できるのが非常に面白いのでがんばって覚えてみてよ。

逆に言うと簡単にぶっ壊れるとも言う


423:デフォルトの名無しさん
08/10/03 16:59:48 .net
Cとかの他の言語の常識持ち込もうとしてるヤツいないか?
「Forthではこう書く」ってのに納得いかないなら
悪いことは言わんから、使うのやめとけ

424:デフォルトの名無しさん
08/10/03 17:54:20 .net
スタックっつうのはあくまで機械にやさしいものであってユーザーフレンドリーなものじゃないしな

425:デフォルトの名無しさん
08/10/03 18:38:23 .net
頻繁にスタックを意識しないといけないのは悪いForthコード

426:デフォルトの名無しさん
08/10/03 20:05:40 .net
正直アセンブラの方が楽だよ


427:デフォルトの名無しさん
08/10/03 20:24:33 .net
慣れると気持ちいいよJoy。forthは知らんけど

428:デフォルトの名無しさん
08/10/03 20:29:08 .net
>426
Forthは仮想スタックマシンのアセンブラだから、
(仮想)マシンの理解度によるだろな。

429:デフォルトの名無しさん
08/10/03 22:29:45 .net
いや、もっと視認しやすい記号セットを使ってくれって話だろ。
ハイライトできるエディタで単語登録するか、トランスレータでもかますのがいいと思う。

430:デフォルトの名無しさん
08/10/03 23:01:49 .net
ところでリターンスタックって別に必要なの?
普通のCPUは1本だよね。
スタックに対して相対アドレッシングがないからってことかな?


431:デフォルトの名無しさん
08/10/03 23:57:29 .net
>419
>rとr>は確かに見た目がわかりにくい。
よほどのことが無い限り使わない。
localがあれば要らない。

>430
呼出しのときにデータスタックで直接パラメターを渡すためでしょう。

432:デフォルトの名無しさん
08/10/04 00:00:27 .net
>>430
普通のアーキテクチャだと関数呼び出しのスタックにパラメータも突っ込んじゃうけど
forthはデータのpushと関数呼び出しの戻りアドレスが入るスタックが別なんよ。

っていうか別だから面白いことができるので、一緒だったらループとかで涙が出そうだと思う。


433:デフォルトの名無しさん
08/10/04 00:10:21 .net
SP, BPレジスタに相当するものがあれば良いのでは


434:デフォルトの名無しさん
08/10/04 17:45:11 .net
リターンスタックとデータスタックが一緒だと、
リターンアドレスを壊さないようにデータをいじるのがメンドイ。
リターンアドレスが詰まれている位置を避けるようにして
スタックをアクセスしなきゃいけないから。
それはSPとBPがあってもメンドイことに変わりはない。

435:デフォルトの名無しさん
08/10/04 19:46:33 .net
>>430
まあ、便利だから?
実装としてはバローズのメインフレーム見たく演算とリターン
アドレス保存を一本のスタックでこなすものもあるよ。

436:デフォルトの名無しさん
08/10/04 21:37:24 .net
factorだともうひとつスタックあるよ

437:デフォルトの名無しさん
08/10/04 23:25:44 .net
データスタックとリターンスタックがないと
チューリングマシンと等価じゃないらしいぞ

438:デフォルトの名無しさん
08/10/05 00:17:09 .net
>>437
等価じゃないとはよく聞くけど、等価じゃないとする説明ってどっかにないですかね。
それで実用で困ることありますかね。

439:デフォルトの名無しさん
08/10/05 01:12:05 .net
今理解した。
リターンスタックってそのままBP相当じゃん。
ほんとはBPポインタ一個あれば十分だよね?
素直にBPを持たずにわざわざリターンスタックなんて用意してるのは、
スタックマシンと言えなくなるからかね。
なんだかなあ。

440:デフォルトの名無しさん
08/10/05 03:10:12 .net
BPあってもメモリがないとな

441:デフォルトの名無しさん
08/10/05 03:49:49 .net
今理解した。
BPってそのままリターンスタック相当じゃん。
ほんとはリターンスタックあれば十分だよね?
素直にリターンスタックを持たずに、わざわざBPなんて用意してるのは、
レジスタマシンと言えなくなるからかね。
なんだかなあ。


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

FORTHとスタックマシンとConcatenative言語は、それぞれ別の概念で、
単純に等号で結べないから、何について話しているのか意識しないと混乱すると思われ。

443:デフォルトの名無しさん
08/10/05 09:51:29 .net
ForthのVMとしては、
論理的には最低限二つの区別されたスタックがある。
標準的な実装での利点(v.s.スタックフレーム方式)は、
サブルーチン間でのデータのコピーが減らせること。

スタックフレーム一本でやるのはCとかでも標準的な実装だけど、
VMという同じ抽象度で比べれば、Cにはスタックは無い。

VMが実装できれば機械自体の仕組みはどうでも良い。

444:デフォルトの名無しさん
08/10/05 13:26:57 .net
込み入った話は分からんけど、
とりあえずBF書けたらチューリング完全じゃなかったっけ?

445:デフォルトの名無しさん
08/10/05 14:12:31 .net
なんか話が噛み合ってない気がする。

446:デフォルトの名無しさん
08/10/05 15:11:57 .net
なんでそこまでチューリングマシンにこだわるのかわからん。
Forthがチューリングマシンであろうとなかろうと
Forthで実用的なプログラムは書ける。

あともう一人、やたらリターンスタックを排除したがる奴も
何をしたいのかさっぱりわからん。

447:デフォルトの名無しさん
08/10/05 17:47:31 .net
まず当たり前の大前提の確認からだけど、Forthはチューリング完全だから。
仮にForthの仕様からリターンスタックだけを排除したとしても(それはForthとは呼べないだろうが)
チューリング完全だ。理由は>>442

リターンスタックがBPで代用できるとか正直意味わからん。
スタック演算自体理解してない希ガス。

448:デフォルトの名無しさん
08/10/05 18:27:08 .net
リターンスタックという名前がいかんのだろ。


449:デフォルトの名無しさん
08/10/05 18:35:04 .net
>>437
スタックオートマトンとスタックマシンをごっちゃにしてる気がする。

450:デフォルトの名無しさん
08/10/05 18:39:13 .net
>>448
むしろリターンスタック以外の名前があるなら知りたいものだが。

451:デフォルトの名無しさん
08/10/05 19:02:41 .net
>442
大雑把にはこんな感じかね。
・データスタック: 引数&戻り値
・リターンスタック: 実行する命令列(辞書で展開された単語含む)

リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね


452:デフォルトの名無しさん
08/10/05 19:25:44 .net
リターンアドレスを積んでいるからリターンスタック
それでいいと思うが、難しく考えすぎじゃね?>>451

453:デフォルトの名無しさん
08/10/05 19:28:44 .net
Aスタック←→Bスタック
だったら勘違いが起きなかったと思う。


454:デフォルトの名無しさん
08/10/05 19:34:19 .net
>>453
むしろ勘違いを引き起こしそうなんだが。
リターンスタックが難しいんじゃなくて、
リターンアドレスをスタックに積むという
当たり前の関数呼び出し規約を説明しなければ、
理解されない時代になったということか…

455:デフォルトの名無しさん
08/10/05 21:59:43 .net
なんでリターンスタックの名前で混乱とか勘違いがあるの?
ひょっとして、リターンと聞いて戻り値を連想しちゃう人がいる、とか?
だとしたらかなりキビシい状況だな。

456:デフォルトの名無しさん
08/10/06 01:09:11 .net
カールスタックの方が一般的じゃね?

457:デフォルトの名無しさん
08/10/06 01:09:52 .net
あ、カールじゃなくてコールスタック

458:デフォルトの名無しさん
08/10/06 01:24:45 .net
カールはスナックだな

459:デフォルトの名無しさん
08/10/06 07:35:22 .net
カールと言えば薄べったいのが出てることを最近知った。
従来品に比べて口の裏に張り付きにくいのはメリットだが、
少し物足りない気がした。

460:デフォルトの名無しさん
08/10/06 11:21:56 .net
Forth では昔からリターンスタックと呼んできたので、その伝統に則ればいいと
思うんだけどな。Wikipedia だと項目はコールスタックで立てられているが。

461:デフォルトの名無しさん
08/10/06 12:10:36 .net
コールスタック->カールスナック->コーンスターチ->張り付かないならカールじゃない

勉強し過ぎでしょう。

462:461
08/10/06 12:30:27 .net
補:そもそもForthが一般的じゃない

463:デフォルトの名無しさん
08/10/06 21:49:04 .net
・リターンスタックが普通のCPUで言うとことの「スタック」。
 ワード(Cで言うところの関数、実際にはサブルーチン)
 を呼ぶと呼び出し戻るためのアドレスを積む。

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

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

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

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


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

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

なんて言っている人、本当に理解できてるの?

464:デフォルトの名無しさん
08/10/07 00:25:52 .net
>463
いや、別にWORDがサブルーチンである必要はないんじゃない?WORD毎の環境要らないんだし。
Cとの相性を考えるとサブルーチンにした方が良いと思うけど。

あと、CPUのアーキテクチャには疎いんだけど、最近のCPUでスタック持ってるのってあったっけ?


465:デフォルトの名無しさん
08/10/07 06:15:51 .net
x86アーキテクチャには思いっきりスタックポインタがありますが?

>>464のいう「最近のCPU」が非ノイマンアーキテクチャとかを指すなら
スタックがないCPUもあるかも知れないけど。

466:デフォルトの名無しさん
08/10/07 06:37:45 .net
>>464
前半は実装と仕様が混乱してそう。
後半は、たぶん、CPUの「レジスタアーキテクチャ」「スタックアーキテクチャ」と
データ構造としてのスタックを混同している。

Wikipediaやblog読んで理解した気にならないで実際に自分で手を動かしてみなよ。
ちょっと恥ずかし過ぎるぞ、あんた。

467:デフォルトの名無しさん
08/10/07 12:34:16 .net
>>464 の言ってる「スタック」はハードウェアスタックのことと思われる。

>>463
「データスタックってのは、言ってみれば「無限に増えるアキュムレータ」って感じ。」
ってのは、確かにハードウェアスタックを思わせる記述だが。

468:デフォルトの名無しさん
08/10/07 13:28:27 .net
post,preのincやdec付きレジスタ間接参照命令があればデータスタックと等価だよね?
リターンスタックってのはサブルーチンコール時に戻りアドレスをpushする為のレジスタの事でしょう?
なら今時のCPUで無い物の方が珍しいと思うんだけど


469:デフォルトの名無しさん
08/10/07 20:49:02 .net
x86って俺の生まれる前からあるな。
定年過ぎた方には最近なんでしょうけど。

470:デフォルトの名無しさん
08/10/07 21:09:44 .net
定年過ぎて無く立ってプロセッサ自体30年の歴史しかないじゃないか


471:デフォルトの名無しさん
08/10/07 21:36:31 .net
最近のCPUは古いアーキテクチャのものがほとんどだよね。
細かいところは違うんだろが。

>>468
>戻りアドレスをpushする為のレジスタ
レジストリって意味?
RISCだと、戻りアドレスを保存するレジスタがあること多いよね。

まあ、リターンスタックは、
リターンアドレスを積むため専用(原則)のスタック
ってことがわかれば、いいじゃない。
データスタックと別にある利点もわかってるわけでしょ。

本当は「リターンスタックがあること」じゃなくて、
データスタックが複数のワードを横断して固定されていること、
の方が特徴だよね。
普通の言語の実装だと、
データスタックがサブルーチンごとに別々にリターンスタックの中にあって、
受け渡すデータはコピーする、
という感じなわけだ。比喩的に言えば。

アセンブリレベルでもリターンアドレスのpush/popが自動になってるなら、
気付かない人がいてもしょうがない。

472:464
08/10/07 23:32:13 .net
>465
いや、スタックポインタ(レジスタ)じゃなくてスタック。>467 の通りですな。>463で『アドレスを積む』とか
書いているからHWスタックのことかと思った。
スタックを内部に持つCPUの話があった記憶があったので勘違いしたわ。すまんね。


forthあんまり詳しくないんで済まんのだけど、『リターンスタックには、ワードを呼ぶと呼び出し戻るため
のアドレスを積む』んだっけ?
正規化の観点からは『まだ実行していないWORD』もリターンスタックに積めた方が便利だと思うけど。
WORDコンパイルの実装で手が抜けなくなるし……


473:デフォルトの名無しさん
08/10/07 23:56:37 .net
>>472
意味が理解できん。
「まだ実行してないWord」を積む、って具体的に何を積むの?
まだ実行してないワードのアドレスなら辞書に入ってると思う(関節スレッディングの場合)

474:デフォルトの名無しさん
08/10/08 04:22:01 .net
>>469
いまでも現役バリバリで使われていて
マイクロソフトの最新OS「VISTA」がポーティングされる
x86アーキテクチャが「最近のCPU」では無いとでも?

あるいはCore2DUOとかがX86アーキテクチャじゃないとでも思ってる?

475:デフォルトの名無しさん
08/10/08 06:31:12 .net
>>472
Forthと関係なく、関数の呼び出し元に戻るためにアドレスをスタックに積む、
という動作は、アセンブリレベルでは普通の関数呼び出し規約。
Forthは言語レベルでリターンスタックを操作できる言語だけど、
普通は意識しなくてもいいから、リターンアドレスが何のために存在しているのか
理解できない人がいても不思議じゃないけど、せめてもう少し自分で勉強して欲しい。

476:デフォルトの名無しさん
08/10/08 06:35:19 .net
>forthあんまり詳しくないんで済まんのだけど、
とか、逃げをうたず自分で触ってみろよ。

477:デフォルトの名無しさん
08/10/08 14:37:36 .net
441だけど盛り上がってるね。

自分なりのまとめ。
リターンスタックはBPとcall/retの役割がある。

call/retを他の命令で書くと

・関数の呼び出し
push $LNEXT
jmp func
$LNEXT:

・関数のret
pop ecx ; $LNEXTのアドレスがecxに入る
jmp [ecx]

・関数のはじめ
push ebp
mov ebp, esp

・関数のおわり
mov esp, ebp
pop ebp

こうなる。
つまりBPはリターンスタックのトップと同じ。
BPを基点にすればデータスタックだけでも同じ事ができる。
「ボクが考えたforth」ではリターンスタックは必要ない。

478:デフォルトの名無しさん
08/10/08 18:17:31 .net
>>441=477
それを実際に作って発表したら
いままで君をバカにしていた連中にギャフンと言わせられるよ。
ガンバ。

479:デフォルトの名無しさん
08/10/08 18:47:05 .net
で、その「ボクが考えたforth」では、
パラメタはどうやって渡すんだ?

480:デフォルトの名無しさん
08/10/08 19:05:03 .net
どう考えても普通にCALL/RETした方が速そうだけど
わざわざ面倒くさくしてどうするの?

あと、ENTER/LEAVEとか使わないの

481:デフォルトの名無しさん
08/10/08 21:00:40 .net
>>477
もはやどこから突っ込んで良いものやら…
二つほど疑問が。

一つ目。
>>479も言ってるけれど、その実装だとパラメタの受け渡しが面倒そうなのだが。
たとえば、その実装方法で、

: foo drop drop 3 4 5 ;
1 2 foo

としたときにスタックがどのように変化していくのか書いてみてくれ。
解決方法を考えられなくもないが、たぶん独立したリターンスタックが
あるほうがシンプルだと思われ。

二つ目。

リターンスタックを操作する命令はどうやって実装するの?
これも独立したリターンスタックがあるほうがシンプルだと思われ。

forthじゃない何かをつくろうとしているのだろうか?

482:デフォルトの名無しさん
08/10/08 21:16:43 .net
二つ目用の問題も書いておくよ。

: bar 1 2 3 >r >r 1 + r> r> ;



483:デフォルトの名無しさん
08/10/08 23:38:28 .net
混乱してるようだから、
まず、ネイティブの場合とスレッディングの場合を分けて考えた方がいい。
ネイティブForthで自然な実装では、
SP=リターンスタックポインタ(RSP)
BP=データスタックポインタ(DSP)
となってる。
UNIX/Cの普通のスタックを知ってれば、機能的な対応は明瞭なはず。
リターンスタックが伸びても、DSPは別フレームに移らないのがForthのポイント。

ちなみに、Forthでも局所変数が使えるヤツがあって、
その局所変数には、リタースタック中にフレームを作って割り当てるのが普通。
これも、標準のスタックがわかってれば意味は明瞭。

スレッディング(直接・間接)方式だと、
呼出しはCallじゃないから、
BPをRSPにしてもかまわんが、
パラメタとリターンアドレスの混合は、
Forthでは無謀。動的にチェックが必要な上に、完璧にはできそうにない。

484:464
08/10/09 01:15:39 .net
446です。
forthは興味半分で使ったレベルでしかないですね……
concatenative俺言語の設計の参考にしているぐらいです。

>473
リターンスタックを「次に実行する命令の列」という形に抽象化すると、「現在処理中のWORD」と
「ソースコードを解釈したWORD」「Dictionaryに保持されているWORD列」…つまり呼び出されて
いないWORDを対称(等価/交換可能)に扱うことができるようになるので、バーチャルマシンの
構造を簡単化することができるかと思います。
……forthで許されているのかしらんけど。



485:デフォルトの名無しさん
08/10/09 06:24:10 .net
リターンスタックに積んであるリターンアドレスは、
「これから実行される命令列」へのポインタそのものと見なせるから、
そのアイデアが新しいとは思えないけどな。
Forthぐらいバーチャルマシンの実装が簡単な言語もないし。

ただ、リターンスタックの意味がよくわからないままに、
他の言語のように抽象構文木を再帰的に処理するような
実装にしていると、リターンスタック操作の実装で悩むの
かもしれない。

486:464
08/10/09 08:54:40 .net
>485
>463は呼び出したWORDを積むことを前提にしているし、>451 >472で言ってるのが >463 >473で
思い切り否定されてるので、forthじゃそういう考え方無いのかな、と思った。
もしforthでもそういう使い方しているんだったらおいらの不勉強だね。


487:デフォルトの名無しさん
08/10/09 10:46:32 .net
>>486
485のいってる意味は、
スレッディング方式のforthでは、
辞書は実行されるワードのポインタのリストとみなせるわけで、
リターンアドレスというのは、辞書内への戻りアドレス、
つまり、これから実行されるワードのリストへのポインタといえる
ということと思われる。

ワードのポインタを直接リターンスタックに積み込むような、
インストラクションキャッシュみたいな仕様のリターンスタックの実装は、
ちょっと聞いたことが無い。
というかそれじゃリターンスタックじゃない。

488:デフォルトの名無しさん
08/10/09 20:52:04 .net
487の言わんとすることを俺なりに解釈してみる…

: foo dup + ;
: bar foo drop ;
bar の処理中に foo を実行するときに、
foo の次の drop のアドレスをリターンスタックに積む。
それで、foo の実行終了時にリターンアドレスから戻り先を取る。
これが、さっき積んだ drop のアドレスということ。

で、「drop のアドレス」っていうのを「ポインタ」と呼んでいる。


489:デフォルトの名無しさん
08/10/09 21:08:57 .net
fooが呼ばれたときのリターンアドレスは 「dropのアドレス」というより
「dropの直前のアドレス」だ。
微妙なニュアンスに聞こえるかもしれないが。

: bar foo ( ここ ) drop ;

( ここ ) と書いた部分に戻ってくる。

490:デフォルトの名無しさん
08/10/09 21:12:38 .net
: foo dup + ;
: bar dup * ;
: baz foo ( ここ ) bar ( そこ ) ;

foo が呼ばれたときリターンスタックには( ここ )が積まれてる。
bar が呼ばれたときリターンスタックには( そこ )が積まれてる。

bar というワード自身がリターンスタックに積まれているのではない。

491:デフォルトの名無しさん
08/10/09 21:16:04 .net
ついでに >>56 のリターンスタックを使ったパズルの説明でも書いておこう。

問題は、

: foo twice ." Hello" ;

で、

HelloHello

を出力する twice を定義しろというパズル。

492:デフォルトの名無しさん
08/10/09 21:22:30 .net
解答は、

: twice r> dup >r >r ;

何が起きているか説明すると、twice が呼ばれたとき、リターンスタックには、

: foo twice ( ここ ) ." Hello" ;

上の( ここ )が積まれている。
twice は最初に r> を実行して、( ここ ) をリターンスタックからデータスタックに移している。
次の dup で ( ここ ) がデータスタックに二つ積まれた状態になる。
最後に、 二つの >r で ( ここ ) が二つリターンスタックに戻される。

493:デフォルトの名無しさん
08/10/09 21:27:12 .net
さて、定義されたワードの終端に到達したので Forthは、
リターンスタックからリターンアドレスを一つ取り出してそこに戻ろうとする。

: foo twice ( ここ ) ." Hello" ;

↑これの ( ここ )に戻ってくるわけだね。
そして、Helloを出力する。

そしてまた定義されたワードの終端に到達するので、Forth は
リターンスタックからリターンアドレスを一つ取り出してそこに戻ろうとするわけだ。

つまり、もう一度 ( ここ ) に戻る。
もう一度、Helloが出力されたら、次にリターンスタックからpopされる
リターンアドレスは foo を呼び出したアドレスなので、ここでようやく、
foo の実行が終了することになる。

494:デフォルトの名無しさん
08/10/09 21:29:45 .net
リターンスタックに積まれているリターンアドレスは、
次に実行すべきワード単体ではなくて、
それ以降、実行すべきコード全体の先頭を指し示すアドレスだ、
と、理解できたかしらん?

495:488
08/10/10 00:34:56 .net
(ここ) は分かってるつもりなんですが、
メモリアドレス的に的確に伝えるには難しいような気が。。。

: baz foo ( ここ ) bar ( そこ ) ;
16bitアドレス環境として、スレデッドコードで考えると、
(ここ)は foo のアドレスと同じか、それとも +1 でしょうか?
# foo のアドレス +2 すると bar のアドレスですよね

なんかアホなこと言っているようですみません。

496:デフォルトの名無しさん
08/10/10 00:55:01 .net
>>495
「barのアドレス」と書くとbazの定義の中のbarの呼び出しのあるアドレスなのか、
それともbar自身の定義のアドレスなのか混乱するから、
( ここ ) と表現したわけで、その違いがわかってるなら問題ないですよん。
あとポインタってわかるよね?

497:デフォルトの名無しさん
08/10/10 01:03:18 .net
>>495
その言い方で言えば、(ここ)はbarのアドレスですね。
正確には、bazの定義の中のbarのアドレス。
>>490 での例を少し補って、

: foo dup + ;
: bar ( あっち ) dup * ;
: baz foo ( ここ ) bar ( そこ ) ;

と書けば、「barというワード自身」というのは( あっち )のことになる。

498:496
08/10/10 01:20:54 .net
>>497
補足ありがとう。

>>486の書き込みの問題点を考えてみると、Forthのリターンスタックは、
明らかに「WORDを積」んではいない。
WORDを積むという表現で想起されるのは、>>497の( あっち ) を積むという
ことだとForth使いは受け取るだろうから。
そして ( ここ ) や ( そこ ) は明らかに>>484の「次に実行する命令の列」を
指し示しているわけなので、何が新しいのかよくわからない、という感想に
なるのだと思う。

499:464
08/10/10 01:36:27 .net
>498
新しいかどうかなんて知らんよ。単にWORDの扱いを正規化できてVMが簡素になるっつうだけの話。
>497で言及している(ここ)(そこ)みたいな間接ポインタをVMで扱う必要も無くなるし。

まあ、その皺寄せをWORDに押し込んでるだけなんだけどね。

500:496
08/10/10 01:42:51 .net
>>499
なんていうか…
「(ここ)(そこ)みたいな間接ポインタ」というそれそのものが、
アセンブリ言語の時代からある「リターンアドレス」という概念なんですよ…。
Forthはそれをリターンスタックに分離して保存・復帰しているだけのこと。

501:デフォルトの名無しさん
08/10/10 06:35:09 .net
>>491

>そして、Helloを出力する。

. "Hello"
がなんでHelloを出力することになるの?
"Hello" .
じゃないのはなんで?
文字列リテラルは特別扱い?

502:デフォルトの名無しさん
08/10/10 08:32:35 .net
>500
今は実際のリターンアドレスの話をしとらんよ。
リターンスタックを「次に実行する命令の列」という形に抽象化するっつうとるだろうに。


503:デフォルトの名無しさん
08/10/10 08:46:05 .net
>>501
." とか、 前付きの " は、Forthではただの引用符じゃなくて、一つのワード。
だから、Helloとの間に空白が要る。
但し、終わりの " はセパレーターだから、空白なしで良い。

前にも出てたけど、
Forthでは文字列リテラルはポインタと長さの二つの数値で表す。
「.」は、トップアイテムを一つpopして値をプリントするワードだから、

" Hello" .

だと5がプリントされるだけ。文字列ポインタがスタックに残る。

「."」 が 「次の " までの文字列をプリントする」というワード。
文字列をスタックに積んだときは

" Hello" type

とやる。


504:デフォルトの名無しさん
08/10/10 08:52:55 .net
>>502
だから、「次に実行する命令列」は辞書の中に既にあるんであって、
それはスタックである必要はなくて、いってみればアレイ。
辞書の中で実行は動的に行ったり戻ったりするから、
やっぱりリターンアドレスの保存は必要。

505:デフォルトの名無しさん
08/10/10 09:06:11 .net
>>503
>「."」 が 「次の " までの文字列をプリントする」というワード。
なんじゃそら
ワロタ

506:デフォルトの名無しさん
08/10/10 17:24:55 .net
factorだと文字列リテラルはあるよ

507:488
08/10/10 22:08:31 .net
>>496,497 サンクス

スレデッドコードと書いておいて誤解がなかったようだ。
497 のレスだと、俺の中では「次のワード」という認識になる。
(あっち)という表現を使えば確かに誤解はなくなる。

なんだか、リターンスタックのデータ内容と、
(サブルーチン)リターンアドレスを混同した希ガス

508:464
08/10/11 00:37:41 .net
>504
「必要がないから積まない」じゃなくて、「VMの原理を簡単にするために積む」んだって。
VMが辞書の中を行ったり来たりしないようにするのが目的。
もちろん、VMの仕事をWORDに移管しただけの話だし、スタックが大きくなるデメリットもあるけどな。

509:504
08/10/11 01:03:24 .net
>>508
つまり、ワードを全部インラインにするということ?
それなら確かに理論的には可能だし、リターンスタック自体要らない。
普通は、大きくなるのはスタックじゃなくて辞書だな。

まあ、辞書からインラインで展開したものを
リターンスタックにコピーしてもいいけど、
ランタイムにやるなら相当動作が遅くなると思う。
それに、
なぜそのためにスタックというデータ構造を使うのかがわからない。
後ろから先に積んでいくことになるわけだが。

その発想はインストラクションキャッシュだと思う。
だから、むしろキューがいいと思う。
ソフトウェア的にやると相当遅いとは思うけど、
論理的には可能だと思うよ。

510:デフォルトの名無しさん
08/10/11 02:00:15 .net
サンクス >693

5 ソースコード
6 boost::spirit
というので激しく不安になるな。

というか、スクリプトの入門というのなら、BASICタイプ言語の作成とかCタイプ言語の作成
とか分散しないで、どっちか一つに集中すべきじゃない?

入門だったら、むしろ構文はシンプルなforthライクにして、エンジンの中身に拘るべきだと思うけど……


511:デフォルトの名無しさん
08/10/11 02:02:28 .net
誤爆スマソ

512:464
08/10/11 02:18:22 .net
>509
いや、基本はWORD呼び出し時に展開(そのWORDに定義されたWORD列をスタックに押し込む)。
WORDコンパイル時に全部インラインに展開するわけじゃないです。
#高速化を目的として、WORDコンパイル時にある程度はインライン化することになると思うけど。

WORDに定義されたWORD列を、実行時にその場で積んでその場で処理する必要があるから、
FIFOの仕組みが必要になります。

まあ、小まめにWORDの積み降ろしをやらなきゃいけないから、確かに重そうだけどね。




513:デフォルトの名無しさん
08/10/11 05:37:05 .net
464のやり方は、ありえなくはないけどForth的じゃないね。
どっちかっていうとJava VMのJITコンパイラみたいな。

Forthはシンプルな実装で軽い、ってイメージ。

514:デフォルトの名無しさん
08/10/11 06:54:12 .net
>>464のやり方だと実行の度にリターンスタックに命令列のコピーが発生するわけだな。
対して普通のForthはリターンアドレス一つのコピーで済む。
Forthでは関数の戻り場所を実行時に入れ替えたりできる( >>59, >>62 ) わけだけど、
>>464のやり方だと命令列自体の入れ替えになるから相当面倒。
Forthの自由度をわざわざ減らしている気がするんだけどな。

でも作るというならがんがれ。
様々な進化があってこそ発展もある。

515:464
08/10/11 13:07:00 .net
>513
いや、実装はこっちの方がシンプルだよ。辞書の解釈を全部WORDに押し付けることができるから。
ただ、スタック操作が増えるから重くなる方向だけどね。

>514
リターンアドレス前提だと難しいよね。作業用スタックがもう一本ありゃいいんだけど。
俺言語のVMだと自前スタックで実装しているので大した話じゃないです。

516:464
08/10/11 13:22:12 .net
>514
ちょっと補足。
複数のWORDを押し込もうとすると確かに面倒だね。
俺言語でも
 1. 無名WORDを作る
 2. 1.のWORDに実行するWORDを押し込む
 3. 1.のWORDをリターンスタックに押し込む
といったパック化が必要になります。

517:デフォルトの名無しさん
08/10/11 13:26:05 .net
464のVMだが、
ハードウェアレベルではもう一般化してる
インストラクションのプリフェッチとおなじだよね。
マシン語のデコーダレベルでのVMという感じか。

実装する場合の最難題は条件付きジャンプだと思う。
IFとか不定ループをどう載せるかが鍵だな。
これを考えると、VMが仕組みとして単純になるかどうかは微妙だと思う。
まあ、ベタでやればできそうな気はするが、
ハードウエアの仕組みをソフトウェアで二重にしてるだけのような気がしないでもない。

518:464
08/10/11 13:38:04 .net
>514
思い出した……>59を実現するにはreverse自体のパック化も必須なんだっけ。
そういや>59みたいな操作をどうしようか悩んだな。

ただ、こういったWORDを跨ぐ暗黙的なリターンスタック制御てけっこう危険じゃない?
個人的にはWORDはデータスタックの状態にのみ依存すべきだと思うけど、WORDを越えた
範囲までリターンスタックを操作できるようにすると、WORD同士の依存関係が出てしまって
連鎖性(concatenative)が崩れるような気がする。
forthの条件分岐でも、セパレーターを使った明示的な制御をしているわけだし。

519:464
08/10/11 13:49:31 .net
連投スマソ
>517
そうか、CPUだともう一般的なのか……。さすがに天才的な変態が集まる業界だな。
やっぱりCPUのアーキテクチャ勉強しないといけないなあ。

IFは構文解析で逃げました。
block := block ? WORD1 ! WORD2
という三項演算子を用意して、条件分岐用WORDに解釈するようにしました。
不定ループの構文を用意するかどうかは検討中です。


520:517
08/10/11 13:59:32 .net
もうすこし考えてみたんだが、
ワードがどこかで他のワードを呼び出し、そのワードがどこかで他のワードを呼出し...
という場合には、
ワードシーケンスに展開する段階で、
展開すべき個所をたどるためのリターンスタックが必要な気がする。

だから、464のVMは、
普通のForthでの実行と同じ動作でワード系列をコピーして、
それから順番にInterpretして実行するという感じになって、
単なる二度手間ではないかな。

521:464
08/10/11 15:30:32 .net
>520
どのみちリターンスタック(実行する命令列を保存する専用スタック)が必要なのはその通り。
 WORDの動作:普通のForthでの実行と同じ動作でワード系列をコピー
 VMの動作:  順番にInterpretして実行する
というところがポイントですな。VMは辞書のこととか考える必要がないのでシンプルになります。
その代わり「辞書からWORD列を拾ってリターンスタックに展開する」というWORDが必要になるけど。

確かにコピーする手間はムダな気もするんだけどね……
辞書のWORD列を直接トレースするのと比べてどんぐらい余計な手間がかかってるんだろう?
ポインタ操作数回&アクセス数回レベルだと思うけど。


522:514
08/10/11 18:35:01 .net
>>518
普通はリターンスタックとか継続とか触れない言語の方が多いから、
Forthではなく俺言語を作るつもりなら、言語デザイナであるお前様自身の
判断で実現可能にしてもいいし、そうでなくしてもいいと思うよ。
ただForthは言語レベルでリターンスタックを操れる結果、協調的マルチタスクやら
コルーチンやら言語実装のレベルで普通対処するものも、ライブラリレベルで実現できる柔軟さがある。
リターンスタックは他の言語にはないForthの特徴の一つだからね。
俺言語でなんとか実現する方法を悩んでみるのも楽しいんじゃない?

523:514
08/10/11 18:47:48 .net
あとForthのVMって相当シンプルだよ。
アセンブリ言語で書かれた昔のForthとかコアの部分はアセンブリ言語で数行レベルだった気がする。
どのへんが複雑だと思ったのかは興味がある…

524:517
08/10/11 21:01:10 .net
>>521
いや、そうではなくて、
「WORDの動作」の中の、「普通のForthと同じ動作で」ってところに、
リターンアドレスを保存するスタックという意味でのリターンスタックが、もう必要なのではないかということ。

あと、言葉の問題として、
大きい意味でのワードを展開する動作のところからもうInterpreter(=VM)の動作というのが普通だと思う。
つまり、VMの動作の前半をWORDの動作と呼んで違う名前にしたから、
残ったVMの動作が簡単に見えるというだけなんじゃないかな。
辞書中のワードから始めると、ForthのVMよりも(多分プリミティブ)WORDの系列を作る部分が余分で、
より複雑になってると思う。

でも、自分の言語を作るのをやめろといってるんじゃないよ。
むしろ応援してる。

ちょっと話題はそれるけど、Forthというか、スタック指向言語は、
コンパイラライターフレンドリーなんだよね。
だから、Forthコード書くよりForth(風オレ言語)VMを書く人が多かったりするわけだが、
ホントはForthでアプリケーションを書くときも「オレ言語」を作るつもりで書くと良いと思ってる。

525:デフォルトの名無しさん
08/10/11 21:33:08 .net
Forthの用語って独特な言い回しがあるからな。
知らない人は結構混乱する。
スレデッドコードのForthの場合、ソースコードを解釈してスレデッドコードを
生成することをコンパイルといい、スレデッドコードを生成する部分を外部インタープリタ、
スレデッドコードを解釈実行する部分を内部インタープリタと呼ぶ。
(これで良かったよな?同志?)
このスレでVMと言った時に内部インタープリタだけなのか、外部インタープリタも含むのか?
どっちだろうか?

526:デフォルトの名無しさん
08/10/12 00:45:26 .net
>>525

テキストを読み込んで、
1) ワードを辞書内で特定
2) だめならリテラルに変換
3) ダメならエラーで終了。

という部分が外部インタープリタ

1)または2)で成功したときに
モードに応じてコンパイル(Forth的意味)するか実行する
のが内部インタープリタ

だと思ってました。

Forthはテキストインプットも弄れるという面白さもあるよね。

Forth VMというと、外部も含むのかな。
上のリターンスタック云々の話は、
内部インタープリタのことだと思うけど。

527:デフォルトの名無しさん
08/10/12 07:57:23 .net
内部インタプリタて(スレッドコードで実装してる場合は)nextルーチンのことじゃなかったっけ。

528:デフォルトの名無しさん
08/10/12 08:49:02 .net
そうNEXTルーチン。アセンブリ言語で数行、という奴。

529:464
08/10/12 15:10:26 .net
>522
その辺は「自由と責任」というやつですな。「銃で足をブッとばす自由」でもあるけど。

>どのへんが複雑だと思ったのかは興味がある…
自分でも何でだったっけな、と過去の記憶を探り出してみたけど、
・実行中のWORDの次のWORDを辞書の中から探せるようにする仕組みが必要
  ×実行中のWORDの中身を変更するのが大変(VMのスタックに積んでいるWORD含む)
  ×番兵などの終了処理が必須
  --> VM側のスタックに積むことにすればpop&top参照で正規化できるし、元の値を
    コピーするからWORD変更にも影響されない。
・VM側に「WORDを実行する」という手順が必要になる
  --> VM側のスタックに積むことにすればpushで正規化できる
ぐらいかもしれない。
コンパイル時にWORDの中身が確定するforthだとあんまり問題にならなそうだね。

530:464
08/10/12 15:20:28 .net
>524
「スタックに複数のデータを押し込む操作は機械語レベルだとアトミックにならない」ということ??
C++で実装しているから意識していなかったけど、そうかもしれないですね。
少なくともプリミティブで実装する必要あるね。

>ForthのVMよりも(多分プリミティブ)WORDの系列を作る部分が余分で、
これは狙ってやっていることだから仕様がないですね。
まあ、俺言語ではVM自体もWORD扱いにしているのですが……

531:デフォルトの名無しさん
08/10/12 15:50:56 .net
>>529
んー、やっぱり、思い込みでForthを理解したつもりになるんじゃなくて、
本格的に触ってみたほうが良いと思うんだけどな。

>実行中のWORDの次のWORDを辞書の中から探せるようにする仕組みが必要
通常、Forthは実行時には、スレデッドコードにコンパイルされた命令列を、
上にも出ているnextルーチンで辿るだけなので、仕組みというほどの仕組みはないよ。

>実行中のWORDの中身を変更するのが大変(VMのスタックに積んでいるWORD含む)
間接スレッディングのForthだと定義済みのワードの変更は、一カ所ポインタを書き換える
だけで済むはず。

>番兵などの終了処理が必須
番兵というかワードの最後にnextルーチンへのジャンプかnextルーチン自身を書き込むだけ。

>VM側に「WORDを実行する」という手順が必要になる
スレデッドコードのForthの命令列は、ワードへのポインタが並んでいるだけで、
「WORDを実行する」という意味のインストラクションは必要ないよ。

532:464
08/10/12 23:25:00 .net
本格的に触るのは……あの構文は色々と嫌だ。
[条件] IF [肯定時] ELSE [否定時] THEN とか。
せめて条件算子的だったらなぁ。[条件] ? [肯定時] : [否定時] ;

>531
細かいことを言うと、nextルーチンが辞書内のスレッデッドコード構造の詳細を知らなきゃ
ならないので、VMと辞書の関連が密になりそうな気がします。スレッデッドコードをスタックに
pushしてVM内に取り込んじゃえば辞書内の構造を気にする必要無いし。
まあ、最適化のために作り込んでも良い気がするけどね。そこは将来の課題ということで。

>一カ所ポインタを書き換えるだけで済むはず。
WORD自体を置換する場合はそうですね。WORDの挿入や削除はたぶん難しいかと。
そんな特殊なことは禁止にして、新規にWORD定義させた方が良いかも知れないけど。
あるいは無名WORDとかスキップWORDを用意するとか。

>「WORDを実行する」という意味のインストラクションは必要ないよ。
あれ?VMに保存されている「現在実行中のWORD」って、間接ポインタじゃないの?
(nextの動作を考えると、間接ポインタじゃないと色々と面倒臭そうな)
実行前に間接参照からWORDを探す操作が一段余計に必要になるかと思ってた。


533:デフォルトの名無しさん
08/10/12 23:34:45 .net
>VMと辞書の関連が密

というか、それがFORTHの肝のような気がする。

534:デフォルトの名無しさん
08/10/13 00:16:22 .net
スレデッドコード自体、ワードへのポインタを並べたものでしかないから、
ジャンプとかコールとかそういう類のインストラクションをデコードする必要がない、
という意味ね。
あとForthの実装にはダイレクトスレデッドなものもあるよ。
nextルーチンからみると命令列を順に辿ってるだけであって、
「辞書からワードを毎回探している」ってわけじゃないしね。

それより、スタックに命令列を毎回pushするオーバーヘッドのほうがよほど大きいと思うし、
nextルーチンに比べてシンプルとも思えないんだな。

ま、いろいろ悩んで勉強して、これだ!と思える言語デザインに邁進してください、と。
このスレが本当に久しぶりに活性化したのは間違いないしね。

535:デフォルトの名無しさん
08/10/13 00:21:58 .net
>>533
間接スレデッドの場合、Forthコンソールの側から見ると、
逆コンパイルしやすかったり、便利な面はたしかにあるけれど、
VMつうかnextルーチンから見ると、単にポインタを辿っているだけなので、
構造として、VM実装と辞書構造が密、というわけでもないと思う。
実際VM実装テクニックとしてのスレデッドコードは、今や、Forth以外でも
当たり前の技術になってるし。

536:デフォルトの名無しさん
08/10/27 00:52:54 .net
jonesforth読んだ。
ソース付きなので理解しやすい。

OS Xで動かそうとしたが挫折した。
OSXのGASではマクロが対応してないみたいだ。

537:デフォルトの名無しさん
08/11/23 01:13:24 .net
急にスレが進んだと思ったら、止まるのも急だよなこのスレ
やっぱ誰も使ってないってこったな

538:デフォルトの名無しさん
08/11/26 17:30:54 .net
URLリンク(www.intellasys.net)

なんか並列forthマシンっぽいw

539:デフォルトの名無しさん
08/12/27 14:00:32 .net
factor使ってる奴いる?

540:デフォルトの名無しさん
08/12/27 21:13:14 .net
とりあえず入れてみたけど特に使ってないなw

541:539
08/12/28 01:26:48 .net
factorおもしろいぜ。デプロイするとスタンドアロンで動く物もできるし。

542:デフォルトの名無しさん
08/12/29 13:31:00 .net
やっぱだめだこの言語。
人間工学から著しく反してる。

543:デフォルトの名無しさん
08/12/29 19:52:22 .net
サルが人間工学語ってやがる。

544:デフォルトの名無しさん
08/12/29 21:45:56 .net
自分の思考をスタック処理に最適化させればいいんだよw

545:デフォルトの名無しさん
08/12/29 22:06:52 .net
forthに慣れるのはそんなに大変なことじゃないと思うけどなあ。

まあ、問題をごく単純な部分に細分して考えることができないと、
スタック処理が爆発しがちになるとはいえますね。
でも、問題の細分ができない人は、どの言語でプログラミングしても
たかが知れてる。

546:デフォルトの名無しさん
09/01/01 11:45:56 .net
Lispのマクロ的なことができるってほんと?

547:デフォルトの名無しさん
09/01/01 11:56:23 .net
イミディエイトなワードのことかな。
結果としては似たようなことができると言えなくもないけど、
Lispのマクロみたいな2度evalするみたいな高水準のものじゃありません。

548:デフォルトの名無しさん
09/01/07 22:44:24 .net
つまり・・・どういうことだってばよ?

549:デフォルトの名無しさん
09/01/07 23:39:44 .net
factorならlispのマクロと同じようなことができるよ

550:デフォルトの名無しさん
09/01/08 00:11:19 .net
同じ機能を達成できるとしても言語が違えばそこに至るロジックは異なる。
具体的に何がしたいのか特定しないと。
factorはおもしろい言語だが、関数型言語のフリし過ぎなのがイヤラシくもある。


551:デフォルトの名無しさん
09/01/09 12:30:14 .net
何かサンプルが欲しいな。

552:デフォルトの名無しさん
09/01/09 22:47:55 .net
URLリンク(ancient.s6.xrea.com)

553:デフォルトの名無しさん
09/02/26 00:17:58 .net
組み込み用FORTH検討中・・・

554:デフォルトの名無しさん
09/03/07 05:11:31 .net
part 1 の URL ってないの?

555:デフォルトの名無しさん
09/03/07 10:00:54 .net
URLリンク(piza.2ch.net)

556:デフォルトの名無しさん
09/03/07 10:13:20 .net
: Mops ( オブジェクト指向FORTH -- ) ;
URLリンク(pc.2ch.net)

557:デフォルトの名無しさん
09/03/07 13:25:33 .net
thanks

558:デフォルトの名無しさん
09/03/07 18:54:17 .net
このスレも長いね


559:デフォルトの名無しさん
09/03/07 21:43:31 .net
factorとかJoyとか触ってる奴いないのかよ

560:デフォルトの名無しさん
09/03/07 23:32:50 .net
普通の関数型言語に比べてどういうメリットがあるのか分からない。

561:デフォルトの名無しさん
09/03/08 10:51:09 .net
forthは関数型ちゃうし

562:デフォルトの名無しさん
09/03/08 12:22:51 .net
>>560はなんでこのスレにいるんだ?

563:デフォルトの名無しさん
09/03/08 19:52:03 .net
いや、factorがって事なんだが。

564:デフォルトの名無しさん
09/03/08 20:01:58 .net
なんで関数型言語と比較するんだ?
Factor = forth + 無名関数とオブジェクト指向だよ

565:デフォルトの名無しさん
09/03/19 13:57:45 .net
全然Forthと関係ない話だが、AMDのシニアアーキテクトが
チャック・ムーアって名前なのは結構心臓に悪いな。

566:デフォルトの名無しさん
09/06/24 08:13:56 .net
何か話題無いかな

567:デフォルトの名無しさん
09/06/25 14:24:21 .net
LLイベントでの発表者募集中とか

568:デフォルトの名無しさん
09/07/03 05:23:56 .net

    ┌─┐
    │●│
    └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!



569:デフォルトの名無しさん
09/07/03 22:57:04 .net
Pythonスレに帰れw

570:デフォルトの名無しさん
09/07/09 07:11:33 .net
今更ながら FORTH 勉強しようと思ってるんだけど、
何かいい本ある?
できれば日本語がいいけど英語も可。


571:デフォルトの名無しさん
09/07/09 10:23:23 .net
絶版多し

572:デフォルトの名無しさん
09/07/09 21:39:14 .net
触りしか読んでないけど
URLリンク(www.forth.com)

573:デフォルトの名無しさん
09/07/10 07:32:04 .net
>>570
Let over Lambda日本語版

574:デフォルトの名無しさん
09/07/10 20:52:17 .net
>>573
たしかそれってlispの本じゃないか?

575:デフォルトの名無しさん
09/07/10 20:57:56 .net
lispでforthを作る本

576:デフォルトの名無しさん
09/07/10 22:31:17 .net
URLリンク(www.amazon.co.jp)

577:デフォルトの名無しさん
09/07/11 05:33:45 .net
gforth でググるとNVIDIAのグラボしかヒットしない。
Bingだと forth だけがヒットする。愛してるよMS

578:デフォルトの名無しさん
09/07/18 23:02:30 .net
あほな質問かとは思うがよかったら教えてくれ
スタック型言語にはスタックオーバーフローってある?
それともヒープにあたるものをスタックとしてつかている?

579:デフォルトの名無しさん
09/07/18 23:10:10 .net
両方ともYESだよ。

580:デフォルトの名無しさん
09/07/18 23:17:25 .net
オーバーフローだけじゃなくスタックアンダーフローも楽しめるぞ

581:デフォルトの名無しさん
09/07/18 23:31:56 .net
さんきゅー、Jedi!

582:デフォルトの名無しさん
09/07/19 03:45:38 .net
そのネタもう飽きた
次そゆこと言った奴はダークサイドな

583:tor.rootkit.de
09/08/17 17:57:34 .net
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L

名言集 その2
『お前が規制系キャップ取れるか審査してやるよ』

スレリンク(news4vip板) ID:PVAf+dux0 = 自動焼人 ★

> 36 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:31:30.02 ID:PVAf+dux0
> >>33
> キャップとコテハンの違いは何?

> 46 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:38:05.34 ID:PVAf+dux0
> >>45
> その回答では落ちるなw
> 答えは教えないがw

> 50 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:41:29.96 ID:PVAf+dux0
> Q.キャップとコテハンの違いは何?
> A.2ちゃんねるのボランティアの登録制度

> それがお前の答えかw

> 52 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:43:10.06 ID:PVAf+dux0
> まぁ、どうせ正解が出るわけもないし、次の問題。
> 君が思う面白いスレはどんなの?
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
スレリンク(sec2chd板)
にて自動焼人 ★までご連絡ください

584:デフォルトの名無しさん
09/10/06 10:44:14 .net
. 1. HTML    で検索した結果 1~10件目 / 約5,040,000,000件
. 2. PHP      で検索した結果 1~10件目 / 約2,970,000,000件
. 3. Java......   で検索した結果 1~10件目 / 約 835,000,000件
. 4. Forth.    で検索した結果 1~10件目 / 約 323,000,000件
. 5. Ruby..    で検索した結果 1~10件目 / 約 275,000,000件
. 6. perl.....    で検索した結果 1~10件目 / 約 245,000,000件
. 7. Python...   で検索した結果 1~10件目 / 約 204,000,000件
. 8. pascal...   で検索した結果 1~10件目 / 約 170,000,000件
. 9. Delphi    で検索した結果 1~10件目 / 約 127,000,000件
10. VisualBasic...で検索した結果 1~10件目 / 約 121,000,000件
11. lisp...      で検索した結果 1~10件目 / 約.  26,700,000件
12. fortran     で検索した結果 1~10件目 / 約.  21,300,000件
13. COBOL    で検索した結果 1~10件目 / 約.  18,500,000件
14. HSP      で検索した結果 1~10件目 / 約.  12,300,000件
15. FreeBasic.. で検索した結果 1~10件目 / 約   6,320,000件
16. Tcl/Tk.     で検索した結果 1~10件目 / 約   4,940,000件
17. QBasic     で検索した結果 1~10件目 / 約   4,190,000件
18. VisualC....  で検索した結果 1~10件目 / 約   1,360,000件
19. DarkBASIC. で検索した結果 1~10件目 / 約   1,320,000件
20. BasicStudio で検索した結果 1~10件目 / 約    304,000件
21. N88basic.   で検索した結果 1~10件目 / 約    215,000件
22. f-basic     で検索した結果 1~10件目 / 約    109,000件
23. ActiveBasic で検索した結果 1~10件目 / 約.     89,800件
24. 99BASIC.... で検索した結果 1~10件目 / 約.     11,500件

3Dprogramming で検索した結果 1~10件目 / 約794,000件
2Dprogramming で検索した結果 1~10件目 / 約. 57,400件

intel で検索した結果 1~10件目 / 約729,000,000件
amd で検索した結果 1~10件目 / 約355,000,000件

585:デフォルトの名無しさん
09/10/06 11:33:58 .net
J の検索結果 約 1,650,000,000 件中 1 - 10 件目 (0.25 秒)

圧倒的だな。

URLリンク(ja.wikipedia.org)(プログラミング言語)

586:デフォルトの名無しさん
09/10/06 11:36:17 .net
すみません、嘘でした。。。

587:デフォルトの名無しさん
09/10/06 13:38:04 .net
C の検索結果 約 3,910,000,000 件中 1 - 10 件目 (0.32 秒)

588:デフォルトの名無しさん
09/10/06 13:39:59 .net
>>584 <-こいつどこで検索したんだ

HTML の検索結果 約 8,490,000,000 件中 1 - 10 件目 (0.23 秒)

古いコピペか

589:デフォルトの名無しさん
09/10/06 13:42:51 .net
D の検索結果 約 4,780,000,000 件中 1 - 10 件目 (0.24 秒)

時代はもはやDですよ。

590:デフォルトの名無しさん
09/10/06 13:44:54 .net
Brain F*ck の検索結果 約 162,000,000 件中 1 - 10 件目 (0.22 秒)
Brain Fuck の検索結果 約 5,190,000 件中 1 - 10 件目 (0.30 秒)
Brain Fsck の検索結果 約 28,500 件中 1 - 10 件目 (0.33 秒)

591:デフォルトの名無しさん
09/10/08 21:50:04 .net
Fuck の検索結果 約 156,000,000 件中 1 - 10 件目 (0.19 秒)

592:デフォルトの名無しさん
09/10/09 00:25:23 .net
A の検索結果 約 15,560,000,000 件中 1 - 10 件目 (0.06 秒)

時代は A だった。

593:デフォルトの名無しさん
09/11/23 09:27:28 .net
forth検索しにくすぎる

594:デフォルトの名無しさん
09/11/23 18:04:33 .net
URLリンク(www.forth.org)
URLリンク(wiki.forthfreak.net)

595:デフォルトの名無しさん
09/11/25 14:14:43 .net
URLリンク(lab.ee.uec.ac.jp)
このページの仕様だとNFの後にLFが来てるけど、jonesforthだとLFが最初だよね。
NFが先だとFINDの時にLFを出すのに手間がかかると思うんだけど、
NFがLFより前にあるメリットって何かあるのかな?

596:デフォルトの名無しさん
09/11/26 00:14:06 .net
padding の有無の違いかと

597:デフォルトの名無しさん
09/11/30 00:21:59 .net
URLリンク(www.h7.dion.ne.jp)
Gforth マニュアルの和訳 (現在、チュートリアルまで)

598:デフォルトの名無しさん
10/01/05 18:09:33 .net
URLリンク(ronware.org)
Reva
非標準系 Forth (ミニマリスト系)
パブリックドメイン、コアは FASM で記述
プリミティブワードは商用 Forth や GCC 並みに高速
Windows の DLL や Linux の共有ライブラリを呼び出し可
豊富なライブラリが付属

599:デフォルトの名無しさん
10/01/16 15:33:34 .net
URLリンク(www.h7.dion.ne.jp)
Retro (Forth) の和訳
URLリンク(www.h7.dion.ne.jp)
オリジナルのコンソール版仮想マシンを Windows 専用に移植したもの
TinyC のみでビルド可、TinyC の conio.h を利用
超応急措置的改変だが、文字列に日本語も使用可
ビルド済み EXE とオリジナルの retroImage も同梱

600:デフォルトの名無しさん
10/03/11 19:17:24 .net
スレがなくて似たようなスレということでやってきたんだけど
postscriptの話題もOKですか?

forthはif文は逆ポーランドじゃないんですね

601:デフォルトの名無しさん
10/03/12 19:38:03 .net
誰もいないし

カーペット敷いときますね

%!PS
/carpet {
dup 0 eq { pop 4 {dup 0 rlineto 90 rotate} repeat pop }
{
4 {
3 { 2 copy 1 sub exch 3 div dup 3 2 roll carpet 0 rmoveto } repeat
90 rotate
} repeat pop pop
}ifelse
}def
100 500 translate 0 0 moveto
300 3 carpet
stroke showpage

602:デフォルトの名無しさん
10/03/23 00:04:39 .net
URLリンク(factorcode.org)
今死んでね?

603:デフォルトの名無しさん
10/03/23 00:58:37 .net
中の小人が忙しいといってるな

604:デフォルトの名無しさん
10/04/18 17:43:19 .net
FORTHって、ちょっとずつ作れてなんだか良いね。
関数とかじゃなくて、演算子を作りながら進んでる感じ。

605:デフォルトの名無しさん
10/04/18 23:45:47 .net
のんびりのんびり(^。^)y-.。o○

606:デフォルトの名無しさん
10/04/22 05:05:43 .net
何気にコンパイル = 2パスなところがミソなんだね。
最初IF文とか巧妙にスタックで実現しているのかと思った。

607:デフォルトの名無しさん
10/04/28 19:34:13 .net
Factor 座談会
URLリンク(oss.infoscience.co.jp)

608:デフォルトの名無しさん
10/06/15 05:20:29 .net
蔵書を整理していたら
マイコンピュータ No3
特集すぐ動くFORTH

などと言うものが出てきた、1981年の本なのでZ80とかApple向けの実装の話だったりする
思わずScanSnapで取り込んでしまった


609:デフォルトの名無しさん
10/06/15 17:04:11 .net
リギー、かわいいよリギー

610:デフォルトの名無しさん
10/08/11 11:24:30 .net
age

611:デフォルトの名無しさん
10/12/28 08:18:41 .net
age



612:デフォルトの名無しさん
10/12/28 09:18:30 .net
ムーア先生がさらにあさっての方向に。

URLリンク(www.greenarrays.com)

144コアのforthマシンとか誰得

613:デフォルトの名無しさん
10/12/28 09:43:38 .net
いつものことじゃん
いちいち驚くなよ

614:デフォルトの名無しさん
10/12/31 23:45:15 .net
Ubuntu GNU/LINUX10.04を使ってます。

先日、倉庫を整理していたら「パソコン・ユーザのためのFORTH入門」(近代科学社)が
出てきました。懐かしいので、”Ubuntu FORTH”で検索してみてgFORTHの存在を知り
さっそくインストールしてみました。FORTHとの出会いはOh!MZの連載記事「掟やぶりの
magiFORTH」ですが、当時はSーOSを入力していなかったので実際にFORTHに触れる
のは今回が初めてです。

よろしくお願いします。



615: 【大吉】
11/01/01 00:04:06 .net
!omikuji
あけおめ

616:デフォルトの名無しさん
11/01/01 23:57:48 .net
>>614
清水和人だったな、懐かしい

617:デフォルトの名無しさん
11/01/04 08:09:35 .net
>>616
「掟破りのmagiFORTH」は山田伸一郎さんの書いた記事でした。
1985年か1986年のOh!MZ 3月号に掲載されています。

618:デフォルトの名無しさん
11/01/04 20:00:48 .net
>>617
おっとゴメン、もう記憶があやふやだわ
俺はLispの方にハマったな
こうもとやすひこの記事とか楽しく読んでいた

619:デフォルトの名無しさん
11/02/11 21:03:43 .net
>>13>>43
ForthとLISPの両方の特徴を生かした言語Laplasの論文
汎用簡易言語としてみたインタプリタ言語Laplas
URLリンク(ci.nii.ac.jp)
L a p 1 a s 一マイクロ・コンピュータに適した新らしい言語一
URLリンク(eprints.lib.hokudai.ac.jp)


620:デフォルトの名無しさん
11/02/11 21:15:45 .net
日本語プログラミング言語Mind
URLリンク(mimizun.com)

24 名前:名無しさん@お腹いっぱい。 :2000/12/21(木) 06:19
Forthやった後でLISP学ぶとすんげえわかりやすい。
簡易LISPってかんじ。

25 名前:名無しさん@お腹いっぱい。 :2000/12/21(木) 11:22
そういえば、 forth lisp + 2 / な言語が昔ASCIIに載ってた。ラプラスとかいう奴。
トンボグラフィックス(タートルグラフィックスの3D版)とか搭載してて面白かった。

26 名前:名前ついてますか? :2000/12/21(木) 22:51
あれは面白かった... lambdaとか使わなくても関数抽象できたし。
#原田さんはその後も変なものを作るので要注目

27 名前:奥さん、名無しです :2000/12/22(金) 04:24
>>26
え、それなにどうやってやるの。

621:デフォルトの名無しさん
11/02/11 21:20:48 .net
28 名前:名前ついてますか? :2000/12/22(金) 09:10
stackが前提だから (1 +) で (lambda (x) (+ x 1)) 相当。

うーん、closureつければ今でもいけないかしらん..

30 名前:名前ついてますか? :2000/12/25(月) 14:11
そうそう。といいつつ age

29 名前:名無しさん@お腹いっぱい。 :2000/12/22(金) 11:14
xを先にstackに置いといてからそのリスト置いてapplyってこと?

32 名前:29 :2000/12/26(火) 10:35
>>30
そうなのか。それだと関数抽象っていうより
アセンブラのウルテクみたいだな、って思った。

34 名前:名前ついてますか? :2000/12/27(水) 14:10
>>32 関数抽象なんて高尚な概念も stack levelに落として考えれば、
禁断の秘技程度なのです。って落ちじゃだめ?
# ちなみに同じ stack machine でも JavaVMじゃできない
>>26-27
原田 康徳さんの論文s
URLリンク(ci.nii.ac.jp)

622:デフォルトの名無しさん
11/02/11 21:28:52 .net
これか
URLリンク(ci.nii.ac.jp)

「機関リポジトリ本文(無料)」ってリンクからたどってくとPDFで本文読めるな

623:デフォルトの名無しさん
11/02/11 23:23:10 .net
>>622
>>619の上のほうで示したリンク先「汎用簡易言語として見たインタプリタ言語Laplas」は
URLリンク(ci.nii.ac.jp)
こっちで見れるね

624:デフォルトの名無しさん
11/02/12 00:27:43 .net
SECD Machineみたいな、LispやMLを実装するすためのスタックマシンに自然なForthって感じか。
ざっとみたけど、lambdaはあっても、Closureはないみたいだな。

625:デフォルトの名無しさん
11/03/07 10:54:59.82 .net
だなw

626:デフォルトの名無しさん
11/05/28 09:22:21.04 .net
保守

627:デフォルトの名無しさん
11/05/29 07:57:22.03 .net
いつのまにかWikipediaのMindの記事が大幅に書き換わってるな

628:デフォルトの名無しさん
11/06/06 07:09:36.69 .net
おムーア様の過去の著作公開
URLリンク(www.colorforth.com)

629:天使 ◆uL5esZLBSE
11/07/02 23:26:16.04 .net
>>620
---------------------------
(((((((( 日本語プログラミング言語Mind ))))))))(キリ!!ッッ!!!!
------------------
((((((((((( え、それなにどうやってやるの。 )))))))))))(キリキリッッ!!!キリッキリッッッッ!!!!キリッッ!!!!ッッ!!!!
------(きリッ!


お前らってどうみてもゴミだよな

630:デフォルトの名無しさん
11/07/30 14:34:39.15 .net
保守

631:デフォルトの名無しさん
11/09/10 06:58:08.33 .net
時代はFORTH

632:デフォルトの名無しさん
11/09/10 23:29:07.15 .net
forth出ても200超えられないorz

633:デフォルトの名無しさん
11/10/12 20:56:54.15 .net
URLリンク(builds.factorcode.org)
factorの新しいのきてるぅ

634:デフォルトの名無しさん
12/01/16 22:00:32.22 .net
保守

635:営利利用に関するLR審議中@詳細は自治スレへ
12/03/30 23:52:09.58 .net
factor(等のforth系)は頭がトコロテンになるな。
でもプログラミング自体をパズルとして楽しめるような気がする。

636:デフォルトの名無しさん
12/06/26 23:53:01.65 .net
URLリンク(builds.factorcode.org)
新しいのキター

637:デフォルトの名無しさん
12/06/27 01:49:33.00 .net
スタックコンピュータって言う書籍買ってみた
古い本だけどFORTHとスタックマシンへの愛がすげー


638:デフォルトの名無しさん
12/06/27 07:17:19.22 .net
おお、あれは名著だ。

639:デフォルトの名無しさん
12/06/27 10:13:02.11 .net
>>636
初めてさわった
なにこれ、楽しい


640:デフォルトの名無しさん
12/06/28 11:00:23.05 .net
>638
原書はまだPDFで全公開してるのかな?


641:デフォルトの名無しさん
12/06/28 11:06:29.92 .net
URLリンク(builds.factorcode.org)
64bit版キター

642:デフォルトの名無しさん
12/06/28 11:09:24.65 .net
>>640
URLリンク(www.ece.cmu.edu)

643:デフォルトの名無しさん
12/06/30 00:15:59.63 .net
>>639
forth系ってパズル的な楽しさがあるよな

644:デフォルトの名無しさん
12/06/30 22:46:42.75 .net
URLリンク(builds.factorcode.org)
また新しいのキター

645:デフォルトの名無しさん
12/07/03 20:28:16.05 .net
また来ましたな
バージョンアップ祭りの季節?

646:デフォルトの名無しさん
12/07/10 22:11:13.67 .net
FORTHを学ぶサイトを作った - 西尾泰和のはてなダイアリー
URLリンク(d.hatena.ne.jp)

647:デフォルトの名無しさん
12/07/11 23:13:14.19 .net
またニューバージョンきたで

648:デフォルトの名無しさん
12/07/12 22:57:24.59 .net
URLリンク(builds.factorcode.org)
今日の更新

649:デフォルトの名無しさん
12/07/14 19:15:25.30 .net
本当によくバージョンアップくるな

650:デフォルトの名無しさん
12/07/15 18:51:42.95 .net
あ、きてる

651:デフォルトの名無しさん
12/07/18 15:12:10.06 .net
毎度!

652:デフォルトの名無しさん
12/07/19 20:54:07.43 .net
2012-07-17

653:デフォルトの名無しさん
12/07/20 14:00:53.36 .net
2012-07-19

654:デフォルトの名無しさん
12/07/20 17:48:26.40 .net
何だ何だ?

655:デフォルトの名無しさん
12/07/20 22:56:25.07 .net
URLリンク(builds.factorcode.org)
ニューバージョンが来たってことでしょ

656:デフォルトの名無しさん
12/07/20 23:55:48.43 .net
うーん、それニューバージョンって言うものか?
一見するとリリースノートもないし、開発者向けにビルドし直したもので、
一般のユーザー向けに作られたものじゃないと推察するのだが。
本スレに書いてる人、何が変わったか把握してる?

657:デフォルトの名無しさん
12/07/21 09:31:12.80 .net
ステマのにおい

658:デフォルトの名無しさん
12/10/08 20:25:47.38 .net
.

659:デフォルトの名無しさん
12/10/11 20:10:49.89 .net
shuffle shuffle

660:デフォルトの名無しさん
12/10/18 19:40:10.82 .net
test

661:デフォルトの名無しさん
12/11/12 06:30:53.31 .net
&amp;nbsp;test

662:デフォルトの名無しさん
12/11/12 07:13:40.73 .net
 &amp;#160;test

663:デフォルトの名無しさん
12/11/15 22:25:43.78 .net
a
a
a
a

664:デフォルトの名無しさん
12/11/15 22:28:35.87 .net
&nbsp;&nbsp;&nbsp;a
   a
&#xA0;&#xA0;&#xA0;a

665:デフォルトの名無しさん
12/11/22 22:57:21.32 .net


666:デフォルトの名無しさん
13/03/06 01:21:39.12 .net
保守
何か面白い話題無いのかな

667:デフォルトの名無しさん
13/03/06 09:59:04.64 .net
I think so.

668:デフォルトの名無しさん
13/03/08 11:11:43.39 .net
Laplasの人自身による解説があった
URLリンク(blog.goo.ne.jp)

669:デフォルトの名無しさん
13/03/08 11:46:01.28 .net
URLリンク(www.viscuit.com)
URLリンク(twitter.com)

670:デフォルトの名無しさん
13/03/18 01:17:00.32 .net
>>117のコントロールフロースタックについてもうちょっと詳しく聞きたい
ジャンプ先って何へのジャンプ先?

671:デフォルトの名無しさん
13/03/18 01:23:17.50 .net
あああちゃんと調べてなかった、ここの説明でわかったよ
URLリンク(www18.atwiki.jp)

672:デフォルトの名無しさん
13/03/18 19:30:42.45 .net
forthの最大の欠点ってfactorみたいなオブジェクト指向にしたときにスタックに積んだ引数と関数の期待する型が違ったときに困る事だとおもうんだけど
コンパイラのレベルでこれってなんとかならんの?

673:デフォルトの名無しさん
13/03/18 22:45:55.67 .net
普通の関数型言語と一緒じゃね?
全てのトークンに引数型と戻り値型を対応付けて、コンパイル時に
型解決すれば良いと思うけど。

674:デフォルトの名無しさん
13/03/28 01:26:47.80 .net
Windows上のFactorで日本語表示させる方法がわからん

675:デフォルトの名無しさん
13/03/28 01:53:15.83 .net
"日本語" H{ { font-name "メイリオ" } } format nl
で表示できた。
あとはlistenerのfont-nameを書き換えられたらいいのかな。

676:デフォルトの名無しさん
14/01/05 03:24:36.20 .net
保守

677:デフォルトの名無しさん
14/01/05 21:15:32.75 .net
保守!!!

Forth は実用に耐えるのですか?特に可読性的に

678:デフォルトの名無しさん
14/01/05 22:21:30.32 .net
>>677
Forth の達人 (= プロの Forth 屋) なら、数十万行でも苦にならないそうな。
ライフゲーム
URLリンク(wiki.forthfreak.net)
BASIC インタプリタ
URLリンク(home.iae.nl)
FALSE インタプリタとコンパイラ
URLリンク(github.com)
その他
URLリンク(wiki.forthfreak.net)
URLリンク(wiki.forthfreak.net)

みんな目的に特化したプログラミングをするので、汎用ライブラリやフレームワークは無いに等しいけれどね
(個々の実装に特化したものならそれなりにあるけど)。

679:デフォルトの名無しさん
14/01/05 23:08:26.86 .net
thx

まさかこんなに早く返事がくるとは思わなかった!

680:デフォルトの名無しさん
14/01/06 05:54:37.02 .net
常に人はいるんだわ

単に新しい話題がなんにもないだけで

681:デフォルトの名無しさん
14/01/06 15:05:08.84 .net
>>678
Forthの力ってすげー。

>>680
なる


おもしろそうだな。
RPNで文法が統一されているところが超COOLだ!
俺が作ってみようじゃないか?!

ちなみに慣例や伝統はしらぬから、
皆が想像しているものと大きく違うと思うがな!!

682:デフォルトの名無しさん
14/01/06 17:56:02.28 .net
>>681 期待してます!

683:デフォルトの名無しさん
14/01/06 20:20:59.69 .net
文字列はどういう風に扱えばよいのですか?

684:デフォルトの名無しさん
14/01/06 21:14:53.59 .net
>>683
文字数と文字列本体からなる構造体のアドレス(ポインタ)、とか。

685:デフォルトの名無しさん
14/01/06 22:41:12.49 .net
日本語情報なら
URLリンク(www-lab.ee.uec.ac.jp)
URLリンク(www.h7.dion.ne.jp)
後者の Gforth マニュアル
URLリンク(www.h7.dion.ne.jp)
は「OS コマンドライン引数用ワード」まで訳してある (残りは未訳)。
また、ANS Forth ではない独自仕様だけども、
URLリンク(www.h7.dion.ne.jp)
URLリンク(www.h7.dion.ne.jp)
URLリンク(www.h7.dion.ne.jp)
も Forth 自体の実装を目論むなら参考になるかも (ちなみに現在の RetroForth はこれよりもう少し進化してる)。

686:デフォルトの名無しさん
14/01/06 23:19:19.70 .net
>>683

684の追記ですが、素のFORTHだとスタックには数値しか置けないので
文字列のアドレスがスタックに積まれます。

もちろんFactorの様に、なんでもスタックに積めるのもアリです。

私もなんでも積めるように実装して、まぁうまく行ったのですが
>>672の方と同じ問題もあったので、スタックには数値しか置けない
実装も試してみたいと思っています。

687:デフォルトの名無しさん
14/01/07 09:04:59.98 .net
ややこしい物は全部辞書に突っ込むとかの手も。

688:デフォルトの名無しさん
14/01/07 11:29:30.09 .net
>>687
文字列等をワードの定義に置き換えてしまう、と言うことでしょうか?
この場合、最終的にスタックに積まれる物は何になるのでしょうか?

689:デフォルトの名無しさん
14/01/07 12:34:21.76 .net
>>688の自己レスですが、辞書にと言うことは素FORTHの話だと思うので
文字列を辞書に登録後、そのアドレスがスタックへ積まれることになりますね。

690:681
14/01/13 14:43:11.44 .net
681です。
インタプリタでいいよね?

691:デフォルトの名無しさん
14/01/15 17:15:27.03 .net
>>690
バイトコードとかスレッデッドコードインタプリタであればFORTHの普通過ぎると思う(誰もが一度はやる)
JIT(AnyCPU向け)実装とか,Factor見たいな構造をスタックに詰めるとかの部分をがんばらないとn番煎じになっちゃうから何か独自のがんばりが必要だと思うよ。

というかFactorが凄いのでアレ超えて欲しいな(アイデアだけでも)

OSSでがんばるならこっそりコントリビュートする人はこのスレにも多そうだからがんばれ!

692:デフォルトの名無しさん
14/01/15 23:01:48.08 .net
最初はベタな書き方でいいと思う

693:デフォルトの名無しさん
14/01/16 04:52:38.68 .net
Forth で Forth を書くんだ

694:デフォルトの名無しさん
14/01/17 10:55:03.71 .net
>>690
インタプリタだと、Forthの制御構造とかループが
意外とうまく行かなくて楽しいよ。

>>693
このスレの上の方にもありますが、Let over Lambdaでは
LispでForthを書いて、そのForthでLispを作ってますね。

695:デフォルトの名無しさん
14/01/26 21:50:03.79 .net
forthインタプリタありすぎてどれを使えばいいかよく分からないけど
とりあえずgforth使っておけばいいのかな

696:デフォルトの名無しさん
14/01/26 22:12:55.38 .net
とりあえずなら何使ってみてもいいと思うよ

697:デフォルトの名無しさん
14/01/27 11:46:12.62 .net
自分でインタプリタ書いてみるのも良い

698:デフォルトの名無しさん
14/02/20 20:29:49.07 .net
URLリンク(forthfreak.net)

699:デフォルトの名無しさん
14/03/12 13:38:35.60 ZbttMlJE.net
URLリンク(www.worldofspectrum.org)

Forth-83 の ZX Spectrum (欧州版 MSX1 のような Z80A 8 ビットパソコン) 版。
Forth-83_Extras.zip に Forth アセンブラ記述の実装ソースあり。FIG-Forth ベースらしく、最小限
のプリミティブワード以外は FIG-Forth と同じく Forth 自体で記述されてる。

700:デフォルトの名無しさん
14/03/12 17:03:35.35 f26liuj5.net
あの頃のPCに標準装備されてるのがゲイツBASICでなくてForthだったらPC世界は今とは随分違ったものになってただろうな。

701:デフォルトの名無しさん
14/03/12 17:20:04.88 w2TVy3P1.net
>>700
カシオの電卓もきっとRPNに!

BASICってコンピュータが何をしてくれるのかを学ぶのには適してるとおもうけどなあ
FORTHもそうだけどREPL環境のあるコンピュータ言語だとBASIC,FORTH,LISPの御三家があるけど、どれが一番よかったんだろう?

702:デフォルトの名無しさん
14/03/12 17:26:49.46 EfiLuccu.net
Lispがベストだが、いかんせん大食らい過ぎる。
Forthも悪くない。

Basicの奴はREPLのようなREPLでないような微妙なコマンドラインだしなぁ。

703:デフォルトの名無しさん
14/03/12 17:41:55.19 w2TVy3P1.net
>>702
実マシンのメモリモデル的にはBASICが一番合う気がするんだよね。
で関数定義を基本とするならLISPが一番。(引数と関数の関係が一目瞭然なので)
で、FORTHだとFACTORみたいにオブジェクトとメッセージみたいな含みができれば最高なのにという感じ
という個人的な感想をもっちゃう。
>Basicの奴はREPLのようなREPLでないような微妙なコマンドラインだしなぁ。
forgetで+とか以降を消して涙目とかは流石にBASICじゃできないと思うのでそこら辺のシステム空間とユーザ空間みたいな区別はあっても良いかもしれない

704:デフォルトの名無しさん
14/06/03 01:33:51.03 pa2cdK6+.net
>>704
そんなこたないんだが、arm用に特化したforth処理系ってのが存在しないのも事実なのでなんと言えばいいんだろうか。
ちなみに特化しなくても何とかなっちゃうのがforthの良い所だったり、何も無いところから作り込んでもそんなに手間じゃなかったりするのも魅力だったりする。
でもRaspberry PiみたいなLinuxが動いちゃう環境ならforth使う理由が殆どないよ。
むしろ生の機械語を直接書かないと駄目なような環境に向いてる。

705:デフォルトの名無しさん
14/06/03 11:48:06.91 XzYLHg3E.net
raspberry pi forth でググったらなんか出てくるみたいだが。

というか、rasp pi 衰退したOSや言語の敗者復活リングみたいになっててオモロイw

706:デフォルトの名無しさん
14/06/04 16:39:08.74 2ij5JthN.net
まさにそれ
URLリンク(star.gmobb.jp)

707:デフォルトの名無しさん
14/08/13 10:22:44.64 MV0il0Eo.net
★2ch勢いランキングサイトリスト★

☆ +ニュース板
・ 2NN
・ 2chTimes
☆ +ニュース板新着
・ 2NN新着
・ Headline BBY
・ Unker
☆ +ニュース板他
・ Desktop2ch
・ 記者別一覧
☆ 全板
・ 全板縦断勢いランキング
・ スレッドランキング総合ランキング
☆ 実況板
・ 2勢
・ READ2CH
・ i-ikioi

※ 要サイト名検索

708:デフォルトの名無しさん
15/02/05 18:47:19.10 Wisgh0P5.net
>>705

709:デフォルトの名無しさん
15/03/28 16:14:22.33 JCsZnGie.net
みんな生きてる?

710:デフォルトの名無しさん
15/03/28 16:52:42.19 iNpGjoni.net
." live!"

711:デフォルトの名無しさん
15/03/30 19:02:34.24 ZHuPrBLY.net
書籍が高すぎる

712:デフォルトの名無しさん
15/03/31 21:06:19.08 2fh/fl2T.net
windowsとLinuxで動作するISO準拠処理系プリーズ

713:デフォルトの名無しさん
15/04/01 21:02:18.21 A/TYeiEx.net
もう漏れしかいないのか
ついに手に入れた「FORTHへの招待」
さっそく読もう

714:デフォルトの名無しさん
15/04/01 23:35:21.77 6DGYq49D.net
懐かしい本だな
それと「スタックコンピュータ―CISC RISCとスタックアーキテクチャ」はバイブルだ

715:714
15/04/02 05:49:55.97 ZYrODdip.net
なんかROMとRAMの説明から始まってて和露他
いいからFORTHの説明はじめろや

716:デフォルトの名無しさん
15/04/09 21:33:48.07 DFOBVCzK.net
読み終わった
>>714とFORTH入門を注文した
FORTH入門は一万円以上した

717:デフォルトの名無しさん
15/04/09 22:41:41.16 LdJOGzfd.net
>>716
原著はWeb上にあるよね
URLリンク(home.iae.nl)
日本語版もほしいけど

718:デフォルトの名無しさん
15/04/12 19:17:21.15 4Fcd4Vhe.net
おk読了
次は>>714

719:デフォルトの名無しさん
15/04/12 19:25:26.49 3ERnJGQj.net
>>718
715はスタックマシンとForthへの愛に満ちているので毒されると悶死できるぞ

720:719
15/04/15 17:48:12.32 SFWZvMHG.net
知識不足のため理解しきれていない部分もあるがなんとか最後まで読んだ
↓この文が最高でした
RISCプロセッサのUnix/Cプログラマが8Mから16Mバイトより少ないメモリでは不満足で、
128Kバイトのキャッシュを要求しているときに、Forthプログラマたちはまだ、
スタックマシンに64Kバイト以上のメモリが本当に必要かどうかを熱心に議論している

721:デフォルトの名無しさん
15/04/18 09:39:32.64 W8H7yv/P.net
次の段階へ移行

722:デフォルトの名無しさん
15/05/04 16:20:21.65 McZN4pHS.net
日本のForthコミュニティって無いの?

723:デフォルトの名無しさん
15/05/04 16:33:45.12 /hwLfRb3.net
まだ人いるか?

724:デフォルトの名無しさん
15/05/04 16:56:02.08 szzze12E.net
>>722
つくろーぜ
>>723
いるぞー

725:デフォルトの名無しさん
15/05/04 17:44:37.74 kE0VI/DI.net
>>723
居るぜー
ForthだけじゃなくてLispも入るけど組み込み機器でデバッガを内包したいような時って選択肢無いんだよね。
でLispよりもForthの方が実メモリ食わないんで本当にチープな組み込み機器だとコレ知らないと死ねる。

726:デフォルトの名無しさん
15/05/04 18:06:54.59 McZN4pHS.net
意外と居てびっくりした!
作ろうか

727:デフォルトの名無しさん
15/05/04 18:43:39.64 McZN4pHS.net
>>725
Forthに慣れてる人がどんなデバッガ作るのか(どんなとこ見るのか)気になる

728:デフォルトの名無しさん
15/05/04 19:28:19.74 /hwLfRb3.net
>>727
別の人だけど
デバッガとしてFORTHのインターフェースをつかうってことじゃね?

729:デフォルトの名無しさん
15/05/06 15:56:46.02 pB1d0kiO.net
ちょっと面白いネタ見つけた
「スタックコンピュータ」の中の人、Forthの上でのグラフリダクションを研究してたらしい。
url長すぎって言われたんで↓でググってくれ
TIGRE: Combinator Graph Reduction on the RTX 2000

730:デフォルトの名無しさん
15/05/07 11:41:15.23 PQFXQAsu.net
やってる人はいまもやってるんだねえ

731:デフォルトの名無しさん
15/05/07 14:26:59.51 PQFXQAsu.net
「FORTH入門」すごいつかえる
処理系内部まで書かれているから自作するための参考になる

732:デフォルトの名無しさん
15/05/07 19:26:45.21 43KhqhpP.net
あのイラストも結構好きだ

733:デフォルトの名無しさん
15/05/09 01:15:17.53 91zCXcbE.net
ブート処理にforth 系のficl 使ってたOSがluaに切り替えてくみたいだが
やはりさわれる人の絶対数が多い言語に移ってくもんなのだろうか。
あと昔出版されて今じゃアマゾンでプレ値がついてそうなforth系の本、県立図書館で検索したら閉架に結構あったけど
たまたまなのか規模でかいとこなら普通に在庫あるのかな?

734:デフォルトの名無しさん
15/05/09 08:08:38.65 D66ceLoP.net
>>733
FreeBSD?

735:デフォルトの名無しさん
15/05/10 13:17:55.74 wSg+R97A.net
>>734
そそ。まだ先の予定っぽいけど

736:デフォルトの名無しさん
15/05/11 10:05:34.87 jfjxFlJu.net
FORTHと直接の関係はないんだけど
実行ファイルのダンプを保存してあとから実行するのってどうするの?
LISPの単体で動く実行ファイルの作り方と同じ仕組みだと思うのだけど
どうすればいいのかわからん

737:デフォルトの名無しさん
15/05/13 23:24:57.10 ZhcbFads.net
いまだにわからん

738:デフォルトの名無しさん
15/05/14 14:19:50.60 WhzKfy7h.net
VMをアセンブリでかくかcでかくか

739:デフォルトの名無しさん
15/05/19 12:28:41.76 CmG/oeDB.net
>>736
辞書と変数の設計に依るけど、単純にバイト列を展開するんじゃダメなのかな?
RetroForthがそんな設計だったような。
ちょっと挑戦してみようかな。

740:デフォルトの名無しさん
15/06/23 22:36:02.69 ifeDc53Z.net
そのバイト列に展開するのが難しそうだ

741:デフォルトの名無しさん
15/06/23 22:44:08.10 vwZF4gL5.net
OS依存になるよね、任意にcore dumpできるUnix系だとやりやすいかも
Fig FORTHだとOSに依存しないからできそうな気もする
#MC68000のFig FORTHをmotorolaのTutorial基板で触った事しかないんでうろ覚え

742:デフォルトの名無しさん
15/06/23 23:14:56.31 3QTDhBFd.net
レス早くてワロタ
Perlに同じような機能があったたはずだからちと調べてみゆ

743:デフォルトの名無しさん
15/07/06 12:32:57.19 YQDXrDaK.net
間接スレッデッドコードについて質問があります
IFなどの条件分岐ではそのワードの呼び出し箇所毎にパラメータが違うと思うのですが
その場合でも箇所毎にワードが生成されるのでしょうか?

744:デフォルトの名無しさん
15/07/10 00:42:46.31 wrUthjuc.net
もう解決したのかな?
ちょっとどういう質問なのかわからないので、詳しい人期待age

745:デフォルトの名無しさん
15/07/12 06:46:58.31 AaGOVdy1.net
>>743
いやたしか分岐先アドレスはスレッドに格納されるはず
つまりスレッドにはワードヘのポインタ以外にジャンプ用アドレスが含まれる

746:デフォルトの名無しさん
15/07/17 08:59:20.64 Hk7N5du5.net
全てをアセンブリで実装しようとしたら手がつけられなくなったので
とりあえずコア以外はcで実装すことに変更すた
しっかし本当おもしれえ
nextは僅か4命令だぞ

747:デフォルトの名無しさん
15/07/18 13:27:49.52 xBzkS6DZ.net
コアが実装できたら、後はforthで書こうぜ!

748:デフォルトの名無しさん
15/07/18 13:55:45.77 4KZmkVpL.net
>>746
今時のCPUだとアセンブリの方が実装しやすくない?

749:デフォルトの名無しさん
15/07/18 14:11:29.17 MJkUXIxe.net
URLリンク(blog.livedoor.jp)

750:デフォルトの名無しさん
15/07/18 14:12:29.69 MJkUXIxe.net
Forthユーザ発見

751:デフォルトの名無しさん
15/07/18 15:38:28.81 3XAPUy2X.net
このスレの連中は矢張りRPNやRPL電卓を使ってるのかな?

752:デフォルトの名無しさん
15/07/18 16:33:35.15 5U/xTE1h.net
電卓は持ってないけど、何か試したり計算するときはFactorとか使ってるよ

753:デフォルトの名無しさん
15/07/18 17:09:30.61 5U/xTE1h.net
Sukunaの人とか、もうForth触ってないのかな?
いろいろ話聞いてみたかった。

754:デフォルトの名無しさん
15/08/06 16:45:29.10 2u/3OVyT.net
スレッデッドコード用vm実装記念

755:デフォルトの名無しさん
15/08/06 17:06:23.35 0X10zjbP.net
乙、おめ

756:デフォルトの名無しさん
15/08/08 23:27:26.32 HMF33mTD.net
復活

757:デフォルトの名無しさん
15/08/10 18:29:16.42 XUokgt8i.net
できてきた
I/OをCからアセンブリに実装し直してさらに小さくする
age

758:デフォルトの名無しさん
15/08/13 14:07:02.04 H7bzx0I1.net
ところでみんなコードは小文字大文字どっちでかいてる?

759:デフォルトの名無しさん
15/08/13 16:00:05.24 TIALnNkC.net
>>758
今はfactor大好きなので小文字かなー
昔VT100でForth使ってたときは大文字だったよー(ワードの大文字小文字は入力時に大文字変換されてたりとか:処理系が大文字のみだと辞書のワードを圧縮したりとかしてたりする貧乏メモリ用だったりとか)

760:デフォルトの名無しさん
15/08/15 15:19:53.94 fkPcgHEe.net
小文字で書ぃてるょ

761:デフォルトの名無しさん
15/08/15 15:24:43.03 fkPcgHEe.net
処理系作ってようやく何やってるのかわかったけど、>>56とか>>62面白いなあ

762:デフォルトの名無しさん
15/09/16 00:48:03.18 VN2DGtV9.net
なんども あきては なんども やる

763:デフォルトの名無しさん
15/09/19 22:00:25.70 GM7+1MtI.net
ふーむ少なくとも仮想機械はアセンブリで書かなければ移植は難しいな
一方コンパイラはcで書いてもあとでそれ自身に移植可能
あと最近2chで擬古猫見ないね

764:デフォルトの名無しさん
15/10/12 09:27:11.26 jWUV6tHKA
>ふーむ少なくとも仮想機械はアセンブリで書かなければ移植は難しいな

URLリンク(www.forthworks.com)

俺ForthではあるけれどVMはCで簡潔に書かれているから
めちゃくちゃいろんな言語に移植されて動いてるぞ

765:デフォルトの名無しさん
15/10/12 21:43:04.76 IsRJDN+gd
>>764
Cで書かれたのは移植性が凄く高いけど
ハードウェアスタックを使いにくいので
古いCPUでは性能が大きく下がっちゃう

というか、VMって言うレベルじゃないでしょ
アセンブラでもわずか数行~十数行

766:デフォルトの名無しさん
15/12/31 06:27:31.47 shctMMuK.net
あげ

767:デフォルトの名無しさん
15/12/31 06:51:07.49 shctMMuK.net
URLリンク(phaendal.hatenablog.com)
↑FORTHの関しての記事があるのであげとま

768:デフォルトの名無しさん
15/12/31 10:17:38.69 KKAqg1l1.net
馬鹿には無理

769:デフォルトの名無しさん
15/12/31 10:33:47.60 /wbyPP1f.net
便乗age
URLリンク(research.microsoft.com)

770:デフォルトの名無しさん
16/01/01 09:58:20.44 kXdPExCb.net
あけおめ!

771:デフォルトの名無しさん
16/01/10 13:33:35.16 z1pxpAJ/.net
人いるんか!

772:デフォルトの名無しさん
16/01/10 23:48:42.16 /2nnPZOa.net
フォースの覚醒

773:デフォルトの名無しさん
16/01/11 08:24:42.35 lZl+kkOU.net
復活の時は近い

774:デフォルトの名無しさん
16/01/11 16:40:56.58 I0GTrlSH.net
Erlang/Elixirに浮気中

775:デフォルトの名無しさん
16/01/11 19:48:51.43 nxq211rs.net
>>774
あれ、俺書き込んだ?
ってマジで思った

776:デフォルトの名無しさん
16/01/12 10:27:02.83 LOHPMzQN.net
今処理系実装してるけど実用的にしようとなると結構難しいな

777:デフォルトの名無しさん
16/01/18 21:50:56.98 jq3Y7yyE.net
この言語の面白いところは低水準で動的なことをすべて行えること
コールスタックまで直接制御できるから継続のようなことも簡単にできる
一方でコンピュータサイエンスとしてのセンスはかけらもなくとても原始的だ

778:デフォルトの名無しさん
16/01/21 10:50:22.29 aPv8m3ec.net
だれかこいよ
寂しいな。。。

779:デフォルトの名無しさん
16/01/21 12:56:52.61 zpe1QHZ3.net
>3 pop

780:デフォルトの名無しさん
16/01/21 14:03:53.56 aPv8m3ec.net
>>779
   ∧_∧
   ∧_∧ ) 
  (   )) 
  ;つ 乙ノ 
  (_  ノ | 
  ((_ノ~∪

781:デフォルトの名無しさん
16/01/22 02:24:26.04 EeNvrSL9.net
>>779
それhoshuや、pushちゃう
自分が幼少の頃に親父の読んでたInterfaceって本のなかにtitって言語の紹介があったのがForth系言語のなれそめだったなぁ。
そのアトはHPの電卓とFigForthの68K版をMC68000のKit上で動かしてからはまった感じだわ

782:デフォルトの名無しさん
16/01/22 13:27:11.36 7GZnHmXQ.net
ErlangでFORTHっていうかideoneすげー
URLリンク(ideone.com)

783:デフォルトの名無しさん
16/01/22 15:42:45.07 dviPRblt.net
まだちゃんといて安心したよ。。。

784:デフォルトの名無しさん
16/01/24 15:06:52.25 Ih+3kdbT.net
いまつくっているんだがやはり設計が古すぎる
予定を変更してシェルを分離させる

785:デフォルトの名無しさん
16/01/24 18:12:17.44 1S5ux+s6.net
意味が分からん。主語くらい略さないで入れろ。

786:デフォルトの名無しさん
16/01/26 04:19:18.92 fodjyooQ.net
標準のFORTHでバイナリを呼び出すための機構ってある?

787:デフォルトの名無しさん
16/01/27 09:41:43.11 PS/Qpp4W.net
stack overflow

788:デフォルトの名無しさん
16/01/27 21:20:50.27 JOMz1gR9.net
処理系によるかもだか、
スタッフオーバーフローだけじゃなくアンダーフローも味わえる

789:デフォルトの名無しさん
16/02/15 15:23:31.07 z4NOVyYm.net
失礼
スタックマシンのチップを購入したい
どこかいい入手ルートはないか

790:デフォルトの名無しさん
16/02/16 02:45:46.59 WhucjpIR.net
>>789
ARMとか十分にスタックマシンしてると思うのだが
昔の本当にちっちゃいやつが欲しいってのだと今ならトラ技付録FPGAで作る方が入手性は優しい希ガス

791:デフォルトの名無しさん
16/02/16 09:14:36.21 CursrUUy.net
>>790
そうではないです
データスタックを持っているマシンがほしいのです

792:デフォルトの名無しさん
16/02/16 19:04:31.14 eSxr0LUY.net
具体的に欲しいチップを書いた方が

793:デフォルトの名無しさん
16/02/18 20:54:10.95 affLGCHB.net
間接スレッデッドコードはネイティブと比較してどのぐらいメモリ削減効果があるのでしょうか
どなたかデータかその参照を教えてもらえませんか

794:デフォルトの名無しさん
16/02/22 15:12:30.92 p5oR4ktM.net
GNUの実装についてホムペは変わってないけど開発進んでるのな
しかもAndroid版も有りやがる

795:デフォルトの名無しさん
16/03/12 12:26:01.29 x2aIRV1Q.net
>>789
greenarrays.com

796:デフォルトの名無しさん
16/03/12 23:49:41.78 88to1Dnq.net
このFORTHってのは少なくとも古典的なものは強くノイマン型アーキテクチャに依存してるのな

797:デフォルトの名無しさん
16/03/13 14:02:52.50 KRhmXkXRG
>>791
MC68000系ならデータスタック放題

>>793
間接と直接の違いをインストラクションレベルで比較すればおおよそわかろうに
逆にCPU絞らないと答えようない

>>796
いろんな意味でアセンブラだったから


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch