04/02/18 12:27.net
第3問
: foo twice ." Hello" ;
でfooを実行すると
HelloHello
を出力するようなtwiceを定義してみれ。
57:デフォルトの名無しさん
04/02/18 17:59.net
: 2dup >r dup r> dup >r swap r> ;
: 3dup >r 2dup r> dup >r swap >r swap r> r> ;
>>56
immediateを使う? よく思い出せん。
58:54-56
04/02/18 19:06.net
>>57
2dup、3dup、お見事っす。
>>56はimmediateを使うという解答もアリですが、
immediateを使わないちょっとトリッキーだけど
もっとシンプルな方法があります。
59:デフォルトの名無しさん
04/02/19 17:08.net
人少ないなぁ。
第4問
: AA reverse ." AA" ;
: BB AA ." BB" ;
: CC BB ." CC" ;
でCCを実行すると
CCBBAA
を出力するようなreverseを定義すれ。
‥‥‥実はコレ第3問のヒントだったりする。
60:デフォルトの名無しさん
04/02/19 21:25.net
Forth のお勧め本ってどんなのありますか?
最近RPNに萌えてます。
HPの電卓欲しくなっちゃった。
61:デフォルトの名無しさん
04/02/19 23:02.net
自分は「標準Forth」
URLリンク(www.amazon.co.jp)
でForthを学んだんだけど絶版だろうね。
古本屋か図書館で探すしかないと思われ。
英語でも良ければ、
URLリンク(home.iae.nl)
ここのChapter 1から順に読んでいくのがオススメ。
62:デフォルトの名無しさん
04/02/20 12:42.net
懲りずに第5問。
: foo
." 1 "
resume
." 2 "
resume
;
: bar
['] foo call/cc
." 3 "
resume
." 4 "
drop
;
で、barを実行すると、
1 3 2 4
と表示するような、resumeとcall/ccをがんがって定義してみれ。
ちなみに、この2つのワードは以下のスタックコメントに示すような
引数と返り値を持つものとする。
resume ( continuation -- continuation' )
call/cc ( xt -- continuation )
# ワード名とスタックコメントの名前がアレですが、
# 字面に惑わされなければ、仕様を満たすのは簡単なはず。
# 第3問~第5問は基本的に同じカラクリ、というのがヒント。
63:デフォルトの名無しさん
04/02/21 08:41.net
Mindって分家?単に日本語で書けるForth?
64:デフォルトの名無しさん
04/02/21 10:29.net
MindはいろいろForthにない仕様があったので、
MindはForthから派生した別言語と考えても良いと思う。
65:_| ̄|○
04/02/23 20:44.net
ホント、人が居ないyo....._| ̄|○
誰も見てないかもしれないけど解答編。
>>56
: twice r> dup >r >r ;
>>59
: reverse r> r> swap r> swap >r swap >r >r ;
>>62
: resume r> swap >r ;
: call/cc r> swap execute ;
‥‥リターンスタックをいじるとヘンなことができて面白いよね。
‥‥‥‥‥。
_| ̄|○
66:デフォルトの名無しさん
04/02/24 14:02.net
>>65
スマン、しばらく見てなかった。
>>56はwordの最後までを二回ってことだったか。
次のwordだけを、かと勘違いしてた。
って>>62はそう書いてるな。
67:デフォルトの名無しさん
04/02/25 12:33.net
>>66
>wordの最後までを二回ってことだったか。
わざと曖昧に書きますた。引っかけ問題のようなもので‥‥。
68:デフォルトの名無しさん
04/03/24 03:33.net
浪なみ
69:デフォルトの名無しさん
04/04/07 03:14.net
age
70:デフォルトの名無しさん
04/04/08 03:12.net
mops for win 希望
71:デフォルトの名無しさん
04/04/10 01:00.net
やっぱ判りにくいよこれ。
LISPはわかったんだが。。。
72:デフォルトの名無しさん
04/04/10 01:09.net
慣れです。
73:デフォルトの名無しさん
04/04/10 15:58.net
よくわからないけど、
スタック2本あるんだよね?
あとWordとExcelが入っているとか、いないとか。
正直よくわからない。
74:デフォルトの名無しさん
04/04/10 16:00.net
それと、気になった事だけど、
>>65
人居ない、なんて連呼してると
ほんとに人いなくなるよ
もっと前向きに行こうよ
75:デフォルトの名無しさん
04/04/10 20:12.net
了解。
76:デフォルトの名無しさん
04/04/13 10:13.net
Chuck Mooreってチューリング賞もらってないよね?
threaded code発明したのってChuckでしょ?
77:デフォルトの名無しさん
04/04/13 14:34.net
チューリング賞のことは知らないが、
threaded code発明したはChuck Mooreです。
78:デフォルトの名無しさん
04/04/13 21:50.net
threaded codeってそんなに画期的なことなの?
Z80で言えば CD xx yy のCDを無くして、メモリ消費が約2/3になるってだけでしょ?
79:デフォルトの名無しさん
04/04/13 23:10.net
URLリンク(www.kt.rim.or.jp)
80:デフォルトの名無しさん
04/04/13 23:16.net
コードが小さくて速いので多くのVMがthreaded codeを採用している。
昔のプロセッサでは、アセンブリで書いたコードよりもForthのコードの
方が速かったことさえあるという。(伝説)
81:デフォルトの名無しさん
04/04/14 18:53.net
速いのはいいんだけど、
コード読み書きがしんどいと思わない?
変数とかあまり使わないみたいだから、
フローを初めから追っていく必要あるし。
結局この言語もライブラリ次第かなと思った。
82:デフォルトの名無しさん
04/04/15 00:05.net
逆ポーランドをむしろ好む人々も結構な数おりますが、
Stack Juggling がコードを読みにくくするという人も
います。
Forthコードの見通しを良くするには、他の言語よりも
かなり小さな単位でワードを定義するのがよろしいかと。
極端な話、1ワードはせいぜい5行までで記述し、
10行を超えるワードは分割すべきであるとか。
スタックコメントを活用し、小さなTestを繰り返し
ながらボトムアップにくみ上げていくと意外に、
スタックだけで問題解決できていたりします。
83:デフォルトの名無しさん
04/04/15 09:40.net
無限ループから抜け出す方法はありますか?
begin...againだと抜け出せないみたいなのですけど。
84:デフォルトの名無しさん
04/04/15 12:08.net
>>83
ループ部分をワードに切り出してexitでワードごと抜けてください。
85:デフォルトの名無しさん
04/05/05 21:29.net
電脳書房の新着案内で「標準 FORTH」入ったっていうから見に行ったら
もうsold outですた。はやッ!
ちなみに漏れが持ってるFORTH本は「パソコンユーザのためのFORTH入門」
(A.ウィンフィールド著 寺島元章訳 1986年初版)
薄いけど、なかなか渋い良い本です。
ちょっと前まであまりなかったlisp本やsmalltalk本も最近は沢山でてるのにな。
forth本も出版してほしい。
86:デフォルトの名無しさん
04/05/12 00:53.net
dayone
87:デフォルトの名無しさん
04/05/13 01:02.net
昔からPostscriptが有名なんだからいいんじゃ
88:デフォルトの名無しさん
04/05/13 01:03.net
ぜんぜん関係ないけどAdobeて最初聞いた時
病気の名前かと思った
89:デフォルトの名無しさん
04/05/14 20:43.net
FORTHは、なんか団体が弱いイメージがある。
Adobeが中心になって盛り上げるかしれ。
AdobeってFORTH系言語で一番儲けてる会社だろ?
90:デフォルトの名無しさん
04/05/17 20:13.net
AdobeのPostScriptって、FORTHとは似て非なる言語と聞きましたが。
(詳細はわからないです。ゴメソ)
団体が弱いっつーか、なんつーか、
「コアなマニアは熱狂的にFORTHを支持している」って噂は良く聞くけど、
その「コアなマニア」って一体ドコにいるのよ? って感じですね。
ググっても、今でも熱心にFORTHやってるサイト見つからないんですよね。
(数年全然更新されていないサイトとかは結構見つかる)
91:デフォルトの名無しさん
04/05/17 22:20.net
マニアたちはcomp.lang.forthに巣食ってますが、
web siteは寒い状況。
92:デフォルトの名無しさん
04/05/24 03:49.net
>>41
ムーアさんの思想詳細希望
93:デフォルトの名無しさん
04/05/26 00:58.net
>>90
gforthとか、ベンチマークサイトで活躍してるとこぐらいしか見たことないね。
やっぱ、Schemeに対するSICPや、Perlのラクダ本みたいな有名所の良書が必要なのか。
それとも英雄が必要なのか。
94:デフォルトの名無しさん
04/05/26 16:12.net
>>93
いい本があると、かなり違うかもね。
95:デフォルトの名無しさん
04/05/26 21:19.net
>>92
URLリンク(www.kt.rim.or.jp)
しかしムーアタソは変なものを作るねぇ。
URLリンク(www.kt.rim.or.jp)
96:95
04/05/26 21:24.net
下のリンクは間違い。
正しくは、URLリンク(www.eforth.com.tw)
97:デフォルトの名無しさん
04/05/27 12:58.net
俺の思うForthの偉い人
Chuck Moore
URLリンク(www.colorforth.com)
M. Anton Ertl
URLリンク(www.complang.tuwien.ac.at)
Bernd Paysan
URLリンク(www.jwdt.com)
Mike Hore
URLリンク(www.powermops.org)
98:デフォルトの名無しさん
04/06/06 06:49.net
遥か昔のByte誌でForth特集をやってるんですね
URLリンク(www.colorforth.com)
99:デフォルトの名無しさん
04/06/07 05:18.net
Forthで書かれたCやJavaなんてナンセンス
------------同じ理由で---------------
CやJavaで書かれたForthなんてナンセンス!
Forthは問題の解決に役立つツールを素早く作れる
だからプロトタイピングにとても向いている
GNU Forth? それはそれで結構だけれどね
小気味良く動く本来の持ち味は失われるだろう
100:デフォルトの名無しさん
04/06/07 05:39.net
ANS/ISO標準化は結局のところ草の根Forth処理系を淘汰することにしか役に立たなかった
標準化で潤うのはForth社であり、開発効率が上がると考えた大企業、陸海空軍
やがて草の根の支持を失ったForthは全く廃れた・・・と少なからず思われているようだ
URLリンク(www.forth.com)
101:デフォルトの名無しさん
04/06/11 22:26.net
forth で国内ページをぐぐると、トップが厚生労働省ってのが悲しい。
2番目もプログラム言語とは全然関係ないし。
102:ジャパン
04/06/12 13:15.net
婦女暴行事件 でぐぐると、トップに首相の名が現れる国です
103:デフォルトの名無しさん
04/06/13 04:16.net
forthのソースが読みたいんですけど一番小さいのて何ですかね?
104:デフォルトの名無しさん
04/06/13 05:43.net
>>103
: 2* DUP + ;
105:デフォルトの名無しさん
04/06/13 06:02.net
移植の参考にしたいという意味ならコア・ワード数を最小限に絞ったeFORTH
いろいろな実行環境のソースが公開されているよ
元々は6502用に書かれたFigForthも小さいけどね
辞書構成にさまざまな形式があって、どちらも速度アップの余地ありってところ
106:デフォルトの名無しさん
04/06/13 07:27.net
>105 ありがと
しかしアセンブラかきついなぁ
107:デフォルトの名無しさん
04/06/13 09:09.net
>>106
習うより慣れろってやつじゃないの?
どれか動くForth系を触りながら中身を調べるって手もあるし
しかし、これだけH8が普及しているのに国内で移植したっていう例は無いのかな
H8 eFORTHのソースがあるんだから、ほとんどそのままで行けるハズ
関係ないけど、あのHPなんとかならんのかね・・・さくっと削除するとかさ
Forth Interest Group, Japan
108:デフォルトの名無しさん
04/06/13 16:52.net
>107
確かにリンクしか存在せず更新もされない研究会てのもあるだけ無駄つうか
109:デフォルトの名無しさん
04/06/13 17:11.net
だいたい本家サイトに無視されちゃってる
↓それに比べてエライ違いですね
URLリンク(www.figuk.plus.com)
110:デフォルトの名無しさん
04/06/14 09:13.net
>>103
これなんてどう? コンパクトな方だと思うけど。AVRなら命令セットが素直だし参考ってことで。
URLリンク(www.cqpub.co.jp)
ただ、これもそうなんだけど、世に言う「FORTHコンパイラ」は本来の自立した柔軟性に欠けるから手直しがいるだろうね。
本気でやるならATmegaなんかに載せると良さそう。セルフでフラッシュが書き込みできるから。確かH8はそこがサポートされてない。
111:デフォルトの名無しさん
04/06/18 08:23.net
ATMELだと32ビットのARMが出てるね。
112:デフォルトの名無しさん
04/06/18 11:32.net
アセンブラ関わる時点で移植性は捨てねばならん
113:デフォルトの名無しさん
04/06/18 20:45.net
処理系の移植? 他言語でも移植時のアセンブラ記述はありだと思うけど。
リアルタイムアプリの移植にしてもそうだよね、部分的に使うだけかも知れないけどさ。
Forthでクロスコンパイルって移植技もあるみたいだけど詳しいことは判らないな。
114:103
04/06/19 02:17.net
Gforthのソース見たけど結構Cで書かれてるね。
ヘタレなオレはCで書かれたForthもどきでも読んでみるよ
その前に図書館で見つけたFORTHへの招待でも読んで再勉強。
115:デフォルトの名無しさん
04/06/19 19:22.net
キモは二本のスタックの実装とリンクリストやワードの構成でしょうね。
第三のスタックを使ったりとか、突っ込めばいろいろ奥深いものがありそうだけど。
何種類かあるカーネルの構造について詳しく解説されているページがあって
英文だけどかなり参考になると思う。最小限のアセンブラソース付きです。
URLリンク(www.zetetics.com)
116:デフォルトの名無しさん
04/06/25 00:32.net
あ~ぁ、放置されちゃってスタックが埃まみれじゃん
117:デフォルトの名無しさん
04/06/27 22:40.net
昔、漏れが晒したやつはデータスタックとリターンスタックのほかに
コンパイル時にジャンプ先アドレスを保存するために使うコントロールフロースタックの
3本構成でつくりますた。
118:デフォルトの名無しさん
04/06/28 14:03.net
>>117
なるほど。コントロールフロースタックって何に使うのかと思ったら、そういう使い方をするんですね。さっそく採り入れてみようかな。
現在JSR型のものをワンチップCPUに移植中。データスタックとリターンスタックのどちらもトップを固定メモリーアドレス上に置いてます。かなり書き進んだところでハタと考えました。エディタは・・・どうしよう?
119:デフォルトの名無しさん
04/07/13 12:39.net
さりげなく関連ページちゃんと書いてあるのな
120:デフォルトの名無しさん [sage]
04/07/13 21:01.net
Amazon.com
forth の検索結果:4件
並べ替え:
1. 実用FORTHテクニック入門
西川 利男 (著)
出品者から通常2営業日以内に発送
【マーケットプレイス】 新品/ユースド価格 : ¥1,300
121:デフォルトの名無しさん
04/07/14 07:27.net
日本語プログラミングコンテスト実行委員会
実行委員長 審査委員会 審査委員長
西川利男(科学ライタ、元工業技術院主任研究官)
実行委員 片桐 明(スクリプツ・ラボ代表)
122:デフォルトの名無しさん
04/07/16 22:20.net
詳しいひといるう?
ワードの仕組み(仕様)教えてよ
123:デフォルトの名無しさん
04/07/16 22:59.net
>>122
あんまり詳しくないけど、どういう処理系のどんなワードの仕様か
書けば答えてくれる人もいるかも。
124:デフォルトの名無しさん
04/07/16 23:20.net
>>123
処理系を作ろうと思っているんですが、辞書から探すのに効率のいい
ワードの仕様ってどんなんだろうと
思って聞いたんですけど、
URLリンク(www-lab.ee.uec.ac.jp)
ここ参考にしてやってみることにしました。
125:デフォルトの名無しさん
04/07/17 02:43.net
>>124
資料は79年標準仕様のものなので、現在の94年版も併せて参考にするのが良いと思う。
FORGETのように消えているワードがあったりする。DPANS94で検索すると出て来ます。
79年標準はFIG-FORTH 6502版を下敷きにしているから、そのソースも探してみると良い。
スタックの実現や、ワードや辞書の構造は処理系ごとに自由が認められているので
実際のところ自分がスマートだと考える仕様がベスト。
126:デフォルトの名無しさん
04/07/18 19:11.net
crを完全にスペースに置き換えた場合(全てのワードを即時実行にする)、
何か弊害あります?
127:デフォルトの名無しさん
04/07/18 20:57.net
>>125
FORGET は旧式の拡張ワードとして未だ生きながらえているね。
新ワードは MARKER。前もって、MARKER word としてヘッダーを作っておいて
後の実行時に word cr でヘッダー以後のワードを消し去るという使い方。
変数をプログラムメモリと別の領域に置く方式への配慮という感じがする。
128:デフォルトの名無しさん
04/07/18 21:09.net
>>126
即時実行型のFORTHでは過去にGraFORTHを触ったことがあります。
コロン定義なしでDO LOOP文を入力するとリターンキーで実行する。
最初からそういう形の仕様で考えてあれば弊害はないはずですよ。
129:デフォルトの名無しさん
04/07/18 21:56.net
>>128
コロン定義無しっすかあ 厳しいなあ
即時実行するかしないかの1bitスイッチとそれを操作する[,]の2つのワードを作っておいて
[ ワード名 命令 ] DEFW なんてやり方も考えてみましたけど
実装がめ、めんどそうやなあ~
スペースのみで全て即時実行の方がミニマリズム全開でカッチョエ~とか思いますけど
いた仕方ない cr待ちに変えるかあ~
130:デフォルトの名無しさん
04/07/18 23:29.net
>>129
> [ ワード名 命令 ] DEFW
これだったら通常のコロン定義の方がシンプルでは?
どうせなら
[ 命令 ] DEFW ワード名
とか。
でも即時実行のみでやるなら
/ワード名 [ 命令 ] DEFW
かな……。
Postscriptみたいだ‥‥‥。
131:デフォルトの名無しさん
04/07/18 23:38.net
>スペースのみで全て即時実行
Forthは基本的にスペースが来たら即時実行という考え方で良いと
思うんですが。
ただ、
・immediate属性でないワードはコロン定義の間は実行せずにコード生成
・immediate属性のワードはいつも即時実行
というルールに従っていれば。
132:デフォルトの名無しさん
04/07/19 00:25.net
>>131
やっとimmediateの使い方を理解できました。
シェルと構文解析を同時に考えるから混ざってしまってたのか・・・
>>130
定義されてないワードが来たらワード定義に移るとか考えましたが、
デバッグというか間違えた時しにそうなのでなかったことにします。
133:デフォルトの名無しさん
04/08/17 12:39.net
今さらながらプログラマーズ ハンドブックをForth社に注文した。
入手できるうちで現在の標準を一番反映したものになっているのだと思う。
オーダー番号は22だったけど、やっぱりForthって超マイナーなのかな?
134:デフォルトの名無しさん
04/08/22 01:06.net
唯我独尊言語
135:デフォルトの名無しさん
04/08/24 08:37.net
>>134
「どれ一つとして尊くない命はなく、だからこそ尊いというお釈迦様の言葉・・・」
136:デフォルトの名無しさん
04/08/24 18:17.net
「どれ一つとして尊くないForthはなく、だからこそ尊いというおムーア様の言葉・・・」
137:デフォルトの名無しさん
04/08/24 18:37.net
>>136
パチパチパチ! 君に500 CELL分け与えよう。
500 cells allot
138:134
04/08/25 20:55.net
>>135-137
そんな高尚なつもりではなかったんだが、
ま、いいか。
Forthを信ぜよ、栄光あれ!
139:133
04/08/26 06:01.net
正味5日間でプログラマーズ ハンドブックが届きました。$49.95の価値は十分にあると思う。というか、'94標準FORTHに関してはこれが現実的に唯一のガイドブック。送料は色々選べる中から$11のものをチョイス。(amazon.comでは本のみ$71.35)
肝心の中身はネットに頼って調べているよりも断然良かった。'94標準ばかりが能じゃないけど、どこかで方言がずらりと並ぶワードリストを見たことがあるから、やっぱり標準化は必要悪だったのかも知れないね。
140:デフォルトの名無しさん
04/08/26 09:26.net
>>139
いいなあ。欲しいなあ。
141:デフォルトの名無しさん
04/08/26 13:21.net
ISO/IEC 15145:1997 Informatinon technology -- Programming languages -- FORTH
はどうなのよ。あんまり情報がないけど、たぶん'94FORTH。
142:デフォルトの名無しさん
04/08/26 13:48.net
>>141
URLリンク(www.eos.org.eg)
これだったらANSが出している高い準拠解説書の方が良さそう
プログラマーズの共著者の一人は天文台時代からムーアの秘書?
をやっていた現Forth Incの社長でdpansの委員長を務めている人物
・・・だから
>$49.95の価値は十分にある
かな
143:デフォルトの名無しさん
04/08/30 05:42.net
forthは、下手すっとアセンブラより難しいの
こんなの流行るわけないだよ
144:デフォルトの名無しさん
04/08/30 14:57.net
みいちゃんはあちゃんにちゃんで寝るえ~
145:デフォルトの名無しさん
04/08/30 20:57.net
電波系が混じってるから下げるしかないね
146:デフォルトの名無しさん
04/09/01 18:19.net
DPANS94ってのはISOのやつとは別物?
147:デフォルトの名無しさん
04/09/01 21:02.net
マイナー言語はISOで定義されたからって
それが標準になるわけじゃないんだよな
なんのためのISOだよ
148:デフォルトの名無しさん
04/09/11 23:35:50.net
>>146
ネットで公開されているDPANS94は下書きの最終段階のもので、正式な標準ドキュメントはANSIから得るよう公開ページに書かれているね。
実際のところ公開されているものは承認されたものだから、イコール標準ドキュメントとみなして差し支えないと思うけど。
それから、ANS Forth ANSI X3.215:1994 は ISO/IEC 15145:1997と同一だそうです。
URLリンク(forth.com)
149:デフォルトの名無しさん
04/10/07 12:00:14.net
May the FORTH be with you!
150:デフォルトの名無しさん
04/10/09 16:17:30.net
>>149
by Oh! MZ (ねたに反応…、これでいいよね?)
151:デフォルトの名無しさん
04/11/07 19:36:28.net
Fifthは?
152:デフォルトの名無しさん
04/11/07 20:21:10.net
Fifthは腹を切って死ぬべきだ。
また、彼らはただ死んで終わるものではない。
唯一神ムーアが地獄の火の中に投げ込む者達だ。
彼らの支持者も同様だ。
理由はthleded codeを殺すなら自分が死ぬべきだからだ。
詳しい理由はURLリンク(www.complang.tuwien.ac.at)で熟知すべし。
153:デフォルトの名無しさん
04/11/07 20:22:02.net
threadのスペルミスった....orz
154:デフォルトの名無しさん
04/11/08 23:35:14.net
>>151
最新版
URLリンク(www.runesoft.co.jp)
155:デフォルトの名無しさん
04/11/10 22:13:43.net
なんかすごい展開になってるな
156:デフォルトの名無しさん
04/11/11 22:16:08.net
lispはlisper、
rubyはrubyist、
pythonはpythonian、
ではFORTHを使う人はなんと呼ばれるのでしょうか?
157:デフォルトの名無しさん
04/11/11 23:07:00.net
>>156
Jedi
158:156
04/11/12 22:06:36.net
>>157
こんなカコイイ答えが返ってくるとは思わなかったのでびっくりです。
159:デフォルトの名無しさん
04/11/13 08:44:06.net
FORTHの暗黒面とはなんでしょうか、お師匠様。
160:デフォルトの名無しさん
04/11/14 22:38:00.net
>>159
... スタック?
161:デフォルトの名無しさん
04/11/15 21:46:00.net
それはムーアの無用の用の有用のヨーダ
162:デフォルトの名無しさん
04/11/19 22:41:18.net
Forthは米国では根強い人気がある、と言われてるのに、
amazon.comの言語カテゴリにはForthが無いんですけど、、
163:デフォルトの名無しさん
04/11/21 21:32:11.net
Forthを日常的に使っている方っていますか?
どんな用途に使ってますか?
#個人的興味のために作ってる、、ってのが一番多いかな
#自分がそうだし
164:デフォルトの名無しさん
04/11/21 22:11:10.net
仕事で毎日Postscriptプリンタ使ってます。
って冗談はともかく、最近は趣味以外の用途には
ほとんど使われてないんじゃないの?
165:デフォルトの名無しさん
04/11/21 23:30:57.net
とりあえず処理系のコアの部分だけ作って、
1 2 + . とか入力したら 3 って表示されて、
「わーい、動いた~」とか言って安心してあとは放置、
ってパターンが一番多い希ガス。
処理系のコアだけ作るなら、そこそこ実力あるプログラマーなら簡単。
ただ実際、実用に使うとなると、C言語使えば済むから、
わざわざ FORTH を実用レベルまで完成度を高める気がしないんだよね。
8ビット機時代みたいに、
まともな高級言語のコンパイラが個人では入手困難だったころには、
比較的簡単に作れる FORTH って魅力的だったんだけど。
166:デフォルトの名無しさん
04/11/23 04:39:05.net
URLリンク(www.gihyo.co.jp)
Forthは出てこないが、中身は仮想スタックマシンの作り方だよ。
著者は文系出身の女性。中田センセとの2ショットあり
167:デフォルトの名無しさん
04/11/23 09:20:06.net
Forth本て少ないよね。
っていうか、ここ15年ほど出てない、、
昔「標準FORTH」って本持ってたけど捨ててしまったorz
168:デフォルトの名無しさん
04/11/27 23:36:10.net
4th
169:デフォルトの名無しさん
04/11/30 05:17:34.net
>>166
スレ違いです。
氏ね
170:デフォルトの名無しさん
04/11/30 07:47:33.net
どうせ過疎スレなんだし堅い事言うなよ。
171:デフォルトの名無しさん
04/12/05 12:16:00.net
過疎なるがゆえの矜持ですよ
172:デフォルトの名無しさん
04/12/10 21:28:17.net
スレタイの並びの意味がやっとわかった
173:デフォルトの名無しさん
04/12/30 21:50:26.net
え、どういう忌み?
174:デフォルトの名無しさん
05/01/03 15:53:10.net
あれだ、2chって新スレとか上がったスレが上に来るだろ。
これこそまさにスタックというやつだ。
175:デフォルトの名無しさん
05/01/03 20:36:46.net
2chはtopのスレ以外にもアクセスできるから、スタックではないだろう。
176:デフォルトの名無しさん
05/01/07 23:50:07.net
オフセットするんでいいんでない
177:デフォルトの名無しさん
05/01/08 09:59:50.net
スレはpop出来ないじゃないか。
178:デフォルトの名無しさん
05/01/13 09:38:30.net
Naoさんのページの新着情報に、"Thinking Forth"が公開され(てい)るという情報が。
わーい。これから読みます。
一応URL貼っておきます。
URLリンク(thinking-forth.sourceforge.net)
Naoさんいわく、「本物の名著」だそうで。
179:デフォルトの名無しさん
05/01/13 21:52:52.net
読んだらおせてください。
180:デフォルトの名無しさん
05/01/21 00:05:42 .net
>>43が気になるage
181:デフォルトの名無しさん
05/01/22 02:17:00 .net
人来い
182:デフォルトの名無しさん
05/01/22 18:57:50 .net
ou
183:デフォルトの名無しさん
05/01/23 09:49:26 .net
4TH
184:デフォルトの名無しさん
05/01/29 19:53:43 .net
じぇぢ
185:デフォルトの名無しさん
05/02/06 06:52:57 .net
PIC18forthを作ったヒトがいるらしい。Pythonで書いたっていうけど
forthはforthで書くのが正しいんじゃなかったっけ?
URLリンク(lists.rfc1149.net)
186:デフォルトの名無しさん
05/03/09 21:12:32 .net
>forthはforthで書くのが正しいんじゃなかったっけ?
?
187:デフォルトの名無しさん
05/03/10 08:17:06 .net
forth環境自身に移植用のツールやらが入ってるのさ。
188:デフォルトの名無しさん
05/03/29 20:41:02 .net
あ そういうことですか
189:デフォルトの名無しさん
05/04/06 20:19:05 .net
forthの仕組みがわかるサイトないですか
190:デフォルトの名無しさん
05/04/08 13:08:38 .net
>189
URLリンク(www.forth.org)
191:デフォルトの名無しさん
05/04/08 22:07:02 .net
forthには呆れた
192:デフォルトの名無しさん
05/04/08 22:22:18 .net
認知症ですか
193:デフォルトの名無しさん
05/04/11 01:13:26 .net
日本の FORTH 界の総本山
URLリンク(www.forth.go.jp)
194:デフォルトの名無しさん
05/04/22 21:22:42 .net
FORTH使えねえ・・
195:デフォルトの名無しさん
05/04/22 21:23:16 .net
FORTHでまともなアプリ作ってみろよ
あんのか?
196:デフォルトの名無しさん
05/04/23 11:58:23 .net
君が使ってるマザボのBIOSの半分ぐらいはforthの可能性があるな。
あと、君がPSプリンタ使ってればpostscriptという形でforthが動いているわけで。
組み込み世界ではわりと普通に使われてますが何か?
197:デフォルトの名無しさん
05/04/23 12:59:24 .net
嘘ばっか
ソース晒してみろよ
PSはFORTHじゃねーし
198:デフォルトの名無しさん
05/04/23 18:04:23 .net
URLリンク(www.answers.com)
ほい。とりあえずSunがSparcシリーズのBIOSの記述に使ってるらすぃ。
あとASUSが採用してたはずなんだが、すぐに出てこなかった。
あと、PostScriptとforthの関係性な。
URLリンク(c2.com)
199:デフォルトの名無しさん
05/04/23 18:11:18 .net
ググってやっと見つかったのか
お疲れさん
200:デフォルトの名無しさん
05/04/23 18:45:38 .net
>ソース晒してみろよ
組み込みソフトなんてのはネジと同じ単なる部品。
どこの世界に「ウチはxxのネジを使ってます」なんて言いふらす自動車屋があるってんだよ。
バカかこいつ(w
201:デフォルトの名無しさん
05/04/23 18:54:35 .net
その言い訳はマイナー言語全般で使えるね
参考になるよ
202:デフォルトの名無しさん
05/04/23 18:56:09 .net
で、組み込みとPS以外は無いの?
203:デフォルトの名無しさん
05/04/23 21:17:09 .net
無かったら何?
204:デフォルトの名無しさん
05/04/23 21:37:02 .net
FORTH使えねえ・・
205:デフォルトの名無しさん
05/04/23 21:52:22 .net
お前には使えねえ・・
206:デフォルトの名無しさん
05/04/23 22:23:51 .net
おめえは使えるのか?
だとしたら、何か一発、でかい事しようぜ?!
207:デフォルトの名無しさん
05/04/23 22:41:36 .net
Forthって予約語とか命令とかってどれくらいあるの?
簡単なスタック計算機なら作ったことあるんだけど、どれくらい拡張するとForthになるんだろう。
208:デフォルトの名無しさん
05/04/23 22:44:52 .net
スタック計算機って、おめえ、1 2 + とかだろ?
そんなんじゃプログラミング言語とはいえねえわな。
その形式で制御文とか関数定義考えたこたあるか?
209:デフォルトの名無しさん
05/04/23 22:45:20 .net
アプリってなんだ
210:デフォルトの名無しさん
05/04/23 22:48:00 .net
>>208
> そんなんじゃプログラミング言語とはいえねえわな。
もういいからそこらへんで冷たくなってろ
211:デフォルトの名無しさん
05/04/23 23:02:44 .net
>208
数字が出たら、素直にスタックに積んで、
トークンが出たら、変数領域を参照して、あったらスタックに積んで、
なかったら、命令領域を参照してあったら、命令にスタックそのものを渡して計算させる。
命令と変数は基本的にstd::mapを使ってコールバックの形などで実現する。
whileとかの解析で思考が詰まってたところだよ。
いっその事、字句解析機もコールバックに渡してしまおうとおもってた。
字句解析には、BOOST::tokenizerを使う。
スタックに積む形式はBOOST::anyあたりがいいかなーと、バリアント変数好きの自分は考えていた。
辞書作成(実質サブルーチン)はちょっとてまかかりそうだけど、evalっぽいの実装すればいけそうだとか考えてた。
とかとか、漠然と考えたことはあるんだけど、実行効率は落第点だろうね。
212:211
05/04/23 23:07:40 .net
素材はもちろんC++
アプリにくっつけて、Forthスクリプトもいいかなーとか妄想してる。
213:デフォルトの名無しさん
05/04/23 23:30:54 .net
そして誰もいなくなった。
214:デフォルトの名無しさん
05/04/23 23:40:47 .net
FORTH使えねえ・・
215:デフォルトの名無しさん
05/04/23 23:55:35 .net
がんばれ
216:デフォルトの名無しさん
05/04/24 00:04:53 .net
なんでもちろんC++なのかねえ。
普通アセだろ?こんなの
217:デフォルトの名無しさん
05/04/24 00:45:22 .net
土日らしいな
218:デフォルトの名無しさん
05/04/24 08:22:03 .net
>>211
FORTHへの招待 ,Harry Katzan,Jr.
池野信一監訳 近代科学社 1600円 ISBN4-7649-0082-3 C3050
読んでみればFORTHの実装がどれだけお手軽か分かる。
絶版なんでOPACで持ってる図書館を探してくれ。
219:211
05/04/24 15:41:48 .net
>>216
アセンブラできません。(笑
趣味グラマなんで。
>>218
ずいぶん古い文献のようですね。1984年か。
僕、2歳かな・・・。なんだか感慨深いですね。
220:211
05/04/24 16:48:33 .net
地元の図書館の検索ページ行ってみたが、ないな。
僕の手が届く(自作できそうな)処理系ってbarinf*ckとforth位なんだよなー。
構文解析作るの面倒だし、うーん。
221:デフォルトの名無しさん
05/04/24 17:02:19 .net
>>220
県内の図書館は大抵連携していて他館のも借り出せるから、
他の図書館も探すべし。
(県内図書館の横断検索システムが大抵ある。)
最悪でも国会図書館から地元の図書館へ借り出せる。
(ただし館内閲覧のみ)
222:デフォルトの名無しさん
05/04/24 19:52:47 .net
>>221
詳しいんだね。
それで、県の横断検索でもみつかったけど大学の図書だ。
こういうのも横断して借りれるのかな。ちょっと躊躇してるけど、試してみようかな。
Thx!
#しかし便利だな。この検索方法。
223:デフォルトの名無しさん
05/04/24 21:05:06 .net
Forthなんか自作しても誰も褒めてくれないよ
Lispにしとけば?
224:デフォルトの名無しさん
05/04/25 18:34:25 .net
別に人に褒めてもらうために処理系作るわけじゃないし。
225:デフォルトの名無しさん
05/04/25 21:02:47 .net
Forthなんか自作しても誰も使わないよ
Lispにしとけば?
226:デフォルトの名無しさん
05/04/25 21:20:05 .net
やけに伸びてると思ったら‥‥。
>>211
>whileとかの解析で思考が詰まってたところだよ。
FORTHの場合、多くの制御構造はbranchと0branch
(無条件相対ジャンプと条件ジャンプ)命令を実装したら
FORTH自身で作れる。
>>218 の本とか読んでみなされ。
あと、遠い昔にForth(というかMops+自作Lib)で作った
「メモ帳アプリもどき」のソースを晒しときますね。
URLリンク(gdsz.hp.infoseek.co.jp)
227:211
05/04/26 20:43:23 .net
URLリンク(www-lab.ee.uec.ac.jp)
こういうの発見。
意外とC並みのことができそうな感じ。
でも、スクリプトとしてはあんま必要なさそうなのが結構あるなー。
一つのスタックにdoubleとintを混在させる方法が結構面倒そうだ。
やっぱ、Boost::anyかなぁ・・・。any使っとくとその後の拡張が楽そうだな。(Win方面のハンドルとか。)
うーん。
トンカチを持ってる人はすべての問題が釘に見えるっていうのがあるけど、
なんかそんな感じに陥っていそうな感じだ。
どうしよ。
>>226
オブジェクト指向のforthかな??
マニュアルないから、パラメータの意味がわかりにくいな。(引数とかとか。)
でも、ちゃんとアプリできてるのはすごいと思う。
適当なOS向けの拡張ってどうやってやるんだろう。
Boost::anyにハンドル類を突っ込むしか思い当たらない・・・。
スタック何本いるんだろ。3本かな・・・??
というか、キューとかにしちゃってもいいのか??
228:デフォルトの名無しさん
05/04/28 19:20:51 .net
ホンダガラッタ
ヘンダガラッタ
フンダガラッタ
フン!フン!
エッグマンが現れた。
229:デフォルトの名無しさん
05/04/28 23:40:24 .net
> 一つのスタックにdoubleとintを混在させる方法が結構面倒そうだ。
実数は実数スタックに積むんじゃね?
230:デフォルトの名無しさん
05/04/29 12:19:01 .net
はぁ?ナニ言ってんのおまえ
231:デフォルトの名無しさん
05/04/29 13:09:33 .net
>>229は正しい事言ってるんだけど。FORTHとして。
FORTHの言語仕様をろくに確認しないうちに、
思い込みで作り始めてる香具師がいるわけで。
232:デフォルトの名無しさん
05/04/29 18:05:54 .net
>>231=229
はぁ?ナニ言ってんのおまえ
233:デフォルトの名無しさん
05/04/29 20:55:41 .net
このスレはもうだめぽ。
234:デフォルトの名無しさん
05/05/01 01:45:08 .net
>>227
C言語レベルでオゲーなら、↓こんな所からコードを読んでみるのは、いかがでせぅか?
T4th
URLリンク(eshop.advanet.co.jp)
GForth
URLリンク(www.jwdt.com)
GikoForth
URLリンク(gikoforth.s13.xrea.com)
T4thは正確にはモドキらしいけど、日曜プログラミング程度で突付ける程度の気楽さですよ。
> 適当なOS向けの拡張ってどうやってやるんだろう。
ぱっと思いつくのは、Win32 APIのLoadLibraryとGetProcAddressを呼び出す
ワード(命令)を用意すれば いいんじゃないかな?と。
>というか、キューとかにしちゃってもいいのか??
STLのstackも確かqueueの特殊系だったので、それで良いと思いますよ。
(上のはCで実装しているけど、まぁ似たような感じだし)
235:227
05/05/01 04:00:31 .net
先日brainf*ckを自作してみたら、大体C++のクラスで150行位になった。
僕が保守できる限界がこれ位なだよなー。結構ヘタレ。
>>234
thx!
あまり長いソースはよんだことないからなー。
1000行はちょっと長いね。まーいいか。
地道によんでみます。
>ぱっと思いつくのは、Win32 APIのLoadLibraryとGetProcAddressを呼び出す
>ワード(命令)を用意すれば いいんじゃないかな?と。
うまいまわし方はわからんけど、簡単そうですね。
>というか、キューとかにしちゃってもいいのか??
どうしてこんなこといっちゃったんだろう。
意図忘れちゃった。(汗
236:227
05/05/02 21:43:03 .net
URLリンク(www.uploda.org)
スタック電卓作ってみました。
形にはなってない感じですが・・・。
とりあえず、ソースはまだカオス化してないはずなので興味があるなら読んでみてください。
変数等は使えません。辞書も無理。
拡張は、クラスStackCalcのenumのTokennumを必要数増やして、
メソッド、Doの中にあるstd::stringのtoken[]に命令文を追加して、
switch文に新しい数字を増やして、
新しいメソッドを書くだけ。
こんなに簡単。(笑
扱いはMain.cppを見てください。
エラー処理はほぼしてないです。
あー、これをどれだけ拡張すると、forthになるのやら。
制御構文がネックだなー。Boost::tokenizerはバックして解析できないみたいだし・・・。
あと、ファイルは二日ほどで消える予定です。
237:236
05/05/02 21:46:48 .net
あ、URLのh抜くの忘れてた。
238:デフォルトの名無しさん
05/05/08 03:21:28 .net
保守上げ
239:デフォルトの名無しさん
05/05/08 03:28:55 .net
保守上げ。リバイバル。
240:デフォルトの名無しさん
05/05/10 22:55:12 .net
Forth さばいばる
241:デフォルトの名無しさん
05/05/11 23:05:01 .net
いや、ぜんぜん生き残ってないし
242:デフォルトの名無しさん
05/05/18 19:40:57 .net
三回転半腰捻り腰痛対策age
243:デフォルトの名無しさん
05/05/24 04:28:13 .net
S-Langはスタックベースの言語なんだね。
でも構文見るとまるでCだ。
244:デフォルトの名無しさん
05/05/28 05:14:52 .net
SLangの少ない日本語ページ
URLリンク(mizotec.s27.xrea.com)
URLリンク(genjo9.lit.let.hokudai.ac.jp)
245:デフォルトの名無しさん
05/06/05 03:08:40 .net
あれ? ここってforthスレだよねぇ~・・・(謎
246:デフォルトの名無しさん
05/06/05 03:24:28 .net
fifth
247:デフォルトの名無しさん
05/06/05 23:58:45 .net
ミットコンッドッリアアアッァァアァァァァァァァァァァァアアアアアァァァァア。
age
248:デフォルトの名無しさん
05/06/05 23:59:43 .net
うぉぉおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおぉぉぉぉぉぉりゃぁぁぁぁぁぁぁぁぁぁぁぁあぁぁぁっぁぁぁっぁぁぁぁぁっぁぁぁぁ
age
249:デフォルトの名無しさん
05/06/06 04:47:43 .net
URLリンク(www.retroforth.org)
250:デフォルトの名無しさん
05/06/15 07:23:13 .net
URLリンク(stackempty.info)
251:デフォルトの名無しさん
05/06/21 21:25:18 .net
↑ブラクラ
と書かれると嫌だろ?
ちゃんと何のリンクかぐらい書けや
252:デフォルトの名無しさん
05/06/22 14:44:53 .net
サーバーが見つかりません
253:デフォルトの名無しさん
05/06/22 21:45:27 .net
と書かれると嫌だろ?
ちゃんと何のリンクかぐらい書けや
254:デフォルトの名無しさん
05/07/09 15:05:46 .net
数年前の記事ですが...
I Hate Forth
URLリンク(embedded.com)
I Love Forth
URLリンク(embedded.com)
255:デフォルトの名無しさん
05/09/02 18:54:36 .net
ムーアさん、亡くなった?
256:名無しさん@そうだ選挙に行こう
05/09/11 20:49:19 .net
そんな話聞いた事無いけどな。
Dr. Moogなら亡くなったが。
257:デフォルトの名無しさん
05/11/09 00:49:06 .net
hoth
258:デフォルトの名無しさん
05/11/12 02:24:58 .net
こんだけ過疎な理由はなんだ?
Forthの悪いところでも晒していこうぜ。
ちなみにおれはアセンブラより難解だと思ってる一人だぜ。
259:デフォルトの名無しさん
05/11/12 06:28:32 .net
俺はPythonやJavaより読みやすいと思ってる一人だぜ.
260:デフォルトの名無しさん
05/12/07 02:41:39 .net
何か話題ないのか
261:デフォルトの名無しさん
05/12/07 10:20:28 .net
FORTH にある ROT って
つまり age のことだよね?
最近やっと気付いたよ w
262:デフォルトの名無しさん
05/12/07 22:57:42 .net
: age ROT ;
263:デフォルトの名無しさん
05/12/07 23:57:33 .net
sage は SWAP でいいのかな?
: sage SWAP ;
264:デフォルトの名無しさん
05/12/08 02:35:14 .net
やっぱり
: foo bar ;
より
/foo { bar } def
の方がわかりやすいなあ
: を imdsw_on ; を imdsw_offとかにすれば
ちょっとはわかるような
わからんか
265:デフォルトの名無しさん
05/12/10 01:54:03 .net
FORTHは全部が後置記法に統一されてないのがちぐはぐで嫌
266:デフォルトの名無しさん
05/12/16 14:42:09 .net
age
267:デフォルトの名無しさん
05/12/16 19:51:11 .net
>>265
FORTHの中の人の事情がいろいろ表に出てきてるから。
事情がわかると「なるほど」と思う。
268:デフォルトの名無しさん
05/12/16 20:26:43 .net
>>265
硬いこというなよ。普通の言語だって演算子の優先順位とかあるじゃんか。
ソースも1文字ずつ後ろから読んでたら面白かったのに>forth
269:デフォルトの名無しさん
05/12/16 22:34:35 .net
前から後ろから
270:デフォルトの名無しさん
05/12/17 08:06:49 .net
でも入口と出口は一緒
pushしてpop
「おめでとうございます。元気な男の子ですよ」
271:デフォルトの名無しさん
05/12/17 10:33:36 .net
interlog
272:デフォルトの名無しさん
05/12/17 12:43:43 .net
そこで、swapしちゃいます
273:デフォルトの名無しさん
05/12/17 13:46:53 .net
HTROFに改名しますた
274:デフォルトの名無しさん
06/01/07 18:05:41 .net
自然数 N が与えられたとき、
1 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは Forth で書くとどうなりますか?
例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
275:デフォルトの名無しさん
06/02/12 23:31:47 .net
ゅしほ
276:デフォルトの名無しさん
06/03/05 10:04:15 .net
>>27のリンク先で
「WORDというワードは呪われた代物で、無いほうがよい」っていうのはどういう意味かね。
ほとんど表記法を変更する目的でしか使われないからかな。
277:デフォルトの名無しさん
06/03/05 16:17:17 .net
訳注に書いてあるとおり。
プログラムの可読性を損ねるからだと思われ。
278:http://www.vector.co.jp/soft/win95/util/se072729.html
06/03/18 22:15:13 .net
TextSS のWindowsXP(Professional)64bit対応化おながいします
もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
279:デフォルトの名無しさん
06/03/30 18:03:27 .net
手軽に手に入る唯一のFORTHチップ?
URLリンク(www.offete.com)
280:デフォルトの名無しさん
06/03/30 18:17:19 .net
オライリーの表紙に龍はないだろ
281:デフォルトの名無しさん
06/05/02 18:58:48 .net
>>274
こんな感じか? たぶんもっと美しいやり方があるのだろうが、ヘタレの
俺にはこの程度しかわからん。
variable x
0 x !
: make.stack 1+ 1 do i loop ;
: clean.stack x @ 0 do drop loop ;
: fn recursive
dup 2 = if
drop .s swap .s swap
else
>r r@ 0 do J 1 - fn J 1 - roll cr loop r> drop
then ;
: show.all
dup x !
dup 0 = if
." Error" drop
else
dup 1 = if
.s
else
cr make.stack dup fn drop
then
x @ clean.stack
then ;
3 show.allとかやってみて。
282:デフォルトの名無しさん
06/05/18 11:40:06 .net
Thinking FORTH を CCL で日本語化するプロジェクトが進行中。
本日作業分担を大まかに決める予定。
日本FORTH研究会の会報をPDF・オープン化することも本日の議題。
LL Ring! Language Update に出るか否かも本日決定?
第3世代 FIG JAPAN 立ち上げたいなぁ。
283:274
06/05/18 12:01:42 .net
>>281
激しくありがとうございます
284:デフォルトの名無しさん
06/05/18 16:13:05 .net
>>282 期待age
285:デフォルトの名無しさん
06/05/18 16:13:50 .net
sageいれちまった... orz
286:デフォルトの名無しさん
06/05/18 16:19:51 .net
というか日本支部生きてたのか(w
287:デフォルトの名無しさん
06/06/01 02:25:15 .net
>>286
生きてません。本家FIGでもリンクがなくなっています。
とはいえ、三世代FIG-JAPAN設立構想も検討中。
288:デフォルトの名無しさん
06/08/09 18:37:34 .net
LL Ringに参戦するようだが、勝算はどれくらいだろう?
289:
06/08/23 21:25:38 .net
Windows上で動くFORTHってない?
DOS窓で動くやつじゃなくて、APIとか叩けるやつ。
290:デフォルトの名無しさん
06/08/30 06:22:31 .net
つ win32forth
291:デフォルトの名無しさん
06/08/30 08:50:36 .net
LLRing乙でした。
292:デフォルトの名無しさん
06/09/03 23:05:33 .net
FORTHマンセー
293:デフォルトの名無しさん
06/10/21 16:45:01 .net
最近話題無いの?
294:デフォルトの名無しさん
06/10/21 22:50:10 .net
back and forthです。
295:デフォルトの名無しさん
06/10/21 22:51:33 .net
joyとかの話する?
296:デフォルトの名無しさん
06/10/23 13:32:14 .net
今更forth使ってる人は自分で問題解決できる人ばっかだからなあ
297:デフォルトの名無しさん
06/10/25 07:31:20 .net
>>296
解決できない俺はどうすれば・・・
298:デフォルトの名無しさん
06/10/26 00:39:00 .net
質問すればいいんじゃねえの?!
しかしこのスレ
2年以上経つのにまだ300行ってないのか
299:デフォルトの名無しさん
06/11/10 22:20:47 .net
なんかニュースないの?
300:デフォルトの名無しさん
06/11/10 22:26:12 .net
>>298
>2年以上経つのにまだ300行ってないのか
FORTHプログラム張りなんだぜ?
301:デフォルトの名無しさん
06/11/28 05:56:22 .net
test
>>261-265
>>266,267
302:デフォルトの名無しさん
06/11/29 12:28:15 .net
: hoge foo bar ;
{ foo bar } hoge def #コードブロック
* foo bar hoge def #なし
303:デフォルトの名無しさん
06/12/09 03:15:37 .net
age
URLリンク(factorcode.org)
304:デフォルトの名無しさん
06/12/10 21:07:56 .net
虎擬の新年号付属基板に移植するプロジェクト
305:デフォルトの名無しさん
06/12/26 05:05:37 .net
>>301
おばかな流れにワロス
306:デフォルトの名無しさん
07/01/28 04:43:44 .net
a
307:デフォルトの名無しさん
07/02/27 19:51:33 .net
b
308:デフォルトの名無しさん
07/02/27 20:28:16 .net
FORTH のすごいところは 対話型の言語でありながらコンパイラだってとこじゃないのかなぁ…
309:デフォルトの名無しさん
07/02/27 20:57:50 .net
forthの凄いところは2スタックマシンと辞書による入れ子構造だと思う。
310:デフォルトの名無しさん
07/03/02 12:31:00 .net
(・∀・ )っ/凵 ⌒☆ VisualForthマダー?
311:デフォルトの名無しさん
07/03/02 12:34:49 .net
>>310
ムーアたん自ら開発済み。
URLリンク(www.colorforth.com)
312:デフォルトの名無しさん
07/03/30 06:30:41 .net
最近のCPUって、プログラムの自己書き換えができないとか聞いたけど、
そうだとするとFORTH実装するのつらいよね。
313:デフォルトの名無しさん
07/03/30 07:48:32 .net
たしかに今も昔もCPUの回路は自分で変更できないな。
314:デフォルトの名無しさん
07/03/30 23:27:06 .net
メモリ書き換えればいいじゃん >312
315:デフォルトの名無しさん
07/03/31 16:33:43 .net
>>314
最近のCPUってもコードキャッシュに先読みしたりしているから、
下手にメモリを書き換えると、先読みしたコードと、実際のメモリのコードが一致しなくなる。
ので、正常に動作しなくなったり、パイプラインにペナルティが発生して、動作がおそくなったりするらしい。
FORTHって、新しくワードを追加すると、自分自身が大きくなっていくような言語だから、
そこらへんどうすればいいのかわからない。
だれか教えてくれんかな。
316:デフォルトの名無しさん
07/04/01 05:04:00 .net
FORTH以前にコンピュータの基礎知識が混乱してるな。
317:デフォルトの名無しさん
07/04/01 12:54:31 .net
>>316
FORTHの事、知らないだろ。
318:デフォルトの名無しさん
07/04/01 13:11:17 .net
>>313
VBばっかり使ってないで、ハーバードアーキテクチャとノイマンアーキテクチャの違いに付いて勉強しろよ(w
319:デフォルトの名無しさん
07/04/01 16:33:44 .net
最近だとこの関係でJITコンパイラとXDビットでも問題になってましたな。
JIT関係にノウハウありそうだけど、良く判らん
320:デフォルトの名無しさん
07/04/02 05:03:35 .net
べつに何の困難もないと思うけどな。
パラメータスタックなんて自由度の低いポインタみたいなもんじゃん。
321:デフォルトの名無しさん
07/04/11 23:18:58 .net
なんかよくわからんけど、問題になりそうなのは、既存ワードの書き換え時だと思うので、
ワード書き換え→キャッシュをフラッシュ
でいいと思う。
322:デフォルトの名無しさん
07/04/23 23:27:41 .net
いかにForthでも、線路を作りながら電車を走らせるようなことはありません。
ワードをコンパイルした後、そのワードを実行するまでには
少なくとも実行ワード名を読み込むI/Oプロセスが介在するので、
人間にとっては一瞬でも、機械には一服する余裕があります。
あと、Forthのワードのオーバーライドは、
関数型言語によくあるようにプログラムの全体についてそのワードの定義を更新するのではなく、
再定義後に読み込まれる部分についてしか効果がありません。
後から遡って定義を変更できるようにするには、
初めから特別な方法で定義しておくようになっています。
こんな感じでどうでしょう。
323:デフォルトの名無しさん
07/04/24 06:20:31 .net
forthの人気のなさは異常
324:デフォルトの名無しさん
07/04/24 23:36:56 .net
異常だな。~ if ~ then ~ else のせいだったりするんかね?
……forthに何があったらもっと流行るかな?
325:sage
07/04/24 23:53:34 .net
て、むしろ正常ってこと?
326:デフォルトの名無しさん
07/04/28 23:24:51 .net
Forthを使いたいと思う人より、Forthの処理系を造りたいと思う人の方が多そうな予感
327:デフォルトの名無しさん
07/04/30 07:13:54 .net
自分もForthを作っているクチ
毎日、Forthでプログラム作ってるぜ!って奴はいますか?
328:デフォルトの名無しさん
07/04/30 08:55:54 .net
ど素人の趣味なので毎日はしませんが、Forth系じゃないコードはほとんど書きません。
むしろForthでForthを作れば良いのではないかと思います。
329:デフォルトの名無しさん
07/04/30 12:17:29 .net
>328
Schemeみたいに最低限のプリミティブを用意して、それからForthを組むようにしたら面白いかもね。
Lispだとこんな感じか。
URLリンク(ja.wikipedia.org)
Forthの場合、スタック関連の操作、代入、分岐、Immediate、postponeぐらいで
実装できそうな気がする
330:328
07/04/30 21:27:11 .net
>>329
古典的なForthみたいにですね。
昔はアセンブリで書いた核の部分は、今はCでいいですからね。
ただ、何を核にすれば必要十分なのかについて、あまり資料がないですね。
四則演算と論理演算(ビット操作)もあった方がいい気もしますが、どうなんでしょう
(Lispは四則演算はいらない?)。
gforthはそういうやり方らしいですけど、
実行速度のためCで書き込むプリミティブを多めに取ったと書いています。
はじめ漠然と考えていたのは、間接スレッディングのforth環境の上でネイティブ方式のforthを頭から書いてしまう
というようなことでした。Executableフォーマットのファイルを作るのが結構面倒ですけど。
そこまでしなくても、Cのダイナミックライブラリとのインターフェイスがforth上で書ければ、
ほとんど何でもforthでできるんですけどね。
逆に言えば、マシンやOSの低レベルの仕様を調べないと派手なことをするのは難しいので、
そこが難点かも知れません。
もともとforthは言語仕様自体は貧弱なので、
アプリケーション毎に自前の言語を組上げていくみたいな面白さもあります。
インプットストリームも弄れるので、シンタックスまで変更できますし。
それがあまり面白がられていないということですかね。
331:デフォルトの名無しさん
07/05/03 09:02:05 .net
昔、近所の古本屋で標準FORTHを100円で保護したのだが、捨ててしまった。漏れの馬鹿。
ところで、Beginning Forthを注文した。米国からなので2週間くらいかかりそう。
332:デフォルトの名無しさん
07/05/06 22:37:02 .net
Forthはともかく資料不足。よって今更ながら英語の入門書をもう一個:
URLリンク(www.mpeforth.com)
『Programming Forth』 - Stephen Pelc et al.
333:デフォルトの名無しさん
07/05/16 04:42:21 .net
汎用で考えるとやっぱり今どきスタックは32ビット長ですよねえ。
そこで移植にお勧めの埋め込み用32ビットプロセッサって何がありますか?
I/Oがたっぷり用意されているので遊べるかなって思いますがどうでしょう。
334:デフォルトの名無しさん
07/05/24 20:39:30 .net
パフォーマンス優先ならSHじゃね?
最近秋葉でも手に入りやすくなったし。
FORTHコンパイラをアセンブラでガリガリに書きたい人なら
アセンブラが書きやすいH8かな。
335:デフォルトの名無しさん
07/06/05 19:20:03 .net
φ(。。) めもめも
336:デフォルトの名無しさん
07/06/05 20:54:14 .net
HDLだけでFORTHは作れる?
337:デフォルトの名無しさん
07/06/11 13:07:14 .net
>>336
作れるみたいですね やってみたことないけどw
URLリンク(www.ultratechnology.com)
この中のMicroCoreって初めて知りました
URLリンク(www.microcore.org)
338:デフォルトの名無しさん
07/07/26 16:12:13 .net
joyの話しようぜ
339:デフォルトの名無しさん
07/09/15 23:22:38 .net
後で読む: i386 / Linux 向け Forth コンパイラの作り方。
URLリンク(www.annexia.org)
340:デフォルトの名無しさん
07/09/26 15:51:44 .net
CでForthの処理系を書いてみた。
GCにはBoehm GC、辞書にはJudy Arrayを使ったので
ほとんど手間がかかっていないわりに速かった。
まだ単純な処理しか出来ないけどrubyとかより速いかも。
341:デフォルトの名無しさん
07/09/29 00:15:24 .net
ささやかな期待
342:デフォルトの名無しさん
07/09/29 19:36:42 .net
rubyより遅いforhtなんてあるのか?
343:デフォルトの名無しさん
07/09/29 19:51:26 .net
>>342
rubyで書けばいいんじゃね?
344:デフォルトの名無しさん
07/09/30 17:21:13 .net
>>343
激しく楽しくない気が
345:デフォルトの名無しさん
07/09/30 19:36:18 .net
>>340
GC?
346:デフォルトの名無しさん
07/10/02 20:36:49 .net
>>345
Garbage Collector でそ。
347:デフォルトの名無しさん
07/10/02 22:29:09 .net
(forthに)GC?
てことじゃないか?
348:345
07/10/03 23:33:04 .net
>>347
フォローありがとうございます。
>>346
すみません。347さんの線でお願いします。
どう使うのかなあ?と。
349:デフォルトの名無しさん
07/10/04 15:23:24 .net
concatenative
350:デフォルトの名無しさん
07/10/07 11:41:29 .net
" hoge" は汚なく感じるな
"hoge" か " hoge " だろと
351:デフォルトの名無しさん
07/10/16 01:35:58 .net
URLリンク(www.forthfreak.net)
Programming guidelines when you start doing forth programming:
* try to keep your words to one line, two lines max
* try not to pass more than 3 items on the stack to a word, preferably only 2
* try not to juggle more than 3 items on the stack within a word if you can
352:デフォルトの名無しさん
07/10/24 17:49:19 .net
FreeBSD 6.2 では boot loder の動作を
コントロールするために ficl という forth が使われていて
るので、勉強中です。
FreeBSD のサーバーをリモートから管理しています。
以前のバージョンでは nextboot(8) で別ディスク上のカーネルを
次回のみテスト的に起動する設定ができたのですが、今のバージョン 6.2 では
nextboot(8) では同一ディスク内のカーネルのテスト的起動しかできません。
二台のディスクがついているマシンのそれぞれのディスクに別々にOSを
インストールして、交互にアップデートをかけたいのです。
リモートからのコントロールしかできないので、ssh のアクセスができなく
なると一万円払ってOS再インストールなので
そんなわけで、forth のcodeを見ているのですが、難しいです。 orz
FreeBSDのloader 改造したりしている人はいませんか?
353:デフォルトの名無しさん
07/11/03 19:38:03 .net
いまふ
354:デフォルトの名無しさん
07/12/22 11:53:19 .net
dsForthがアドエスで動くのはガイシュツ?
355:デフォルトの名無しさん
08/01/04 04:23:01 .net
notガイシュツ
356:デフォルトの名無しさん
08/01/27 13:50:29 .net
このスレの人たちが使う電卓はRPLだったりするの?
357:デフォルトの名無しさん
08/01/27 15:03:59 .net
HPの電卓?
358:356
08/01/27 17:17:11 .net
>>357
そうです。RPNの間違いでした。
359:デフォルトの名無しさん
08/01/27 18:59:27 .net
HP41CV,HP28,HP48SX,HP32S,と使ってきましたよ。
ちなみに今使っているHP35は問題大あり!
360:デフォルトの名無しさん
08/02/07 10:12:19 .net
Adobe高速JavaScript実装、バイトコードにForthを採用
URLリンク(journal.mycom.co.jp)
361:デフォルトの名無しさん
08/02/07 15:34:36 .net
LLVM涙目
362:デフォルトの名無しさん
08/02/07 21:52:21 .net
単なるスタックベースのVMなだけじゃないの?
JavaVMとか既存のVMと一緒でしょ
363:デフォルトの名無しさん
08/02/16 22:40:23 .net
急に某ゲーム機上で動くforthが作りたくなって>>339が挙げてるやつ読んでるんだが(まあこれはi386用だけど)、わかりやすいなこれ
実を言うと今までforthはあまり理解してなかったけど、モヤモヤしてたことがすっきりしてきた
しかしforthってシンプルで美しいなぁ
Lispやsmalltalkに負けないと思うのに、このマイナーさ…
364:デフォルトの名無しさん
08/02/17 00:09:41 .net
concatenative languageあたりをキーワードにWebをさまよってみると良いよ。
joy factorあたりが面白いかね。おいらも俺言語作成中。
365:デフォルトの名無しさん
08/02/17 00:24:42 .net
factor は良いねぇ。秘かに期待している。
366:デフォルトの名無しさん
08/02/18 11:50:59 .net
基本的に
1.stackの一番上と二番目の値に対して演算
2.stackの一番上だけ取り除く
3.stackのn番目と一番目を交換
の機能だけがあると思ってていい?
367:デフォルトの名無しさん
08/02/19 07:10:53 .net
concatenativeに?
それならスタックに対する関数適用だけかな
368:デフォルトの名無しさん
08/03/20 14:28:46 .net
forthのコメントってもしやforthで書かれてる?
( コメント ) ←これ
369:デフォルトの名無しさん
08/03/20 15:22:35 .net
>>368
実装にもよるけど、
ワード ( を読むと、フラグが立って、ワード ) まで無視する。
Forth で書いてある、ってこういう意味ってことでいいのかな?
370:デフォルトの名無しさん
08/03/20 15:50:12 .net
>>369
いやなんかマクロみたいな機能を使って書かれているのかなーと
forth知らないので全然分かんないんですけど
要するに↓みたいにforth言語で書かれているのか?ってことです
: ( hoge hoge ... ;
371:デフォルトの名無しさん
08/03/20 20:15:20 .net
『標準FORTH』だと pp.166 にある。
: ( 29 WORD DROP ; IMMEDIATE
29 は ')' のコード
WORD はスタックトップと同じキャラが出てくるまで入力を読んで、
その先頭のアドレスをスタックトップに置くワード。DROP は説明の
必要ないな。IMMEDIATE は直前に定義されたワードを、
イミディエイトワードにするワード。
C マガジンのきだあきらさんの連載『千言万語』の Forth の時に
紹介してたネタだったような気もする。
372:デフォルトの名無しさん
08/03/20 20:16:04 .net
千言万語単行本にならねーかな
373:デフォルトの名無しさん
08/03/20 21:37:32 .net
追加。
イミディエイトワード、というのが、プログラムの実行時ではなく
読み込み時に意味を持つワードなので、マクロのような機能と
言えるかもしれません。
374:デフォルトの名無しさん
08/03/21 07:42:46 .net
>>371-373
サンクス
URLリンク(www.geocities.jp)
これ見てるけどimmediateの意味がいまいちわからん…
何のためのものなんだ?
: ( 29 WORD DROP ; IMMEDIATE
例えば↑にimmediateがついてなかったらどういう動作になるんだろう
375:デフォルトの名無しさん
08/03/21 08:55:03 .net
仮に ( がイミディエイトワードで無かったとすると、
: hoge ほげほげ ( ほげほげ ) ;
とか書いた場合に、hoge の定義の一部として、実行される部分になって
しまいます。定義中でも直ちに実行されるワードがイミディエイトワードです。
376:デフォルトの名無しさん
08/03/22 10:18:31 .net
>>375
なるほど
理解した。サンクス
377:デフォルトの名無しさん
08/03/27 22:38:05 .net
最近、Concatenativeな言語というもの目にしたんでage
378:デフォルトの名無しさん
08/03/28 00:23:41 .net
なんか酷いのみつけてきたwwwww
ちょっと草植えときますね型言語 Grass
URLリンク(www.blue.sky.or.jp)
スタックマシン使ってるってだけみたいだが(俺には良く分からん)
379:デフォルトの名無しさん
08/03/31 10:36:35 .net
forth厨はなんでもかんでもスタックマシンにするな
380:デフォルトの名無しさん
08/04/03 02:09:52 .net
factorでHelloWorldのCGIやってみた
httpdからのfactor起動はバッチファイルで
USING: io ;
"Content-type: text/html; charset=Shift_JIS\n\n" print
"<HTML><head><title></title></head>\n<body>" print
"はろ~factor表\示可能\" print
"<br>\n</body></HTML>" print
なんか楽しいw
381:デフォルトの名無しさん
08/04/10 03:00:58 .net
あれ?factorの新しいの入れたら日本語出なくなった
エンコード関係?
382:デフォルトの名無しさん
08/05/14 14:10:30 .net
factorソースから入れるのめんどくさいな・・・
gitなんて初めて知ったよ
383:デフォルトの名無しさん
08/06/03 17:56:33 .net
何か面白い話無い?
384:デフォルトの名無しさん
08/06/05 11:05:57 .net
スタック1本で動作する処理系作れ
385:デフォルトの名無しさん
08/06/05 16:18:58 .net
バロースのメインフレームはシングルスタックなんだぜ?
386:デフォルトの名無しさん
08/06/05 18:37:49 .net
wikipediaより
> スタックを1つしか持たないスタックマシンは、
> 計算モデルとしては非常に弱い。例えば、1-スタックマシンでは、
> 0n1n(0の並びの後に同じ個数の1が並ぶ言語)のような単純な言語も認識できない。
> 1-スタックマシンの計算能力は、有限オートマトンよりも高いが、
> 決定性プッシュダウン・オートマトンよりも低い。
> 一方、複数のスタックを持つスタックマシンはチューリング機械と等価である。
> 例えば、2-スタックマシンでは、チューリング機械をエミュレートできる
> (チューリング機械のヘッド位置から左側のテープをひとつのスタックが代替し、
> 右側のテープをもうひとつのスタックが代替する)。
へぇ~
387:デフォルトの名無しさん
08/07/17 00:50:58 .net
factorのドキュメント消えてら
388:デフォルトの名無しさん
08/08/01 21:55:57 .net
V
URLリンク(en.wikipedia.org)(programming_language)
Onyx
URLリンク(www.canonware.com)
Forthもこれらも俺には使いこなせないんだけどね orz
389:388
08/08/01 21:57:15 .net
Vはこっちのページも
URLリンク(code.google.com)
390:デフォルトの名無しさん
08/08/02 03:04:06 .net
Forthの実装中sage
実装法のドキュメント付きで晒すかも
391:デフォルトの名無しさん
08/08/02 04:01:08 .net
forthって、引数の数ミスるだけで崩壊するよな
>>390
どんな俺フォースを見せてくれるんだい?
誰もいないしここ、日記帳のつもりで使ってくれよ。
392:デフォルトの名無しさん
08/08/02 06:07:26 .net
久々にレスキタワァ*・゜゚・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜゚・* !!!!!
393:デフォルトの名無しさん
08/08/02 08:44:15 .net
>>390
URLリンク(www.google.co.jp)
どんな言語使って作るかしらん
こんなの補助として使ってみるのも便利かもしらん
394:390
08/08/02 14:40:33 .net
過疎っぷりに見てる人もいないと思ったら、意外といたのね。
>>391
Forthの実装は初めてなので、古典的で教科書通りのIndirect Threaded Code、
Cで書いた仮想マシンの上で動かすってかんじで。
今はMac OS XとLinux(x86)とLinux Zaurus(arm)の上でぽちぽち書いてる。
ポータビリティーは良いのでメモリがあって速度も気にしなければ
簡単にマイコンにも移植可能だと思う。H8なら余裕かな。
今月のトラ技の78K0基板持ってるんだけど、こっちはきついかも。
>>392
あばばばばばば
>>393
おお、こんな面白いのがあったのね。
とりあえずアカウント取ってみた。
このスレに落書きしつつ、blogにまとめてけばいいかな。
ANS-ForthのCORE準拠を目指して
URLリンク(www.taygeta.com)
読んでるんだけど、けっこうめんどいなあ。
ある程度実装の目処がたったらコード晒してくつもり。
少々お待ちを。
395:デフォルトの名無しさん
08/08/04 22:59:11 .net
Forth は実装が簡単だって聞いてたんで、
自分も作ってみようとちょっと調べたんだけど、
仕組みがよく分からなかったし(ワードの定義とか)、
規格に沿った物にしようとすると意外に仕様が大きくて、
挫折しますた><
396:390
08/08/05 23:09:27 .net
>>395
辞書まわりは次の10個のワードがあればOK(たぶんね)
CREATE
COMMA(,)
[
]
IMMEDIATE
TICK(')
COLON(:)
SEMICOLON(;)
FIND
WORD
このあたりのワードの挙動は、
URLリンク(www.annexia.org)
ここのjonesforthを参考にすればいいと思う。
これをインスパイヤしたCと日本語のドキュメントを書いてるんだが・・・仕事が忙しくてね・・・
これをざーっと読んで、yforthあたりの簡単な処理系のコード眺めて
実際に動作を確かめればANS-Forthの準拠もそう難しくないかと。
たださ、ANS-Forthって処理系の内部の規定しすぎじゃね?
もっと好きなようにやらしてくれよ。一回確保したWORDが二度と解放できないとか、
文字列はヌル終端しない代わりに文字数を記憶するとか、ちょっと気持ち悪い気がする。
397:デフォルトの名無しさん
08/08/05 23:23:59 .net
>文字列はヌル終端しない代わりに文字数を記憶する
これは正当だと思う。ヌル終端がどれだけのバグを生み出しているか……
398:デフォルトの名無しさん
08/08/06 21:05:50 .net
実装としては文字列をヌル終端にしても可。
但し、文字数は必要、かつ、
ヌル終端を当てにしたコードを書いても一般には動く保証なし。
が規定の内容と思われます。他の規定も同様。
399:デフォルトの名無しさん
08/08/08 19:23:22 .net
ASCIIZはねーよマジで
400:デフォルトの名無しさん
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 を定義しろというパズル。