2 part forth
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNGhttp://lab.ee.uec.ac.jp/text/treat6s.html
http://www.geocities.jp/naosacra/index.html
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGつーか誰もいねえな
0005デフォルトの名無しさん
NGNG── FORTH にすまないことをした。あやまらなくてはならない。
と、しんみり言った言葉が胸を打つ。
林 晴比古 著、オペラ座のパソコン、初版 P.123
作成者がこう言ってるんだから、もう終了でいいんじゃない ?
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGタイトルのつけかたがまずかったな…。
0008デフォルトの名無しさん
NGNG何か面白い話題でもあると良いんだけど。
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGただ単に逆ポーランド表記である と見た場合、そこに新たにオブジェクト指向だとか
いろいろな概念を付け加えるのは案外容易なのかなと考えているのですがどうだろうか
0011デフォルトの名無しさん
NGNG昔laplaceってのがあったなぁ。
0012デフォルトの名無しさん
NGNGなんスかそれ?ラプラス変換?
0013デフォルトの名無しさん
NGNGリストが扱えるようになってたような気がする。
0014デフォルトの名無しさん
NGNGweb上にはそれに関するリソース見つけきれないです。
もう少し探してみよう。
検索の過程でなんとなくひっかかった情報達
ttp://mizotec.s27.xrea.com/slang/overview.html
ttp://www.kt.rim.or.jp/〜tyamamot/forth/c4th.html
ttp://homepage2.nifty.com/logic/
ttp://www.kt.rim.or.jp/〜tyamamot/forthj/forthj.html
prologとかなり親和性が高い様な気がするなあ
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG寂れてますね・・・
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGを巡っております。
ttp://webdev.amsystech.com/mlosh/
ここのソースを参考にして処理系作ろうかと思案中。
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG何に使うかが問題だよね。
自作アプリにスクリプトを付けるなんて用途には最適かもね。
コアな部分がCで数十ライン、デフォルトのワードを100個内蔵しても
1Kラインで済んだし。
0026デフォルトの名無しさん
NGNGFORTH系ってのは結構あるんじゃないかと。
処理系の高機能化と簡素化を両立する手段のひとつとして。
0027デフォルトの名無しさん
NGNGちょっと電波臭いけど面白いと思う。
0028デフォルトの名無しさん
NGNGスタックマシンということなら、JVMとか。
0029デフォルトの名無しさん
NGNGあぷ
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNGアップした。
homepage.mac.com/holythunderforce/FileSharing1.html
0033デフォルトの名無しさん
NGNGダウソ出来んばい
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG003629
NGNG0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGJVMってJavaのVMのこと?
ありゃFORTHとはぜんぜん違うよ。
ところで
コンソールから読み込んだFORTHの構文をJava VMのマシン語に
コンパイルしつつ、
メモリに書き込んでそこにジャンプして実行ってのを考えたりも
したんだけど....。
まずPCレジスタが公開されてない。PCいじるインストラクションがあったとしても、
クラスローダーが認めた由緒正しいインスタンス以外のオフセットに
ジャンプすると例外が発生するとかの仕様がある。
ハックできなそう。つか、できない。
つまらん、と思ってJavaの勉強やめた。
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNGラプラスって、確かLisp+Forthだったみたいだけど、ちゃんと読む前にアスキーを捨てられて詳細が解らんです。でも確かに有りました。私も詳細が知りたい。
0044デフォルトの名無しさん
NGNG何かネタないかね。
40が言うようにエディタ?
0045デフォルトの名無しさん
NGNGFORTHコンパイラを内蔵し、それ自体がFORTH実行環境であり
FORTHにより拡張可能なエディタ。
仮想敵をEmacsとし、Emacsで可能なことはすべて実現させることを
最終目標とする。
ただしキーバインドはWordStar準拠とする。
あとはよろしく
0046デフォルトの名無しさん
NGNGところでFORTHの場合FFI関係の作りは楽なのかな
0047デフォルトの名無しさん
NGNGプログラムシミュレーション
programinginging..^.^.
0048デフォルトの名無しさん
NGNGOO な Forth っていっぱいあるねぇ。Prolog と Lisp と Forth で処理系の多さを
競ったら、どれがトップになるだろうか。
0049デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1074996153/159-175nofirst
0050デフォルトの名無しさん
NGNGLispとForthはToyプログラム的な処理系も含めると星の数ほど
あるからねぇ。Prologは知らないけれど。
ForthのOO拡張もいっぱいあるけど、forth好きな人には、
わずかなメモリの無駄や、実行速度のオーバーヘッドも
許せないってタイプが多い気がする。
(そして、やりすぎるとColorForthになる。。。)
>>49
速度もマンセーだが、マクロと同等以上の、
抽象化能力を持つForthマンセー。
メタプログラミングマンセー。
0051デフォルトの名無しさん
NGNG基本的には同意なんだが。マクロと同等以上というほどメタプログラミング
的には勝ってないような…。昔 LISPer と競った経験から言うと、効率では
勝てると思うけど、記号処理(構文解析とか)入ってくると分が悪いと思われ。
FORTH ライク構文なら無敵だと思うけど。
0052デフォルトの名無しさん
NGNGそうかな?「マクロ以上」は言い過ぎかもしれないけど、
>>49の多重ループの展開なんかは、マクロ並みの
抽象化だと思うけどな。
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG第1問
dup ( a -- a a )
swap ( a b -- b a )
drop ( a -- )
>r ( a -- return stack: a )
r> ( return stack: a -- a )
以上5つのワードだけで、
2dup ( a b -- a b a b )
を定義すれ。
0055デフォルトの名無しさん
NGNG同じく
3dup ( a b c -- a b c a b c )
を定義しる。
0056デフォルトの名無しさん
NGNG: foo twice ." Hello" ;
でfooを実行すると
HelloHello
を出力するようなtwiceを定義してみれ。
0057デフォルトの名無しさん
NGNG: 3dup >r 2dup r> dup >r swap >r swap r> r> ;
>>56
immediateを使う? よく思い出せん。
005854-56
NGNG2dup、3dup、お見事っす。
>>56はimmediateを使うという解答もアリですが、
immediateを使わないちょっとトリッキーだけど
もっとシンプルな方法があります。
0059デフォルトの名無しさん
NGNG第4問
: AA reverse ." AA" ;
: BB AA ." BB" ;
: CC BB ." CC" ;
でCCを実行すると
CCBBAA
を出力するようなreverseを定義すれ。
‥‥‥実はコレ第3問のヒントだったりする。
0060デフォルトの名無しさん
NGNG最近RPNに萌えてます。
HPの電卓欲しくなっちゃった。
0061デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/4320022475/ref=sr_aps_b_/249-4245738-4019557#product-details
でForthを学んだんだけど絶版だろうね。
古本屋か図書館で探すしかないと思われ。
英語でも良ければ、
http://home.iae.nl/users/mhx/sf.html
ここのChapter 1から順に読んでいくのがオススメ。
0062デフォルトの名無しさん
NGNG: 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問は基本的に同じカラクリ、というのがヒント。
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNGMindはForthから派生した別言語と考えても良いと思う。
0065_| ̄|○
NGNG誰も見てないかもしれないけど解答編。
>>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 ;
‥‥リターンスタックをいじるとヘンなことができて面白いよね。
‥‥‥‥‥。
_| ̄|○
0066デフォルトの名無しさん
NGNGスマン、しばらく見てなかった。
>>56はwordの最後までを二回ってことだったか。
次のwordだけを、かと勘違いしてた。
って>>62はそう書いてるな。
0067デフォルトの名無しさん
NGNG>wordの最後までを二回ってことだったか。
わざと曖昧に書きますた。引っかけ問題のようなもので‥‥。
0068デフォルトの名無しさん
NGNG浪なみ
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNGLISPはわかったんだが。。。
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGスタック2本あるんだよね?
あとWordとExcelが入っているとか、いないとか。
正直よくわからない。
0074デフォルトの名無しさん
NGNG>>65
人居ない、なんて連呼してると
ほんとに人いなくなるよ
もっと前向きに行こうよ
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNGthreaded code発明したのってChuckでしょ?
0077デフォルトの名無しさん
NGNGthreaded code発明したはChuck Mooreです。
0078デフォルトの名無しさん
NGNGZ80で言えば CD xx yy のCDを無くして、メモリ消費が約2/3になるってだけでしょ?
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG昔のプロセッサでは、アセンブリで書いたコードよりもForthのコードの
方が速かったことさえあるという。(伝説)
0081デフォルトの名無しさん
NGNGコード読み書きがしんどいと思わない?
変数とかあまり使わないみたいだから、
フローを初めから追っていく必要あるし。
結局この言語もライブラリ次第かなと思った。
0082デフォルトの名無しさん
NGNGStack Juggling がコードを読みにくくするという人も
います。
Forthコードの見通しを良くするには、他の言語よりも
かなり小さな単位でワードを定義するのがよろしいかと。
極端な話、1ワードはせいぜい5行までで記述し、
10行を超えるワードは分割すべきであるとか。
スタックコメントを活用し、小さなTestを繰り返し
ながらボトムアップにくみ上げていくと意外に、
スタックだけで問題解決できていたりします。
0083デフォルトの名無しさん
NGNGbegin...againだと抜け出せないみたいなのですけど。
0084デフォルトの名無しさん
NGNGループ部分をワードに切り出してexitでワードごと抜けてください。
0085デフォルトの名無しさん
NGNGもうsold outですた。はやッ!
ちなみに漏れが持ってるFORTH本は「パソコンユーザのためのFORTH入門」
(A.ウィンフィールド著 寺島元章訳 1986年初版)
薄いけど、なかなか渋い良い本です。
ちょっと前まであまりなかったlisp本やsmalltalk本も最近は沢山でてるのにな。
forth本も出版してほしい。
0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG病気の名前かと思った
0089デフォルトの名無しさん
NGNGAdobeが中心になって盛り上げるかしれ。
AdobeってFORTH系言語で一番儲けてる会社だろ?
0090デフォルトの名無しさん
NGNG(詳細はわからないです。ゴメソ)
団体が弱いっつーか、なんつーか、
「コアなマニアは熱狂的にFORTHを支持している」って噂は良く聞くけど、
その「コアなマニア」って一体ドコにいるのよ? って感じですね。
ググっても、今でも熱心にFORTHやってるサイト見つからないんですよね。
(数年全然更新されていないサイトとかは結構見つかる)
0091デフォルトの名無しさん
NGNGweb siteは寒い状況。
0092デフォルトの名無しさん
NGNGムーアさんの思想詳細希望
0093デフォルトの名無しさん
NGNGgforthとか、ベンチマークサイトで活躍してるとこぐらいしか見たことないね。
やっぱ、Schemeに対するSICPや、Perlのラクダ本みたいな有名所の良書が必要なのか。
それとも英雄が必要なのか。
0094デフォルトの名無しさん
NGNGいい本があると、かなり違うかもね。
0095デフォルトの名無しさん
NGNGttp://www.kt.rim.or.jp/~tyamamot/forth/c4th.html
しかしムーアタソは変なものを作るねぇ。
ttp://www.kt.rim.or.jp/~tyamamot/forth/c4th.html
009695
NGNG正しくは、ttp://www.eforth.com.tw/academy/chips/mup.htm
0097デフォルトの名無しさん
NGNGChuck Moore
http://www.colorforth.com/
M. Anton Ertl
http://www.complang.tuwien.ac.at/projects/forth.html
Bernd Paysan
http://www.jwdt.com/~paysan/index.html
Mike Hore
http://www.powermops.org/
0098デフォルトの名無しさん
NGNGhttp://www.colorforth.com/byte.htm
0099デフォルトの名無しさん
NGNG------------同じ理由で---------------
CやJavaで書かれたForthなんてナンセンス!
Forthは問題の解決に役立つツールを素早く作れる
だからプロトタイピングにとても向いている
GNU Forth? それはそれで結構だけれどね
小気味良く動く本来の持ち味は失われるだろう
0100デフォルトの名無しさん
NGNG標準化で潤うのはForth社であり、開発効率が上がると考えた大企業、陸海空軍
やがて草の根の支持を失ったForthは全く廃れた・・・と少なからず思われているようだ
http://www.forth.com/Content/Clients.htm
0101デフォルトの名無しさん
NGNG2番目もプログラム言語とは全然関係ないし。
0102ジャパン
NGNG0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNG: 2* DUP + ;
0105デフォルトの名無しさん
NGNGいろいろな実行環境のソースが公開されているよ
元々は6502用に書かれたFigForthも小さいけどね
辞書構成にさまざまな形式があって、どちらも速度アップの余地ありってところ
0106デフォルトの名無しさん
NGNGしかしアセンブラかきついなぁ
0107デフォルトの名無しさん
NGNG習うより慣れろってやつじゃないの?
どれか動くForth系を触りながら中身を調べるって手もあるし
しかし、これだけH8が普及しているのに国内で移植したっていう例は無いのかな
H8 eFORTHのソースがあるんだから、ほとんどそのままで行けるハズ
関係ないけど、あのHPなんとかならんのかね・・・さくっと削除するとかさ
Forth Interest Group, Japan
0108デフォルトの名無しさん
NGNG確かにリンクしか存在せず更新もされない研究会てのもあるだけ無駄つうか
0109デフォルトの名無しさん
NGNG↓それに比べてエライ違いですね
http://www.figuk.plus.com/
0110デフォルトの名無しさん
NGNGこれなんてどう? コンパクトな方だと思うけど。AVRなら命令セットが素直だし参考ってことで。
http://www.cqpub.co.jp/toragi/download/2002/TR0209F/TR0209F.HTM
ただ、これもそうなんだけど、世に言う「FORTHコンパイラ」は本来の自立した柔軟性に欠けるから手直しがいるだろうね。
本気でやるならATmegaなんかに載せると良さそう。セルフでフラッシュが書き込みできるから。確かH8はそこがサポートされてない。
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNGリアルタイムアプリの移植にしてもそうだよね、部分的に使うだけかも知れないけどさ。
Forthでクロスコンパイルって移植技もあるみたいだけど詳しいことは判らないな。
0114103
NGNGヘタレなオレはCで書かれたForthもどきでも読んでみるよ
その前に図書館で見つけたFORTHへの招待でも読んで再勉強。
0115デフォルトの名無しさん
NGNG第三のスタックを使ったりとか、突っ込めばいろいろ奥深いものがありそうだけど。
何種類かあるカーネルの構造について詳しく解説されているページがあって
英文だけどかなり参考になると思う。最小限のアセンブラソース付きです。
http://www.zetetics.com/bj/papers/
0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNGコンパイル時にジャンプ先アドレスを保存するために使うコントロールフロースタックの
3本構成でつくりますた。
0118デフォルトの名無しさん
NGNGなるほど。コントロールフロースタックって何に使うのかと思ったら、そういう使い方をするんですね。さっそく採り入れてみようかな。
現在JSR型のものをワンチップCPUに移植中。データスタックとリターンスタックのどちらもトップを固定メモリーアドレス上に置いてます。かなり書き進んだところでハタと考えました。エディタは・・・どうしよう?
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん [sage]
NGNGforth の検索結果:4件
並べ替え:
1. 実用FORTHテクニック入門
西川 利男 (著)
出品者から通常2営業日以内に発送
【マーケットプレイス】 新品/ユースド価格 : ¥1,300
0121デフォルトの名無しさん
NGNG実行委員長 審査委員会 審査委員長
西川利男(科学ライタ、元工業技術院主任研究官)
実行委員 片桐 明(スクリプツ・ラボ代表)
0122デフォルトの名無しさん
NGNGワードの仕組み(仕様)教えてよ
0123デフォルトの名無しさん
NGNGあんまり詳しくないけど、どういう処理系のどんなワードの仕様か
書けば答えてくれる人もいるかも。
0124デフォルトの名無しさん
NGNG処理系を作ろうと思っているんですが、辞書から探すのに効率のいい
ワードの仕様ってどんなんだろうと
思って聞いたんですけど、
http://www-lab.ee.uec.ac.jp/text/forth/
ここ参考にしてやってみることにしました。
0125デフォルトの名無しさん
NGNG資料は79年標準仕様のものなので、現在の94年版も併せて参考にするのが良いと思う。
FORGETのように消えているワードがあったりする。DPANS94で検索すると出て来ます。
79年標準はFIG-FORTH 6502版を下敷きにしているから、そのソースも探してみると良い。
スタックの実現や、ワードや辞書の構造は処理系ごとに自由が認められているので
実際のところ自分がスマートだと考える仕様がベスト。
0126デフォルトの名無しさん
NGNG何か弊害あります?
0127デフォルトの名無しさん
NGNGFORGET は旧式の拡張ワードとして未だ生きながらえているね。
新ワードは MARKER。前もって、MARKER word としてヘッダーを作っておいて
後の実行時に word cr でヘッダー以後のワードを消し去るという使い方。
変数をプログラムメモリと別の領域に置く方式への配慮という感じがする。
0128デフォルトの名無しさん
NGNG即時実行型のFORTHでは過去にGraFORTHを触ったことがあります。
コロン定義なしでDO LOOP文を入力するとリターンキーで実行する。
最初からそういう形の仕様で考えてあれば弊害はないはずですよ。
0129デフォルトの名無しさん
NGNGコロン定義無しっすかあ 厳しいなあ
即時実行するかしないかの1bitスイッチとそれを操作する[,]の2つのワードを作っておいて
[ ワード名 命令 ] DEFW なんてやり方も考えてみましたけど
実装がめ、めんどそうやなあ〜
スペースのみで全て即時実行の方がミニマリズム全開でカッチョエ〜とか思いますけど
いた仕方ない cr待ちに変えるかあ〜
0130デフォルトの名無しさん
NGNG> [ ワード名 命令 ] DEFW
これだったら通常のコロン定義の方がシンプルでは?
どうせなら
[ 命令 ] DEFW ワード名
とか。
でも即時実行のみでやるなら
/ワード名 [ 命令 ] DEFW
かな……。
Postscriptみたいだ‥‥‥。
0131デフォルトの名無しさん
NGNGForthは基本的にスペースが来たら即時実行という考え方で良いと
思うんですが。
ただ、
・immediate属性でないワードはコロン定義の間は実行せずにコード生成
・immediate属性のワードはいつも即時実行
というルールに従っていれば。
0132デフォルトの名無しさん
NGNGやっとimmediateの使い方を理解できました。
シェルと構文解析を同時に考えるから混ざってしまってたのか・・・
>>130
定義されてないワードが来たらワード定義に移るとか考えましたが、
デバッグというか間違えた時しにそうなのでなかったことにします。
0133デフォルトの名無しさん
NGNG入手できるうちで現在の標準を一番反映したものになっているのだと思う。
オーダー番号は22だったけど、やっぱりForthって超マイナーなのかな?
0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNG「どれ一つとして尊くない命はなく、だからこそ尊いというお釈迦様の言葉・・・」
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNGパチパチパチ! 君に500 CELL分け与えよう。
500 cells allot
0139133
NGNG肝心の中身はネットに頼って調べているよりも断然良かった。'94標準ばかりが能じゃないけど、どこかで方言がずらりと並ぶワードリストを見たことがあるから、やっぱり標準化は必要悪だったのかも知れないね。
0140デフォルトの名無しさん
NGNGいいなあ。欲しいなあ。
0141デフォルトの名無しさん
NGNGはどうなのよ。あんまり情報がないけど、たぶん'94FORTH。
0142デフォルトの名無しさん
NGNGhttp://www.eos.org.eg/web_en/cat/items/d26479.html
これだったらANSが出している高い準拠解説書の方が良さそう
プログラマーズの共著者の一人は天文台時代からムーアの秘書?
をやっていた現Forth Incの社長でdpansの委員長を務めている人物
・・・だから
>$49.95の価値は十分にある
かな
0143デフォルトの名無しさん
NGNGこんなの流行るわけないだよ
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNGそれが標準になるわけじゃないんだよな
なんのためのISOだよ
0148デフォルトの名無しさん
NGNGネットで公開されているDPANS94は下書きの最終段階のもので、正式な標準ドキュメントはANSIから得るよう公開ページに書かれているね。
実際のところ公開されているものは承認されたものだから、イコール標準ドキュメントとみなして差し支えないと思うけど。
それから、ANS Forth ANSI X3.215:1994 は ISO/IEC 15145:1997と同一だそうです。
http://forth.com/forth/fph-0.html
0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNGby Oh! MZ (ねたに反応…、これでいいよね?)
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNGまた、彼らはただ死んで終わるものではない。
唯一神ムーアが地獄の火の中に投げ込む者達だ。
彼らの支持者も同様だ。
理由はthleded codeを殺すなら自分が死ぬべきだからだ。
詳しい理由はhttp://www.complang.tuwien.ac.at/forth/threaded-code.htmlで熟知すべし。
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG最新版
ttp://www.runesoft.co.jp/soft/r16_fifthaile.html
0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNGrubyはrubyist、
pythonはpythonian、
ではFORTHを使う人はなんと呼ばれるのでしょうか?
0157デフォルトの名無しさん
NGNGJedi
0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNG... スタック?
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGamazon.comの言語カテゴリにはForthが無いんですけど、、
0163デフォルトの名無しさん
NGNGどんな用途に使ってますか?
#個人的興味のために作ってる、、ってのが一番多いかな
#自分がそうだし
0164デフォルトの名無しさん
NGNGって冗談はともかく、最近は趣味以外の用途には
ほとんど使われてないんじゃないの?
0165デフォルトの名無しさん
NGNG1 2 + . とか入力したら 3 って表示されて、
「わーい、動いた〜」とか言って安心してあとは放置、
ってパターンが一番多い希ガス。
処理系のコアだけ作るなら、そこそこ実力あるプログラマーなら簡単。
ただ実際、実用に使うとなると、C言語使えば済むから、
わざわざ FORTH を実用レベルまで完成度を高める気がしないんだよね。
8ビット機時代みたいに、
まともな高級言語のコンパイラが個人では入手困難だったころには、
比較的簡単に作れる FORTH って魅力的だったんだけど。
0166デフォルトの名無しさん
NGNGForthは出てこないが、中身は仮想スタックマシンの作り方だよ。
著者は文系出身の女性。中田センセとの2ショットあり
0167デフォルトの名無しさん
NGNGっていうか、ここ15年ほど出てない、、
昔「標準FORTH」って本持ってたけど捨ててしまったorz
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNGスレ違いです。
氏ね
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNGこれこそまさにスタックというやつだ。
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNGわーい。これから読みます。
一応URL貼っておきます。
http://thinking-forth.sourceforge.net/
Naoさんいわく、「本物の名著」だそうで。
0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
05/01/21 00:05:420181デフォルトの名無しさん
05/01/22 02:17:000182デフォルトの名無しさん
05/01/22 18:57:500183デフォルトの名無しさん
05/01/23 09:49:260184デフォルトの名無しさん
05/01/29 19:53:430185デフォルトの名無しさん
05/02/06 06:52:57forthはforthで書くのが正しいんじゃなかったっけ?
ttp://lists.rfc1149.net/pipermail/picforth/2005-January/000279.html
0186デフォルトの名無しさん
05/03/09 21:12:32?
0187デフォルトの名無しさん
05/03/10 08:17:060188デフォルトの名無しさん
2005/03/29(火) 20:41:020189デフォルトの名無しさん
2005/04/06(水) 20:19:050190デフォルトの名無しさん
2005/04/08(金) 13:08:38ttp://www.forth.org/
0191デフォルトの名無しさん
2005/04/08(金) 22:07:020192デフォルトの名無しさん
2005/04/08(金) 22:22:180193デフォルトの名無しさん
2005/04/11(月) 01:13:26http://www.forth.go.jp/
0194デフォルトの名無しさん
2005/04/22(金) 21:22:420195デフォルトの名無しさん
2005/04/22(金) 21:23:16あんのか?
0196デフォルトの名無しさん
2005/04/23(土) 11:58:23あと、君がPSプリンタ使ってればpostscriptという形でforthが動いているわけで。
組み込み世界ではわりと普通に使われてますが何か?
0197デフォルトの名無しさん
2005/04/23(土) 12:59:24ソース晒してみろよ
PSはFORTHじゃねーし
0198デフォルトの名無しさん
2005/04/23(土) 18:04:23ほい。とりあえずSunがSparcシリーズのBIOSの記述に使ってるらすぃ。
あとASUSが採用してたはずなんだが、すぐに出てこなかった。
あと、PostScriptとforthの関係性な。
http://c2.com/cgi/wiki?ForthPostscriptRelationship
0199デフォルトの名無しさん
2005/04/23(土) 18:11:18お疲れさん
0200デフォルトの名無しさん
2005/04/23(土) 18:45:38組み込みソフトなんてのはネジと同じ単なる部品。
どこの世界に「ウチはxxのネジを使ってます」なんて言いふらす自動車屋があるってんだよ。
バカかこいつ(w
0201デフォルトの名無しさん
2005/04/23(土) 18:54:35参考になるよ
0202デフォルトの名無しさん
2005/04/23(土) 18:56:090203デフォルトの名無しさん
2005/04/23(土) 21:17:090204デフォルトの名無しさん
2005/04/23(土) 21:37:020205デフォルトの名無しさん
2005/04/23(土) 21:52:220206デフォルトの名無しさん
2005/04/23(土) 22:23:51だとしたら、何か一発、でかい事しようぜ?!
0207デフォルトの名無しさん
2005/04/23(土) 22:41:36簡単なスタック計算機なら作ったことあるんだけど、どれくらい拡張するとForthになるんだろう。
0208デフォルトの名無しさん
2005/04/23(土) 22:44:52そんなんじゃプログラミング言語とはいえねえわな。
その形式で制御文とか関数定義考えたこたあるか?
0209デフォルトの名無しさん
2005/04/23(土) 22:45:200210デフォルトの名無しさん
2005/04/23(土) 22:48:00> そんなんじゃプログラミング言語とはいえねえわな。
もういいからそこらへんで冷たくなってろ
0211デフォルトの名無しさん
2005/04/23(土) 23:02:44数字が出たら、素直にスタックに積んで、
トークンが出たら、変数領域を参照して、あったらスタックに積んで、
なかったら、命令領域を参照してあったら、命令にスタックそのものを渡して計算させる。
命令と変数は基本的にstd::mapを使ってコールバックの形などで実現する。
whileとかの解析で思考が詰まってたところだよ。
いっその事、字句解析機もコールバックに渡してしまおうとおもってた。
字句解析には、BOOST::tokenizerを使う。
スタックに積む形式はBOOST::anyあたりがいいかなーと、バリアント変数好きの自分は考えていた。
辞書作成(実質サブルーチン)はちょっとてまかかりそうだけど、evalっぽいの実装すればいけそうだとか考えてた。
とかとか、漠然と考えたことはあるんだけど、実行効率は落第点だろうね。
0212211
2005/04/23(土) 23:07:40アプリにくっつけて、Forthスクリプトもいいかなーとか妄想してる。
0213デフォルトの名無しさん
2005/04/23(土) 23:30:540214デフォルトの名無しさん
2005/04/23(土) 23:40:470215デフォルトの名無しさん
2005/04/23(土) 23:55:350216デフォルトの名無しさん
2005/04/24(日) 00:04:53普通アセだろ?こんなの
0217デフォルトの名無しさん
2005/04/24(日) 00:45:220218デフォルトの名無しさん
2005/04/24(日) 08:22:03FORTHへの招待 ,Harry Katzan,Jr.
池野信一監訳 近代科学社 1600円 ISBN4-7649-0082-3 C3050
読んでみればFORTHの実装がどれだけお手軽か分かる。
絶版なんでOPACで持ってる図書館を探してくれ。
0219211
2005/04/24(日) 15:41:48アセンブラできません。(笑
趣味グラマなんで。
>>218
ずいぶん古い文献のようですね。1984年か。
僕、2歳かな・・・。なんだか感慨深いですね。
0220211
2005/04/24(日) 16:48:33僕の手が届く(自作できそうな)処理系ってbarinf*ckとforth位なんだよなー。
構文解析作るの面倒だし、うーん。
0221デフォルトの名無しさん
2005/04/24(日) 17:02:19県内の図書館は大抵連携していて他館のも借り出せるから、
他の図書館も探すべし。
(県内図書館の横断検索システムが大抵ある。)
最悪でも国会図書館から地元の図書館へ借り出せる。
(ただし館内閲覧のみ)
0222デフォルトの名無しさん
2005/04/24(日) 19:52:47詳しいんだね。
それで、県の横断検索でもみつかったけど大学の図書だ。
こういうのも横断して借りれるのかな。ちょっと躊躇してるけど、試してみようかな。
Thx!
#しかし便利だな。この検索方法。
0223デフォルトの名無しさん
2005/04/24(日) 21:05:06Lispにしとけば?
0224デフォルトの名無しさん
2005/04/25(月) 18:34:250225デフォルトの名無しさん
2005/04/25(月) 21:02:47Lispにしとけば?
0226デフォルトの名無しさん
2005/04/25(月) 21:20:05>>211
>whileとかの解析で思考が詰まってたところだよ。
FORTHの場合、多くの制御構造はbranchと0branch
(無条件相対ジャンプと条件ジャンプ)命令を実装したら
FORTH自身で作れる。
>>218 の本とか読んでみなされ。
あと、遠い昔にForth(というかMops+自作Lib)で作った
「メモ帳アプリもどき」のソースを晒しときますね。
ttp://gdsz.hp.infoseek.co.jp/cgi-bin/yukiwiki/yukiwiki.cgi?mycmd=read&mypage=mNote
0227211
2005/04/26(火) 20:43:23こういうの発見。
意外とC並みのことができそうな感じ。
でも、スクリプトとしてはあんま必要なさそうなのが結構あるなー。
一つのスタックにdoubleとintを混在させる方法が結構面倒そうだ。
やっぱ、Boost::anyかなぁ・・・。any使っとくとその後の拡張が楽そうだな。(Win方面のハンドルとか。)
うーん。
トンカチを持ってる人はすべての問題が釘に見えるっていうのがあるけど、
なんかそんな感じに陥っていそうな感じだ。
どうしよ。
>>226
オブジェクト指向のforthかな??
マニュアルないから、パラメータの意味がわかりにくいな。(引数とかとか。)
でも、ちゃんとアプリできてるのはすごいと思う。
適当なOS向けの拡張ってどうやってやるんだろう。
Boost::anyにハンドル類を突っ込むしか思い当たらない・・・。
スタック何本いるんだろ。3本かな・・・??
というか、キューとかにしちゃってもいいのか??
0228デフォルトの名無しさん
2005/04/28(木) 19:20:51ヘンダガラッタ
フンダガラッタ
フン!フン!
エッグマンが現れた。
0229デフォルトの名無しさん
2005/04/28(木) 23:40:24実数は実数スタックに積むんじゃね?
0230デフォルトの名無しさん
2005/04/29(金) 12:19:010231デフォルトの名無しさん
2005/04/29(金) 13:09:33FORTHの言語仕様をろくに確認しないうちに、
思い込みで作り始めてる香具師がいるわけで。
0232デフォルトの名無しさん
2005/04/29(金) 18:05:54はぁ?ナニ言ってんのおまえ
0233デフォルトの名無しさん
2005/04/29(金) 20:55:410234デフォルトの名無しさん
2005/05/01(日) 01:45:08C言語レベルでオゲーなら、↓こんな所からコードを読んでみるのは、いかがでせぅか?
T4th
http://eshop.advanet.co.jp/formmail/t4th.html
GForth
http://www.jwdt.com/~paysan/gforth.html
GikoForth
http://gikoforth.s13.xrea.com/gikoforth.html
T4thは正確にはモドキらしいけど、日曜プログラミング程度で突付ける程度の気楽さですよ。
> 適当なOS向けの拡張ってどうやってやるんだろう。
ぱっと思いつくのは、Win32 APIのLoadLibraryとGetProcAddressを呼び出す
ワード(命令)を用意すれば いいんじゃないかな?と。
>というか、キューとかにしちゃってもいいのか??
STLのstackも確かqueueの特殊系だったので、それで良いと思いますよ。
(上のはCで実装しているけど、まぁ似たような感じだし)
0235227
2005/05/01(日) 04:00:31僕が保守できる限界がこれ位なだよなー。結構ヘタレ。
>>234
thx!
あまり長いソースはよんだことないからなー。
1000行はちょっと長いね。まーいいか。
地道によんでみます。
>ぱっと思いつくのは、Win32 APIのLoadLibraryとGetProcAddressを呼び出す
>ワード(命令)を用意すれば いいんじゃないかな?と。
うまいまわし方はわからんけど、簡単そうですね。
>というか、キューとかにしちゃってもいいのか??
どうしてこんなこといっちゃったんだろう。
意図忘れちゃった。(汗
0236227
2005/05/02(月) 21:43:03スタック電卓作ってみました。
形にはなってない感じですが・・・。
とりあえず、ソースはまだカオス化してないはずなので興味があるなら読んでみてください。
変数等は使えません。辞書も無理。
拡張は、クラスStackCalcのenumのTokennumを必要数増やして、
メソッド、Doの中にあるstd::stringのtoken[]に命令文を追加して、
switch文に新しい数字を増やして、
新しいメソッドを書くだけ。
こんなに簡単。(笑
扱いはMain.cppを見てください。
エラー処理はほぼしてないです。
あー、これをどれだけ拡張すると、forthになるのやら。
制御構文がネックだなー。Boost::tokenizerはバックして解析できないみたいだし・・・。
あと、ファイルは二日ほどで消える予定です。
0237236
2005/05/02(月) 21:46:480238デフォルトの名無しさん
2005/05/08(日) 03:21:280239デフォルトの名無しさん
2005/05/08(日) 03:28:550240デフォルトの名無しさん
2005/05/10(火) 22:55:120241デフォルトの名無しさん
2005/05/11(水) 23:05:010242デフォルトの名無しさん
2005/05/18(水) 19:40:570243デフォルトの名無しさん
2005/05/24(火) 04:28:13でも構文見るとまるでCだ。
0244デフォルトの名無しさん
2005/05/28(土) 05:14:52http://mizotec.s27.xrea.com/slang.html
http://genjo9.lit.let.hokudai.ac.jp/keita/read.cgi?S-Lang&l=jp
0245デフォルトの名無しさん
2005/06/05(日) 03:08:400246デフォルトの名無しさん
2005/06/05(日) 03:24:280247デフォルトの名無しさん
2005/06/05(日) 23:58:45age
0248デフォルトの名無しさん
2005/06/05(日) 23:59:43age
0249デフォルトの名無しさん
2005/06/06(月) 04:47:430250デフォルトの名無しさん
2005/06/15(水) 07:23:130251デフォルトの名無しさん
2005/06/21(火) 21:25:18と書かれると嫌だろ?
ちゃんと何のリンクかぐらい書けや
0252デフォルトの名無しさん
2005/06/22(水) 14:44:530253デフォルトの名無しさん
2005/06/22(水) 21:45:27ちゃんと何のリンクかぐらい書けや
0254デフォルトの名無しさん
2005/07/09(土) 15:05:46I Hate Forth
ttp://embedded.com/story/OEG20010731S0028
I Love Forth
ttp://embedded.com/showArticle.jhtml?articleID=9900308
0255デフォルトの名無しさん
2005/09/02(金) 18:54:360256名無しさん@そうだ選挙に行こう
2005/09/11(日) 20:49:19Dr. Moogなら亡くなったが。
0257デフォルトの名無しさん
2005/11/09(水) 00:49:060258デフォルトの名無しさん
2005/11/12(土) 02:24:58Forthの悪いところでも晒していこうぜ。
ちなみにおれはアセンブラより難解だと思ってる一人だぜ。
0259デフォルトの名無しさん
2005/11/12(土) 06:28:320260デフォルトの名無しさん
2005/12/07(水) 02:41:390261デフォルトの名無しさん
2005/12/07(水) 10:20:28つまり age のことだよね?
最近やっと気付いたよ w
0262デフォルトの名無しさん
2005/12/07(水) 22:57:420263デフォルトの名無しさん
2005/12/07(水) 23:57:33: sage SWAP ;
0264デフォルトの名無しさん
2005/12/08(木) 02:35:14: foo bar ;
より
/foo { bar } def
の方がわかりやすいなあ
: を imdsw_on ; を imdsw_offとかにすれば
ちょっとはわかるような
わからんか
0265デフォルトの名無しさん
2005/12/10(土) 01:54:030266デフォルトの名無しさん
2005/12/16(金) 14:42:090267デフォルトの名無しさん
2005/12/16(金) 19:51:11FORTHの中の人の事情がいろいろ表に出てきてるから。
事情がわかると「なるほど」と思う。
0268デフォルトの名無しさん
2005/12/16(金) 20:26:43硬いこというなよ。普通の言語だって演算子の優先順位とかあるじゃんか。
ソースも1文字ずつ後ろから読んでたら面白かったのに>forth
0269デフォルトの名無しさん
2005/12/16(金) 22:34:350270デフォルトの名無しさん
2005/12/17(土) 08:06:49pushしてpop
「おめでとうございます。元気な男の子ですよ」
0271デフォルトの名無しさん
2005/12/17(土) 10:33:360272デフォルトの名無しさん
2005/12/17(土) 12:43:430273デフォルトの名無しさん
2005/12/17(土) 13:46:530274デフォルトの名無しさん
2006/01/07(土) 18:05:411 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは Forth で書くとどうなりますか?
例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
0275デフォルトの名無しさん
2006/02/12(日) 23:31:470276デフォルトの名無しさん
2006/03/05(日) 10:04:15「WORDというワードは呪われた代物で、無いほうがよい」っていうのはどういう意味かね。
ほとんど表記法を変更する目的でしか使われないからかな。
0277デフォルトの名無しさん
2006/03/05(日) 16:17:17プログラムの可読性を損ねるからだと思われ。
0278http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 22:15:13もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
0279デフォルトの名無しさん
2006/03/30(木) 18:03:27http://www.offete.com/ep32book.html
0280デフォルトの名無しさん
2006/03/30(木) 18:17:190281デフォルトの名無しさん
2006/05/02(火) 18:58:48こんな感じか? たぶんもっと美しいやり方があるのだろうが、ヘタレの
俺にはこの程度しかわからん。
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とかやってみて。
0282デフォルトの名無しさん
2006/05/18(木) 11:40:06本日作業分担を大まかに決める予定。
日本FORTH研究会の会報をPDF・オープン化することも本日の議題。
LL Ring! Language Update に出るか否かも本日決定?
第3世代 FIG JAPAN 立ち上げたいなぁ。
0284デフォルトの名無しさん
2006/05/18(木) 16:13:050285デフォルトの名無しさん
2006/05/18(木) 16:13:500286デフォルトの名無しさん
2006/05/18(木) 16:19:510287デフォルトの名無しさん
2006/06/01(木) 02:25:15生きてません。本家FIGでもリンクがなくなっています。
とはいえ、三世代FIG-JAPAN設立構想も検討中。
0288デフォルトの名無しさん
2006/08/09(水) 18:37:340290デフォルトの名無しさん
2006/08/30(水) 06:22:310291デフォルトの名無しさん
2006/08/30(水) 08:50:360292デフォルトの名無しさん
2006/09/03(日) 23:05:330293デフォルトの名無しさん
2006/10/21(土) 16:45:010294デフォルトの名無しさん
2006/10/21(土) 22:50:100295デフォルトの名無しさん
2006/10/21(土) 22:51:330296デフォルトの名無しさん
2006/10/23(月) 13:32:140297デフォルトの名無しさん
2006/10/25(水) 07:31:20解決できない俺はどうすれば・・・
0298デフォルトの名無しさん
2006/10/26(木) 00:39:00しかしこのスレ
2年以上経つのにまだ300行ってないのか
0299デフォルトの名無しさん
2006/11/10(金) 22:20:470300デフォルトの名無しさん
2006/11/10(金) 22:26:12>2年以上経つのにまだ300行ってないのか
FORTHプログラム張りなんだぜ?
0301デフォルトの名無しさん
2006/11/28(火) 05:56:22>>261-265
>>266,267
0302デフォルトの名無しさん
2006/11/29(水) 12:28:15{ foo bar } hoge def #コードブロック
* foo bar hoge def #なし
0303デフォルトの名無しさん
2006/12/09(土) 03:15:37http://factorcode.org/
0304デフォルトの名無しさん
2006/12/10(日) 21:07:560305デフォルトの名無しさん
2006/12/26(火) 05:05:37おばかな流れにワロス
0306デフォルトの名無しさん
2007/01/28(日) 04:43:440307デフォルトの名無しさん
2007/02/27(火) 19:51:330308デフォルトの名無しさん
2007/02/27(火) 20:28:160309デフォルトの名無しさん
2007/02/27(火) 20:57:500310デフォルトの名無しさん
2007/03/02(金) 12:31:000311デフォルトの名無しさん
2007/03/02(金) 12:34:49ムーアたん自ら開発済み。
http://www.colorforth.com/index.html
0312デフォルトの名無しさん
2007/03/30(金) 06:30:41そうだとするとFORTH実装するのつらいよね。
0313デフォルトの名無しさん
2007/03/30(金) 07:48:320314デフォルトの名無しさん
2007/03/30(金) 23:27:060315デフォルトの名無しさん
2007/03/31(土) 16:33:43最近のCPUってもコードキャッシュに先読みしたりしているから、
下手にメモリを書き換えると、先読みしたコードと、実際のメモリのコードが一致しなくなる。
ので、正常に動作しなくなったり、パイプラインにペナルティが発生して、動作がおそくなったりするらしい。
FORTHって、新しくワードを追加すると、自分自身が大きくなっていくような言語だから、
そこらへんどうすればいいのかわからない。
だれか教えてくれんかな。
0316デフォルトの名無しさん
2007/04/01(日) 05:04:000317デフォルトの名無しさん
2007/04/01(日) 12:54:31FORTHの事、知らないだろ。
0318デフォルトの名無しさん
2007/04/01(日) 13:11:17VBばっかり使ってないで、ハーバードアーキテクチャとノイマンアーキテクチャの違いに付いて勉強しろよ(w
0319デフォルトの名無しさん
2007/04/01(日) 16:33:44JIT関係にノウハウありそうだけど、良く判らん
0320デフォルトの名無しさん
2007/04/02(月) 05:03:35パラメータスタックなんて自由度の低いポインタみたいなもんじゃん。
0321デフォルトの名無しさん
2007/04/11(水) 23:18:58ワード書き換え→キャッシュをフラッシュ
でいいと思う。
0322デフォルトの名無しさん
2007/04/23(月) 23:27:41ワードをコンパイルした後、そのワードを実行するまでには
少なくとも実行ワード名を読み込むI/Oプロセスが介在するので、
人間にとっては一瞬でも、機械には一服する余裕があります。
あと、Forthのワードのオーバーライドは、
関数型言語によくあるようにプログラムの全体についてそのワードの定義を更新するのではなく、
再定義後に読み込まれる部分についてしか効果がありません。
後から遡って定義を変更できるようにするには、
初めから特別な方法で定義しておくようになっています。
こんな感じでどうでしょう。
0323デフォルトの名無しさん
2007/04/24(火) 06:20:310324デフォルトの名無しさん
2007/04/24(火) 23:36:56……forthに何があったらもっと流行るかな?
0325sage
2007/04/24(火) 23:53:340326デフォルトの名無しさん
2007/04/28(土) 23:24:510327デフォルトの名無しさん
2007/04/30(月) 07:13:54毎日、Forthでプログラム作ってるぜ!って奴はいますか?
0328デフォルトの名無しさん
2007/04/30(月) 08:55:54むしろForthでForthを作れば良いのではないかと思います。
0329デフォルトの名無しさん
2007/04/30(月) 12:17:29Schemeみたいに最低限のプリミティブを用意して、それからForthを組むようにしたら面白いかもね。
Lispだとこんな感じか。
ttp://ja.wikipedia.org/wiki/LISP#.E6.9C.80.E5.B0.8F.E3.81.AELISP
Forthの場合、スタック関連の操作、代入、分岐、Immediate、postponeぐらいで
実装できそうな気がする
0330328
2007/04/30(月) 21:27:11古典的なForthみたいにですね。
昔はアセンブリで書いた核の部分は、今はCでいいですからね。
ただ、何を核にすれば必要十分なのかについて、あまり資料がないですね。
四則演算と論理演算(ビット操作)もあった方がいい気もしますが、どうなんでしょう
(Lispは四則演算はいらない?)。
gforthはそういうやり方らしいですけど、
実行速度のためCで書き込むプリミティブを多めに取ったと書いています。
はじめ漠然と考えていたのは、間接スレッディングのforth環境の上でネイティブ方式のforthを頭から書いてしまう
というようなことでした。Executableフォーマットのファイルを作るのが結構面倒ですけど。
そこまでしなくても、Cのダイナミックライブラリとのインターフェイスがforth上で書ければ、
ほとんど何でもforthでできるんですけどね。
逆に言えば、マシンやOSの低レベルの仕様を調べないと派手なことをするのは難しいので、
そこが難点かも知れません。
もともとforthは言語仕様自体は貧弱なので、
アプリケーション毎に自前の言語を組上げていくみたいな面白さもあります。
インプットストリームも弄れるので、シンタックスまで変更できますし。
それがあまり面白がられていないということですかね。
0331デフォルトの名無しさん
2007/05/03(木) 09:02:05ところで、Beginning Forthを注文した。米国からなので2週間くらいかかりそう。
0332デフォルトの名無しさん
2007/05/06(日) 22:37:02ttp://www.mpeforth.com/books.htm
『Programming Forth』 - Stephen Pelc et al.
0333デフォルトの名無しさん
2007/05/16(水) 04:42:21そこで移植にお勧めの埋め込み用32ビットプロセッサって何がありますか?
I/Oがたっぷり用意されているので遊べるかなって思いますがどうでしょう。
0334デフォルトの名無しさん
2007/05/24(木) 20:39:30最近秋葉でも手に入りやすくなったし。
FORTHコンパイラをアセンブラでガリガリに書きたい人なら
アセンブラが書きやすいH8かな。
0335デフォルトの名無しさん
2007/06/05(火) 19:20:030336デフォルトの名無しさん
2007/06/05(火) 20:54:140337デフォルトの名無しさん
2007/06/11(月) 13:07:14作れるみたいですね やってみたことないけどw
ttp://www.ultratechnology.com/chips.htm
この中のMicroCoreって初めて知りました
ttp://www.microcore.org/
0338デフォルトの名無しさん
2007/07/26(木) 16:12:130339デフォルトの名無しさん
2007/09/15(土) 23:22:38ttp://www.annexia.org/_file/jonesforth.s.txt
0340デフォルトの名無しさん
2007/09/26(水) 15:51:44GCにはBoehm GC、辞書にはJudy Arrayを使ったので
ほとんど手間がかかっていないわりに速かった。
まだ単純な処理しか出来ないけどrubyとかより速いかも。
0341デフォルトの名無しさん
2007/09/29(土) 00:15:240342デフォルトの名無しさん
2007/09/29(土) 19:36:420343デフォルトの名無しさん
2007/09/29(土) 19:51:26rubyで書けばいいんじゃね?
0344デフォルトの名無しさん
2007/09/30(日) 17:21:13激しく楽しくない気が
0345デフォルトの名無しさん
2007/09/30(日) 19:36:18GC?
0346デフォルトの名無しさん
2007/10/02(火) 20:36:49Garbage Collector でそ。
0347デフォルトの名無しさん
2007/10/02(火) 22:29:09てことじゃないか?
0349デフォルトの名無しさん
2007/10/04(木) 15:23:240350デフォルトの名無しさん
2007/10/07(日) 11:41:29"hoge" か " hoge " だろと
0351デフォルトの名無しさん
2007/10/16(火) 01:35:58Programming 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
0352デフォルトの名無しさん
2007/10/24(水) 17:49:19コントロールするために ficl という forth が使われていて
るので、勉強中です。
FreeBSD のサーバーをリモートから管理しています。
以前のバージョンでは nextboot(8) で別ディスク上のカーネルを
次回のみテスト的に起動する設定ができたのですが、今のバージョン 6.2 では
nextboot(8) では同一ディスク内のカーネルのテスト的起動しかできません。
二台のディスクがついているマシンのそれぞれのディスクに別々にOSを
インストールして、交互にアップデートをかけたいのです。
リモートからのコントロールしかできないので、ssh のアクセスができなく
なると一万円払ってOS再インストールなので
そんなわけで、forth のcodeを見ているのですが、難しいです。 orz
FreeBSDのloader 改造したりしている人はいませんか?
0353デフォルトの名無しさん
2007/11/03(土) 19:38:030354デフォルトの名無しさん
2007/12/22(土) 11:53:190355デフォルトの名無しさん
2008/01/04(金) 04:23:010356デフォルトの名無しさん
2008/01/27(日) 13:50:290357デフォルトの名無しさん
2008/01/27(日) 15:03:590359デフォルトの名無しさん
2008/01/27(日) 18:59:27ちなみに今使っているHP35は問題大あり!
0360デフォルトの名無しさん
2008/02/07(木) 10:12:19http://journal.mycom.co.jp/news/2008/02/07/011/index.html
0361デフォルトの名無しさん
2008/02/07(木) 15:34:360362デフォルトの名無しさん
2008/02/07(木) 21:52:21JavaVMとか既存のVMと一緒でしょ
0363デフォルトの名無しさん
2008/02/16(土) 22:40:23実を言うと今までforthはあまり理解してなかったけど、モヤモヤしてたことがすっきりしてきた
しかしforthってシンプルで美しいなぁ
Lispやsmalltalkに負けないと思うのに、このマイナーさ…
0364デフォルトの名無しさん
2008/02/17(日) 00:09:41joy factorあたりが面白いかね。おいらも俺言語作成中。
0365デフォルトの名無しさん
2008/02/17(日) 00:24:420366デフォルトの名無しさん
2008/02/18(月) 11:50:59基本的に
1.stackの一番上と二番目の値に対して演算
2.stackの一番上だけ取り除く
3.stackのn番目と一番目を交換
の機能だけがあると思ってていい?
0367デフォルトの名無しさん
2008/02/19(火) 07:10:53それならスタックに対する関数適用だけかな
0368デフォルトの名無しさん
2008/03/20(木) 14:28:46( コメント ) ←これ
0369デフォルトの名無しさん
2008/03/20(木) 15:22:35実装にもよるけど、
ワード ( を読むと、フラグが立って、ワード ) まで無視する。
Forth で書いてある、ってこういう意味ってことでいいのかな?
0370デフォルトの名無しさん
2008/03/20(木) 15:50:12いやなんかマクロみたいな機能を使って書かれているのかなーと
forth知らないので全然分かんないんですけど
要するに↓みたいにforth言語で書かれているのか?ってことです
: ( hoge hoge ... ;
0371デフォルトの名無しさん
2008/03/20(木) 20:15:20: ( 29 WORD DROP ; IMMEDIATE
29 は ')' のコード
WORD はスタックトップと同じキャラが出てくるまで入力を読んで、
その先頭のアドレスをスタックトップに置くワード。DROP は説明の
必要ないな。IMMEDIATE は直前に定義されたワードを、
イミディエイトワードにするワード。
C マガジンのきだあきらさんの連載『千言万語』の Forth の時に
紹介してたネタだったような気もする。
0372デフォルトの名無しさん
2008/03/20(木) 20:16:040373デフォルトの名無しさん
2008/03/20(木) 21:37:32イミディエイトワード、というのが、プログラムの実行時ではなく
読み込み時に意味を持つワードなので、マクロのような機能と
言えるかもしれません。
0374デフォルトの名無しさん
2008/03/21(金) 07:42:46サンクス
http://www.geocities.jp/naosacra/mops/particle2/immediate.html
これ見てるけどimmediateの意味がいまいちわからん…
何のためのものなんだ?
: ( 29 WORD DROP ; IMMEDIATE
例えば↑にimmediateがついてなかったらどういう動作になるんだろう
0375デフォルトの名無しさん
2008/03/21(金) 08:55:03: hoge ほげほげ ( ほげほげ ) ;
とか書いた場合に、hoge の定義の一部として、実行される部分になって
しまいます。定義中でも直ちに実行されるワードがイミディエイトワードです。
0376デフォルトの名無しさん
2008/03/22(土) 10:18:31なるほど
理解した。サンクス
0377デフォルトの名無しさん
2008/03/27(木) 22:38:050378デフォルトの名無しさん
2008/03/28(金) 00:23:41ちょっと草植えときますね型言語 Grass
http://www.blue.sky.or.jp/grass/doc_ja.html
スタックマシン使ってるってだけみたいだが(俺には良く分からん)
0379デフォルトの名無しさん
2008/03/31(月) 10:36:350380デフォルトの名無しさん
2008/04/03(木) 02:09:52httpdからの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
0381デフォルトの名無しさん
2008/04/10(木) 03:00:58エンコード関係?
0382デフォルトの名無しさん
2008/05/14(水) 14:10:30gitなんて初めて知ったよ
0383デフォルトの名無しさん
2008/06/03(火) 17:56:330384デフォルトの名無しさん
2008/06/05(木) 11:05:570385デフォルトの名無しさん
2008/06/05(木) 16:18:580386デフォルトの名無しさん
2008/06/05(木) 18:37:49> スタックを1つしか持たないスタックマシンは、
> 計算モデルとしては非常に弱い。例えば、1-スタックマシンでは、
> 0n1n(0の並びの後に同じ個数の1が並ぶ言語)のような単純な言語も認識できない。
> 1-スタックマシンの計算能力は、有限オートマトンよりも高いが、
> 決定性プッシュダウン・オートマトンよりも低い。
> 一方、複数のスタックを持つスタックマシンはチューリング機械と等価である。
> 例えば、2-スタックマシンでは、チューリング機械をエミュレートできる
> (チューリング機械のヘッド位置から左側のテープをひとつのスタックが代替し、
> 右側のテープをもうひとつのスタックが代替する)。
へぇ〜
0387デフォルトの名無しさん
2008/07/17(木) 00:50:580388デフォルトの名無しさん
2008/08/01(金) 21:55:57http://en.wikipedia.org/wiki/V_(programming_language)
Onyx
http://www.canonware.com/onyx/
Forthもこれらも俺には使いこなせないんだけどね orz
0389388
2008/08/01(金) 21:57:15http://code.google.com/p/v-language/
0390デフォルトの名無しさん
2008/08/02(土) 03:04:06実装法のドキュメント付きで晒すかも
0391デフォルトの名無しさん
2008/08/02(土) 04:01:08>>390
どんな俺フォースを見せてくれるんだい?
誰もいないしここ、日記帳のつもりで使ってくれよ。
0392デフォルトの名無しさん
2008/08/02(土) 06:07:260393デフォルトの名無しさん
2008/08/02(土) 08:44:15http://www.google.co.jp/search?hl=ja&q=codepad&btnG=%E6%A4%9C%E7%B4%A2&lr=
どんな言語使って作るかしらん
こんなの補助として使ってみるのも便利かもしらん
0394390
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
読んでるんだけど、けっこうめんどいなあ。
ある程度実装の目処がたったらコード晒してくつもり。
少々お待ちを。
0395デフォルトの名無しさん
2008/08/04(月) 22:59:11自分も作ってみようとちょっと調べたんだけど、
仕組みがよく分からなかったし(ワードの定義とか)、
規格に沿った物にしようとすると意外に仕様が大きくて、
挫折しますた><
0396390
2008/08/05(火) 23:09:27辞書まわりは次の10個のワードがあればOK(たぶんね)
CREATE
COMMA(,)
[
]
IMMEDIATE
TICK(')
COLON(:)
SEMICOLON(;)
FIND
WORD
このあたりのワードの挙動は、
http://www.annexia.org/forth
ここのjonesforthを参考にすればいいと思う。
これをインスパイヤしたCと日本語のドキュメントを書いてるんだが・・・仕事が忙しくてね・・・
これをざーっと読んで、yforthあたりの簡単な処理系のコード眺めて
実際に動作を確かめればANS-Forthの準拠もそう難しくないかと。
たださ、ANS-Forthって処理系の内部の規定しすぎじゃね?
もっと好きなようにやらしてくれよ。一回確保したWORDが二度と解放できないとか、
文字列はヌル終端しない代わりに文字数を記憶するとか、ちょっと気持ち悪い気がする。
0397デフォルトの名無しさん
2008/08/05(火) 23:23:59これは正当だと思う。ヌル終端がどれだけのバグを生み出しているか……
0398デフォルトの名無しさん
2008/08/06(水) 21:05:50但し、文字数は必要、かつ、
ヌル終端を当てにしたコードを書いても一般には動く保証なし。
が規定の内容と思われます。他の規定も同様。
0399デフォルトの名無しさん
2008/08/08(金) 19:23:220400デフォルトの名無しさん
2008/08/09(土) 16:38:27C言語で作られたプログラムの数の多さ、便利さから言うと、無視できないなと。
0401デフォルトの名無しさん
2008/08/09(土) 18:30:35C++をbetter Cとして使う方がまだましだと思う。
C++を使えないようなリソースのキツい環境で使うんだったらforthを直書きした方が良いんじゃね?
0402デフォルトの名無しさん
2008/08/10(日) 00:15:50それ最悪
0403デフォルトの名無しさん
2008/08/11(月) 00:15:21自己学習として作るならまだしも、
FORTHに期待される動作環境だったらアセンブリレベルの設計が必要だろ。
C++使うならC++的設計をしろって。
0404デフォルトの名無しさん
2008/08/27(水) 00:31:36forthだと引数管理がけっこう面倒だと思うけど、wordの名前に
引数の数の情報を盛り込んだら楽にならんかね?
俺言語ではこんな感じでドットの数=引数の数にしているんだけど、どう思う?
1 2 ..sum
1 2 3 .:sum
名前の衝突も起こりにくくなって一石二鳥かと思うんだけど。
0405デフォルトの名無しさん
2008/08/27(水) 09:31:38ifだと.:ifになるの?
0406デフォルトの名無しさん
2008/08/27(水) 21:05:33・引数可変のワードは # で始まることとする
・ワード [ は現在のパラメータスタックポインタの値を
リターンスタックに積む
・ワード ] は現在のパラメータスタックポインタの値と
リターンスタックポインタのトップの値の差から
パラメータ数を計算しパラメータスタックに積む
たとえば
[ 10 20 30 ] #sum
と書くと、#sum実行直前にはパラメータスタックは
10 20 30 3
となっていて、#sumは3つの数の和を求めればいいことがわかる。
0407404
2008/08/27(水) 22:38:18そこは構文糖使った方がよろしいかと (a ? b ! cの三項演算子とか)
>406
それも考えたけど、そうするとConcatenativeのメリットが死ぬんだよね。
できるだけ前の計算結果に依存しないように考えると、セパレータのようなものを
スタックに積むのは良くないので、ワード単体で引数までを意味するようにしたい、
ということですな。
0408デフォルトの名無しさん
2008/08/28(木) 02:39:56よく判ってないが。
0409デフォルトの名無しさん
2008/09/19(金) 17:01:150410デフォルトの名無しさん
2008/09/25(木) 03:11:26のめり込むのは危険だなw
0411デフォルトの名無しさん
2008/09/25(木) 03:16:06そのセパレータってリスト終端のnullに相当するから
あながち間違ってないと思う。
0412デフォルトの名無しさん
2008/09/25(木) 21:54:56スタックの機構はコード設計のための因子から外されるのかも。
0413デフォルトの名無しさん
2008/09/25(木) 22:34:55Wordの中でWordを呼ぼうとすると破綻するよ。
>412
結局はトップを基点とした対称性(みたいなもの)になるからな。
対称性があれば何でもOK
0414デフォルトの名無しさん
2008/10/01(水) 00:29:26Whitespaceに辿りついたのですが、
これよりも言語仕様的に小さいスタック型言語ってあります?
0415デフォルトの名無しさん
2008/10/01(水) 01:55:39call
return
conditional jump
push
pop
これだけで足りるかな?
0416デフォルトの名無しさん
2008/10/01(水) 07:09:500417デフォルトの名無しさん
2008/10/02(木) 03:17:37>>54-65とか何やってるのかわからん。
記号覚えればいいんだろうけど。
: は定義っぽいということは文脈で判った。許す。
>rとかr>は何かと。
;は文の終り?
LISPでいう 'a は (quote a)です、みたいに特殊記号をあまり使わずに
誰が見ても大体判るように、平易な形にならないかな。
0418デフォルトの名無しさん
2008/10/02(木) 17:56:08: word
でワードの定義開始、;で定義の終端
>r,r>はリターンスタックへのプッシュとポップ
>>54の括弧内はそのワードを実行するとデータスタックの状態がどう変わるかをコメントで表している
他の言語と違って裸のスタックが丸見えなんよ
0419デフォルトの名無しさん
2008/10/03(金) 02:22:08>rとr>って判りにくいと思う。
一瞬で見分けられないというか。
不等号ちがうんかと。
記号使わずに全部記述的にできないかな。
mindとかそんなのかな。
0420デフォルトの名無しさん
2008/10/03(金) 03:00:420421デフォルトの名無しさん
2008/10/03(金) 06:08:32: popFromReturnStackToTOS postpone r> ; immediate
0422デフォルトの名無しさん
2008/10/03(金) 12:26:50ただ、それがインタラクティブ環境を作るあたりと小さな核で構築できるのが非常に面白いのでがんばって覚えてみてよ。
逆に言うと簡単にぶっ壊れるとも言う
0423デフォルトの名無しさん
2008/10/03(金) 16:59:48「Forthではこう書く」ってのに納得いかないなら
悪いことは言わんから、使うのやめとけ
0424デフォルトの名無しさん
2008/10/03(金) 17:54:200425デフォルトの名無しさん
2008/10/03(金) 18:38:230426デフォルトの名無しさん
2008/10/03(金) 20:05:400427デフォルトの名無しさん
2008/10/03(金) 20:24:330428デフォルトの名無しさん
2008/10/03(金) 20:29:08Forthは仮想スタックマシンのアセンブラだから、
(仮想)マシンの理解度によるだろな。
0429デフォルトの名無しさん
2008/10/03(金) 22:29:45ハイライトできるエディタで単語登録するか、トランスレータでもかますのがいいと思う。
0430デフォルトの名無しさん
2008/10/03(金) 23:01:49普通のCPUは1本だよね。
スタックに対して相対アドレッシングがないからってことかな?
0431デフォルトの名無しさん
2008/10/03(金) 23:57:29>rとr>は確かに見た目がわかりにくい。
よほどのことが無い限り使わない。
localがあれば要らない。
>430
呼出しのときにデータスタックで直接パラメターを渡すためでしょう。
0432デフォルトの名無しさん
2008/10/04(土) 00:00:27普通のアーキテクチャだと関数呼び出しのスタックにパラメータも突っ込んじゃうけど
forthはデータのpushと関数呼び出しの戻りアドレスが入るスタックが別なんよ。
っていうか別だから面白いことができるので、一緒だったらループとかで涙が出そうだと思う。
0433デフォルトの名無しさん
2008/10/04(土) 00:10:210434デフォルトの名無しさん
2008/10/04(土) 17:45:11リターンアドレスを壊さないようにデータをいじるのがメンドイ。
リターンアドレスが詰まれている位置を避けるようにして
スタックをアクセスしなきゃいけないから。
それはSPとBPがあってもメンドイことに変わりはない。
0435デフォルトの名無しさん
2008/10/04(土) 19:46:33まあ、便利だから?
実装としてはバローズのメインフレーム見たく演算とリターン
アドレス保存を一本のスタックでこなすものもあるよ。
0436デフォルトの名無しさん
2008/10/04(土) 21:37:240437デフォルトの名無しさん
2008/10/04(土) 23:25:44チューリングマシンと等価じゃないらしいぞ
0438デフォルトの名無しさん
2008/10/05(日) 00:17:09等価じゃないとはよく聞くけど、等価じゃないとする説明ってどっかにないですかね。
それで実用で困ることありますかね。
0439デフォルトの名無しさん
2008/10/05(日) 01:12:05リターンスタックってそのままBP相当じゃん。
ほんとはBPポインタ一個あれば十分だよね?
素直にBPを持たずにわざわざリターンスタックなんて用意してるのは、
スタックマシンと言えなくなるからかね。
なんだかなあ。
0440デフォルトの名無しさん
2008/10/05(日) 03:10:120441デフォルトの名無しさん
2008/10/05(日) 03:49:49BPってそのままリターンスタック相当じゃん。
ほんとはリターンスタックあれば十分だよね?
素直にリターンスタックを持たずに、わざわざBPなんて用意してるのは、
レジスタマシンと言えなくなるからかね。
なんだかなあ。
0442デフォルトの名無しさん
2008/10/05(日) 07:20:41メモリアクセスできない純粋なスタックマシンなら、スタックが二本ないと
チューリング等価ではないかも知れないが、FORTHはメモリアクセス @ ! が
あるから、たとえスタック一本であってもチューリング等価じゃね?
考えてみればわかるが、メモリアクセスがあるとスタックの本数を自由に増やせる。
FORTHとスタックマシンとConcatenative言語は、それぞれ別の概念で、
単純に等号で結べないから、何について話しているのか意識しないと混乱すると思われ。
0443デフォルトの名無しさん
2008/10/05(日) 09:51:29論理的には最低限二つの区別されたスタックがある。
標準的な実装での利点(v.s.スタックフレーム方式)は、
サブルーチン間でのデータのコピーが減らせること。
スタックフレーム一本でやるのはCとかでも標準的な実装だけど、
VMという同じ抽象度で比べれば、Cにはスタックは無い。
VMが実装できれば機械自体の仕組みはどうでも良い。
0444デフォルトの名無しさん
2008/10/05(日) 13:26:57とりあえずBF書けたらチューリング完全じゃなかったっけ?
0445デフォルトの名無しさん
2008/10/05(日) 14:12:310446デフォルトの名無しさん
2008/10/05(日) 15:11:57Forthがチューリングマシンであろうとなかろうと
Forthで実用的なプログラムは書ける。
あともう一人、やたらリターンスタックを排除したがる奴も
何をしたいのかさっぱりわからん。
0447デフォルトの名無しさん
2008/10/05(日) 17:47:31仮にForthの仕様からリターンスタックだけを排除したとしても(それはForthとは呼べないだろうが)
チューリング完全だ。理由は>>442
リターンスタックがBPで代用できるとか正直意味わからん。
スタック演算自体理解してない希ガス。
0448デフォルトの名無しさん
2008/10/05(日) 18:27:080449デフォルトの名無しさん
2008/10/05(日) 18:35:04スタックオートマトンとスタックマシンをごっちゃにしてる気がする。
0450デフォルトの名無しさん
2008/10/05(日) 18:39:13むしろリターンスタック以外の名前があるなら知りたいものだが。
0451デフォルトの名無しさん
2008/10/05(日) 19:02:41大雑把にはこんな感じかね。
・データスタック: 引数&戻り値
・リターンスタック: 実行する命令列(辞書で展開された単語含む)
リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね
0452デフォルトの名無しさん
2008/10/05(日) 19:25:44それでいいと思うが、難しく考えすぎじゃね?>>451
0453デフォルトの名無しさん
2008/10/05(日) 19:28:44だったら勘違いが起きなかったと思う。
0454デフォルトの名無しさん
2008/10/05(日) 19:34:19むしろ勘違いを引き起こしそうなんだが。
リターンスタックが難しいんじゃなくて、
リターンアドレスをスタックに積むという
当たり前の関数呼び出し規約を説明しなければ、
理解されない時代になったということか…
0455デフォルトの名無しさん
2008/10/05(日) 21:59:43ひょっとして、リターンと聞いて戻り値を連想しちゃう人がいる、とか?
だとしたらかなりキビシい状況だな。
0456デフォルトの名無しさん
2008/10/06(月) 01:09:110457デフォルトの名無しさん
2008/10/06(月) 01:09:520458デフォルトの名無しさん
2008/10/06(月) 01:24:450459デフォルトの名無しさん
2008/10/06(月) 07:35:22従来品に比べて口の裏に張り付きにくいのはメリットだが、
少し物足りない気がした。
0460デフォルトの名無しさん
2008/10/06(月) 11:21:56思うんだけどな。Wikipedia だと項目はコールスタックで立てられているが。
0461デフォルトの名無しさん
2008/10/06(月) 12:10:36勉強し過ぎでしょう。
0462461
2008/10/06(月) 12:30:270463デフォルトの名無しさん
2008/10/06(月) 21:49:04ワード(Cで言うところの関数、実際にはサブルーチン)
を呼ぶと呼び出し戻るためのアドレスを積む。
# 普通のCPUでCALL命令(68系だとBSR、JSR)を実行すると
# リターンアドレスがスタックに積まれるのは理解しているよね?
・データスタックってのは、言ってみれば「無限に増えるアキュムレータ」って感じ。
・「辞書」が命令コードストレージ、C言語でいえばTEXTセグメント
Forthの本質は上記3点をおさえて置けば理解できるんだが。
BPがリターンスタックと等価なんて言ってる人とか、
>・リターンスタック: 実行する命令列(辞書で展開された単語含む)
>リターンスタックというよりもオーダースタックといった方がちょうど良い気がするけどね
なんて言っている人、本当に理解できてるの?
0464デフォルトの名無しさん
2008/10/07(火) 00:25:52いや、別にWORDがサブルーチンである必要はないんじゃない?WORD毎の環境要らないんだし。
Cとの相性を考えるとサブルーチンにした方が良いと思うけど。
あと、CPUのアーキテクチャには疎いんだけど、最近のCPUでスタック持ってるのってあったっけ?
0465デフォルトの名無しさん
2008/10/07(火) 06:15:51>>464のいう「最近のCPU」が非ノイマンアーキテクチャとかを指すなら
スタックがないCPUもあるかも知れないけど。
0466デフォルトの名無しさん
2008/10/07(火) 06:37:45前半は実装と仕様が混乱してそう。
後半は、たぶん、CPUの「レジスタアーキテクチャ」「スタックアーキテクチャ」と
データ構造としてのスタックを混同している。
Wikipediaやblog読んで理解した気にならないで実際に自分で手を動かしてみなよ。
ちょっと恥ずかし過ぎるぞ、あんた。
0467デフォルトの名無しさん
2008/10/07(火) 12:34:16>>463 の
「データスタックってのは、言ってみれば「無限に増えるアキュムレータ」って感じ。」
ってのは、確かにハードウェアスタックを思わせる記述だが。
0468デフォルトの名無しさん
2008/10/07(火) 13:28:27リターンスタックってのはサブルーチンコール時に戻りアドレスをpushする為のレジスタの事でしょう?
なら今時のCPUで無い物の方が珍しいと思うんだけど
0469デフォルトの名無しさん
2008/10/07(火) 20:49:02定年過ぎた方には最近なんでしょうけど。
0470デフォルトの名無しさん
2008/10/07(火) 21:09:440471デフォルトの名無しさん
2008/10/07(火) 21:36:31細かいところは違うんだろが。
>>468
>戻りアドレスをpushする為のレジスタ
レジストリって意味?
RISCだと、戻りアドレスを保存するレジスタがあること多いよね。
まあ、リターンスタックは、
リターンアドレスを積むため専用(原則)のスタック
ってことがわかれば、いいじゃない。
データスタックと別にある利点もわかってるわけでしょ。
本当は「リターンスタックがあること」じゃなくて、
データスタックが複数のワードを横断して固定されていること、
の方が特徴だよね。
普通の言語の実装だと、
データスタックがサブルーチンごとに別々にリターンスタックの中にあって、
受け渡すデータはコピーする、
という感じなわけだ。比喩的に言えば。
アセンブリレベルでもリターンアドレスのpush/popが自動になってるなら、
気付かない人がいてもしょうがない。
0472464
2008/10/07(火) 23:32:13いや、スタックポインタ(レジスタ)じゃなくてスタック。>467 の通りですな。>463で『アドレスを積む』とか
書いているからHWスタックのことかと思った。
スタックを内部に持つCPUの話があった記憶があったので勘違いしたわ。すまんね。
forthあんまり詳しくないんで済まんのだけど、『リターンスタックには、ワードを呼ぶと呼び出し戻るため
のアドレスを積む』んだっけ?
正規化の観点からは『まだ実行していないWORD』もリターンスタックに積めた方が便利だと思うけど。
WORDコンパイルの実装で手が抜けなくなるし……
0473デフォルトの名無しさん
2008/10/07(火) 23:56:37意味が理解できん。
「まだ実行してないWord」を積む、って具体的に何を積むの?
まだ実行してないワードのアドレスなら辞書に入ってると思う(関節スレッディングの場合)
0474デフォルトの名無しさん
2008/10/08(水) 04:22:01いまでも現役バリバリで使われていて
マイクロソフトの最新OS「VISTA」がポーティングされる
x86アーキテクチャが「最近のCPU」では無いとでも?
あるいはCore2DUOとかがX86アーキテクチャじゃないとでも思ってる?
0475デフォルトの名無しさん
2008/10/08(水) 06:31:12Forthと関係なく、関数の呼び出し元に戻るためにアドレスをスタックに積む、
という動作は、アセンブリレベルでは普通の関数呼び出し規約。
Forthは言語レベルでリターンスタックを操作できる言語だけど、
普通は意識しなくてもいいから、リターンアドレスが何のために存在しているのか
理解できない人がいても不思議じゃないけど、せめてもう少し自分で勉強して欲しい。
0476デフォルトの名無しさん
2008/10/08(水) 06:35:19とか、逃げをうたず自分で触ってみろよ。
0477デフォルトの名無しさん
2008/10/08(水) 14:37:36自分なりのまとめ。
リターンスタックは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」ではリターンスタックは必要ない。
0478デフォルトの名無しさん
2008/10/08(水) 18:17:31それを実際に作って発表したら
いままで君をバカにしていた連中にギャフンと言わせられるよ。
ガンバ。
0479デフォルトの名無しさん
2008/10/08(水) 18:47:05パラメタはどうやって渡すんだ?
0480デフォルトの名無しさん
2008/10/08(水) 19:05:03わざわざ面倒くさくしてどうするの?
あと、ENTER/LEAVEとか使わないの
0481デフォルトの名無しさん
2008/10/08(水) 21:00:40もはやどこから突っ込んで良いものやら…
二つほど疑問が。
一つ目。
>>479も言ってるけれど、その実装だとパラメタの受け渡しが面倒そうなのだが。
たとえば、その実装方法で、
: foo drop drop 3 4 5 ;
1 2 foo
としたときにスタックがどのように変化していくのか書いてみてくれ。
解決方法を考えられなくもないが、たぶん独立したリターンスタックが
あるほうがシンプルだと思われ。
二つ目。
リターンスタックを操作する命令はどうやって実装するの?
これも独立したリターンスタックがあるほうがシンプルだと思われ。
forthじゃない何かをつくろうとしているのだろうか?
0482デフォルトの名無しさん
2008/10/08(水) 21:16:43: bar 1 2 3 >r >r 1 + r> r> ;
0483デフォルトの名無しさん
2008/10/08(水) 23:38:28まず、ネイティブの場合とスレッディングの場合を分けて考えた方がいい。
ネイティブForthで自然な実装では、
SP=リターンスタックポインタ(RSP)
BP=データスタックポインタ(DSP)
となってる。
UNIX/Cの普通のスタックを知ってれば、機能的な対応は明瞭なはず。
リターンスタックが伸びても、DSPは別フレームに移らないのがForthのポイント。
ちなみに、Forthでも局所変数が使えるヤツがあって、
その局所変数には、リタースタック中にフレームを作って割り当てるのが普通。
これも、標準のスタックがわかってれば意味は明瞭。
スレッディング(直接・間接)方式だと、
呼出しはCallじゃないから、
BPをRSPにしてもかまわんが、
パラメタとリターンアドレスの混合は、
Forthでは無謀。動的にチェックが必要な上に、完璧にはできそうにない。
0484464
2008/10/09(木) 01:15:39forthは興味半分で使ったレベルでしかないですね……
concatenative俺言語の設計の参考にしているぐらいです。
>473
リターンスタックを「次に実行する命令の列」という形に抽象化すると、「現在処理中のWORD」と
「ソースコードを解釈したWORD」「Dictionaryに保持されているWORD列」…つまり呼び出されて
いないWORDを対称(等価/交換可能)に扱うことができるようになるので、バーチャルマシンの
構造を簡単化することができるかと思います。
……forthで許されているのかしらんけど。
0485デフォルトの名無しさん
2008/10/09(木) 06:24:10「これから実行される命令列」へのポインタそのものと見なせるから、
そのアイデアが新しいとは思えないけどな。
Forthぐらいバーチャルマシンの実装が簡単な言語もないし。
ただ、リターンスタックの意味がよくわからないままに、
他の言語のように抽象構文木を再帰的に処理するような
実装にしていると、リターンスタック操作の実装で悩むの
かもしれない。
0486464
2008/10/09(木) 08:54:40>463は呼び出したWORDを積むことを前提にしているし、>451 >472で言ってるのが >463 >473で
思い切り否定されてるので、forthじゃそういう考え方無いのかな、と思った。
もしforthでもそういう使い方しているんだったらおいらの不勉強だね。
0487デフォルトの名無しさん
2008/10/09(木) 10:46:32485のいってる意味は、
スレッディング方式のforthでは、
辞書は実行されるワードのポインタのリストとみなせるわけで、
リターンアドレスというのは、辞書内への戻りアドレス、
つまり、これから実行されるワードのリストへのポインタといえる
ということと思われる。
ワードのポインタを直接リターンスタックに積み込むような、
インストラクションキャッシュみたいな仕様のリターンスタックの実装は、
ちょっと聞いたことが無い。
というかそれじゃリターンスタックじゃない。
0488デフォルトの名無しさん
2008/10/09(木) 20:52:04: foo dup + ;
: bar foo drop ;
bar の処理中に foo を実行するときに、
foo の次の drop のアドレスをリターンスタックに積む。
それで、foo の実行終了時にリターンアドレスから戻り先を取る。
これが、さっき積んだ drop のアドレスということ。
で、「drop のアドレス」っていうのを「ポインタ」と呼んでいる。
0489デフォルトの名無しさん
2008/10/09(木) 21:08:57「dropの直前のアドレス」だ。
微妙なニュアンスに聞こえるかもしれないが。
: bar foo ( ここ ) drop ;
( ここ ) と書いた部分に戻ってくる。
0490デフォルトの名無しさん
2008/10/09(木) 21:12:38: bar dup * ;
: baz foo ( ここ ) bar ( そこ ) ;
foo が呼ばれたときリターンスタックには( ここ )が積まれてる。
bar が呼ばれたときリターンスタックには( そこ )が積まれてる。
bar というワード自身がリターンスタックに積まれているのではない。
0491デフォルトの名無しさん
2008/10/09(木) 21:16:04問題は、
: foo twice ." Hello" ;
で、
HelloHello
を出力する twice を定義しろというパズル。
0492デフォルトの名無しさん
2008/10/09(木) 21:22:30: twice r> dup >r >r ;
何が起きているか説明すると、twice が呼ばれたとき、リターンスタックには、
: foo twice ( ここ ) ." Hello" ;
上の( ここ )が積まれている。
twice は最初に r> を実行して、( ここ ) をリターンスタックからデータスタックに移している。
次の dup で ( ここ ) がデータスタックに二つ積まれた状態になる。
最後に、 二つの >r で ( ここ ) が二つリターンスタックに戻される。
0493デフォルトの名無しさん
2008/10/09(木) 21:27:12リターンスタックからリターンアドレスを一つ取り出してそこに戻ろうとする。
: foo twice ( ここ ) ." Hello" ;
↑これの ( ここ )に戻ってくるわけだね。
そして、Helloを出力する。
そしてまた定義されたワードの終端に到達するので、Forth は
リターンスタックからリターンアドレスを一つ取り出してそこに戻ろうとするわけだ。
つまり、もう一度 ( ここ ) に戻る。
もう一度、Helloが出力されたら、次にリターンスタックからpopされる
リターンアドレスは foo を呼び出したアドレスなので、ここでようやく、
foo の実行が終了することになる。
0494デフォルトの名無しさん
2008/10/09(木) 21:29:45次に実行すべきワード単体ではなくて、
それ以降、実行すべきコード全体の先頭を指し示すアドレスだ、
と、理解できたかしらん?
0495488
2008/10/10(金) 00:34:56メモリアドレス的に的確に伝えるには難しいような気が。。。
: baz foo ( ここ ) bar ( そこ ) ;
16bitアドレス環境として、スレデッドコードで考えると、
(ここ)は foo のアドレスと同じか、それとも +1 でしょうか?
# foo のアドレス +2 すると bar のアドレスですよね
なんかアホなこと言っているようですみません。
0496デフォルトの名無しさん
2008/10/10(金) 00:55:01「barのアドレス」と書くとbazの定義の中のbarの呼び出しのあるアドレスなのか、
それともbar自身の定義のアドレスなのか混乱するから、
( ここ ) と表現したわけで、その違いがわかってるなら問題ないですよん。
あとポインタってわかるよね?
0497デフォルトの名無しさん
2008/10/10(金) 01:03:18その言い方で言えば、(ここ)はbarのアドレスですね。
正確には、bazの定義の中のbarのアドレス。
>>490 での例を少し補って、
: foo dup + ;
: bar ( あっち ) dup * ;
: baz foo ( ここ ) bar ( そこ ) ;
と書けば、「barというワード自身」というのは( あっち )のことになる。
0498496
2008/10/10(金) 01:20:54補足ありがとう。
>>486の書き込みの問題点を考えてみると、Forthのリターンスタックは、
明らかに「WORDを積」んではいない。
WORDを積むという表現で想起されるのは、>>497の( あっち ) を積むという
ことだとForth使いは受け取るだろうから。
そして ( ここ ) や ( そこ ) は明らかに>>484の「次に実行する命令の列」を
指し示しているわけなので、何が新しいのかよくわからない、という感想に
なるのだと思う。
0499464
2008/10/10(金) 01:36:27新しいかどうかなんて知らんよ。単にWORDの扱いを正規化できてVMが簡素になるっつうだけの話。
>497で言及している(ここ)(そこ)みたいな間接ポインタをVMで扱う必要も無くなるし。
まあ、その皺寄せをWORDに押し込んでるだけなんだけどね。
0500496
2008/10/10(金) 01:42:51なんていうか…
「(ここ)(そこ)みたいな間接ポインタ」というそれそのものが、
アセンブリ言語の時代からある「リターンアドレス」という概念なんですよ…。
Forthはそれをリターンスタックに分離して保存・復帰しているだけのこと。
0501デフォルトの名無しさん
2008/10/10(金) 06:35:09>そして、Helloを出力する。
. "Hello"
がなんでHelloを出力することになるの?
"Hello" .
じゃないのはなんで?
文字列リテラルは特別扱い?
0502デフォルトの名無しさん
2008/10/10(金) 08:32:35今は実際のリターンアドレスの話をしとらんよ。
リターンスタックを「次に実行する命令の列」という形に抽象化するっつうとるだろうに。
0503デフォルトの名無しさん
2008/10/10(金) 08:46:05." とか、 前付きの " は、Forthではただの引用符じゃなくて、一つのワード。
だから、Helloとの間に空白が要る。
但し、終わりの " はセパレーターだから、空白なしで良い。
前にも出てたけど、
Forthでは文字列リテラルはポインタと長さの二つの数値で表す。
「.」は、トップアイテムを一つpopして値をプリントするワードだから、
" Hello" .
だと5がプリントされるだけ。文字列ポインタがスタックに残る。
「."」 が 「次の " までの文字列をプリントする」というワード。
文字列をスタックに積んだときは
" Hello" type
とやる。
0504デフォルトの名無しさん
2008/10/10(金) 08:52:55だから、「次に実行する命令列」は辞書の中に既にあるんであって、
それはスタックである必要はなくて、いってみればアレイ。
辞書の中で実行は動的に行ったり戻ったりするから、
やっぱりリターンアドレスの保存は必要。
0505デフォルトの名無しさん
2008/10/10(金) 09:06:11>「."」 が 「次の " までの文字列をプリントする」というワード。
なんじゃそら
ワロタ
0506デフォルトの名無しさん
2008/10/10(金) 17:24:550507488
2008/10/10(金) 22:08:31スレデッドコードと書いておいて誤解がなかったようだ。
497 のレスだと、俺の中では「次のワード」という認識になる。
(あっち)という表現を使えば確かに誤解はなくなる。
なんだか、リターンスタックのデータ内容と、
(サブルーチン)リターンアドレスを混同した希ガス
0508464
2008/10/11(土) 00:37:41「必要がないから積まない」じゃなくて、「VMの原理を簡単にするために積む」んだって。
VMが辞書の中を行ったり来たりしないようにするのが目的。
もちろん、VMの仕事をWORDに移管しただけの話だし、スタックが大きくなるデメリットもあるけどな。
0509504
2008/10/11(土) 01:03:24つまり、ワードを全部インラインにするということ?
それなら確かに理論的には可能だし、リターンスタック自体要らない。
普通は、大きくなるのはスタックじゃなくて辞書だな。
まあ、辞書からインラインで展開したものを
リターンスタックにコピーしてもいいけど、
ランタイムにやるなら相当動作が遅くなると思う。
それに、
なぜそのためにスタックというデータ構造を使うのかがわからない。
後ろから先に積んでいくことになるわけだが。
その発想はインストラクションキャッシュだと思う。
だから、むしろキューがいいと思う。
ソフトウェア的にやると相当遅いとは思うけど、
論理的には可能だと思うよ。
0510デフォルトの名無しさん
2008/10/11(土) 02:00:155 ソースコード
6 boost::spirit
というので激しく不安になるな。
というか、スクリプトの入門というのなら、BASICタイプ言語の作成とかCタイプ言語の作成
とか分散しないで、どっちか一つに集中すべきじゃない?
入門だったら、むしろ構文はシンプルなforthライクにして、エンジンの中身に拘るべきだと思うけど……
0511デフォルトの名無しさん
2008/10/11(土) 02:02:280512464
2008/10/11(土) 02:18:22いや、基本はWORD呼び出し時に展開(そのWORDに定義されたWORD列をスタックに押し込む)。
WORDコンパイル時に全部インラインに展開するわけじゃないです。
#高速化を目的として、WORDコンパイル時にある程度はインライン化することになると思うけど。
WORDに定義されたWORD列を、実行時にその場で積んでその場で処理する必要があるから、
FIFOの仕組みが必要になります。
まあ、小まめにWORDの積み降ろしをやらなきゃいけないから、確かに重そうだけどね。
0513デフォルトの名無しさん
2008/10/11(土) 05:37:05どっちかっていうとJava VMのJITコンパイラみたいな。
Forthはシンプルな実装で軽い、ってイメージ。
0514デフォルトの名無しさん
2008/10/11(土) 06:54:12対して普通のForthはリターンアドレス一つのコピーで済む。
Forthでは関数の戻り場所を実行時に入れ替えたりできる( >>59, >>62 ) わけだけど、
>>464のやり方だと命令列自体の入れ替えになるから相当面倒。
Forthの自由度をわざわざ減らしている気がするんだけどな。
でも作るというならがんがれ。
様々な進化があってこそ発展もある。
0515464
2008/10/11(土) 13:07:00いや、実装はこっちの方がシンプルだよ。辞書の解釈を全部WORDに押し付けることができるから。
ただ、スタック操作が増えるから重くなる方向だけどね。
>514
リターンアドレス前提だと難しいよね。作業用スタックがもう一本ありゃいいんだけど。
俺言語のVMだと自前スタックで実装しているので大した話じゃないです。
0516464
2008/10/11(土) 13:22:12ちょっと補足。
複数のWORDを押し込もうとすると確かに面倒だね。
俺言語でも
1. 無名WORDを作る
2. 1.のWORDに実行するWORDを押し込む
3. 1.のWORDをリターンスタックに押し込む
といったパック化が必要になります。
0517デフォルトの名無しさん
2008/10/11(土) 13:26:05ハードウェアレベルではもう一般化してる
インストラクションのプリフェッチとおなじだよね。
マシン語のデコーダレベルでのVMという感じか。
実装する場合の最難題は条件付きジャンプだと思う。
IFとか不定ループをどう載せるかが鍵だな。
これを考えると、VMが仕組みとして単純になるかどうかは微妙だと思う。
まあ、ベタでやればできそうな気はするが、
ハードウエアの仕組みをソフトウェアで二重にしてるだけのような気がしないでもない。
0518464
2008/10/11(土) 13:38:04思い出した……>59を実現するにはreverse自体のパック化も必須なんだっけ。
そういや>59みたいな操作をどうしようか悩んだな。
ただ、こういったWORDを跨ぐ暗黙的なリターンスタック制御てけっこう危険じゃない?
個人的にはWORDはデータスタックの状態にのみ依存すべきだと思うけど、WORDを越えた
範囲までリターンスタックを操作できるようにすると、WORD同士の依存関係が出てしまって
連鎖性(concatenative)が崩れるような気がする。
forthの条件分岐でも、セパレーターを使った明示的な制御をしているわけだし。
0519464
2008/10/11(土) 13:49:31>517
そうか、CPUだともう一般的なのか……。さすがに天才的な変態が集まる業界だな。
やっぱりCPUのアーキテクチャ勉強しないといけないなあ。
IFは構文解析で逃げました。
block := block ? WORD1 ! WORD2
という三項演算子を用意して、条件分岐用WORDに解釈するようにしました。
不定ループの構文を用意するかどうかは検討中です。
0520517
2008/10/11(土) 13:59:32ワードがどこかで他のワードを呼び出し、そのワードがどこかで他のワードを呼出し...
という場合には、
ワードシーケンスに展開する段階で、
展開すべき個所をたどるためのリターンスタックが必要な気がする。
だから、464のVMは、
普通のForthでの実行と同じ動作でワード系列をコピーして、
それから順番にInterpretして実行するという感じになって、
単なる二度手間ではないかな。
0521464
2008/10/11(土) 15:30:32どのみちリターンスタック(実行する命令列を保存する専用スタック)が必要なのはその通り。
WORDの動作:普通のForthでの実行と同じ動作でワード系列をコピー
VMの動作: 順番にInterpretして実行する
というところがポイントですな。VMは辞書のこととか考える必要がないのでシンプルになります。
その代わり「辞書からWORD列を拾ってリターンスタックに展開する」というWORDが必要になるけど。
確かにコピーする手間はムダな気もするんだけどね……
辞書のWORD列を直接トレースするのと比べてどんぐらい余計な手間がかかってるんだろう?
ポインタ操作数回&アクセス数回レベルだと思うけど。
0522514
2008/10/11(土) 18:35:01普通はリターンスタックとか継続とか触れない言語の方が多いから、
Forthではなく俺言語を作るつもりなら、言語デザイナであるお前様自身の
判断で実現可能にしてもいいし、そうでなくしてもいいと思うよ。
ただForthは言語レベルでリターンスタックを操れる結果、協調的マルチタスクやら
コルーチンやら言語実装のレベルで普通対処するものも、ライブラリレベルで実現できる柔軟さがある。
リターンスタックは他の言語にはないForthの特徴の一つだからね。
俺言語でなんとか実現する方法を悩んでみるのも楽しいんじゃない?
0523514
2008/10/11(土) 18:47:48アセンブリ言語で書かれた昔のForthとかコアの部分はアセンブリ言語で数行レベルだった気がする。
どのへんが複雑だと思ったのかは興味がある…
0524517
2008/10/11(土) 21:01:10いや、そうではなくて、
「WORDの動作」の中の、「普通のForthと同じ動作で」ってところに、
リターンアドレスを保存するスタックという意味でのリターンスタックが、もう必要なのではないかということ。
あと、言葉の問題として、
大きい意味でのワードを展開する動作のところからもうInterpreter(=VM)の動作というのが普通だと思う。
つまり、VMの動作の前半をWORDの動作と呼んで違う名前にしたから、
残ったVMの動作が簡単に見えるというだけなんじゃないかな。
辞書中のワードから始めると、ForthのVMよりも(多分プリミティブ)WORDの系列を作る部分が余分で、
より複雑になってると思う。
でも、自分の言語を作るのをやめろといってるんじゃないよ。
むしろ応援してる。
ちょっと話題はそれるけど、Forthというか、スタック指向言語は、
コンパイラライターフレンドリーなんだよね。
だから、Forthコード書くよりForth(風オレ言語)VMを書く人が多かったりするわけだが、
ホントはForthでアプリケーションを書くときも「オレ言語」を作るつもりで書くと良いと思ってる。
0525デフォルトの名無しさん
2008/10/11(土) 21:33:08知らない人は結構混乱する。
スレデッドコードのForthの場合、ソースコードを解釈してスレデッドコードを
生成することをコンパイルといい、スレデッドコードを生成する部分を外部インタープリタ、
スレデッドコードを解釈実行する部分を内部インタープリタと呼ぶ。
(これで良かったよな?同志?)
このスレでVMと言った時に内部インタープリタだけなのか、外部インタープリタも含むのか?
どっちだろうか?
0526デフォルトの名無しさん
2008/10/12(日) 00:45:26テキストを読み込んで、
1) ワードを辞書内で特定
2) だめならリテラルに変換
3) ダメならエラーで終了。
という部分が外部インタープリタ
1)または2)で成功したときに
モードに応じてコンパイル(Forth的意味)するか実行する
のが内部インタープリタ
だと思ってました。
Forthはテキストインプットも弄れるという面白さもあるよね。
Forth VMというと、外部も含むのかな。
上のリターンスタック云々の話は、
内部インタープリタのことだと思うけど。
0527デフォルトの名無しさん
2008/10/12(日) 07:57:230528デフォルトの名無しさん
2008/10/12(日) 08:49:020529464
2008/10/12(日) 15:10:26その辺は「自由と責任」というやつですな。「銃で足をブッとばす自由」でもあるけど。
>どのへんが複雑だと思ったのかは興味がある…
自分でも何でだったっけな、と過去の記憶を探り出してみたけど、
・実行中のWORDの次のWORDを辞書の中から探せるようにする仕組みが必要
×実行中のWORDの中身を変更するのが大変(VMのスタックに積んでいるWORD含む)
×番兵などの終了処理が必須
--> VM側のスタックに積むことにすればpop&top参照で正規化できるし、元の値を
コピーするからWORD変更にも影響されない。
・VM側に「WORDを実行する」という手順が必要になる
--> VM側のスタックに積むことにすればpushで正規化できる
ぐらいかもしれない。
コンパイル時にWORDの中身が確定するforthだとあんまり問題にならなそうだね。
0530464
2008/10/12(日) 15:20:28「スタックに複数のデータを押し込む操作は機械語レベルだとアトミックにならない」ということ??
C++で実装しているから意識していなかったけど、そうかもしれないですね。
少なくともプリミティブで実装する必要あるね。
>ForthのVMよりも(多分プリミティブ)WORDの系列を作る部分が余分で、
これは狙ってやっていることだから仕様がないですね。
まあ、俺言語ではVM自体もWORD扱いにしているのですが……
0531デフォルトの名無しさん
2008/10/12(日) 15:50:56んー、やっぱり、思い込みでForthを理解したつもりになるんじゃなくて、
本格的に触ってみたほうが良いと思うんだけどな。
>実行中のWORDの次のWORDを辞書の中から探せるようにする仕組みが必要
通常、Forthは実行時には、スレデッドコードにコンパイルされた命令列を、
上にも出ているnextルーチンで辿るだけなので、仕組みというほどの仕組みはないよ。
>実行中のWORDの中身を変更するのが大変(VMのスタックに積んでいるWORD含む)
間接スレッディングのForthだと定義済みのワードの変更は、一カ所ポインタを書き換える
だけで済むはず。
>番兵などの終了処理が必須
番兵というかワードの最後にnextルーチンへのジャンプかnextルーチン自身を書き込むだけ。
>VM側に「WORDを実行する」という手順が必要になる
スレデッドコードのForthの命令列は、ワードへのポインタが並んでいるだけで、
「WORDを実行する」という意味のインストラクションは必要ないよ。
0532464
2008/10/12(日) 23:25:00[条件] IF [肯定時] ELSE [否定時] THEN とか。
せめて条件算子的だったらなぁ。[条件] ? [肯定時] : [否定時] ;
>531
細かいことを言うと、nextルーチンが辞書内のスレッデッドコード構造の詳細を知らなきゃ
ならないので、VMと辞書の関連が密になりそうな気がします。スレッデッドコードをスタックに
pushしてVM内に取り込んじゃえば辞書内の構造を気にする必要無いし。
まあ、最適化のために作り込んでも良い気がするけどね。そこは将来の課題ということで。
>一カ所ポインタを書き換えるだけで済むはず。
WORD自体を置換する場合はそうですね。WORDの挿入や削除はたぶん難しいかと。
そんな特殊なことは禁止にして、新規にWORD定義させた方が良いかも知れないけど。
あるいは無名WORDとかスキップWORDを用意するとか。
>「WORDを実行する」という意味のインストラクションは必要ないよ。
あれ?VMに保存されている「現在実行中のWORD」って、間接ポインタじゃないの?
(nextの動作を考えると、間接ポインタじゃないと色々と面倒臭そうな)
実行前に間接参照からWORDを探す操作が一段余計に必要になるかと思ってた。
0533デフォルトの名無しさん
2008/10/12(日) 23:34:45というか、それがFORTHの肝のような気がする。
0534デフォルトの名無しさん
2008/10/13(月) 00:16:22ジャンプとかコールとかそういう類のインストラクションをデコードする必要がない、
という意味ね。
あとForthの実装にはダイレクトスレデッドなものもあるよ。
nextルーチンからみると命令列を順に辿ってるだけであって、
「辞書からワードを毎回探している」ってわけじゃないしね。
それより、スタックに命令列を毎回pushするオーバーヘッドのほうがよほど大きいと思うし、
nextルーチンに比べてシンプルとも思えないんだな。
ま、いろいろ悩んで勉強して、これだ!と思える言語デザインに邁進してください、と。
このスレが本当に久しぶりに活性化したのは間違いないしね。
0535デフォルトの名無しさん
2008/10/13(月) 00:21:58間接スレデッドの場合、Forthコンソールの側から見ると、
逆コンパイルしやすかったり、便利な面はたしかにあるけれど、
VMつうかnextルーチンから見ると、単にポインタを辿っているだけなので、
構造として、VM実装と辞書構造が密、というわけでもないと思う。
実際VM実装テクニックとしてのスレデッドコードは、今や、Forth以外でも
当たり前の技術になってるし。
0536デフォルトの名無しさん
2008/10/27(月) 00:52:54ソース付きなので理解しやすい。
OS Xで動かそうとしたが挫折した。
OSXのGASではマクロが対応してないみたいだ。
0537デフォルトの名無しさん
2008/11/23(日) 01:13:24やっぱ誰も使ってないってこったな
0538デフォルトの名無しさん
2008/11/26(水) 17:30:54なんか並列forthマシンっぽいw
0539デフォルトの名無しさん
2008/12/27(土) 14:00:320540デフォルトの名無しさん
2008/12/27(土) 21:13:140541539
2008/12/28(日) 01:26:480542デフォルトの名無しさん
2008/12/29(月) 13:31:00人間工学から著しく反してる。
0543デフォルトの名無しさん
2008/12/29(月) 19:52:220544デフォルトの名無しさん
2008/12/29(月) 21:45:560545デフォルトの名無しさん
2008/12/29(月) 22:06:52まあ、問題をごく単純な部分に細分して考えることができないと、
スタック処理が爆発しがちになるとはいえますね。
でも、問題の細分ができない人は、どの言語でプログラミングしても
たかが知れてる。
0546デフォルトの名無しさん
2009/01/01(木) 11:45:560547デフォルトの名無しさん
2009/01/01(木) 11:56:23結果としては似たようなことができると言えなくもないけど、
Lispのマクロみたいな2度evalするみたいな高水準のものじゃありません。
0548デフォルトの名無しさん
2009/01/07(水) 22:44:240549デフォルトの名無しさん
2009/01/07(水) 23:39:440550デフォルトの名無しさん
2009/01/08(木) 00:11:19具体的に何がしたいのか特定しないと。
factorはおもしろい言語だが、関数型言語のフリし過ぎなのがイヤラシくもある。
0551デフォルトの名無しさん
2009/01/09(金) 12:30:140552デフォルトの名無しさん
2009/01/09(金) 22:47:550553デフォルトの名無しさん
2009/02/26(木) 00:17:580554デフォルトの名無しさん
2009/03/07(土) 05:11:310555デフォルトの名無しさん
2009/03/07(土) 10:00:540556デフォルトの名無しさん
2009/03/07(土) 10:13:20http://pc.2ch.net/tech/kako/1000/10001/1000118518.html
0557デフォルトの名無しさん
2009/03/07(土) 13:25:330558デフォルトの名無しさん
2009/03/07(土) 18:54:170559デフォルトの名無しさん
2009/03/07(土) 21:43:310560デフォルトの名無しさん
2009/03/07(土) 23:32:500561デフォルトの名無しさん
2009/03/08(日) 10:51:090562デフォルトの名無しさん
2009/03/08(日) 12:22:510563デフォルトの名無しさん
2009/03/08(日) 19:52:030564デフォルトの名無しさん
2009/03/08(日) 20:01:58Factor = forth + 無名関数とオブジェクト指向だよ
0565デフォルトの名無しさん
2009/03/19(木) 13:57:45チャック・ムーアって名前なのは結構心臓に悪いな。
0566デフォルトの名無しさん
2009/06/24(水) 08:13:560567デフォルトの名無しさん
2009/06/25(木) 14:24:210568デフォルトの名無しさん
2009/07/03(金) 05:23:56┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
0569デフォルトの名無しさん
2009/07/03(金) 22:57:040570デフォルトの名無しさん
2009/07/09(木) 07:11:33何かいい本ある?
できれば日本語がいいけど英語も可。
0571デフォルトの名無しさん
2009/07/09(木) 10:23:230572デフォルトの名無しさん
2009/07/09(木) 21:39:14ttp://www.forth.com/starting-forth/
0573デフォルトの名無しさん
2009/07/10(金) 07:32:04Let over Lambda日本語版
0574デフォルトの名無しさん
2009/07/10(金) 20:52:17たしかそれってlispの本じゃないか?
0575デフォルトの名無しさん
2009/07/10(金) 20:57:560576デフォルトの名無しさん
2009/07/10(金) 22:31:170577デフォルトの名無しさん
2009/07/11(土) 05:33:45Bingだと forth だけがヒットする。愛してるよMS
0578デフォルトの名無しさん
2009/07/18(土) 23:02:30スタック型言語にはスタックオーバーフローってある?
それともヒープにあたるものをスタックとしてつかている?
0579デフォルトの名無しさん
2009/07/18(土) 23:10:100580デフォルトの名無しさん
2009/07/18(土) 23:17:250581デフォルトの名無しさん
2009/07/18(土) 23:31:560582デフォルトの名無しさん
2009/07/19(日) 03:45:38次そゆこと言った奴はダークサイドな
名言集 その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/
にて自動焼人 ★までご連絡ください
0584デフォルトの名無しさん
2009/10/06(火) 10:44:14. 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件
0585デフォルトの名無しさん
2009/10/06(火) 11:33:58圧倒的だな。
http://ja.wikipedia.org/wiki/J_(プログラミング言語)
0586デフォルトの名無しさん
2009/10/06(火) 11:36:170587デフォルトの名無しさん
2009/10/06(火) 13:38:040588デフォルトの名無しさん
2009/10/06(火) 13:39:59HTML の検索結果 約 8,490,000,000 件中 1 - 10 件目 (0.23 秒)
古いコピペか
0589デフォルトの名無しさん
2009/10/06(火) 13:42:51時代はもはやDですよ。
0590デフォルトの名無しさん
2009/10/06(火) 13:44:54Brain Fuck の検索結果 約 5,190,000 件中 1 - 10 件目 (0.30 秒)
Brain Fsck の検索結果 約 28,500 件中 1 - 10 件目 (0.33 秒)
0591デフォルトの名無しさん
2009/10/08(木) 21:50:040592デフォルトの名無しさん
2009/10/09(金) 00:25:23時代は A だった。
0593デフォルトの名無しさん
2009/11/23(月) 09:27:280594デフォルトの名無しさん
2009/11/23(月) 18:04:33http://wiki.forthfreak.net/index.cgi?
0595デフォルトの名無しさん
2009/11/25(水) 14:14:43このページの仕様だとNFの後にLFが来てるけど、jonesforthだとLFが最初だよね。
NFが先だとFINDの時にLFを出すのに手間がかかると思うんだけど、
NFがLFより前にあるメリットって何かあるのかな?
0596デフォルトの名無しさん
2009/11/26(木) 00:14:060597デフォルトの名無しさん
2009/11/30(月) 00:21:59Gforth マニュアルの和訳 (現在、チュートリアルまで)
0598デフォルトの名無しさん
2010/01/05(火) 18:09:33Reva
非標準系 Forth (ミニマリスト系)
パブリックドメイン、コアは FASM で記述
プリミティブワードは商用 Forth や GCC 並みに高速
Windows の DLL や Linux の共有ライブラリを呼び出し可
豊富なライブラリが付属
0599デフォルトの名無しさん
2010/01/16(土) 15:33:34Retro (Forth) の和訳
http://www.h7.dion.ne.jp/~samwyn/forth/winconsole.zip
オリジナルのコンソール版仮想マシンを Windows 専用に移植したもの
TinyC のみでビルド可、TinyC の conio.h を利用
超応急措置的改変だが、文字列に日本語も使用可
ビルド済み EXE とオリジナルの retroImage も同梱
0600デフォルトの名無しさん
2010/03/11(木) 19:17:24postscriptの話題もOKですか?
forthはif文は逆ポーランドじゃないんですね
0601デフォルトの名無しさん
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
0602デフォルトの名無しさん
2010/03/23(火) 00:04:39今死んでね?
0603デフォルトの名無しさん
2010/03/23(火) 00:58:370604デフォルトの名無しさん
2010/04/18(日) 17:43:19関数とかじゃなくて、演算子を作りながら進んでる感じ。
0605デフォルトの名無しさん
2010/04/18(日) 23:45:470606デフォルトの名無しさん
2010/04/22(木) 05:05:43最初IF文とか巧妙にスタックで実現しているのかと思った。
0607デフォルトの名無しさん
2010/04/28(水) 19:34:13ttp://oss.infoscience.co.jp/factor/roundtable/
0608デフォルトの名無しさん
2010/06/15(火) 05:20:29マイコンピュータ No3
特集すぐ動くFORTH
などと言うものが出てきた、1981年の本なのでZ80とかApple向けの実装の話だったりする
思わずScanSnapで取り込んでしまった
0609デフォルトの名無しさん
2010/06/15(火) 17:04:110610デフォルトの名無しさん
2010/08/11(水) 11:24:300611デフォルトの名無しさん
2010/12/28(火) 08:18:410612デフォルトの名無しさん
2010/12/28(火) 09:18:30http://www.greenarrays.com/
144コアのforthマシンとか誰得
0613デフォルトの名無しさん
2010/12/28(火) 09:43:38いちいち驚くなよ
0614デフォルトの名無しさん
2010/12/31(金) 23:45:15先日、倉庫を整理していたら「パソコン・ユーザのためのFORTH入門」(近代科学社)が
出てきました。懐かしいので、”Ubuntu FORTH”で検索してみてgFORTHの存在を知り
さっそくインストールしてみました。FORTHとの出会いはOh!MZの連載記事「掟やぶりの
magiFORTH」ですが、当時はSーOSを入力していなかったので実際にFORTHに触れる
のは今回が初めてです。
よろしくお願いします。
0616デフォルトの名無しさん
2011/01/01(土) 23:57:48清水和人だったな、懐かしい
0617デフォルトの名無しさん
2011/01/04(火) 08:09:35「掟破りのmagiFORTH」は山田伸一郎さんの書いた記事でした。
1985年か1986年のOh!MZ 3月号に掲載されています。
0618デフォルトの名無しさん
2011/01/04(火) 20:00:48おっとゴメン、もう記憶があやふやだわ
俺はLispの方にハマったな
こうもとやすひこの記事とか楽しく読んでいた
0619デフォルトの名無しさん
2011/02/11(金) 21:03:43Forthと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
0620デフォルトの名無しさん
2011/02/11(金) 21:15:45http://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
え、それなにどうやってやるの。
0621デフォルトの名無しさん
2011/02/11(金) 21:20:48stackが前提だから (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
0622デフォルトの名無しさん
2011/02/11(金) 21:28:52ttp://ci.nii.ac.jp/naid/120001758800
「機関リポジトリ本文(無料)」ってリンクからたどってくとPDFで本文読めるな
0623デフォルトの名無しさん
2011/02/11(金) 23:23:10>>619の上のほうで示したリンク先「汎用簡易言語として見たインタプリタ言語Laplas」は
http://ci.nii.ac.jp/naid/110002895171
こっちで見れるね
0624デフォルトの名無しさん
2011/02/12(土) 00:27:43ざっとみたけど、lambdaはあっても、Closureはないみたいだな。
0625デフォルトの名無しさん
2011/03/07(月) 10:54:59.820626デフォルトの名無しさん
2011/05/28(土) 09:22:21.040627デフォルトの名無しさん
2011/05/29(日) 07:57:22.030628デフォルトの名無しさん
2011/06/06(月) 07:09:36.69ttp://www.colorforth.com/POL.htm
0629天使 ◆uL5esZLBSE
2011/07/02(土) 23:26:16.04---------------------------
(((((((( 日本語プログラミング言語Mind ))))))))(キリ!!ッッ!!!!
------------------
((((((((((( え、それなにどうやってやるの。 )))))))))))(キリキリッッ!!!キリッキリッッッッ!!!!キリッッ!!!!ッッ!!!!
------(きリッ!
お前らってどうみてもゴミだよな
0630デフォルトの名無しさん
2011/07/30(土) 14:34:39.150631デフォルトの名無しさん
2011/09/10(土) 06:58:08.330632デフォルトの名無しさん
2011/09/10(土) 23:29:07.150633デフォルトの名無しさん
2011/10/12(水) 20:56:54.15factorの新しいのきてるぅ
■ このスレッドは過去ログ倉庫に格納されています