2 part forth

レス数が900を超えています。1000を超えると表示できなくなるよ。
2008/08/02(土) 06:07:26
久々にレスキタワァ*・゜゚・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜゚・* !!!!!
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=

どんな言語使って作るかしらん
こんなの補助として使ってみるのも便利かもしらん
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
読んでるんだけど、けっこうめんどいなあ。
ある程度実装の目処がたったらコード晒してくつもり。
少々お待ちを。
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が二度と解放できないとか、
文字列はヌル終端しない代わりに文字数を記憶するとか、ちょっと気持ち悪い気がする。

2008/08/05(火) 23:23:59
>文字列はヌル終端しない代わりに文字数を記憶する
これは正当だと思う。ヌル終端がどれだけのバグを生み出しているか……
2008/08/06(水) 21:05:50
実装としては文字列をヌル終端にしても可。
但し、文字数は必要、かつ、
ヌル終端を当てにしたコードを書いても一般には動く保証なし。
が規定の内容と思われます。他の規定も同様。
2008/08/08(金) 19:23:22
ASCIIZはねーよマジで
2008/08/09(土) 16:38:27
でも、C言語で作られたプログラムとの連携したいときは、NUL文字終端がいいよね。
C言語で作られたプログラムの数の多さ、便利さから言うと、無視できないなと。
2008/08/09(土) 18:30:35
Cは捨てるのがよろしいかと。
C++をbetter Cとして使う方がまだましだと思う。

C++を使えないようなリソースのキツい環境で使うんだったらforthを直書きした方が良いんじゃね?
2008/08/10(日) 00:15:50
>C++をbetter Cとして使う
それ最悪
2008/08/11(月) 00:15:21
402 と同感だが、better Cとして使うのは FORTH 実装にはない(価値が少ない)だろ。
自己学習として作るならまだしも、
FORTHに期待される動作環境だったらアセンブリレベルの設計が必要だろ。
C++使うならC++的設計をしろって。
2008/08/27(水) 00:31:36
forthチック俺言語のプロセスが回った記念カキコ。

forthだと引数管理がけっこう面倒だと思うけど、wordの名前に
引数の数の情報を盛り込んだら楽にならんかね?
俺言語ではこんな感じでドットの数=引数の数にしているんだけど、どう思う?
 1 2 ..sum
 1 2 3 .:sum
名前の衝突も起こりにくくなって一石二鳥かと思うんだけど。
2008/08/27(水) 09:31:38
ドット打つのがひたすらめんどくさそう
ifだと.:ifになるの?
2008/08/27(水) 21:05:33
こういう風にしたらどう?

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

たとえば

[ 10 20 30 ] #sum

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

10 20 30 3

となっていて、#sumは3つの数の和を求めればいいことがわかる。
407404
垢版 |
2008/08/27(水) 22:38:18
>405
そこは構文糖使った方がよろしいかと (a ? b ! cの三項演算子とか)

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

できるだけ前の計算結果に依存しないように考えると、セパレータのようなものを
スタックに積むのは良くないので、ワード単体で引数までを意味するようにしたい、
ということですな。
2008/08/28(木) 02:39:56
prologみたいにsum/3みたいにするとか。
よく判ってないが。
2008/09/19(金) 17:01:15
引数管理しなきゃいけないようなコードの構成だと崩壊しそう
2008/09/25(木) 03:11:26
しばらくforthやってたら他の言語がいじれなくなってて驚いた。
のめり込むのは危険だなw
2008/09/25(木) 03:16:06
>>407
そのセパレータってリスト終端のnullに相当するから
あながち間違ってないと思う。
2008/09/25(木) 21:54:56
concatenativeの論理を詰めて行くと、
スタックの機構はコード設計のための因子から外されるのかも。
2008/09/25(木) 22:34:55
>411
Wordの中でWordを呼ぼうとすると破綻するよ。

>412
結局はトップを基点とした対称性(みたいなもの)になるからな。
対称性があれば何でもOK
2008/10/01(水) 00:29:26
スタック型プログラミング言語の最少命令セットを探して
Whitespaceに辿りついたのですが、
これよりも言語仕様的に小さいスタック型言語ってあります?
2008/10/01(水) 01:55:39
define
call
return
conditional jump
push
pop

これだけで足りるかな?
2008/10/01(水) 07:09:50
callに条件をつければjumpも省けるんじゃないか?
2008/10/02(木) 03:17:37
それより、ひと目で何やってるか判るforth作ってくれないかな。
>>54-65とか何やってるのかわからん。
記号覚えればいいんだろうけど。
: は定義っぽいということは文脈で判った。許す。
>rとかr>は何かと。
;は文の終り?

LISPでいう 'a は (quote a)です、みたいに特殊記号をあまり使わずに
誰が見ても大体判るように、平易な形にならないかな。
2008/10/02(木) 17:56:08
>>417
: word
でワードの定義開始、;で定義の終端
>r,r>はリターンスタックへのプッシュとポップ
>>54の括弧内はそのワードを実行するとデータスタックの状態がどう変わるかをコメントで表している
他の言語と違って裸のスタックが丸見えなんよ
2008/10/03(金) 02:22:08
リターンスタックに何をプッシュ(とポップ)するの?TOSの内容ってこと?
>rとr>って判りにくいと思う。
一瞬で見分けられないというか。
不等号ちがうんかと。
記号使わずに全部記述的にできないかな。
mindとかそんなのかな。
2008/10/03(金) 03:00:42
わかりやすい文法が欲しいのならforth系はあきらめた方がいいと思うよ
2008/10/03(金) 06:08:32
: pushTOStoReturnStack postpone >r ; immediate
: popFromReturnStackToTOS postpone r> ; immediate
2008/10/03(金) 12:26:50
自分も420に賛成する、forthは裸の2スタックマシンのアセンブラと思えばいいんだけど、それがつらいとちょっときついと思う
ただ、それがインタラクティブ環境を作るあたりと小さな核で構築できるのが非常に面白いのでがんばって覚えてみてよ。

逆に言うと簡単にぶっ壊れるとも言う
2008/10/03(金) 16:59:48
Cとかの他の言語の常識持ち込もうとしてるヤツいないか?
「Forthではこう書く」ってのに納得いかないなら
悪いことは言わんから、使うのやめとけ
2008/10/03(金) 17:54:20
スタックっつうのはあくまで機械にやさしいものであってユーザーフレンドリーなものじゃないしな
2008/10/03(金) 18:38:23
頻繁にスタックを意識しないといけないのは悪いForthコード
2008/10/03(金) 20:05:40
正直アセンブラの方が楽だよ
2008/10/03(金) 20:24:33
慣れると気持ちいいよJoy。forthは知らんけど
2008/10/03(金) 20:29:08
>426
Forthは仮想スタックマシンのアセンブラだから、
(仮想)マシンの理解度によるだろな。
2008/10/03(金) 22:29:45
いや、もっと視認しやすい記号セットを使ってくれって話だろ。
ハイライトできるエディタで単語登録するか、トランスレータでもかますのがいいと思う。
2008/10/03(金) 23:01:49
ところでリターンスタックって別に必要なの?
普通のCPUは1本だよね。
スタックに対して相対アドレッシングがないからってことかな?
2008/10/03(金) 23:57:29
>419
>rとr>は確かに見た目がわかりにくい。
よほどのことが無い限り使わない。
localがあれば要らない。

>430
呼出しのときにデータスタックで直接パラメターを渡すためでしょう。
2008/10/04(土) 00:00:27
>>430
普通のアーキテクチャだと関数呼び出しのスタックにパラメータも突っ込んじゃうけど
forthはデータのpushと関数呼び出しの戻りアドレスが入るスタックが別なんよ。

っていうか別だから面白いことができるので、一緒だったらループとかで涙が出そうだと思う。
2008/10/04(土) 00:10:21
SP, BPレジスタに相当するものがあれば良いのでは
2008/10/04(土) 17:45:11
リターンスタックとデータスタックが一緒だと、
リターンアドレスを壊さないようにデータをいじるのがメンドイ。
リターンアドレスが詰まれている位置を避けるようにして
スタックをアクセスしなきゃいけないから。
それはSPとBPがあってもメンドイことに変わりはない。
2008/10/04(土) 19:46:33
>>430
まあ、便利だから?
実装としてはバローズのメインフレーム見たく演算とリターン
アドレス保存を一本のスタックでこなすものもあるよ。
2008/10/04(土) 21:37:24
factorだともうひとつスタックあるよ
2008/10/04(土) 23:25:44
データスタックとリターンスタックがないと
チューリングマシンと等価じゃないらしいぞ
2008/10/05(日) 00:17:09
>>437
等価じゃないとはよく聞くけど、等価じゃないとする説明ってどっかにないですかね。
それで実用で困ることありますかね。
2008/10/05(日) 01:12:05
今理解した。
リターンスタックってそのままBP相当じゃん。
ほんとはBPポインタ一個あれば十分だよね?
素直にBPを持たずにわざわざリターンスタックなんて用意してるのは、
スタックマシンと言えなくなるからかね。
なんだかなあ。
2008/10/05(日) 03:10:12
BPあってもメモリがないとな
2008/10/05(日) 03:49:49
今理解した。
BPってそのままリターンスタック相当じゃん。
ほんとはリターンスタックあれば十分だよね?
素直にリターンスタックを持たずに、わざわざBPなんて用意してるのは、
レジスタマシンと言えなくなるからかね。
なんだかなあ。
2008/10/05(日) 07:20:41
>>437
メモリアクセスできない純粋なスタックマシンなら、スタックが二本ないと
チューリング等価ではないかも知れないが、FORTHはメモリアクセス @ ! が
あるから、たとえスタック一本であってもチューリング等価じゃね?
考えてみればわかるが、メモリアクセスがあるとスタックの本数を自由に増やせる。

FORTHとスタックマシンとConcatenative言語は、それぞれ別の概念で、
単純に等号で結べないから、何について話しているのか意識しないと混乱すると思われ。
2008/10/05(日) 09:51:29
ForthのVMとしては、
論理的には最低限二つの区別されたスタックがある。
標準的な実装での利点(v.s.スタックフレーム方式)は、
サブルーチン間でのデータのコピーが減らせること。

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

VMが実装できれば機械自体の仕組みはどうでも良い。
2008/10/05(日) 13:26:57
込み入った話は分からんけど、
とりあえずBF書けたらチューリング完全じゃなかったっけ?
2008/10/05(日) 14:12:31
なんか話が噛み合ってない気がする。
2008/10/05(日) 15:11:57
なんでそこまでチューリングマシンにこだわるのかわからん。
Forthがチューリングマシンであろうとなかろうと
Forthで実用的なプログラムは書ける。

あともう一人、やたらリターンスタックを排除したがる奴も
何をしたいのかさっぱりわからん。
2008/10/05(日) 17:47:31
まず当たり前の大前提の確認からだけど、Forthはチューリング完全だから。
仮にForthの仕様からリターンスタックだけを排除したとしても(それはForthとは呼べないだろうが)
チューリング完全だ。理由は>>442

リターンスタックがBPで代用できるとか正直意味わからん。
スタック演算自体理解してない希ガス。
2008/10/05(日) 18:27:08
リターンスタックという名前がいかんのだろ。
2008/10/05(日) 18:35:04
>>437
スタックオートマトンとスタックマシンをごっちゃにしてる気がする。
2008/10/05(日) 18:39:13
>>448
むしろリターンスタック以外の名前があるなら知りたいものだが。
2008/10/05(日) 19:02:41
>442
大雑把にはこんな感じかね。
・データスタック: 引数&戻り値
・リターンスタック: 実行する命令列(辞書で展開された単語含む)

リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね
2008/10/05(日) 19:25:44
リターンアドレスを積んでいるからリターンスタック
それでいいと思うが、難しく考えすぎじゃね?>>451
2008/10/05(日) 19:28:44
Aスタック←→Bスタック
だったら勘違いが起きなかったと思う。
2008/10/05(日) 19:34:19
>>453
むしろ勘違いを引き起こしそうなんだが。
リターンスタックが難しいんじゃなくて、
リターンアドレスをスタックに積むという
当たり前の関数呼び出し規約を説明しなければ、
理解されない時代になったということか…
2008/10/05(日) 21:59:43
なんでリターンスタックの名前で混乱とか勘違いがあるの?
ひょっとして、リターンと聞いて戻り値を連想しちゃう人がいる、とか?
だとしたらかなりキビシい状況だな。
2008/10/06(月) 01:09:11
カールスタックの方が一般的じゃね?
2008/10/06(月) 01:09:52
あ、カールじゃなくてコールスタック
2008/10/06(月) 01:24:45
カールはスナックだな
2008/10/06(月) 07:35:22
カールと言えば薄べったいのが出てることを最近知った。
従来品に比べて口の裏に張り付きにくいのはメリットだが、
少し物足りない気がした。
2008/10/06(月) 11:21:56
Forth では昔からリターンスタックと呼んできたので、その伝統に則ればいいと
思うんだけどな。Wikipedia だと項目はコールスタックで立てられているが。
2008/10/06(月) 12:10:36
コールスタック->カールスナック->コーンスターチ->張り付かないならカールじゃない

勉強し過ぎでしょう。
462461
垢版 |
2008/10/06(月) 12:30:27
補:そもそもForthが一般的じゃない
2008/10/06(月) 21:49:04
・リターンスタックが普通のCPUで言うとことの「スタック」。
 ワード(Cで言うところの関数、実際にはサブルーチン)
 を呼ぶと呼び出し戻るためのアドレスを積む。

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

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

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

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


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

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

なんて言っている人、本当に理解できてるの?
2008/10/07(火) 00:25:52
>463
いや、別にWORDがサブルーチンである必要はないんじゃない?WORD毎の環境要らないんだし。
Cとの相性を考えるとサブルーチンにした方が良いと思うけど。

あと、CPUのアーキテクチャには疎いんだけど、最近のCPUでスタック持ってるのってあったっけ?
2008/10/07(火) 06:15:51
x86アーキテクチャには思いっきりスタックポインタがありますが?

>>464のいう「最近のCPU」が非ノイマンアーキテクチャとかを指すなら
スタックがないCPUもあるかも知れないけど。
2008/10/07(火) 06:37:45
>>464
前半は実装と仕様が混乱してそう。
後半は、たぶん、CPUの「レジスタアーキテクチャ」「スタックアーキテクチャ」と
データ構造としてのスタックを混同している。

Wikipediaやblog読んで理解した気にならないで実際に自分で手を動かしてみなよ。
ちょっと恥ずかし過ぎるぞ、あんた。
2008/10/07(火) 12:34:16
>>464 の言ってる「スタック」はハードウェアスタックのことと思われる。

>>463
「データスタックってのは、言ってみれば「無限に増えるアキュムレータ」って感じ。」
ってのは、確かにハードウェアスタックを思わせる記述だが。
2008/10/07(火) 13:28:27
post,preのincやdec付きレジスタ間接参照命令があればデータスタックと等価だよね?
リターンスタックってのはサブルーチンコール時に戻りアドレスをpushする為のレジスタの事でしょう?
なら今時のCPUで無い物の方が珍しいと思うんだけど
2008/10/07(火) 20:49:02
x86って俺の生まれる前からあるな。
定年過ぎた方には最近なんでしょうけど。
2008/10/07(火) 21:09:44
定年過ぎて無く立ってプロセッサ自体30年の歴史しかないじゃないか
2008/10/07(火) 21:36:31
最近のCPUは古いアーキテクチャのものがほとんどだよね。
細かいところは違うんだろが。

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

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

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

アセンブリレベルでもリターンアドレスのpush/popが自動になってるなら、
気付かない人がいてもしょうがない。
472464
垢版 |
2008/10/07(火) 23:32:13
>465
いや、スタックポインタ(レジスタ)じゃなくてスタック。>467 の通りですな。>463で『アドレスを積む』とか
書いているからHWスタックのことかと思った。
スタックを内部に持つCPUの話があった記憶があったので勘違いしたわ。すまんね。


forthあんまり詳しくないんで済まんのだけど、『リターンスタックには、ワードを呼ぶと呼び出し戻るため
のアドレスを積む』んだっけ?
正規化の観点からは『まだ実行していないWORD』もリターンスタックに積めた方が便利だと思うけど。
WORDコンパイルの実装で手が抜けなくなるし……
2008/10/07(火) 23:56:37
>>472
意味が理解できん。
「まだ実行してないWord」を積む、って具体的に何を積むの?
まだ実行してないワードのアドレスなら辞書に入ってると思う(関節スレッディングの場合)
2008/10/08(水) 04:22:01
>>469
いまでも現役バリバリで使われていて
マイクロソフトの最新OS「VISTA」がポーティングされる
x86アーキテクチャが「最近のCPU」では無いとでも?

あるいはCore2DUOとかがX86アーキテクチャじゃないとでも思ってる?
2008/10/08(水) 06:31:12
>>472
Forthと関係なく、関数の呼び出し元に戻るためにアドレスをスタックに積む、
という動作は、アセンブリレベルでは普通の関数呼び出し規約。
Forthは言語レベルでリターンスタックを操作できる言語だけど、
普通は意識しなくてもいいから、リターンアドレスが何のために存在しているのか
理解できない人がいても不思議じゃないけど、せめてもう少し自分で勉強して欲しい。
2008/10/08(水) 06:35:19
>forthあんまり詳しくないんで済まんのだけど、
とか、逃げをうたず自分で触ってみろよ。
2008/10/08(水) 14:37:36
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」ではリターンスタックは必要ない。
2008/10/08(水) 18:17:31
>>441=477
それを実際に作って発表したら
いままで君をバカにしていた連中にギャフンと言わせられるよ。
ガンバ。
2008/10/08(水) 18:47:05
で、その「ボクが考えたforth」では、
パラメタはどうやって渡すんだ?
2008/10/08(水) 19:05:03
どう考えても普通にCALL/RETした方が速そうだけど
わざわざ面倒くさくしてどうするの?

あと、ENTER/LEAVEとか使わないの
2008/10/08(水) 21:00:40
>>477
もはやどこから突っ込んで良いものやら…
二つほど疑問が。

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

: foo drop drop 3 4 5 ;
1 2 foo

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

二つ目。

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

forthじゃない何かをつくろうとしているのだろうか?
2008/10/08(水) 21:16:43
二つ目用の問題も書いておくよ。

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

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

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

スレッディング(直接・間接)方式だと、
呼出しはCallじゃないから、
BPをRSPにしてもかまわんが、
パラメタとリターンアドレスの混合は、
Forthでは無謀。動的にチェックが必要な上に、完璧にはできそうにない。
484464
垢版 |
2008/10/09(木) 01:15:39
446です。
forthは興味半分で使ったレベルでしかないですね……
concatenative俺言語の設計の参考にしているぐらいです。

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

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

ただ、リターンスタックの意味がよくわからないままに、
他の言語のように抽象構文木を再帰的に処理するような
実装にしていると、リターンスタック操作の実装で悩むの
かもしれない。
486464
垢版 |
2008/10/09(木) 08:54:40
>485
>463は呼び出したWORDを積むことを前提にしているし、>451 >472で言ってるのが >463 >473で
思い切り否定されてるので、forthじゃそういう考え方無いのかな、と思った。
もしforthでもそういう使い方しているんだったらおいらの不勉強だね。
2008/10/09(木) 10:46:32
>>486
485のいってる意味は、
スレッディング方式のforthでは、
辞書は実行されるワードのポインタのリストとみなせるわけで、
リターンアドレスというのは、辞書内への戻りアドレス、
つまり、これから実行されるワードのリストへのポインタといえる
ということと思われる。

ワードのポインタを直接リターンスタックに積み込むような、
インストラクションキャッシュみたいな仕様のリターンスタックの実装は、
ちょっと聞いたことが無い。
というかそれじゃリターンスタックじゃない。
2008/10/09(木) 20:52:04
487の言わんとすることを俺なりに解釈してみる…

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

で、「drop のアドレス」っていうのを「ポインタ」と呼んでいる。
2008/10/09(木) 21:08:57
fooが呼ばれたときのリターンアドレスは 「dropのアドレス」というより
「dropの直前のアドレス」だ。
微妙なニュアンスに聞こえるかもしれないが。

: bar foo ( ここ ) drop ;

( ここ ) と書いた部分に戻ってくる。
2008/10/09(木) 21:12:38
: foo dup + ;
: bar dup * ;
: baz foo ( ここ ) bar ( そこ ) ;

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

bar というワード自身がリターンスタックに積まれているのではない。
2008/10/09(木) 21:16:04
ついでに >>56 のリターンスタックを使ったパズルの説明でも書いておこう。

問題は、

: foo twice ." Hello" ;

で、

HelloHello

を出力する twice を定義しろというパズル。
2008/10/09(木) 21:22:30
解答は、

: twice r> dup >r >r ;

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

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

上の( ここ )が積まれている。
twice は最初に r> を実行して、( ここ ) をリターンスタックからデータスタックに移している。
次の dup で ( ここ ) がデータスタックに二つ積まれた状態になる。
最後に、 二つの >r で ( ここ ) が二つリターンスタックに戻される。
2008/10/09(木) 21:27:12
さて、定義されたワードの終端に到達したので Forthは、
リターンスタックからリターンアドレスを一つ取り出してそこに戻ろうとする。

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

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

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

つまり、もう一度 ( ここ ) に戻る。
もう一度、Helloが出力されたら、次にリターンスタックからpopされる
リターンアドレスは foo を呼び出したアドレスなので、ここでようやく、
foo の実行が終了することになる。
2008/10/09(木) 21:29:45
リターンスタックに積まれているリターンアドレスは、
次に実行すべきワード単体ではなくて、
それ以降、実行すべきコード全体の先頭を指し示すアドレスだ、
と、理解できたかしらん?
495488
垢版 |
2008/10/10(金) 00:34:56
(ここ) は分かってるつもりなんですが、
メモリアドレス的に的確に伝えるには難しいような気が。。。

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

なんかアホなこと言っているようですみません。
2008/10/10(金) 00:55:01
>>495
「barのアドレス」と書くとbazの定義の中のbarの呼び出しのあるアドレスなのか、
それともbar自身の定義のアドレスなのか混乱するから、
( ここ ) と表現したわけで、その違いがわかってるなら問題ないですよん。
あとポインタってわかるよね?
2008/10/10(金) 01:03:18
>>495
その言い方で言えば、(ここ)はbarのアドレスですね。
正確には、bazの定義の中のbarのアドレス。
>>490 での例を少し補って、

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

と書けば、「barというワード自身」というのは( あっち )のことになる。
498496
垢版 |
2008/10/10(金) 01:20:54
>>497
補足ありがとう。

>>486の書き込みの問題点を考えてみると、Forthのリターンスタックは、
明らかに「WORDを積」んではいない。
WORDを積むという表現で想起されるのは、>>497の( あっち ) を積むという
ことだとForth使いは受け取るだろうから。
そして ( ここ ) や ( そこ ) は明らかに>>484の「次に実行する命令の列」を
指し示しているわけなので、何が新しいのかよくわからない、という感想に
なるのだと思う。
499464
垢版 |
2008/10/10(金) 01:36:27
>498
新しいかどうかなんて知らんよ。単にWORDの扱いを正規化できてVMが簡素になるっつうだけの話。
>497で言及している(ここ)(そこ)みたいな間接ポインタをVMで扱う必要も無くなるし。

まあ、その皺寄せをWORDに押し込んでるだけなんだけどね。
500496
垢版 |
2008/10/10(金) 01:42:51
>>499
なんていうか…
「(ここ)(そこ)みたいな間接ポインタ」というそれそのものが、
アセンブリ言語の時代からある「リターンアドレス」という概念なんですよ…。
Forthはそれをリターンスタックに分離して保存・復帰しているだけのこと。
2008/10/10(金) 06:35:09
>>491

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

. "Hello"
がなんでHelloを出力することになるの?
"Hello" .
じゃないのはなんで?
文字列リテラルは特別扱い?
2008/10/10(金) 08:32:35
>500
今は実際のリターンアドレスの話をしとらんよ。
リターンスタックを「次に実行する命令の列」という形に抽象化するっつうとるだろうに。
2008/10/10(金) 08:46:05
>>501
." とか、 前付きの " は、Forthではただの引用符じゃなくて、一つのワード。
だから、Helloとの間に空白が要る。
但し、終わりの " はセパレーターだから、空白なしで良い。

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

" Hello" .

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

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

" Hello" type

とやる。
2008/10/10(金) 08:52:55
>>502
だから、「次に実行する命令列」は辞書の中に既にあるんであって、
それはスタックである必要はなくて、いってみればアレイ。
辞書の中で実行は動的に行ったり戻ったりするから、
やっぱりリターンアドレスの保存は必要。
2008/10/10(金) 09:06:11
>>503
>「."」 が 「次の " までの文字列をプリントする」というワード。
なんじゃそら
ワロタ
2008/10/10(金) 17:24:55
factorだと文字列リテラルはあるよ
507488
垢版 |
2008/10/10(金) 22:08:31
>>496,497 サンクス

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

なんだか、リターンスタックのデータ内容と、
(サブルーチン)リターンアドレスを混同した希ガス
508464
垢版 |
2008/10/11(土) 00:37:41
>504
「必要がないから積まない」じゃなくて、「VMの原理を簡単にするために積む」んだって。
VMが辞書の中を行ったり来たりしないようにするのが目的。
もちろん、VMの仕事をWORDに移管しただけの話だし、スタックが大きくなるデメリットもあるけどな。
509504
垢版 |
2008/10/11(土) 01:03:24
>>508
つまり、ワードを全部インラインにするということ?
それなら確かに理論的には可能だし、リターンスタック自体要らない。
普通は、大きくなるのはスタックじゃなくて辞書だな。

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

その発想はインストラクションキャッシュだと思う。
だから、むしろキューがいいと思う。
ソフトウェア的にやると相当遅いとは思うけど、
論理的には可能だと思うよ。
2008/10/11(土) 02:00:15
サンクス >693

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

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

入門だったら、むしろ構文はシンプルなforthライクにして、エンジンの中身に拘るべきだと思うけど……
2008/10/11(土) 02:02:28
誤爆スマソ
512464
垢版 |
2008/10/11(土) 02:18:22
>509
いや、基本はWORD呼び出し時に展開(そのWORDに定義されたWORD列をスタックに押し込む)。
WORDコンパイル時に全部インラインに展開するわけじゃないです。
#高速化を目的として、WORDコンパイル時にある程度はインライン化することになると思うけど。

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

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


2008/10/11(土) 05:37:05
464のやり方は、ありえなくはないけどForth的じゃないね。
どっちかっていうとJava VMのJITコンパイラみたいな。

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

でも作るというならがんがれ。
様々な進化があってこそ発展もある。
515464
垢版 |
2008/10/11(土) 13:07:00
>513
いや、実装はこっちの方がシンプルだよ。辞書の解釈を全部WORDに押し付けることができるから。
ただ、スタック操作が増えるから重くなる方向だけどね。

>514
リターンアドレス前提だと難しいよね。作業用スタックがもう一本ありゃいいんだけど。
俺言語のVMだと自前スタックで実装しているので大した話じゃないです。
516464
垢版 |
2008/10/11(土) 13:22:12
>514
ちょっと補足。
複数のWORDを押し込もうとすると確かに面倒だね。
俺言語でも
 1. 無名WORDを作る
 2. 1.のWORDに実行するWORDを押し込む
 3. 1.のWORDをリターンスタックに押し込む
といったパック化が必要になります。
2008/10/11(土) 13:26:05
464のVMだが、
ハードウェアレベルではもう一般化してる
インストラクションのプリフェッチとおなじだよね。
マシン語のデコーダレベルでのVMという感じか。

実装する場合の最難題は条件付きジャンプだと思う。
IFとか不定ループをどう載せるかが鍵だな。
これを考えると、VMが仕組みとして単純になるかどうかは微妙だと思う。
まあ、ベタでやればできそうな気はするが、
ハードウエアの仕組みをソフトウェアで二重にしてるだけのような気がしないでもない。
518464
垢版 |
2008/10/11(土) 13:38:04
>514
思い出した……>59を実現するにはreverse自体のパック化も必須なんだっけ。
そういや>59みたいな操作をどうしようか悩んだな。

ただ、こういったWORDを跨ぐ暗黙的なリターンスタック制御てけっこう危険じゃない?
個人的にはWORDはデータスタックの状態にのみ依存すべきだと思うけど、WORDを越えた
範囲までリターンスタックを操作できるようにすると、WORD同士の依存関係が出てしまって
連鎖性(concatenative)が崩れるような気がする。
forthの条件分岐でも、セパレーターを使った明示的な制御をしているわけだし。
519464
垢版 |
2008/10/11(土) 13:49:31
連投スマソ
>517
そうか、CPUだともう一般的なのか……。さすがに天才的な変態が集まる業界だな。
やっぱりCPUのアーキテクチャ勉強しないといけないなあ。

IFは構文解析で逃げました。
block := block ? WORD1 ! WORD2
という三項演算子を用意して、条件分岐用WORDに解釈するようにしました。
不定ループの構文を用意するかどうかは検討中です。
520517
垢版 |
2008/10/11(土) 13:59:32
もうすこし考えてみたんだが、
ワードがどこかで他のワードを呼び出し、そのワードがどこかで他のワードを呼出し...
という場合には、
ワードシーケンスに展開する段階で、
展開すべき個所をたどるためのリターンスタックが必要な気がする。

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

確かにコピーする手間はムダな気もするんだけどね……
辞書のWORD列を直接トレースするのと比べてどんぐらい余計な手間がかかってるんだろう?
ポインタ操作数回&アクセス数回レベルだと思うけど。
522514
垢版 |
2008/10/11(土) 18:35:01
>>518
普通はリターンスタックとか継続とか触れない言語の方が多いから、
Forthではなく俺言語を作るつもりなら、言語デザイナであるお前様自身の
判断で実現可能にしてもいいし、そうでなくしてもいいと思うよ。
ただForthは言語レベルでリターンスタックを操れる結果、協調的マルチタスクやら
コルーチンやら言語実装のレベルで普通対処するものも、ライブラリレベルで実現できる柔軟さがある。
リターンスタックは他の言語にはないForthの特徴の一つだからね。
俺言語でなんとか実現する方法を悩んでみるのも楽しいんじゃない?
523514
垢版 |
2008/10/11(土) 18:47:48
あとForthのVMって相当シンプルだよ。
アセンブリ言語で書かれた昔のForthとかコアの部分はアセンブリ言語で数行レベルだった気がする。
どのへんが複雑だと思ったのかは興味がある…
524517
垢版 |
2008/10/11(土) 21:01:10
>>521
いや、そうではなくて、
「WORDの動作」の中の、「普通のForthと同じ動作で」ってところに、
リターンアドレスを保存するスタックという意味でのリターンスタックが、もう必要なのではないかということ。

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

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

ちょっと話題はそれるけど、Forthというか、スタック指向言語は、
コンパイラライターフレンドリーなんだよね。
だから、Forthコード書くよりForth(風オレ言語)VMを書く人が多かったりするわけだが、
ホントはForthでアプリケーションを書くときも「オレ言語」を作るつもりで書くと良いと思ってる。
2008/10/11(土) 21:33:08
Forthの用語って独特な言い回しがあるからな。
知らない人は結構混乱する。
スレデッドコードのForthの場合、ソースコードを解釈してスレデッドコードを
生成することをコンパイルといい、スレデッドコードを生成する部分を外部インタープリタ、
スレデッドコードを解釈実行する部分を内部インタープリタと呼ぶ。
(これで良かったよな?同志?)
このスレでVMと言った時に内部インタープリタだけなのか、外部インタープリタも含むのか?
どっちだろうか?
2008/10/12(日) 00:45:26
>>525

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

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

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

だと思ってました。

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

Forth VMというと、外部も含むのかな。
上のリターンスタック云々の話は、
内部インタープリタのことだと思うけど。
2008/10/12(日) 07:57:23
内部インタプリタて(スレッドコードで実装してる場合は)nextルーチンのことじゃなかったっけ。
2008/10/12(日) 08:49:02
そうNEXTルーチン。アセンブリ言語で数行、という奴。
529464
垢版 |
2008/10/12(日) 15:10:26
>522
その辺は「自由と責任」というやつですな。「銃で足をブッとばす自由」でもあるけど。

>どのへんが複雑だと思ったのかは興味がある…
自分でも何でだったっけな、と過去の記憶を探り出してみたけど、
・実行中のWORDの次のWORDを辞書の中から探せるようにする仕組みが必要
  ×実行中のWORDの中身を変更するのが大変(VMのスタックに積んでいるWORD含む)
  ×番兵などの終了処理が必須
  --> VM側のスタックに積むことにすればpop&top参照で正規化できるし、元の値を
    コピーするからWORD変更にも影響されない。
・VM側に「WORDを実行する」という手順が必要になる
  --> VM側のスタックに積むことにすればpushで正規化できる
ぐらいかもしれない。
コンパイル時にWORDの中身が確定するforthだとあんまり問題にならなそうだね。
530464
垢版 |
2008/10/12(日) 15:20:28
>524
「スタックに複数のデータを押し込む操作は機械語レベルだとアトミックにならない」ということ??
C++で実装しているから意識していなかったけど、そうかもしれないですね。
少なくともプリミティブで実装する必要あるね。

>ForthのVMよりも(多分プリミティブ)WORDの系列を作る部分が余分で、
これは狙ってやっていることだから仕様がないですね。
まあ、俺言語ではVM自体もWORD扱いにしているのですが……
2008/10/12(日) 15:50:56
>>529
んー、やっぱり、思い込みでForthを理解したつもりになるんじゃなくて、
本格的に触ってみたほうが良いと思うんだけどな。

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

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

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

>VM側に「WORDを実行する」という手順が必要になる
スレデッドコードのForthの命令列は、ワードへのポインタが並んでいるだけで、
「WORDを実行する」という意味のインストラクションは必要ないよ。
532464
垢版 |
2008/10/12(日) 23:25:00
本格的に触るのは……あの構文は色々と嫌だ。
[条件] IF [肯定時] ELSE [否定時] THEN とか。
せめて条件算子的だったらなぁ。[条件] ? [肯定時] : [否定時] ;

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

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

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

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

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

ま、いろいろ悩んで勉強して、これだ!と思える言語デザインに邁進してください、と。
このスレが本当に久しぶりに活性化したのは間違いないしね。
2008/10/13(月) 00:21:58
>>533
間接スレデッドの場合、Forthコンソールの側から見ると、
逆コンパイルしやすかったり、便利な面はたしかにあるけれど、
VMつうかnextルーチンから見ると、単にポインタを辿っているだけなので、
構造として、VM実装と辞書構造が密、というわけでもないと思う。
実際VM実装テクニックとしてのスレデッドコードは、今や、Forth以外でも
当たり前の技術になってるし。
2008/10/27(月) 00:52:54
jonesforth読んだ。
ソース付きなので理解しやすい。

OS Xで動かそうとしたが挫折した。
OSXのGASではマクロが対応してないみたいだ。
2008/11/23(日) 01:13:24
急にスレが進んだと思ったら、止まるのも急だよなこのスレ
やっぱ誰も使ってないってこったな
2008/11/26(水) 17:30:54
ttp://www.intellasys.net/index.php?option=com_frontpage&Itemid=64

なんか並列forthマシンっぽいw
2008/12/27(土) 14:00:32
factor使ってる奴いる?
2008/12/27(土) 21:13:14
とりあえず入れてみたけど特に使ってないなw
541539
垢版 |
2008/12/28(日) 01:26:48
factorおもしろいぜ。デプロイするとスタンドアロンで動く物もできるし。
2008/12/29(月) 13:31:00
やっぱだめだこの言語。
人間工学から著しく反してる。
2008/12/29(月) 19:52:22
サルが人間工学語ってやがる。
2008/12/29(月) 21:45:56
自分の思考をスタック処理に最適化させればいいんだよw
2008/12/29(月) 22:06:52
forthに慣れるのはそんなに大変なことじゃないと思うけどなあ。

まあ、問題をごく単純な部分に細分して考えることができないと、
スタック処理が爆発しがちになるとはいえますね。
でも、問題の細分ができない人は、どの言語でプログラミングしても
たかが知れてる。
2009/01/01(木) 11:45:56
Lispのマクロ的なことができるってほんと?
2009/01/01(木) 11:56:23
イミディエイトなワードのことかな。
結果としては似たようなことができると言えなくもないけど、
Lispのマクロみたいな2度evalするみたいな高水準のものじゃありません。
2009/01/07(水) 22:44:24
つまり・・・どういうことだってばよ?
2009/01/07(水) 23:39:44
factorならlispのマクロと同じようなことができるよ
2009/01/08(木) 00:11:19
同じ機能を達成できるとしても言語が違えばそこに至るロジックは異なる。
具体的に何がしたいのか特定しないと。
factorはおもしろい言語だが、関数型言語のフリし過ぎなのがイヤラシくもある。
2009/01/09(金) 12:30:14
何かサンプルが欲しいな。
2009/01/09(金) 22:47:55
http://ancient.s6.xrea.com/factor/cookbook.html
553デフォルトの名無しさん
垢版 |
2009/02/26(木) 00:17:58
組み込み用FORTH検討中・・・
2009/03/07(土) 05:11:31
part 1 の URL ってないの?
2009/03/07(土) 10:00:54
http://piza.2ch.net/tech/kako/987/987562311.html
2009/03/07(土) 10:13:20
: Mops ( オブジェクト指向FORTH -- ) ;
http://pc.2ch.net/tech/kako/1000/10001/1000118518.html
2009/03/07(土) 13:25:33
thanks
2009/03/07(土) 18:54:17
このスレも長いね
2009/03/07(土) 21:43:31
factorとかJoyとか触ってる奴いないのかよ
2009/03/07(土) 23:32:50
普通の関数型言語に比べてどういうメリットがあるのか分からない。
2009/03/08(日) 10:51:09
forthは関数型ちゃうし
2009/03/08(日) 12:22:51
>>560はなんでこのスレにいるんだ?
2009/03/08(日) 19:52:03
いや、factorがって事なんだが。
2009/03/08(日) 20:01:58
なんで関数型言語と比較するんだ?
Factor = forth + 無名関数とオブジェクト指向だよ
2009/03/19(木) 13:57:45
全然Forthと関係ない話だが、AMDのシニアアーキテクトが
チャック・ムーアって名前なのは結構心臓に悪いな。
566デフォルトの名無しさん
垢版 |
2009/06/24(水) 08:13:56
何か話題無いかな
2009/06/25(木) 14:24:21
LLイベントでの発表者募集中とか
2009/07/03(金) 05:23:56

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

2009/07/03(金) 22:57:04
Pythonスレに帰れw
2009/07/09(木) 07:11:33
今更ながら FORTH 勉強しようと思ってるんだけど、
何かいい本ある?
できれば日本語がいいけど英語も可。
2009/07/09(木) 10:23:23
絶版多し
2009/07/09(木) 21:39:14
触りしか読んでないけど
ttp://www.forth.com/starting-forth/
2009/07/10(金) 07:32:04
>>570
Let over Lambda日本語版
2009/07/10(金) 20:52:17
>>573
たしかそれってlispの本じゃないか?
2009/07/10(金) 20:57:56
lispでforthを作る本
2009/07/10(金) 22:31:17
http://www.amazon.co.jp/dp/4434133632
2009/07/11(土) 05:33:45
gforth でググるとNVIDIAのグラボしかヒットしない。
Bingだと forth だけがヒットする。愛してるよMS
2009/07/18(土) 23:02:30
あほな質問かとは思うがよかったら教えてくれ
スタック型言語にはスタックオーバーフローってある?
それともヒープにあたるものをスタックとしてつかている?
2009/07/18(土) 23:10:10
両方ともYESだよ。
2009/07/18(土) 23:17:25
オーバーフローだけじゃなくスタックアンダーフローも楽しめるぞ
2009/07/18(土) 23:31:56
さんきゅー、Jedi!
2009/07/19(日) 03:45:38
そのネタもう飽きた
次そゆこと言った奴はダークサイドな
2009/08/17(月) 17:57:34
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L

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

http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ 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
> まぁ、どうせ正解が出るわけもないし、次の問題。
> 君が思う面白いスレはどんなの?
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください
584デフォルトの名無しさん
垢版 |
2009/10/06(火) 10:44:14
. 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件
2009/10/06(火) 11:33:58
J の検索結果 約 1,650,000,000 件中 1 - 10 件目 (0.25 秒)

圧倒的だな。

http://ja.wikipedia.org/wiki/J_(プログラミング言語)
2009/10/06(火) 11:36:17
すみません、嘘でした。。。
2009/10/06(火) 13:38:04
C の検索結果 約 3,910,000,000 件中 1 - 10 件目 (0.32 秒)
2009/10/06(火) 13:39:59
>>584 <-こいつどこで検索したんだ

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

古いコピペか
2009/10/06(火) 13:42:51
D の検索結果 約 4,780,000,000 件中 1 - 10 件目 (0.24 秒)

時代はもはやDですよ。
2009/10/06(火) 13:44:54
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 秒)
2009/10/08(木) 21:50:04
Fuck の検索結果 約 156,000,000 件中 1 - 10 件目 (0.19 秒)
2009/10/09(金) 00:25:23
A の検索結果 約 15,560,000,000 件中 1 - 10 件目 (0.06 秒)

時代は A だった。
2009/11/23(月) 09:27:28
forth検索しにくすぎる
2009/11/23(月) 18:04:33
http://www.forth.org/
http://wiki.forthfreak.net/index.cgi?
2009/11/25(水) 14:14:43
http://lab.ee.uec.ac.jp/text/forth/doc/WordName.html
このページの仕様だとNFの後にLFが来てるけど、jonesforthだとLFが最初だよね。
NFが先だとFINDの時にLFを出すのに手間がかかると思うんだけど、
NFがLFより前にあるメリットって何かあるのかな?
2009/11/26(木) 00:14:06
padding の有無の違いかと
597デフォルトの名無しさん
垢版 |
2009/11/30(月) 00:21:59
http://www.h7.dion.ne.jp/~samwyn/forth/gforth/index.html
Gforth マニュアルの和訳 (現在、チュートリアルまで)
598デフォルトの名無しさん
垢版 |
2010/01/05(火) 18:09:33
http://ronware.org/reva/wiki/Index.php
Reva
非標準系 Forth (ミニマリスト系)
パブリックドメイン、コアは FASM で記述
プリミティブワードは商用 Forth や GCC 並みに高速
Windows の DLL や Linux の共有ライブラリを呼び出し可
豊富なライブラリが付属
599デフォルトの名無しさん
垢版 |
2010/01/16(土) 15:33:34
http://www.h7.dion.ne.jp/~samwyn/forth/RetroLanguage.html
Retro (Forth) の和訳
http://www.h7.dion.ne.jp/~samwyn/forth/winconsole.zip
オリジナルのコンソール版仮想マシンを Windows 専用に移植したもの
TinyC のみでビルド可、TinyC の conio.h を利用
超応急措置的改変だが、文字列に日本語も使用可
ビルド済み EXE とオリジナルの retroImage も同梱
2010/03/11(木) 19:17:24
スレがなくて似たようなスレということでやってきたんだけど
postscriptの話題もOKですか?

forthはif文は逆ポーランドじゃないんですね
2010/03/12(金) 19:38:03
誰もいないし

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

%!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
2010/03/23(火) 00:04:39
ttp://factorcode.org/
今死んでね?
2010/03/23(火) 00:58:37
中の小人が忙しいといってるな
2010/04/18(日) 17:43:19
FORTHって、ちょっとずつ作れてなんだか良いね。
関数とかじゃなくて、演算子を作りながら進んでる感じ。
2010/04/18(日) 23:45:47
のんびりのんびり(^。^)y-.。o○
2010/04/22(木) 05:05:43
何気にコンパイル = 2パスなところがミソなんだね。
最初IF文とか巧妙にスタックで実現しているのかと思った。
2010/04/28(水) 19:34:13
Factor 座談会
ttp://oss.infoscience.co.jp/factor/roundtable/
2010/06/15(火) 05:20:29
蔵書を整理していたら
マイコンピュータ No3
特集すぐ動くFORTH

などと言うものが出てきた、1981年の本なのでZ80とかApple向けの実装の話だったりする
思わずScanSnapで取り込んでしまった
2010/06/15(火) 17:04:11
リギー、かわいいよリギー
610デフォルトの名無しさん
垢版 |
2010/08/11(水) 11:24:30
age
611デフォルトの名無しさん
垢版 |
2010/12/28(火) 08:18:41
age

2010/12/28(火) 09:18:30
ムーア先生がさらにあさっての方向に。

http://www.greenarrays.com/

144コアのforthマシンとか誰得
2010/12/28(火) 09:43:38
いつものことじゃん
いちいち驚くなよ
614デフォルトの名無しさん
垢版 |
2010/12/31(金) 23:45:15
Ubuntu GNU/LINUX10.04を使ってます。

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

よろしくお願いします。

2011/01/01(土) 00:04:06
!omikuji
あけおめ
2011/01/01(土) 23:57:48
>>614
清水和人だったな、懐かしい
617デフォルトの名無しさん
垢版 |
2011/01/04(火) 08:09:35
>>616
「掟破りのmagiFORTH」は山田伸一郎さんの書いた記事でした。
1985年か1986年のOh!MZ 3月号に掲載されています。
2011/01/04(火) 20:00:48
>>617
おっとゴメン、もう記憶があやふやだわ
俺はLispの方にハマったな
こうもとやすひこの記事とか楽しく読んでいた
619デフォルトの名無しさん
垢版 |
2011/02/11(金) 21:03:43
>>13>>43
ForthとLISPの両方の特徴を生かした言語Laplasの論文
汎用簡易言語としてみたインタプリタ言語Laplas
http://ci.nii.ac.jp/els/110002895171.pdf?id=ART0003223525&type=pdf&lang=jp&host=cinii&order_no=&ppv_type=0&lang_sw=&no=1297425029&cp=
L a p 1 a s 一マイクロ・コンピュータに適した新らしい言語一
http://eprints.lib.hokudai.ac.jp/dspace/bitstream/2115/41966/1/130_145-156.pdf
2011/02/11(金) 21:15:45
日本語プログラミング言語Mind
http://mimizun.com/2chlog/tech/piza2.2ch.net/tech/kako/976/976753657.html

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デフォルトの名無しさん
垢版 |
2011/02/11(金) 21:20:48
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
http://ci.nii.ac.jp/author?q=%E5%8E%9F%E7%94%B0%E5%BA%B7%E5%BE%B3
2011/02/11(金) 21:28:52
これか
ttp://ci.nii.ac.jp/naid/120001758800

「機関リポジトリ本文(無料)」ってリンクからたどってくとPDFで本文読めるな
623デフォルトの名無しさん
垢版 |
2011/02/11(金) 23:23:10
>>622
>>619の上のほうで示したリンク先「汎用簡易言語として見たインタプリタ言語Laplas」は
http://ci.nii.ac.jp/naid/110002895171
こっちで見れるね
2011/02/12(土) 00:27:43
SECD Machineみたいな、LispやMLを実装するすためのスタックマシンに自然なForthって感じか。
ざっとみたけど、lambdaはあっても、Closureはないみたいだな。
625デフォルトの名無しさん
垢版 |
2011/03/07(月) 10:54:59.82
だなw
626デフォルトの名無しさん
垢版 |
2011/05/28(土) 09:22:21.04
保守
2011/05/29(日) 07:57:22.03
いつのまにかWikipediaのMindの記事が大幅に書き換わってるな
2011/06/06(月) 07:09:36.69
おムーア様の過去の著作公開
ttp://www.colorforth.com/POL.htm
2011/07/02(土) 23:26:16.04
>>620
---------------------------
(((((((( 日本語プログラミング言語Mind ))))))))(キリ!!ッッ!!!!
------------------
((((((((((( え、それなにどうやってやるの。 )))))))))))(キリキリッッ!!!キリッキリッッッッ!!!!キリッッ!!!!ッッ!!!!
------(きリッ!


お前らってどうみてもゴミだよな
2011/07/30(土) 14:34:39.15
保守
2011/09/10(土) 06:58:08.33
時代はFORTH
2011/09/10(土) 23:29:07.15
forth出ても200超えられないorz
2011/10/12(水) 20:56:54.15
ttp://builds.factorcode.org/package?os=windows&cpu=x86.32
factorの新しいのきてるぅ
634デフォルトの名無しさん
垢版 |
2012/01/16(月) 22:00:32.22
保守
635営利利用に関するLR審議中@詳細は自治スレへ
垢版 |
2012/03/30(金) 23:52:09.58
factor(等のforth系)は頭がトコロテンになるな。
でもプログラミング自体をパズルとして楽しめるような気がする。
2012/06/26(火) 23:53:01.65
ttp://builds.factorcode.org/package?os=windows&cpu=x86.32
新しいのキター
2012/06/27(水) 01:49:33.00
スタックコンピュータって言う書籍買ってみた
古い本だけどFORTHとスタックマシンへの愛がすげー
2012/06/27(水) 07:17:19.22
おお、あれは名著だ。
2012/06/27(水) 10:13:02.11
>>636
初めてさわった
なにこれ、楽しい
640デフォルトの名無しさん
垢版 |
2012/06/28(木) 11:00:23.05
>638
原書はまだPDFで全公開してるのかな?
2012/06/28(木) 11:06:29.92
ttp://builds.factorcode.org/package?os=windows&cpu=x86.64
64bit版キター
2012/06/28(木) 11:09:24.65
>>640
ttp://www.ece.cmu.edu/~koopman/stack_computers/
643デフォルトの名無しさん
垢版 |
2012/06/30(土) 00:15:59.63
>>639
forth系ってパズル的な楽しさがあるよな
2012/06/30(土) 22:46:42.75
ttp://builds.factorcode.org/package?os=windows&cpu=x86.32
また新しいのキター
2012/07/03(火) 20:28:16.05
また来ましたな
バージョンアップ祭りの季節?
2012/07/10(火) 22:11:13.67
FORTHを学ぶサイトを作った - 西尾泰和のはてなダイアリー
http://d.hatena.ne.jp/nishiohirokazu/20120710/1341924363
2012/07/11(水) 23:13:14.19
またニューバージョンきたで
2012/07/12(木) 22:57:24.59
ttp://builds.factorcode.org/package?os=windows&cpu=x86.32
今日の更新
2012/07/14(土) 19:15:25.30
本当によくバージョンアップくるな
2012/07/15(日) 18:51:42.95
あ、きてる
2012/07/18(水) 15:12:10.06
毎度!
2012/07/19(木) 20:54:07.43
2012-07-17
2012/07/20(金) 14:00:53.36
2012-07-19
2012/07/20(金) 17:48:26.40
何だ何だ?
2012/07/20(金) 22:56:25.07
ttp://builds.factorcode.org/package?os=windows&cpu=x86.32
ニューバージョンが来たってことでしょ
2012/07/20(金) 23:55:48.43
うーん、それニューバージョンって言うものか?
一見するとリリースノートもないし、開発者向けにビルドし直したもので、
一般のユーザー向けに作られたものじゃないと推察するのだが。
本スレに書いてる人、何が変わったか把握してる?
2012/07/21(土) 09:31:12.80
ステマのにおい
2012/10/08(月) 20:25:47.38
.
659デフォルトの名無しさん
垢版 |
2012/10/11(木) 20:10:49.89
shuffle shuffle
2012/10/18(木) 19:40:10.82
test
2012/11/12(月) 06:30:53.31
&amp;nbsp;test
2012/11/12(月) 07:13:40.73
 &amp;#160;test
2012/11/15(木) 22:25:43.78
a
a
a
a
2012/11/15(木) 22:28:35.87
&nbsp;&nbsp;&nbsp;a
   a
&#xA0;&#xA0;&#xA0;a
665デフォルトの名無しさん
垢版 |
2012/11/22(木) 22:57:21.32
666デフォルトの名無しさん
垢版 |
2013/03/06(水) 01:21:39.12
保守
何か面白い話題無いのかな
2013/03/06(水) 09:59:04.64
I think so.
2013/03/08(金) 11:11:43.39
Laplasの人自身による解説があった
http://blog.goo.ne.jp/viscuit/e/3ffb6c90b91f75911cef4198ee394c09
2013/03/08(金) 11:46:01.28
http://www.viscuit.com/
https://twitter.com/viscuit
2013/03/18(月) 01:17:00.32
>>117のコントロールフロースタックについてもうちょっと詳しく聞きたい
ジャンプ先って何へのジャンプ先?
2013/03/18(月) 01:23:17.50
あああちゃんと調べてなかった、ここの説明でわかったよ
http://www18.atwiki.jp/imops-forth/pages/34.html
2013/03/18(月) 19:30:42.45
forthの最大の欠点ってfactorみたいなオブジェクト指向にしたときにスタックに積んだ引数と関数の期待する型が違ったときに困る事だとおもうんだけど
コンパイラのレベルでこれってなんとかならんの?
2013/03/18(月) 22:45:55.67
普通の関数型言語と一緒じゃね?
全てのトークンに引数型と戻り値型を対応付けて、コンパイル時に
型解決すれば良いと思うけど。
2013/03/28(木) 01:26:47.80
Windows上のFactorで日本語表示させる方法がわからん
2013/03/28(木) 01:53:15.83
"日本語" H{ { font-name "メイリオ" } } format nl
で表示できた。
あとはlistenerのfont-nameを書き換えられたらいいのかな。
676デフォルトの名無しさん
垢版 |
2014/01/05(日) 03:24:36.20
保守
677デフォルトの名無しさん
垢版 |
2014/01/05(日) 21:15:32.75
保守!!!

Forth は実用に耐えるのですか?特に可読性的に
2014/01/05(日) 22:21:30.32
>>677
Forth の達人 (= プロの Forth 屋) なら、数十万行でも苦にならないそうな。
ライフゲーム
http://wiki.forthfreak.net/index.cgi?GameOfLife
BASIC インタプリタ
http://home.iae.nl/users/mhx/basic.frt
FALSE インタプリタとコンパイラ
https://github.com/benhoyt/false-forth
その他
http://wiki.forthfreak.net/index.cgi?ForthCode
http://wiki.forthfreak.net/index.cgi?

みんな目的に特化したプログラミングをするので、汎用ライブラリやフレームワークは無いに等しいけれどね
(個々の実装に特化したものならそれなりにあるけど)。
679デフォルトの名無しさん
垢版 |
2014/01/05(日) 23:08:26.86
thx

まさかこんなに早く返事がくるとは思わなかった!
2014/01/06(月) 05:54:37.02
常に人はいるんだわ

単に新しい話題がなんにもないだけで
681デフォルトの名無しさん
垢版 |
2014/01/06(月) 15:05:08.84
>>678
Forthの力ってすげー。

>>680
なる


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

ちなみに慣例や伝統はしらぬから、
皆が想像しているものと大きく違うと思うがな!!
2014/01/06(月) 17:56:02.28
>>681 期待してます!
683デフォルトの名無しさん
垢版 |
2014/01/06(月) 20:20:59.69
文字列はどういう風に扱えばよいのですか?
2014/01/06(月) 21:14:53.59
>>683
文字数と文字列本体からなる構造体のアドレス(ポインタ)、とか。
2014/01/06(月) 22:41:12.49
日本語情報なら
http://www-lab.ee.uec.ac.jp/text/forth/
http://www.h7.dion.ne.jp/~samwyn/forth.htm
後者の Gforth マニュアル
http://www.h7.dion.ne.jp/~samwyn/forth/gforth/index.html
は「OS コマンドライン引数用ワード」まで訳してある (残りは未訳)。
また、ANS Forth ではない独自仕様だけども、
http://www.h7.dion.ne.jp/~samwyn/forth/RetroLanguage.html
http://www.h7.dion.ne.jp/~samwyn/forth/Ngaro.html
http://www.h7.dion.ne.jp/~samwyn/forth/retroimage.htm
も Forth 自体の実装を目論むなら参考になるかも (ちなみに現在の RetroForth はこれよりもう少し進化してる)。
2014/01/06(月) 23:19:19.70
>>683

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

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

私もなんでも積めるように実装して、まぁうまく行ったのですが
>>672の方と同じ問題もあったので、スタックには数値しか置けない
実装も試してみたいと思っています。
2014/01/07(火) 09:04:59.98
ややこしい物は全部辞書に突っ込むとかの手も。
2014/01/07(火) 11:29:30.09
>>687
文字列等をワードの定義に置き換えてしまう、と言うことでしょうか?
この場合、最終的にスタックに積まれる物は何になるのでしょうか?
2014/01/07(火) 12:34:21.76
>>688の自己レスですが、辞書にと言うことは素FORTHの話だと思うので
文字列を辞書に登録後、そのアドレスがスタックへ積まれることになりますね。
690681
垢版 |
2014/01/13(月) 14:43:11.44
681です。
インタプリタでいいよね?
2014/01/15(水) 17:15:27.03
>>690
バイトコードとかスレッデッドコードインタプリタであればFORTHの普通過ぎると思う(誰もが一度はやる)
JIT(AnyCPU向け)実装とか,Factor見たいな構造をスタックに詰めるとかの部分をがんばらないとn番煎じになっちゃうから何か独自のがんばりが必要だと思うよ。

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

OSSでがんばるならこっそりコントリビュートする人はこのスレにも多そうだからがんばれ!
2014/01/15(水) 23:01:48.08
最初はベタな書き方でいいと思う
693デフォルトの名無しさん
垢版 |
2014/01/16(木) 04:52:38.68
Forth で Forth を書くんだ
2014/01/17(金) 10:55:03.71
>>690
インタプリタだと、Forthの制御構造とかループが
意外とうまく行かなくて楽しいよ。

>>693
このスレの上の方にもありますが、Let over Lambdaでは
LispでForthを書いて、そのForthでLispを作ってますね。
2014/01/26(日) 21:50:03.79
forthインタプリタありすぎてどれを使えばいいかよく分からないけど
とりあえずgforth使っておけばいいのかな
2014/01/26(日) 22:12:55.38
とりあえずなら何使ってみてもいいと思うよ
2014/01/27(月) 11:46:12.62
自分でインタプリタ書いてみるのも良い
698デフォルトの名無しさん
垢版 |
2014/02/20(木) 20:29:49.07
http://forthfreak.net/jsforth80x25.html
2014/03/12(水) 13:38:35.60ID:ZbttMlJE
http://www.worldofspectrum.org/infoseek.cgi?regexp=^Forth-83$&pub=^Lennart+C.+Benschop$

Forth-83 の ZX Spectrum (欧州版 MSX1 のような Z80A 8 ビットパソコン) 版。
Forth-83_Extras.zip に Forth アセンブラ記述の実装ソースあり。FIG-Forth ベースらしく、最小限
のプリミティブワード以外は FIG-Forth と同じく Forth 自体で記述されてる。
2014/03/12(水) 17:03:35.35ID:f26liuj5
あの頃のPCに標準装備されてるのがゲイツBASICでなくてForthだったらPC世界は今とは随分違ったものになってただろうな。
2014/03/12(水) 17:20:04.88ID:w2TVy3P1
>>700
カシオの電卓もきっとRPNに!

BASICってコンピュータが何をしてくれるのかを学ぶのには適してるとおもうけどなあ
FORTHもそうだけどREPL環境のあるコンピュータ言語だとBASIC,FORTH,LISPの御三家があるけど、どれが一番よかったんだろう?
2014/03/12(水) 17:26:49.46ID:EfiLuccu
Lispがベストだが、いかんせん大食らい過ぎる。
Forthも悪くない。

Basicの奴はREPLのようなREPLでないような微妙なコマンドラインだしなぁ。
2014/03/12(水) 17:41:55.19ID:w2TVy3P1
>>702
実マシンのメモリモデル的にはBASICが一番合う気がするんだよね。
で関数定義を基本とするならLISPが一番。(引数と関数の関係が一目瞭然なので)
で、FORTHだとFACTORみたいにオブジェクトとメッセージみたいな含みができれば最高なのにという感じ
という個人的な感想をもっちゃう。
>Basicの奴はREPLのようなREPLでないような微妙なコマンドラインだしなぁ。
forgetで+とか以降を消して涙目とかは流石にBASICじゃできないと思うのでそこら辺のシステム空間とユーザ空間みたいな区別はあっても良いかもしれない
2014/06/02(月) 08:19:32.29ID:bzg7kW0W
組込み試作品に使える言語を探していて、Forthに行き当たった。
ZigBee、Raspberry Piなんだが、Forthはこういうの苦手なんだろうか?
2014/06/03(火) 01:33:51.03ID:pa2cdK6+
>>704
そんなこたないんだが、arm用に特化したforth処理系ってのが存在しないのも事実なのでなんと言えばいいんだろうか。
ちなみに特化しなくても何とかなっちゃうのがforthの良い所だったり、何も無いところから作り込んでもそんなに手間じゃなかったりするのも魅力だったりする。
でもRaspberry PiみたいなLinuxが動いちゃう環境ならforth使う理由が殆どないよ。
むしろ生の機械語を直接書かないと駄目なような環境に向いてる。
2014/06/03(火) 11:48:06.91ID:XzYLHg3E
raspberry pi forth でググったらなんか出てくるみたいだが。

というか、rasp pi 衰退したOSや言語の敗者復活リングみたいになっててオモロイw
2014/06/04(水) 16:39:08.74ID:2ij5JthN
まさにそれ
ttp://star.gmobb.jp/koji/cgi/wiki.cgi?page=AVR%A5%D3%A5%C7%A5%AA%C3%BC%CB%F6%A4%CE%C0%BD%BA%EE
708デフォルトの名無しさん
垢版 |
2014/08/13(水) 10:22:44.64ID:MV0il0Eo
★2ch勢いランキングサイトリスト★

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

※ 要サイト名検索
709デフォルトの名無しさん
垢版 |
2015/02/05(木) 18:47:19.10ID:Wisgh0P5
>>706
2015/03/28(土) 16:14:22.33ID:JCsZnGie
みんな生きてる?
2015/03/28(土) 16:52:42.19ID:iNpGjoni
." live!"
2015/03/30(月) 19:02:34.24ID:ZHuPrBLY
書籍が高すぎる
2015/03/31(火) 21:06:19.08ID:2fh/fl2T
windowsとLinuxで動作するISO準拠処理系プリーズ
714デフォルトの名無しさん
垢版 |
2015/04/01(水) 21:02:18.21ID:A/TYeiEx
もう漏れしかいないのか

ついに手に入れた「FORTHへの招待」
さっそく読もう
2015/04/01(水) 23:35:21.77ID:6DGYq49D
懐かしい本だな
それと「スタックコンピュータ―CISC RISCとスタックアーキテクチャ」はバイブルだ
716714
垢版 |
2015/04/02(木) 05:49:55.97ID:ZYrODdip
なんかROMとRAMの説明から始まってて和露他
いいからFORTHの説明はじめろや
2015/04/09(木) 21:33:48.07ID:DFOBVCzK
読み終わった
>>715とFORTH入門を注文した
FORTH入門は一万円以上した
2015/04/09(木) 22:41:41.16ID:LdJOGzfd
>>717
原著はWeb上にあるよね
http://home.iae.nl/users/mhx/sf.html
日本語版もほしいけど
2015/04/12(日) 19:17:21.15ID:4Fcd4Vhe
おk読了
次は>>715
2015/04/12(日) 19:25:26.49ID:3ERnJGQj
>>719
715はスタックマシンとForthへの愛に満ちているので毒されると悶死できるぞ
721719
垢版 |
2015/04/15(水) 17:48:12.32ID:SFWZvMHG
知識不足のため理解しきれていない部分もあるがなんとか最後まで読んだ

↓この文が最高でした
RISCプロセッサのUnix/Cプログラマが8Mから16Mバイトより少ないメモリでは不満足で、
128Kバイトのキャッシュを要求しているときに、Forthプログラマたちはまだ、
スタックマシンに64Kバイト以上のメモリが本当に必要かどうかを熱心に議論している
2015/04/18(土) 09:39:32.64ID:W8H7yv/P
次の段階へ移行
723デフォルトの名無しさん
垢版 |
2015/05/04(月) 16:20:21.65ID:McZN4pHS
日本のForthコミュニティって無いの?
2015/05/04(月) 16:33:45.12ID:/hwLfRb3
まだ人いるか?
2015/05/04(月) 16:56:02.08ID:szzze12E
>>723
つくろーぜ
>>724
いるぞー
2015/05/04(月) 17:44:37.74ID:kE0VI/DI
>>724
居るぜー

ForthだけじゃなくてLispも入るけど組み込み機器でデバッガを内包したいような時って選択肢無いんだよね。
でLispよりもForthの方が実メモリ食わないんで本当にチープな組み込み機器だとコレ知らないと死ねる。
2015/05/04(月) 18:06:54.59ID:McZN4pHS
意外と居てびっくりした!
作ろうか
2015/05/04(月) 18:43:39.64ID:McZN4pHS
>>726
Forthに慣れてる人がどんなデバッガ作るのか(どんなとこ見るのか)気になる
2015/05/04(月) 19:28:19.74ID:/hwLfRb3
>>728
別の人だけど
デバッガとしてFORTHのインターフェースをつかうってことじゃね?
2015/05/06(水) 15:56:46.02ID:pB1d0kiO
ちょっと面白いネタ見つけた
「スタックコンピュータ」の中の人、Forthの上でのグラフリダクションを研究してたらしい。
url長すぎって言われたんで↓でググってくれ

TIGRE: Combinator Graph Reduction on the RTX 2000
2015/05/07(木) 11:41:15.23ID:PQFXQAsu
やってる人はいまもやってるんだねえ
2015/05/07(木) 14:26:59.51ID:PQFXQAsu
「FORTH入門」すごいつかえる
処理系内部まで書かれているから自作するための参考になる
2015/05/07(木) 19:26:45.21ID:43KhqhpP
あのイラストも結構好きだ
2015/05/09(土) 01:15:17.53ID:91zCXcbE
ブート処理にforth 系のficl 使ってたOSがluaに切り替えてくみたいだが
やはりさわれる人の絶対数が多い言語に移ってくもんなのだろうか。

あと昔出版されて今じゃアマゾンでプレ値がついてそうなforth系の本、県立図書館で検索したら閉架に結構あったけど
たまたまなのか規模でかいとこなら普通に在庫あるのかな?
2015/05/09(土) 08:08:38.65ID:D66ceLoP
>>734
FreeBSD?
2015/05/10(日) 13:17:55.74ID:wSg+R97A
>>735
そそ。まだ先の予定っぽいけど
2015/05/11(月) 10:05:34.87ID:jfjxFlJu
FORTHと直接の関係はないんだけど
実行ファイルのダンプを保存してあとから実行するのってどうするの?
LISPの単体で動く実行ファイルの作り方と同じ仕組みだと思うのだけど
どうすればいいのかわからん
2015/05/13(水) 23:24:57.10ID:ZhcbFads
いまだにわからん
739デフォルトの名無しさん
垢版 |
2015/05/14(木) 14:19:50.60ID:WhzKfy7h
VMをアセンブリでかくかcでかくか
2015/05/19(火) 12:28:41.76ID:CmG/oeDB
>>737
辞書と変数の設計に依るけど、単純にバイト列を展開するんじゃダメなのかな?
RetroForthがそんな設計だったような。
ちょっと挑戦してみようかな。
2015/06/23(火) 22:36:02.69ID:ifeDc53Z
そのバイト列に展開するのが難しそうだ
2015/06/23(火) 22:44:08.10ID:vwZF4gL5
OS依存になるよね、任意にcore dumpできるUnix系だとやりやすいかも
Fig FORTHだとOSに依存しないからできそうな気もする

#MC68000のFig FORTHをmotorolaのTutorial基板で触った事しかないんでうろ覚え
2015/06/23(火) 23:14:56.31ID:3QTDhBFd
レス早くてワロタ
Perlに同じような機能があったたはずだからちと調べてみゆ
744デフォルトの名無しさん
垢版 |
2015/07/06(月) 12:32:57.19ID:YQDXrDaK
間接スレッデッドコードについて質問があります
IFなどの条件分岐ではそのワードの呼び出し箇所毎にパラメータが違うと思うのですが
その場合でも箇所毎にワードが生成されるのでしょうか?
745デフォルトの名無しさん
垢版 |
2015/07/10(金) 00:42:46.31ID:wrUthjuc
もう解決したのかな?
ちょっとどういう質問なのかわからないので、詳しい人期待age
2015/07/12(日) 06:46:58.31ID:AaGOVdy1
>>744
いやたしか分岐先アドレスはスレッドに格納されるはず
つまりスレッドにはワードヘのポインタ以外にジャンプ用アドレスが含まれる
2015/07/17(金) 08:59:20.64ID:Hk7N5du5
全てをアセンブリで実装しようとしたら手がつけられなくなったので
とりあえずコア以外はcで実装すことに変更すた
しっかし本当おもしれえ
nextは僅か4命令だぞ
2015/07/18(土) 13:27:49.52ID:xBzkS6DZ
コアが実装できたら、後はforthで書こうぜ!
2015/07/18(土) 13:55:45.77ID:4KZmkVpL
>>747
今時のCPUだとアセンブリの方が実装しやすくない?
2015/07/18(土) 14:11:29.17ID:MJkUXIxe
http://blog.livedoor.jp/itsoku/archives/45591554.html
2015/07/18(土) 14:12:29.69ID:MJkUXIxe
Forthユーザ発見
2015/07/18(土) 15:38:28.81ID:3XAPUy2X
このスレの連中は矢張りRPNやRPL電卓を使ってるのかな?
2015/07/18(土) 16:33:35.15ID:5U/xTE1h
電卓は持ってないけど、何か試したり計算するときはFactorとか使ってるよ
2015/07/18(土) 17:09:30.61ID:5U/xTE1h
Sukunaの人とか、もうForth触ってないのかな?
いろいろ話聞いてみたかった。
2015/08/06(木) 16:45:29.10ID:2u/3OVyT
スレッデッドコード用vm実装記念
2015/08/06(木) 17:06:23.35ID:0X10zjbP
乙、おめ
757デフォルトの名無しさん
垢版 |
2015/08/08(土) 23:27:26.32ID:HMF33mTD
復活
758デフォルトの名無しさん
垢版 |
2015/08/10(月) 18:29:16.42ID:XUokgt8i
できてきた
I/OをCからアセンブリに実装し直してさらに小さくする
age
759デフォルトの名無しさん
垢版 |
2015/08/13(木) 14:07:02.04ID:H7bzx0I1
ところでみんなコードは小文字大文字どっちでかいてる?
2015/08/13(木) 16:00:05.24ID:TIALnNkC
>>759
今はfactor大好きなので小文字かなー
昔VT100でForth使ってたときは大文字だったよー(ワードの大文字小文字は入力時に大文字変換されてたりとか:処理系が大文字のみだと辞書のワードを圧縮したりとかしてたりする貧乏メモリ用だったりとか)
2015/08/15(土) 15:19:53.94ID:fkPcgHEe
小文字で書ぃてるょ
2015/08/15(土) 15:24:43.03ID:fkPcgHEe
処理系作ってようやく何やってるのかわかったけど、>>56とか>>62面白いなあ
2015/09/16(水) 00:48:03.18ID:VN2DGtV9
なんども あきては なんども やる
764デフォルトの名無しさん
垢版 |
2015/09/19(土) 22:00:25.70ID:GM7+1MtI
ふーむ少なくとも仮想機械はアセンブリで書かなければ移植は難しいな
一方コンパイラはcで書いてもあとでそれ自身に移植可能
あと最近2chで擬古猫見ないね
765デフォルトの名無しさん
垢版 |
2015/12/31(木) 06:27:31.47ID:shctMMuK
あげ
2015/12/31(木) 06:51:07.49ID:shctMMuK
http://phaendal.hatenablog.com/
↑FORTHの関しての記事があるのであげとま
2015/12/31(木) 10:17:38.69ID:KKAqg1l1
馬鹿には無理
768デフォルトの名無しさん
垢版 |
2015/12/31(木) 10:33:47.60ID:/wbyPP1f
便乗age
http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/slpj-book-1987.pdf
2016/01/01(金) 09:58:20.44ID:kXdPExCb
あけおめ!
770デフォルトの名無しさん
垢版 |
2016/01/10(日) 13:33:35.16ID:z1pxpAJ/
人いるんか!
771デフォルトの名無しさん
垢版 |
2016/01/10(日) 23:48:42.16ID:/2nnPZOa
フォースの覚醒
2016/01/11(月) 08:24:42.35ID:lZl+kkOU
復活の時は近い
2016/01/11(月) 16:40:56.58ID:I0GTrlSH
Erlang/Elixirに浮気中
2016/01/11(月) 19:48:51.43ID:nxq211rs
>>773
あれ、俺書き込んだ?
ってマジで思った
2016/01/12(火) 10:27:02.83ID:LOHPMzQN
今処理系実装してるけど実用的にしようとなると結構難しいな
776デフォルトの名無しさん
垢版 |
2016/01/18(月) 21:50:56.98ID:jq3Y7yyE
この言語の面白いところは低水準で動的なことをすべて行えること
コールスタックまで直接制御できるから継続のようなことも簡単にできる
一方でコンピュータサイエンスとしてのセンスはかけらもなくとても原始的だ
2016/01/21(木) 10:50:22.29ID:aPv8m3ec
だれかこいよ
寂しいな。。。
778デフォルトの名無しさん
垢版 |
2016/01/21(木) 12:56:52.61ID:zpe1QHZ3
>3 pop
2016/01/21(木) 14:03:53.56ID:aPv8m3ec
>>778
   ∧_∧
   ∧_∧ ) 
  (   )) 
  ;つ 乙ノ 
  (_  ノ | 
  ((_ノ~∪
2016/01/22(金) 02:24:26.04ID:EeNvrSL9
>>778
それhoshuや、pushちゃう

自分が幼少の頃に親父の読んでたInterfaceって本のなかにtitって言語の紹介があったのがForth系言語のなれそめだったなぁ。
そのアトはHPの電卓とFigForthの68K版をMC68000のKit上で動かしてからはまった感じだわ
2016/01/22(金) 13:27:11.36ID:7GZnHmXQ
ErlangでFORTHっていうかideoneすげー
http://ideone.com/GTo0rm
2016/01/22(金) 15:42:45.07ID:dviPRblt
まだちゃんといて安心したよ。。。
2016/01/24(日) 15:06:52.25ID:Ih+3kdbT
いまつくっているんだがやはり設計が古すぎる
予定を変更してシェルを分離させる
2016/01/24(日) 18:12:17.44ID:1S5ux+s6
意味が分からん。主語くらい略さないで入れろ。
2016/01/26(火) 04:19:18.92ID:fodjyooQ
標準のFORTHでバイナリを呼び出すための機構ってある?
2016/01/27(水) 09:41:43.11ID:PS/Qpp4W
stack overflow
787デフォルトの名無しさん
垢版 |
2016/01/27(水) 21:20:50.27ID:JOMz1gR9
処理系によるかもだか、
スタッフオーバーフローだけじゃなくアンダーフローも味わえる
2016/02/15(月) 15:23:31.07ID:z4NOVyYm
失礼
スタックマシンのチップを購入したい
どこかいい入手ルートはないか
2016/02/16(火) 02:45:46.59ID:WhucjpIR
>>788
ARMとか十分にスタックマシンしてると思うのだが
昔の本当にちっちゃいやつが欲しいってのだと今ならトラ技付録FPGAで作る方が入手性は優しい希ガス
2016/02/16(火) 09:14:36.21ID:CursrUUy
>>789
そうではないです
データスタックを持っているマシンがほしいのです
2016/02/16(火) 19:04:31.14ID:eSxr0LUY
具体的に欲しいチップを書いた方が
2016/02/18(木) 20:54:10.95ID:affLGCHB
間接スレッデッドコードはネイティブと比較してどのぐらいメモリ削減効果があるのでしょうか
どなたかデータかその参照を教えてもらえませんか
2016/02/22(月) 15:12:30.92ID:p5oR4ktM
GNUの実装についてホムペは変わってないけど開発進んでるのな
しかもAndroid版も有りやがる
2016/03/12(土) 12:26:01.29ID:x2aIRV1Q
>>788
greenarrays.com
2016/03/12(土) 23:49:41.78ID:88to1Dnq
このFORTHってのは少なくとも古典的なものは強くノイマン型アーキテクチャに依存してるのな
2016/03/16(水) 07:21:36.48ID:4qqZTEIs
QUIT ( -- ) Clears all stacks and returns control to the terminal. No message is given.

GForth
1 2 3 4 5 ok
.s <5> 1 2 3 4 5 ok
quit
.s <5> 1 2 3 4 5 ok

は?だれか説明してよ!
797デフォルトの名無しさん
垢版 |
2016/03/28(月) 06:53:30.25ID:pr7JX2mY
過疎ってるなぁ
798デフォルトの名無しさん
垢版 |
2016/03/31(木) 17:14:17.24ID:HiG8h3J6
windows10 64bit版にてswiftforth評価版が動きません。
どなたか解決策を知りませんか?
2016/04/01(金) 13:02:30.15ID:50lRt7vL
流行る要素が無いよね
2016/04/02(土) 23:14:22.41ID:2gBYslTZ
>>798
俺もだ
誰かおすえて
2016/04/04(月) 07:02:35.55ID:hhHTa9vL
ねんがんの「パーソナルエキスパートシステム」をてにいれたぞ!
2016/04/06(水) 21:09:55.72ID:s4LMXlxO
>>801
一体なにができるの?バカな漏れには全くわからん
2016/04/07(木) 14:56:44.89ID:eXkP/TbN
「パーソナルエキスパートシステム入門」だった…

>>802
forthでエキスパートシステム書くって本らしい。
(まだ来てない。)
2016/04/13(水) 21:48:47.74ID:eHTpuWMC
>>803
なんだそりゃ!?
相も変わらずFORTHコミュニティは我が道を逝くな(藁('A`)
2016/04/14(木) 01:11:18.38ID:FsF2j7W4
>>804
Use the forth Luke.ってくらいだしな
806デフォルトの名無しさん
垢版 |
2016/04/27(水) 03:12:26.27ID:fW/sUK0/
FORTH社公式サイトなんかモダンな感じにリニューアルされているぞ
2016/04/28(木) 06:46:01.82ID:6C4hGrzb
ほんまや…
つか、キャッチ見る感じFPGA対応とかやってっぽい?
2016/04/29(金) 00:42:56.46ID:T+fk1/ws
それに比べMPEときたら。。。
2016/04/30(土) 13:33:33.16ID:+u6TG0xk
>>807
なにをもって対応というのか知らんがFPGAを使ったソリューションはあるね
810デフォルトの名無しさん
垢版 |
2016/05/03(火) 01:28:59.09ID:3SS4lwd4
XTがImmediateかどうか調べるワードってある?
2016/05/03(火) 13:54:49.01ID:nk6XRDP5
>>809
forthでfpgaの回路組めるとかだったら面白いなw
2016/05/06(金) 02:21:23.49ID:FS8HTadE
いま逆ポーランド記法で書ける正規表現エンジンを作ろうか考えているんだけどAB*C|こんな感じにね
もうすでにあったりするんだろうか?あForth上でね?教材としてあるのは知っているから
Forthのもつ動的コンパイルを利用することで高移植性のJITエンジンが実装できると思ってね
( 自らをコンパイルすることができる言語はこういったスクリプトやインタプリタを移植性を保ったまま簡単に高速化できるところが素晴らしいよね)

エグって呼んで〜
2016/05/06(金) 02:23:03.98ID:FS8HTadE
>>810
たぶん標準ではないな
文字列ベースならFINDがあるんだけどね
2016/05/31(火) 01:39:08.36ID:NOiY1sCF
forthに足りないのはコマンド言語だ。
forthのプロシージャー呼び出しはすべてディクショナリ内に限られるため外部プログラムを効率よく利用できない。
シェルスクリプトのように外部forthプログラムをうまく呼び出す機構があればいいが。。。
スタックをパイプのようにプログラムで共有するとおもしろいかもしれない。
815デフォルトの名無しさん
垢版 |
2016/10/07(金) 16:43:56.85ID:oA26EQDq
gforthで実数演算たとえば、
1.0 +2.0
の様なものをしたいのですが、
1.0e0 2.0e0 + .
としても
1.0e0 2.0e0 f+ .
としても結果が得られません。
実数演算はどうすればいいのでしょうか。
ご教示お願いいたします。
2016/10/07(金) 17:47:53.85ID:ah4nbj/y
http://www.h7.dion.ne.jp/~samwyn/forth/gforth/Floating-Point-Tutorial.html
817デフォルトの名無しさん
垢版 |
2016/10/07(金) 19:28:13.23ID:oA26EQDq
>>816
これは、読んだのですが、実例が初心者には敷居が高くて
よく理解できません。
2.0 + 3..0 のような簡単な例を示した物は
ないでしょうか。
818デフォルトの名無しさん
垢版 |
2016/10/07(金) 23:18:29.98ID:oA26EQDq
>>817
結局、FACTORに乗り換えました。
こちらの方が判り易くて、すぐ実数演算(浮動小数点演算)ができるように
なりました。
2016/10/09(日) 06:39:24.29ID:pfNs/KcX
週明け、ちょっと面白いforthの論文読めるかもしれない。
forthっていうより、その上に作られたkevoって風変わりなOOP言語のだけどさ。
2016/10/17(月) 19:24:52.26ID:HyFRmQUJ
>>815
その場合 . じゃなくて f.
821デフォルトの名無しさん
垢版 |
2016/11/06(日) 00:15:56.03ID:RpZeQ9IA
Factorのチュートリアル分かりにくい。Racketを見習え��
822デフォルトの名無しさん
垢版 |
2016/12/30(金) 20:20:02.53ID:XiEG6f+8
もう2016年も終わりだな
2017/01/01(日) 11:49:42.83ID:wqx7ZaQB
.
2017/01/03(火) 10:53:07.10ID:KXR/d/nR
ことしもよろしく!
825デフォルトの名無しさん
垢版 |
2017/01/03(火) 12:26:49.35ID:qzU7aiCI
>>823
2等おめ
2017/02/04(土) 16:41:26.43ID:6xXEHIbo
うんこ
話題ねーなー
827デフォルトの名無しさん
垢版 |
2017/02/04(土) 16:44:12.53ID:e9aNESBj
あへ
2017/02/05(日) 14:14:31.59ID:nBEZPMY5
なんか話せ
2017/02/28(火) 21:19:29.80ID:5qIw+x2+
factor 1.0 マダー
2017/03/03(金) 18:00:20.86ID:3XbKihVE
うんやってみようとおもう。
ところで仕様書(規格書)はどこにあるんですかね?
831デフォルトの名無しさん
垢版 |
2017/03/03(金) 18:29:59.44ID:IUFykjWp
>1- よめ
2017/03/04(土) 00:48:33.45ID:4xESmR76
>>831 わかんない
https://www.openfirmware.info/data/docs/dpans94.pdf
これかな?
2017/03/04(土) 01:07:38.10ID:4xESmR76
http://www.forth.org/literature.html
こっち
834デフォルトの名無しさん
垢版 |
2017/03/04(土) 12:32:44.96ID:GRvQ2lmz
>>781
まだ残ってたのか
2017/04/03(月) 11:16:21.17ID:UVNX4qSu
みなさーん生きてますかー?
2017/04/03(月) 19:02:54.60ID:Z+6yuhBz
いきとるぞー
純粋なforthは全然さわらずfactorばっかりだけどな

あと組み込み機でTITもどきかなー
2017/04/03(月) 19:11:44.32ID:UVNX4qSu
次スレでは皆が胸を張れるように「スタック指向言語」「連鎖型言語」みたいなくくりにしよう!
2017/04/04(火) 02:27:49.55ID:WA/rnyB6
>>837
forthだとスタックに積まれたオブジェクトに関数ってメッセージを送るって言うことだとおもうのだけど。
そういう単純な理解じゃ駄目なの?

言語レベルで隠蔽されていることを生で扱うって事で良いんじゃ無いの?

Lispだと関数の呼び出しが括弧で括られいるから呼び出しの引数の扱いが閉じられているけど、forthの場合は関数が必要な分を消費するというか
2017/04/04(火) 09:11:34.40ID:89iVo3+8
メッセージ?違う言語と勘違いしてそう
2017/04/04(火) 11:14:00.29ID:wm/ZDuC6
コールスタックとforthのスタックは別物だよね。
2017/04/05(水) 02:36:38.33ID:9ywW0Xq5
>>840
2つあるんだよ、関数呼び出しの戻りアドレス用のスタックと別にもう一つあるんよ
842デフォルトの名無しさん
垢版 |
2017/04/05(水) 14:29:17.29ID:+eJqUohN
アキュムレータ
2017/04/11(火) 00:06:23.90ID:N954SJpH
forthがスタック指向であるようにアキュムレータ指向のプログラム言語というものは作れるのかな
2017/04/11(火) 01:23:43.97ID:Y8UBVT27
>>843
マジレスするとmacroありのassemblerじゃねぇの?
macro80やslrasmでもできたぞ
2017/04/15(土) 23:36:33.20ID:bK+0/AQY
>>844
マクロだけでは構文は抽象化出来てもシステムとして抽象化しきれないと思うけど
2017/04/16(日) 02:22:54.36ID:GjRoh4Fn
単に計算は常にAXを使うってだけなら特に面白みもなさそう
スタック無しでレジスタ無限ということなら……単に再帰呼び出し禁止なだけの普通の言語だよなあ
2017/04/17(月) 06:41:15.22ID:Oz2f+5Ln
>>845
ニクラウス・ヴィルトの言うところの条件分岐とか繰り返し構文はチョロく書けるよ>>macro80とslrasmとかのマクロアセンブラ
つかmacro80とか8bit時代のあのメモリでよくやるわと思う。

forthスレっぽいネタだと昔(1981年の8月号だと思う)のCQ出版の記事でTITって言語があってこれがマクロアセンブラでforthを実装するって記事だったような?
848デフォルトの名無しさん
垢版 |
2017/07/19(水) 19:04:38.23ID:IRmsE5AJ
1 . 2 . 3 . 4 .
2017/08/13(日) 12:07:02.89ID:BkdmOdbH
実に簡素で危険で強力だ。
貧者の言語だな。
俺にふさわしい。
2017/09/03(日) 23:56:49.18ID:sfrNKeHf
もうオレしかいないのか。。。。。
2017/09/04(月) 18:01:02.81ID:XVvO50gB
無いのはネタだよ
852デフォルトの名無しさん
垢版 |
2017/09/05(火) 22:07:51.16ID:jOSE+tCs
俺も見てるよ
2017/09/06(水) 12:34:34.16ID:nQAnFQdT
時々見に来てる
2017/09/06(水) 15:10:52.90ID:p7vL1/ES
点呼スレ
855デフォルトの名無しさん
垢版 |
2017/09/17(日) 21:34:39.86ID:ozIOAGyP
age
2017/09/18(月) 20:29:59.37ID:lhUDwV9a
これまで全く気にしたことないけど、forthって動的にリンクするライブラリの類は存在するの?
857デフォルトの名無しさん
垢版 |
2017/09/19(火) 17:19:50.82ID:xxOzXrDl
OPT
2017/10/10(火) 10:11:32.51ID:jFJIQFdq
いま処理系書いているわけどすよ
古典的なディクショナリに含まれる変数領域(エントリのitcならpfバイトコードならcf)って実行時書き込みが必要だからrom化できないよね?
ディクショナリをromに組み込む時どのようにしたらいいの?
2017/10/13(金) 08:39:42.67ID:vQb8BZek
?単にリンク時に再配置すればよいのではないだろうか
860デフォルトの名無しさん
垢版 |
2017/11/18(土) 00:00:24.25ID:u5vhQC2r
age
2018/02/02(金) 03:15:38.93ID:ZCx6BMYx
保★守
862デフォルトの名無しさん
垢版 |
2018/02/03(土) 09:42:57.30ID:qWVkS+Es
やってみ
863デフォルトの名無しさん
垢版 |
2018/05/23(水) 20:31:13.02ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

96NO5
2018/06/04(月) 02:21:55.88ID:qEnuCrwb
本当に話題がないんですね
865デフォルトの名無しさん
垢版 |
2018/07/04(水) 22:35:26.93ID:gFgZc5FG
SQU
2018/07/06(金) 12:19:01.04ID:uTPDH9XV
96NO5
867デフォルトの名無しさん
垢版 |
2018/12/08(土) 12:02:33.98ID:FYXcP+Xf
初心者ですがthinking forth読んでます。
さっそく詰まりました。
: + BL WORD NUMBER DROP ;
で+を再定義すると中置記法で3 + 4できるとあり、確かに7が得られるのですが、
どうしてそうなるのか分かりません。
(別に中置記法で書きたいわけではありません)
BLが(ボーイズラブではなく)空白の文字コード、
WORDがアドレスを得る、
DROPは . と同じですよね?
NUMBERがポイントなのでしょうが…
どなたか解説してくれませんか?
868デフォルトの名無しさん
垢版 |
2018/12/08(土) 14:44:25.82ID:mtUDrJjH
https://books.google.co.jp/books?id=1AlWbXItiCYC&;pg=PA111&lpg=PA111&ots=aekOu1m-uM&sig=V0gs7ufaMhDJsPDn6rT08XhStFY&ved=2ahUKEwjKgrCmt4_fAhUMfrwKHQQnBXEQ6AEwBXoECAkQAQ
http://www.nicholson.com/rhn/files/Tiny_BASIC_in_Forth.txt
https://www.forth.com/starting-forth/10-input-output-operators/
https://www.forth.com/starting-forth/11-forth-compiler-defining-words/
http://galileo.phys.virginia.edu/classes/551.jvn.fall01/primer.htm
2018/12/19(水) 17:23:11.16ID:+/rbvZbE
>>867

昔々にFORTHをほんのちょっとかじっただけの通りすがりだけど、最後に + が
抜けとるよね。

: + BL WORD NUMBER DROP + ;

その抜けとる(再定義前の後置記法で加算する)+  に 3 4を渡して 
3 4 + 
をさせるために4をスタックに積むことをさせとるんだと思う。
空白で区切られた”4”を取ってきて、数字に換えてスタックに乗せといて(元々
の) + に渡たしてる、かな。

. は 印刷で、DROPはスタックから一つ捨てるのような。


ていうか、そこ読んでる時点ではわからんでもいいのでは。
870デフォルトの名無しさん
垢版 |
2018/12/26(水) 20:16:53.64ID:v8erlN15
>>267
この事情おしえて!
できるんなら全部後置がいいと思ってた。
どんななるほどな理由があるんだろう?
2018/12/26(水) 21:18:44.18ID:Sasn9R68
; とか UNTIL のように可変長引数を扱うには先頭に目印が必要になるね。
>>265がちぐはぐと言っているのがどれのことなのかはわからんが。
872デフォルトの名無しさん
垢版 |
2018/12/26(水) 21:40:46.64ID:v8erlN15
じゃあ1足して2掛けるワードhogeの定義は
: hoge 1 + 2 * ;(hogeとは:1を足して2で掛けることである)
だけど別に
: 1 + 2 * hoge ;(1を足して2で掛けることをhogeとする)
とか
: 1 + 2 * ; ." hoge" def(1を足して2で掛けることを"hoge"という名前で定義する)
みたいな文法もあり得たのかな?
本体、定義するワードの識別子名
という並びではなく、
定義するワードの識別子名、本体
の並びなのは、何かの事情があっての必然なのか、たまたまなのか、それが知りたいです。
2018/12/26(水) 22:58:21.72ID:Sasn9R68
機能的にはどっちでも可能だろうけど、人が書くコードとしては識別子を前に置く方が
わかりやすいからじゃないかと思う。
あと、ディクショナリに登録する際に : からスタックトップ方向にスキャンするなら
識別子が後ろに置かれると一つ先読みが必要になってちょっと面倒くさい。
2018/12/27(木) 01:01:36.58ID:KLGborwt
forthって人の都合よりコンピュータの都合優先みたいなイメージだったので人の読みやすさのためだったとしたら意外でした。
後半は納得しました。そうかそれでか…
ありがとうございました。
875デフォルトの名無しさん
垢版 |
2018/12/27(木) 09:49:16.14ID:0qVX2+Xi
>>872
昔の貧弱なメモリとCPUでコンパイラ作るんだから
文法優先じゃなくてコンパイラの事情優先でそうなんだろ
876デフォルトの名無しさん
垢版 |
2019/06/19(水) 04:58:42.00ID:tVNS+22r
【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
877デフォルトの名無しさん
垢版 |
2019/07/05(金) 18:14:54.04ID:E00Aj00V
8年と半年掛かって>>624の言ってる事がようやくわかった。
ここの人って、何周か回っちゃってFORTHに行き着いてるんだね。
いや、SECDマシンってFORTHそっくりじゃん?!と書きに来ました。
では、また・・・。
878デフォルトの名無しさん
垢版 |
2019/08/28(水) 00:27:04.68ID:1gWoA2G/
https://ja.m.wikipedia.org/wiki/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%83%83%E3%83%89%E3%82%B3%E3%83%BC%E3%83%89#%E9%96%8B%E7%99%BA
でも触れられている、ムーアが間接スレッデッドコードの発明について述べたというバイト誌のForth特集、なんと今ではWebで読めちゃうw
当時の誌面のスキャン。なんと当時の誌面広告もノーカットw
https://archive.org/details/byte-magazine-1980-08/page/n77
さらに親切なことにフルテキストまで公開されてる。
https://archive.org/stream/byte-magazine-1980-08/1980_08_BYTE_05-08_The_Forth_Language_djvu.txt

興味のある方、ぜひ一読を。
879デフォルトの名無しさん
垢版 |
2019/08/28(水) 01:40:32.21ID:azl3m+0S
紙屑ωωω
2019/08/28(水) 07:19:51.77ID:iwi2TSA5
>>878
ムーア御大の直々の解説か
2020/04/15(水) 15:05:18.34ID:SXQ2sjzm
Oforth使ってる人いますか?
なんとなくSmalltalkぽいですね
2020/11/28(土) 11:39:10.89ID:Gr5a9V0P
apt のgforth.73使ってたんだけどアップデしたらメチャクチャ快適になった…
色付くわhelpコマンド付くわでしゅごい
2020/11/29(日) 08:16:26.52ID:sDMgzk6G
>>882
この言語で何作ってる?
2020/11/29(日) 20:10:16.85ID:JzQZ+ZwM
インスピレーションを得てるよ()
2021/01/04(月) 10:36:47.94ID:62MOX0QC
>>816
このurl、forthで検索するとあちこちに見掛けるんだけど閉鎖しちゃったのかな
waybackにもgoogle cacheにも残ってない…
886デフォルトの名無しさん
垢版 |
2021/01/04(月) 15:05:51.77ID:VbZ6KZlq
>>885
>waybackにもgoogle cacheにも残ってない…
http://web.archive.org/web/20160425023618/http://www.h7.dion.ne.jp/~samwyn/forth/gforth/Floating-Point-Tutorial.html
2021/01/04(月) 18:39:50.21ID:VbR1j+mv
>>886
使い方が悪かったのかも!ありがとう!
2021/03/11(木) 07:45:30.66ID:ifNxw6Pa
技術的というより哲学っぽいので敬遠してたthinking forth今更読んだけど代名詞の言語というのがしっくり来た
どんな言語でもちゃんと書かれれば最上層のコード派読みやすいけどForthがとりわけ読みやすいのはこれだよな
最下層はほとんどアセンブラなのにこの極端性よ
2021/03/11(木) 07:58:59.35ID:ifNxw6Pa
でもスタックイジイジするのパズルみたいでめちゃくちゃ楽しいんだよなあ、くやしい…
2021/08/23(月) 12:03:08.07ID:YpDpq+5R
もはや(8ビット)PCのためではなく(マニアックな)人間のための言語。
2022/01/01(土) 09:37:17.88ID:6v4FYv8q
あけおめ!
2022/01/10(月) 20:06:51.30ID:Ge4oCWB3
久々に書き込みあったと思えば
あけおめ!

今どきforthは趣味だろうけど良い趣味だよ
あとAndroid版のgforthは関数電卓代わりに毎日使ってる
2022/05/16(月) 14:09:01.58ID:/9w+5JsX
保守



する価値がまだあるだろうか
2022/05/17(火) 10:45:03.75ID:u8alpQJv
今勉強中だけどおもしろい

しかしパーシングワードはどうにかならんかったのか
定義の底に埋もれたnameが解釈時に吸い込んだりするのが文脈飛んで分かりにくい…
psみたいに/name {code} exch def方式のほうが一貫性あったのではないか
2022/05/17(火) 10:55:12.34ID:u8alpQJv
FORTHへの招待って古い本買ったんだけど、PICK/ROLLのindexが1始まりだったり、今の処理系と結構違うよね
長々とハードの話から始まり機能紹介までで終わってて、具体的なコーディングテクニックまでたどり着いてない…

モダンでオススメな本ってあるかな
2022/05/19(木) 08:44:16.13ID:13z7p19v
モダンなFORTHなど存在しない!
2022/05/20(金) 15:21:07.51ID:B9Pct0M/
初学者だけど
まあレトロなところに惹かれたのは否定できないな
有名な"FORTH思考"とか、一般プログラミング作法の啓蒙書としては素晴らしい
ブロックの章立ての章とかよく考えさせられる、まあ実ファィルに置き換えて写経してるけど
2024/01/01(月) 09:03:44.52ID:MIyexYoQ
あけおめ!
2024/01/21(日) 09:24:04.48ID:rroAgTgL
古の8bit機みたいな小さいマシンでnextルーチン書くところから始めてみたい
900デフォルトの名無しさん
垢版 |
2024/05/04(土) 06:00:27.59ID:+DAXDwQe
標準FORTHが国会図書館のサイトで読めるようになってる(要登録
https://dl.ndl.go.jp/pid/12631453

他にも古い本が色々見られるようになったっぽい。
2024/05/05(日) 14:45:30.58ID:Fv0JPqsX
読もう。持ってたのは昔無くした
2025/01/01(水) 10:04:42.73ID:exme2yo6
あけおめ
903デフォルトの名無しさん
垢版 |
2025/06/14(土) 06:37:53.81ID:3Q/jS2n6
forthソースファイルをunices上で実行可能ファイルにする一般的な方法ってある?
PC上を想定していて超リッチなgforthなら #! 機構を想定して#!を\のシノニムとして定義してくれてて助かるんだけれども、これのない場合にも対応したい

思い付いたのは
: && true ; \ exec forth "$0" -- "$@"

forth側:
ワード&&(普通未定義)をtrue=-1としてコロン定義、後はコメント
sh側: :コマンドが成功したらtrueコマンドを実行、次にインタプリタを起動

なんだけれどsh側では
" exec" "forth" ...
とトークン化されてcommand not found
\execとスペース開けずに書けたら良いんだけどするとforthはコメントとして認識しない

何かいい知恵あったら教えてください
904デフォルトの名無しさん
垢版 |
2025/06/14(土) 06:52:21.04ID:3Q/jS2n6
>>895
forthのrollは n roll でn個先までを1回まわすけど
postscriptのrollは n m roll でn個先までm回まわせてより強力なのよね
mは負でも可で逆回転もできる

あんまりコードに数値を入れるのはbad practiceとはいえforth書いてると時々欲しくなるやつ…
905デフォルトの名無しさん
垢版 |
2025/06/21(土) 00:54:36.13ID:flEjrxpy
>>903だけど自己解決
: && true ; ( exec forth "$0" -- "$@" )
で行けた
潔癖症ではないから定義されたワード&&は気にしない、たぶん処理系定義の&&は見たこと無いこら潰す事もないはず

一応win32forthとか複数の処理系で
forget &&
て消せたと思うんだけれど、今試してみたらgforthに無いからforgetは非標準ワードなのな
906デフォルトの名無しさん
垢版 |
2025/06/21(土) 11:16:23.88ID:fGhLJfIJ
こら
907デフォルトの名無しさん
垢版 |
2025/06/26(木) 14:21:09.64ID:nmyewptE
神経質すぎじゃねる
まあforgetはmarkerで実装できそうな気がする
908デフォルトの名無しさん
垢版 |
2025/10/12(日) 02:30:37.41ID:DKsy7+ZR
PCで触ってないからunix(shebang)+forth処理系のハックは詳しくないんだけれども、まあ面白そうだね

ワードを消すforgetは任意のワード対象、で良かったかな(たしかそう)
しかしmarkerは事前に設定したマーカーまでオフセットずらして巻き戻し、よってそれまでのワードがリセットされる仕組みだったはずだから、任意ワードを、特に名指しで消すには不向きでは

いやまあ消せるんだからマーカーの記録されてるメモリを退避したりリカバリしたり丁寧に管理してやればできるはずだが…
909デフォルトの名無しさん
垢版 |
2025/10/17(金) 05:21:31.52ID:D1Ebmx1L
別に余計なワードがあろうと問題なくね
たまたま同じ名前のワードを定義したらそれが有効な訳だし
ブートストラップ用途なら別に潰されても困らん、ブートストラップにしか使わんのだからな
レスを投稿する

レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況