: Mops ( オブジェクト指向FORTH -- ) ;
■ このスレッドは過去ログ倉庫に格納されています
0001 1
NGNGオブジェクト指向FORTH言語、Mopsについて語るスレ。
いや、語れるのか‥‥?
00021
NGNGhttp://www.netaxs.com/~jayfar/mops.html
0003デフォルトの名無しさん
NGNGつか、中身も全然みてない。
FORTH がどうやったらオブジェクト指向になるんだろう。
確かに 1 2 + . がメッセージパッシングとして見えなくは
ないけど。クラスの定義とか継承とかできるんだっけ。
よかったら解説きぼん。
00041
NGNGオブジェクトにメッセージを投げるのは、
someMessage: anObject
のよーにする。最後に『:』のつくワードはメッセージと解釈される。
パラメタが必要な時には someMessage: の前にスタックに積んでおくぞ。FORTHだからね。
最後に『:』のつくワードはコンパイル時に、直後に置かれたオブジェクトを調べて
メソッドの結合を済ませてしまう。静的束縛なわけだ。
動的束縛にしたい時は、
someMessage: [ anObject ]
という具合にオブジェクトをカギカッコでくくっておく。するとメソッドの結合は、
実行時まで遅延される。C++と違って呼び出し側が選ぶわけね。
(メソッドディスパッチのためのテーブルを常に辞書に抱えてるのね〜。メモリ食いかも〜。)
00051
NGNGFORTHであるが故に、メッセージ: オブジェクト の順序になるのだが、結果として、
print: GIKO
のごとく英語の語順としては自然になるため思ったより読みやすい。
(逆に「日本語でワードを登録したらMINDみたい!」、ってわけには逝かなくて残念無念。)
00061
NGNG:class someClass super{ superClass1 superClass2 }
var someVariable
:m someMethod { n1 n2 -- }
n1 n2 +
put: someVariable
;m
;class
みたいな感じっス。
スーパークラスは複数許されるので多重継承可能っす。
someClass MONA
1 2 someMethod: MONA
とするとMONAオブジェクトのsomeVariableに3が入るぞな。
0007デフォルトの名無しさん
NGNG逆だったらよかったのかもね。
GIKO print:
っていう語順、つまりStackTopにselfが置かれて、messageなOperatorはまずStackからselfをpopするっていう形ならば。
でもそれだと、メソッドの静的結合は、困難になるかな。
まあ動的オンリーでいいじゃんという気もするが。
00081
NGNGややっ。もしかしたら静的束縛も可能かも。
メッセージ側に静的束縛を示す修飾子みたいなのを用意して、
オブジェクトのコンパイル時に直後のメッセージが修飾子付きなら
メソッド結合を済ませたコードを生成すればいいのかも。
修飾子なしならオブジェクトのselfをスタックトップに積む。
いかが?
00092
NGNG私も >>7 と同じで、レシーバを後に書くのは逆に FORTH的じゃないような
気がしたんだけど、message を先にスタックに積んでおいて後でオブジェクトを
作用させることで挙動がポリモーフィックになるとすれば、納得できるような
気もする。
ところでメッセージを実行した後のスタックの状態はどうなるの?
そのメッセージを受けたオブジェクトがスタックに残るわけかな。
スタックトップにあるオブジェクトにメッセージを送ることはできるの?
00101
NGNGメッセージを実行した後には、呼び出されたメソッドが残したスタックの状態以外なにも
残らないです。分かりやすいのですが、メッセージを連続的にオブジェクトに流し込むSmalltalk的な
使い方ができない原因でもあります。
スタックトップにあるオブジェクトにメッセージを送る場合は、
anObject someMessage: []
という構文が使えます。スタックトップのオブジェクトの解釈は実行時までわからないハズなので、
動的束縛による呼び出しになりますが、そのオブジェクトの属するクラスをコンパイル時に指定
してイイ場合には、
anObject someMessage: class_as> someClass
という呼び出し方をすることで、実行時のオーバーヘッドを小さくする事が出来ます。
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNGしたいっていうか、もうやっちゃってる人がいる。(w
00132
NGNGあそうか。メソッドの結果をスタックに残す場合、デフォルトで
レシーバもスタックに残っちゃうとかえって扱いにくいだろうな。
> anObject someMessage: []
なるほど。てことは、メソッドの中で復帰値として自分自身を明示的に
スタックに積んで終了すれば、同じオブジェクトに連続的にメソッドを
作用させることもできるわけだよね。
> anObject someMessage: class_as> someClass
> という呼び出し方をすることで、実行時のオーバーヘッドを小さくする事が出来ます。
メソッド呼び出しの束縛の仕方を動的にするか静的にするかを C++ の
ように定義側ではなく、呼び出す所で選択できるのはなかなかよい
ですねぇ。結構イケてる言語なのかも。
00141
NGNG> なるほど。てことは、メソッドの中で復帰値として自分自身を明示的に
> スタックに積んで終了すれば、同じオブジェクトに連続的にメソッドを
> 作用させることもできるわけだよね。
なるほど、そういうやり方もありますね。
> 定義側ではなく、呼び出す所で選択できるのはなかなかよい
> ですねぇ。結構イケてる言語なのかも。
面白い言語だと僕は思うんですけど、あまりにマイナーなもので‥‥。
呼び出し側が束縛の仕方を選べる言語って他にあるのかな?
私は詳しくないんですが。
00152
NGNG> 呼び出し側が束縛の仕方を選べる言語って他にあるのかな?
あまり聞いたことないすね。そもそも動的なのが普通だから。
C++ みたく実行効率重視の言語だけが両方持ってるんじゃないかな。
> 面白い言語だと僕は思うんですけど、あまりにマイナーなもので‥‥。
やっと思い出したんだけど、Mops 落としたのに結局使わなかったのは、私が
Mac 持ってなかったからでした(大藁
で、Mac以外でも使えないかと捜してみたら
http://www.asahi-net.or.jp/~uw4s-wtnb/chidori-mops.html
このページにある FAQ に「Win32Forth が Mops のオブジェクトモデルを
取り入れている」とあって、下から落とせるみたいね。
http://www.taygeta.com/forthcomp.html
0016デフォルトの名無しさん
NGNGことじゃないですよね・・?
00172
NGNG>>16
Mops は
Michael's Object-oriented Programming System
とのことなので MOP とは関係ないみたい。
とは言え、Mops のベース言語である FORTH 自体が自己拡張性を
持った言語なので Mops でもその辺の機能がある程度使える、
…かもしれません。
00181
NGNG> C++ みたく実行効率重視の言語だけが両方持ってるんじゃないかな。
一般的なオブジェクト指向言語から見るとC++のほうが特殊というわけですね。
> このページにある FAQ に「Win32Forth が Mops のオブジェクトモデルを
> 取り入れている」とあって、下から落とせるみたいね。
そんなものがあったんですね。気がつきませんでした。
我々は孤独ではなかった!(藁
アセンブラでかかれているMopsのコア以外の部分はFORTH自身で記述されてい
るので、やろうと思えば別のFORTH処理系にも持っていけるのかも。
>>17
> Michael's Object-oriented Programming System
Michael Horeっていうオーストラリアのおぢいさん(孫がいるらしい)が一人で
開発しているらしいデス‥‥。
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0021元潜水艦乗り
NGNG>>19-20
中間言語ってのとは少し違うがSunのOpenBootとかAppleのOpenFirmware
とかはFORTHみたい。
JavaのVMはスタックマシンみたいだけどスタックマシンならFORTHか?と
言われると少し違うような気がする。
っていうかたいていのコンパイラはスタックマシン向けのコードを生成して
からレジスタ割付けなんかをやって最適化したネイティブコードを作ってる
のでないかな?でもそれをFORTHとはよばないやうな。
あんまり知らんけど。
0022元潜水艦乗り
NGNGぢつは、日本語化をあれから少しだけやってみた。
クラス定義だけできるようになった。
↓
「 モナークラス 」は「 オブジェクト 」を継承し、
『 セリフ: " オマエモナ〜" 』
を実装する。
メソッドを呼び出す構文で良いのが思い付かず、途中やめにしてる。
へたれです………。
0023デフォルトの名無しさん
NGNG〜' ― (,,゚Д゚) < 深度248/402。sage!!
し― し-J \___________
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG0026第4番目の名無しさん
NGNGFORTHの考え方は好きだなぁ。
フェチ逝って良しですか?
0027デフォルトの名無しさん
NGNG思うがなあ。anObject message とか。
数値も文字列もオブジェクト。+や.もメッセージと考えればすべて
うまくいくような。あ、引数なしのメッセージが困るか?
002825
NGNGそういうのも蟻だと思う。
ANS仕様のForthならインタプリタやコンパイラいじり放題だから俺流アプローチのOOPが可能だよね。
俺は挫折したけど。
002922
NGNGたしかに、
anObject message
の形だと日本語の文脈にも合うので美しいなぁ。
‥‥‥‥コンパイラの中枢部分まで降りていって書き換えるか。
>>28
Forthはいじり放題、てのには激しく同意。
制御構造だろうがなんだろうが俺流につくれてしまう
Forthマンセー。
なんだけどおかげで方言だらけ(涙)。
Mopsも完全にはANSI互換じゃないしなぁ‥‥。
0030デフォルトの名無しさん
NGNG名前がとても良いです。
このスレのデフォルトにしたいぐらいに。
0031デフォルトの名無しさん
NGNG0032第4番目の名無しさん
NGNGサンクス。
003322
NGNGprint:
のように最後に:を付けて区別しているので、
日本語化する時には、
印刷する。
みたいに最後に。が付いたモノは オブジェクトに
対するメッセージと言う事にすればヨイかな、
と思ったのですが、引数はどこに置くのがいいんでしょうね。
1)
anObject p1 p2 p3 message
2)
p1 p2 p3 anObject message
1)は引数とanObjectを区別するために少し細工が必要か。
(ブロック構文みたいになるかな?)
2)はmessageを直前にスタックに積まれたオブジェクト
に投げればイイだけなので実装は楽かと。
でも日本語化した時に楽しいのは1)のほうかな?
家政婦 は、
(‥‥この間100行。)
見た。
あ、助詞をうまく使えば両方の構文を実装できるやうな
気もしてきた‥‥‥。
0034デフォルトの名無しさん
NGNGなんでもないですage
0035デフォルトの名無しさん
NGNGそれはForthよりもSmalltalkに近い、という説が。
tp://isweb21.infoseek.co.jp/computer/h_yanai/html/B8E5C3D6A5ADA1BCA5EFA1BCA5C9A5E1A5C3A5BBA1BCA5B8.html
003622
NGNG似たような(たのしそうな)議論をしてますね。(^^
1)の構文のように複文かましてオブジェクトに流し込むという感覚は、
Smalltalkぽいわけですね。むー。
「スタックから何個オブジェクトもらうかはウチで決めさせてもらいますわ。」
の2)の構文のほうが確かにForthらしいか。
助詞によるパラメタのコントロールは魅力的だけど、スタック操作の実装を考えると、
オレみたいなへたれには荷が重いかも‥‥。
のんびり考えてみます‥‥。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG〜' ― (,,゚Д゚) < Forthのプロジェクト成功率は30%!!
し― し-J \___________
ttp://www.gyve.org/~jet/lang2.txt
‥‥微妙に中途半端だな。
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG004122
NGNGanObject someMessage 型のメソッド呼び出しが出来るようになりました。
↓現在こんな感じ
004222
NGNG☆ メソッド呼び出しのテスト
クラス「 2chキャラ 」は「 オブジェクト 」を継承し
『 ハァハァ: とは " ハァハァ" を 文字列表示 』
を実装する
クラス「 モナークラス 」は「 2chキャラ 」を継承し
『 話せ: とは " オマエモナ〜" を 文字列表示し 自分 が ハァハァ。 』
を実装する
クラス「 ギコクラス 」は「 2chキャラ 」を継承し
『 ハァハァ: とは " ハゥッ" を 文字列表示 』
『 話せ: とは " 逝ってよし!" を 文字列表示し 自分 が ハァハァ。 』
を実装する
モナークラス モナー
ギコクラス ギコ
単語 駄スレ { 値 -- } を
ここから
値 から 1 を 引く → 値
値 が 0 以上
ならばその間
改行し
値 を 2 で 割った余り が 1 と 等しい
ならば
ギコ が
さもなければ
モナー が
つぎに
話せ。
を 繰り返し実行する
と定義
endload
004322
NGNG10 駄スレ
逝ってよし!ハゥッ
オマエモナ〜ハァハァ
逝ってよし!ハゥッ
オマエモナ〜ハァハァ
逝ってよし!ハゥッ
オマエモナ〜ハァハァ
逝ってよし!ハゥッ
オマエモナ〜ハァハァ
逝ってよし!ハゥッ
オマエモナ〜ハァハァ
004422
NGNGなら動的束縛。
話せ: モナー
なら静的束縛です。
助詞は実は読み飛ばしてます。
へたれでスマソ。
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG見てる分にはなかなか面白いかも。
Mopsってのは知らないけど、ForthとSmallTalkの
知識のみでだいたい理解出来るし。
004722
NGNG自分でいうのもなんですが日本語化したリストを打ち込むのは正直メンドイ。
でも見た目重視なので名前付きパラメタへの代入記号が→だったりします。(w
SmalltalkはSqueakを以前ダウンロードしてみたことがありますけど、継続して
使ってみてないのであんまり知りません。
Smalltalkのメソッド呼び出しの語順を逆にしたものがMops‥‥?
0048デフォルトの名無しさん
NGNG良スレage
0049デフォルトの名無しさん
NGNG今後は新言語を発明しなかった奴にベストプログラマー賞をやれや。
0050デフォルトの名無しさん
NGNGアイヤー、Mopsはちっとも新言語じゃねぇっす。
Neonという名前の商用製品だった頃を含めればMac用開発言語の中でもカナーリ古株ですね。
マイナーだけど。
でもsage。
005146
NGNGで、Transcriptオブジェクトにshow:メッセージを、
引数'HelloWorld'で送る。
Mopsの逆になってる?Mops知らんので良くわからん。
モナーが話せ。
という事は一緒に見えるが。引数がある時は
モナーが 'Hello World' と文字列話せ。
となる、という事か?
ギコとモナーの所のスタックにあるオブジェクトの種類で多態、
ってのは面白い気もする。
でもやっぱりはやらんだろうなぁ、こういう言語は。
005222
NGNG" Hello World" show: Transcript
になります。パラメタ メッセージ オブジェクトの順。
コンパイラ部分にパッチをかましたオイラの日本語化Mopsだと
↓
クラス「 モナークラス 」は「 オブジェクト 」を継承し
『 セリフを話せ: とは 文字列表示 』
を実装する
モナークラス モナー
" Hello, world" と モナー は セリフを話せ。
=> Hello, world
みたいな感じです。
つまり、パラメタ オブジェクト メッセージ の順。
もともとのMopsの構文も生きているので、
" Hello, world" と セリフを話せ: モナー
も実行できますけど。
005322
NGNG補足すると、Mopsが、インプットストリームから切り出したワードの
最後が『:』である事から、オブジェクトに対するメッセージか否かを
判別している箇所を拡張して、最後が『。』ならスタックトップの
オブジェクトへメッセージをsendするようにコンパイルしてます。
だから、パラメタはオブジェクトより前にないとダメです。
将来的に>>33の1)みたいな構文ができると楽しいとは思います。
あと趣味でやってみてるだけなので実用性は期待してませンです。(w
005422
NGNGでもNeonの頃は単一継承で動的束縛のみだったと思う。
ドキュメントのどこかで読んだだけで直接当時を知ってるわけ
ではないけれど。
オーストラリアのおじさんが残りの仕様を付け足した。
同じNeonから別れたYerkってのもあったハズ。
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG勉強してみたいんだけど。
0057名無しさん@Emacs
NGNG十分勉強できると思うよ。
0058デフォルトの名無しさん
NGNGハゲドー
0059デフォルトの名無しさん
NGNG>将来的に>>33の1)みたいな構文ができると楽しいとは思います
ところで、実際やろうとすると、どうやればいいんでしょうね。
文法については、レシーバーをメッセージの直前や直後に置くという文法にしないかぎり
やっぱり何らかの印がないとレシーバーだと判別できないんで。
あるいはレシーバーだけ「印がない」という案もあるが。
つまり助詞案みたいに、述語は「。」が、引数は「、」が、つくので
それ以外がレシーバーだ、という案。
ちょっと読みにくそうだけど。
コンパイルしたものの動かしかたについては、どうすればいいんだろうな。
postscriptでいう「mark」のようなものをstackに積み、
ここから1つのmessage sendingが起こる、ということを
おしえればいいだろうか。つまりstackに
mark receiver param1 param2 ...
と積まれた状態でmessageを実行すると
stacktopから(最初にみつかる)markまで掘り下げて
receiver とparamを拾ってくる、という。
これできちんと動くかどうかは検証してないけど。
0060デフォルトの名無しさん
NGNG本を何冊か読んだけど途中からわからなくなります。
8ビットで遊んでみたいからforthみたいな小さい言語はぴったりだと思うのですが
逆ポーランドにいまだ馴染めません。
0061デフォルトの名無しさん
NGNGとりあえず
http://www.google.co.jp/search?hl=ja&q=forth+%93%FC%96%E5&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
普通のFORTHスレってム板に無さそう。
Mindスレが以前にあったけど、倉庫に入って久しいし。
FORTHスレの需要があるなら立ててみる?
PostscriptとかOpen Farmwareとかスタック系言語一般を扱うことにすれば、多少は人が集まるか?
006222
NGNGえ〜2つほど案があります。
文法的にはどちらも、
anObject mark1 param1 param2 paramN mark2 someMessage
になります。
1) オブジェクトスタック案
実行時にmark1がスタックトップをオブジェクト専用スタックにpushし、
mark2 がオブジェクト専用スタックからpopしてスタックトップに戻す。
2) 無名ワード案
コンパイル時にmark1とmark2にはさまれた部分を「無名ワード」(w として定義。
実行時にその無名ワードを呼び出すようにコンパイルする。
どちらにしてもmark2がないと>>42で実装した文法と混在しつつ複文に対応することが出来なかったりします。
で、mark1とmark2に助詞をあてればよいのかな?と思っていますが、
実装するヒマがありません。
0063デフォルトの名無しさん
NGNGそのmark1,mark2って、
その位置を「anObjectの後」「someMessageの前」じゃなく
「anObjectの前」「someMessageの後」に換えると、
あら不思議、Lispみたいな言語になってしまう(笑)。
語順は逆だけどね。
0064デフォルトの名無しさん
NGNGOpenFirmwareについてはちょっと関心あるなぁ。
あれってForthインタプリタなんでしょ?
それでいてブートローダ?BIOS?
…知識はないけど関心なら。(汁
0065デフォルトの名無しさん
NGNGわりとメジャーらしいですよ。
同様の理由で、ブートローダーにbasicを採用してるマシンってのも見たことがある。
Bload 0?????H : call 0?????H でlinuxがブートしたのを見たときは、さすがに笑いころげた。
同じくらい作るのが楽な言語といえばlisp系もなんだけど、
あれもブートローダーにしてる人(会社)は居るんだろうなあ。
0066デフォルトの名無しさん
NGNG> あれってForthインタプリタなんでしょ?
> それでいてブートローダ?BIOS?
BIOSというよりはブートローダですね。
FORTHを知らなくてIF文の書き方に戸惑っているデベロッパが世界中にいそうだ。
0067デフォルトの名無しさん
NGNGあぁ〜。ますますゾクゾクしてきますな。
OpenFirmwareのプロントがForthインタプリタと知り、
実際に使ってみた時、ちょっと感じるものがありましたが…
ブートローダってことはちっちゃいOSといってもいいのかなぁ。
勉強してみます。
006822
NGNGもちろん「無名ワード」はLispからのパクリです。
無名ワード案でいくと、ForthとLispとSmalltalkを多重継承して見た目が
日本語のキモい言語になる?
でも実装が面倒クサそう。
0069デフォルトの名無しさん
NGNGForth総合スレ欲しいよ。
0070デフォルトの名無しさん
NGNGここでええんでないの?
0071デフォルトの名無しさん
NGNGいまの設定ファイルは記述力が低すぎる。
0072デフォルトの名無しさん
NGNG名称の問題ですね。mops知らん人は通りぬけちゃうかも。
ここが一杯になった暁(くるのか?)には「総合スレ」の名で大々的に起こす、では
やっぱりおそすぎますかね(^^;
スレに「別名つける」機能とか「リネームする」機能とかが
あればよかったのにな。ただ、あったらあったで変に濫用するやつが
後たたなくて困るだろうけど。
007367
NGNG>名称の問題
う〜む。「オブジェクト指向『FORTH』」とは書いてますけどねぇ。
やっぱり弱いか。
>別名とかリネームとか
イイ!(・∀・)かも〜
>変に濫用するやつが
ダメ!(´∀`;)かも〜
\ OpenFirmware + FORTHで検索かけてみました。
\ とりあえず
http://www.forth.org/
http://www.openfirmware.org/
http://join.t.u-tokyo.ac.jp/fig-japan/
http://www2.osk.3web.ne.jp/~lunlumo/Prog/Forth/
http://www.kt.rim.or.jp/~tyamamot/forthj/forthj.html
\ 情報少ないっすね…
0074デフォルトの名無しさん
NGNG>>73
適当に検索してみた。よかったら参考にしてチョ
http://www2.airnet.ne.jp/sardine/complang/Forth.html
http://bishop.fuis.fukui-u.ac.jp/~nishino/hobby/prog/forth/
http://www.asahi-net.or.jp/~uw4s-wtnb/
開発環境
http://www.hoku-iryo-u.ac.jp/%7Esadakata/4th/index.html
http://home.interlink.or.jp/~s-nakani/doc/frtm-win.html
http://www.netlaputa.ne.jp/~kuno/forthmain.html
逆ポーランド
http://www.246.ne.jp/%7Etamra/stack.html
0075デフォルトの名無しさん
NGNG富士通とか日立の8ビットパソコンに移植してみたいんですけど。
あとWIN−CE用のforthがあると助かります。
0076中岡の玄ちゃん@似非ファーザー弁
NGNG>>75 「forthのコード」
ソースのことか?だったら>>73-74のリンクにあるんじゃないんかのぉ。
不思議じゃわい。もののみごとに。
0077デフォルトの名無しさん
NGNGage
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNGタイトル、Forthのcolon definitionにちなんでるのね。
ダセェ顔文字かと思ってたよ…
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNGあるんだけど、ANS Forth互換の環境で実際に試してみた人っている?
ftp://ftp.taygeta.com/pub/Forth/Applications/ANS/classM10.zip
オレのところではエラー出て止まっちゃうんだよね。
ftp://ftp.taygeta.com/pub/Forth/Applications/ANS/CLASS10.ZIP
↑こっちは動くんだけど、単一継承しかできないんだよねぇ。
0083第4番目の名無しさん
NGNGネタがあるならageようよ。(藁
漏れの所では試せません。スマソ。
>>26
パクリました。許可して。
008482
NGNGスマソ。ついクセで。
しかし最近の我が艦の深度は浅めぢゃのう。(違
>>漏れの所では試せません。スマソ。
ttp://www.forth.org/compilers.html
↑とりあえず。
GForthかpForthならたいていのプラットフォームで動くよ。
おヒマな人は試してみてね。
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNGアイゴー!
0088デフォルトの名無しさん
NGNG0089サルベジ
NGNG0090デフォルトの名無しさん
NGNG009122
NGNG>>82のリンク先のソースをベースにして今書いてます。
とりあえずCLASS10.zipのほうをもとにしているので多重継承はまだダメですが
その他の部分はそれらしく動作しているみたいです。
日本語の処理とか、いい加減にしかやってないのでハッタリもいいところですが。
たぶん明日ぐらいには公開できると思います。
GikoForthという名前にしようと思っているオイラは逝ってヨシ。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG009422
NGNGhttp://www.geocities.co.jp/SiliconValley-SanJose/4733/
ターミナルから
include giko.fth
テストプログラムは、
include dasure.fth
testと打ち込んで改行。
009522
NGNG分かち書きしなきゃいけないです。メンドイです。
pForthの場合、辞書にはUPPER処理されて登録されてしまいますが、
なんとなく動きます‥‥‥。
へたれですまぬ‥‥。
0096デフォルトの名無しさん
NGNG文字化けするYO!
009722
NGNG出力先をファイルにしてみてヨ。
でも結局、日本語を正しく扱えるANS互換FORTH処理系がないと
意味なしカモ‥‥。
pForthのソースを見ると、パーサーと辞書登録に関する部分はCで
書かれてるんだよね。
pForthはパブリックドメインなので付属のソースコードを書き換
えて日本語対応にすればいいんだけども。
MPWどこにしまっちゃったかなぁ。
0098デフォルトの名無しさん
NGNGMacOSXに移ろうYO!
NSDictionaryで一発さ!HAHAHA!
009922
NGNGソウナノカー。
でもオイラまだMacOSX持ってないのヨ。ホスィーヨォ
ってか、土曜日にうぷろーどしたソースにバグがアターヨ。(恥宇津氏
コソーリなをしたよ。
へたれでスマソ‥‥。
0100デフォルトの名無しさん
NGNG簡単な処理系キボンヌ
010122
NGNGすぐに実行できるバイナリは用意したいとは思うけれども、
今、忙しいのでかなり気長にお待ち下さい。
あとオイラにはマク用しか用意できません。
(だれかオイラにG4を‥‥iBookでもいい‥‥クレ。)
あなたがマカーならフォントパチーンをインストールして、
フォント置き換えアプリにpFORTHを指定してから、
pFORTHと同じフォルダにGiko.fthを置き、pFORTHの
コンソールから
include Giko.fth
と打ち込んでreturnキーを押せば、取りあえず試してみる
ぐらいのことは出来ますよん。
010298
NGNG>>22
MacOSXに移ろうYO!カマーン!
010322
NGNGよっっしゃぁ!Let's OS Xっ!!
‥‥とまあいけばヨシ。
>>101であんなこと書いてますが結局、MPWでビルドし直すことに今日
手を付けてしまいました‥‥。
今宵のうちに例の場所にうぷしときます。
010498
NGNGClassic捨てたし。
昔もよかったなぁ…MPWか……
010522
NGNGあぁ!そうだったノカ〜。
Classic捨ててる人もいるのねん。
いま試そうとおもったんだけど、SIOWアプリはCarbonでビルドできないみたいねぇ。(鬱
すまないが、オイラがG4を手にする日までしばらくお待ちを。
‥‥>>98が自分でOS X上にビルドすると言う手もあるゾ。(ボソッ)
010622
NGNGでもpForthをMPWのSIOWアプリにビルドし直して、
Giko.fthを自動で読み込むようにしただけ‥‥。
‥‥しかも今どきクラッシックアプリ。
‥‥‥‥‥へたれでスマソ。
010798
NGNG0108名無しさん@Emacs
NGNGがサンプルとして入っている。
ftp://ftp.forth.org/pub/Forth/Compilers/native/unix/tile-forth-2.1.tar.z
message position ( x y self -- )
message write ( self -- )
message read ( self -- )
Object subclass Point ( x y -- )
long +x ( self -- addr)
long +y ( self -- addr)
method initiate ( x y self -- )
dup >r super initiate r> position
;
method position ( x y self -- )
tuck +y ! +x !
;
method where ( self -- x y)
dup +x @ swap +y @
;
method write ( self -- )
dup super write where ." x: " swap . ." :y " .
;
subclass.end
10 10 Point instance aPoint
aPoint write cr
-10 -10 aPoint position
aPoint write cr
aPoint read
cr
こんな感じ。
0109デフォルトの名無しさん
NGNGおぉ。なんか見やすいっすな。やっと第4世代って感じですな。
ちょっと触ってみます。サンクス。age
011022
NGNGをを!
tile-forthぢゃないですか。
一応オイラもチェック入れてます。
tile-forthのoop拡張はselfを常にスタックトップに残すんでしたっけ?
011122
NGNG自分でかいといてスンマヘン。
サンプル良く見ればわかりました。
011222
NGNGGikoForthのクラッシク版はとりあえず、辞書に日本語のワードが
UPPER処理されないような修正だけしてソース付きで、>>94
のリンクの場所に置いてますです。
‥‥G4買うべく働いてます。(;´Д`)
0113デフォルトの名無しさん
NGNGtile-forthってプロトタイプベースなわけですか。
で、クラスに基づく継承もできる、と。
勉強になりました。
0114デフォルトの名無しさん
NGNG俺が知る限りUNIXプラットフォーム初のForth処理系だった。
でも、ANS標準以前の言語仕様だったような気がするなぁ。
0115デフォルトの名無しさん
NGNGソースの拡張子から想像するにFORTH-83系のようです。
まあ、FORTHは生みの親が「標準化なんてツマラン」みたいなこと
言ってるし、そのせいか、ANSはいつまでたってもドラフトのままだし。
0116デフォルトの名無しさん
NGNG尊敬してるけど、ラディカル過ぎて正直ついていけない。
COLOR FORTHとかまで逝っちゃうと、FORTHの本質って結局何?
ってなもんです。
0117デフォルトの名無しさん
NGNGColor FORTHはついてけないです。
文字コードなんか5ビットもあれば十分とか言ってるし。(;´Д`)
世の中の流れと全然逆だよう。>ムーアのオッチャン。
0118114,116
NGNGあ、でもForthチップの仕事とかは面白そうだったのだが、今どうなのだろう?
0119115,117
NGNGForthチップって良く知らなかったんですが、
ttp://www.ultratechnology.com/chips.htm
↑コレですか?
使われてるのかなぁ……??
0120デフォルトの名無しさん
NGNGHarrisのRTX-32とかは航空宇宙分野で結構使われたようです。
大昔にNovix NC4000のアーキテクチャに感動したことがあるんです。
パラメタスタックとリターンスタック専用データバスがあったり
一機械語中にFORTHのワードが複数埋め込まれててなかなか速そう。
0121デフォルトの名無しさん
NGNG> HarrisのRTX-32とかは航空宇宙分野で結構使われたようです。
かっちょエエ〜!
さすが組み込みに強いFORTH(藁
0122デフォルトの名無しさん
NGNGう〜ん。インスタンス変数の内容をとってくるために毎回selfから計算し直す
のはメンドクサイ気がしますが‥‥‥。
0123デフォルトの名無しさん
NGNG>>108のコードを説明してくれないかなあ・・
0124デフォルトの名無しさん
NGNG遠い昔、「標準FORTH」(だったと思う)を読んで、自分でも
8bitパソコン上にFORTHを実装しかけたことがあるんですが、
インナーインタプリタのコードを書きながら、
「最初からCPUがindirect threaded codeを解釈すりゃいいのに。」
と思ったものです。
FORTHマシンは実在していたんですね。ええモンを拝ませてもらいました。>119
0125デフォルトの名無しさん
NGNG「(」と「)」に挟まれた部分はForthではコメント扱いだけど、
あるワードの操作によってスタックの状態がどう変化するか、
ということをあらわすのに伝統的に使われる。
( a b -- c )
とあったら、スタックトップ(TOS)のbとそのひとつ下のaが操作に
使われ、cという値がTOSに返る、という意味。
@ ( addr -- n )
addr番地のメモリの内容をTOSに返す。
! ( n addr -- )
addr番地のメモリへnを書き込む。
dup ( n -- n n )
TOSを複製してスタックに積む。
swap ( a b -- b a )
TOSとその次を入れ替える。
tuck ( a b -- b a b )
TOSを2つ下に複製する。
>r ( n -- )
TOSを取り出しリターンスタックに積む。
r> ( -- n )
リターンスタックのトップの内容を取り出してパラメタスタックへ積む。
0126125
NGNGx y self
となっているけど、tuckが実行されると、
x self y self
という状態になる。次に+yが実行されると、
x self y addr
になって次の!でaddr(+yに相当するインスタンス変数のアドレス)に
yが書き込まれてスタックは
x self
ここで+xが実行されると
x addr
になって、次の!でaddr(+xに相当するインスタンス変数のアドレス)に
xが書き込まれて無事終了。(ふー。)
whereメソッドその他は省略します。(w
つまり、>>122のいうようにtile-forthのoop実装では、+xや+yは
毎回TOSのselfにオフセット値を足して実際のインスタンス変数の
アドレスを生成していると考えられるわけです。
ちと面倒か? Forthらしいといえばそうかもしれませんが。
0127デフォルトの名無しさん
NGNGアンタ…アンタ最高や!めっさ最高や!
125ワッショイ! 125ワッショイ! 125ワッショイ!
0128デフォルトの名無しさん
NGNGま、祭りか? (w
かつて年季の逝ったForthプログラマはメモリ上の変数をなるべく使わず、
複雑な処理を様々なスタック操作を駆使して実現することに血道をageた
と伝えられます。
そーいったコードは、呪文のようにしか見えず一般のプログラマをForthから
遠ざける原因になったとも伝えられます。
0130デフォルトの名無しさん
NGNGというかローカル変数ってあるの?
0131デフォルトの名無しさん
NGNG> なんでスタックだけで?
伝統的なForthのスタイルには局所変数が存在しないからです。
>>130
>forthのスタックって、相対アクセスはできるの?
スタックはスタックトップにしかアクセスできないが故に
スタックなのですぅ。
> というかローカル変数ってあるの?
>>129への回答に同じ‥‥‥ということでおしまいにしようか
とも思いましたが、実は最近のForthはローカルな変数も定義で
きます。また名前付きパラメタなどというForthらしからぬ機能も
あります。
0132デフォルトの名無しさん
NGNGワッショイ!ワッショイ!ワッショイショイ!!
0133131
NGNG: test { a b | c -- } a b * -> c c . ;
3 2 test
6 ok
「{」が名前付きパラメタの宣言の開始で、「a」と「b」が
スタック上の二つの数値に割り当てられる。(この場合aが3でbが2)
「|」以降「--」まではローカル変数の宣言部。
この場合cというローカル変数が一つ宣言されていることになる。
値を取り出すのは変数名を書くだけ。
代入は「->」という前置オペレータを使う。
ちなみに「.」はスタックトップをコンソールに数値表示するワードね。
Mopsも「|」が「\」という違いはあるけど同じ機能を持っている。
たぶん最近のForth処理系は相当する構文を持っていると思う。
0134デフォルトの名無しさん
NGNGスタック上に領域を確保して名前を付ける仕掛けを作ることは
できますね。
あと CONTEXT の VOCABULARY を切り替えるとかして変数の
セットを入れ替えるとかで代用可能かも。
VOCABULARY の機構って、ディレクトリに格納されたコマンドが
実行パスから検索されて実行されるのに似ている。
Forth の重要な機能一つだと思うのだが、あまり語られない。
8bitマイコン向けに作られた Forth だと、この仕掛けが省略されて
いたりしてずいぶん萎えたよ。
0135デフォルトの名無しさん
NGNGかろうじて思い出しました。辞書のリンクがツリー状になってるような
イメージでしょうか?
昔読んだ本の中のForthはそういう機能を持っていたような。
ああヤパーリ、ムーアのおっちゃンは偉大やったんやなぁ。
0136デフォルトの名無しさん
NGNG> ああヤパーリ、ムーアのおっちゃンは偉大やったんやなぁ。
時々奇妙奇天烈な事をお言いになりますが。
0138デフォルトの名無しさん
NGNG探索できなかったと思う。
Forth 社の処理系は現在の ANS 仕様に近い強力な機能を持ってたみたい。
0139デフォルトの名無しさん
NGNG天災となんとかはカミ一重と昔からいいますし‥‥。(w
強烈な個性の持ち主であるn
0140139
NGNG強烈な個性の持ち主であるのは確かですね。
0141デフォルトの名無しさん
NGNGForthの処理系って微妙な方言がありましたよね。
ANS の CREATE DOES> に相当するワードなんかは、
FIGとかFORTH 83とかで全然違ったよーな。でもあまり覚えてないから
不確かですが。
0142134=138
NGNGFIG のやつは同じ事をするのにトリッキーでダーティな方法使ってた気がする。
やっぱり詳細は忘れてるので聞かないで頂戴な。
0143デフォルトの名無しさん
NGNGForth の処理系って微妙どころか方言の嵐じゃないの。
カッコでくくってリスト処理すればなんでも Lisp、
ワードを並べてスタックに入れればなんでも Forth
ってように。
0144134=138=142
NGNGForth のプログラミングってのは、その目的専用の新しい言語を
デザインするような作業だから、自由度さえ高ければ方言自体は
あまり問題にならないと思います。
0145141
NGNG組み込み済みのワードとユーザー定義のワードに差が全くないという方面では
Lispも似たような感じですね。Lispはワードとは言わないけれど。
>>144
自分専用のワードを作っていくと、新しい言語を作っているような気分になって
きますね。そこがグっとくるところ。
0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNG深夜になると、上がるのね。
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGRECURSEっていうワードを使うよん。
フィボナッチ↓
ttp://bishop.fuis.fukui-u.ac.jp/~nishino/hobby/prog/forth/fib-com.fs
FORTHはすでに存在するワードの再定義が可能なんだけど、再定義の中で
再定義する前のワードを呼び出せるように、(オーバーライドしている
メソッド中でスーパークラスの同名メソッドを呼び出す所を想像すれば良い
かと思われ)定義中のワードが辞書探索でヒットしない代わりにすでに定義
されている同名ワードがヒットするようになっている。
ヒットしない自分自身の代わりに使われるのがRECURSEというワードなわけです。
ちなみにMopsは一応、末尾再帰の最適化をやってるみたい。
0150デフォルトの名無しさん
NGNG>>149
なるほど。
それを実装してみようと思うんだけど、
自分自身へのポインタを返すってことでいいのかな?
0151149
NGNG内部インタプリタがindirect threaded codeを解釈するpForthの場合、
RECURSEのワード定義は↓
: RECURSE latest name> compile, ; immediate
latestは辞書の最新のエントリのネームフィールドアドレスをスタックに返し、
name>がそれを実行アドレスにしてcompile,が書き込みをやってる。
immediateワードなのでコンパイル時にこれらの作業が行なわれて、実行時には
普通ののワード呼び出しと変わらない形になってる。
でもこれ末尾再帰の最適化はしてないね。
Mopsの場合はネイティブコードコンパイラで、末尾再帰、末尾呼び出しなどの
最適化をごりごりやってるものだから、RECURSEの実装は複雑怪奇ですなぁ。
アセンブリコードの書き換えをやってるのかな?(PowerPCの機械語なんて知らないよぅ。)
RECURSE自身はやはりimmediateなワードです。
結局ただのジャンプ命令にコンパイルされる模様。
0152デフォルトの名無しさん
NGNG>>149
なるほど。盛れも今forth系の言語1つ作ろうと思っているんだけど、
recurseとかsuperとかをどう実装すりゃいいか迷っていたんで、
それ参考にさせてもらいますです。
0153デフォルトの名無しさん
NGNGNeon/Yerk/Mopsの場合は、隠れたインスタンス変数としてsuperと
selfをオブジェクトは持っているというトリックを使ってるね。
ttp://www.zetetics.com/bj/papers/oofs.htm
↑ちと古いけどコレまで実装されたOO Forthの比較ページ。
参考にしてみるとおもしろいかも。
ここに載ってないGForthとかのOO拡張の一つにはインターフェースとかも
取り入れられているみたい。
あんまり真面目に調査してないので詳細はわからないけど。
いずれにしてもForth自身でOO拡張を記述できてしまうのがForthの良い所
でもあり悪い所でもあり‥‥‥。
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNGう〜ん、漏れ的にはOOのないForthをもう使いたくない。Forthの良くないところは、
スタック上のデータの型によって異なったオペレータを使用しなければならないところ
だとオイラは思ってる。
OOがあると多態が使えるので型(=クラス)が違っていても同じメッセージを送る事が
できる。だからForthの欠点を補う事ができると思うんだよね。
0156デフォルトの名無しさん
NGNGForthでOO拡張を書く事による実行効率の話だとするとNeon/Yerk/Mopsのモデルは、基本的に
静的束縛なのでOOなしのForthと比較してさほど変わらないとおもう。
動的束縛を明示的に行なう場合には8方向リストとハッシュの組み合わせでメソッドの検索が
が行なわれる。(CLASS10.zipでの実装方法)
ポインタ参照が少し増えるぐらいのオーバーヘッドだと思われ。
0157デフォルトの名無しさん
NGNGソースの字面的には Smalltalk や CLOS 程度の使い勝手のものは
作れると思う。
本当は、デファクトのForth-OOパッケージがあるといいと思うけど。
0158デフォルトの名無しさん
NGNG>>155
少なくともoop好きな漏れとしては禿同。
親戚のPostScriptでいうところのポリモルフィック オペレータって考えかたですね。
ハードとかをゴリゴリいじるためには型情報を無視してプログラマが手作業で
データの意味を把握するほうが良いこともある(Cでおなじみ)けど、
その場合以外はデータ自体が型(つまりメッセージの解釈方法)について
自己主張してくれるほうが、コーディングが楽です。
>>156
不勉強ですまそ。8方向リストって初耳なのですが、どういうものですか?
双方向じゃなく?
8方向にポインタ(参照)がつながってるリストって、
リストというよりもハイパーネットワーク構造みたいで凄くないですか?
0159デフォルトの名無しさん
NGNG>>158
単にクラスの持つハッシュのテーブルの大きさが8というだけです。
英文で8way linkea listとあったのでつい書いてしまいましたがまずかったですね。
なんとなく「Forth系言語を自作しようスレ」になっていますね・・・。
0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNG演算子についてはなんとなくわかるんだけど、
構文はどうなるの?
0162デフォルトの名無しさん
NGNG制御構文のこと?forthの場合、
(条件) IF (真のとき) ELSE (偽のとき) THEN
(終値) (開始値) DO (ループ処理) LOOP
BEGIN ( 永久ループ) AGAIN
BEGIN (ループ処理) (条件) UNTIL
BEGIN (条件) WHILE (ループ処理) REPEAT
標準的なのはこのくらいかな?
0163デフォルトの名無しさん
NGNG制御構文のどのワードもimmediateつまりコンパイル時に即実行される。
後方へのジャンプはマーク時にアドレスをスタックにつんでおく。
BEGIN ←マーク
AGAIN ←スタックからアドレスを取り出しジャンプ命令を生成。
前方へのジャンプはジャンプ命令をとりあえずコンパイルしておき、
アドレスを書き込むべきアドレスをスタックにつんでおく。
IF ←条件ジャンプ命令を生成し書き換えアドレスをスタックに積む。
THEN ←スタックからアドレスを取り出し現在のアドレスを書き込む。
ジャンプと条件ジャンプはプリミティブで残りのワードはForth自身で実装できるよ。
0164デフォルトの名無しさん
NGNG>(条件) IF (真のとき) ELSE (偽のとき) THEN
って、本場の人が見てもなんか変だと思いますよね?
syntaxだけ普通にif (条件) then (真のとき) else (偽のとき)
に出来なかったのかな。
BEGINは前に書くんだし。
0165デフォルトの名無しさん
NGNGたった3行でお望みの構文に変更できるyo。
: ENDIF postpone THEN ; immediate
: THEN postpone IF ; immediate
: IF ; immediate
これで、
IF (条件) THEN (真のとき) ELSE (偽のとき) ENDIF
↑この構文に変更できる。これはマクロみたいなコードだけど、他にも
Forthは制御構文を好きなように自作可能だよん。
0166デフォルトの名無しさん
NGNGそれだと標準のライブラリとか読み込む時に問題になるから、
: }ENDIF postpone THEN ; immediate
: }THEN{ postpone IF ; immediate
: }ELSE{ postpone ELSE ; immediate
: IF{ ; immediate
とかにしたら?
0167デフォルトの名無しさん
NGNGできる?
0168デフォルトの名無しさん
NGNGていうかたいていのForthはCase insensitiveなので小文字で書いて可。
>>166の定義で
if{ 条件 }then{ 真の時 }else{ 偽の時 }endif
と書けるYO。
0169167
NGNGforth使ってみる。
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNGFORTH = IF
" ハァハァ"
ELSE
" フーン"
END
;
0173デフォルトの名無しさん
NGNGんが とっ と
0174デフォルトの名無しさん
NGNGFORTH = IF
" ハァハァ"
ELSE
" フーン"
THEN \ ←ENDぢゃないぞ。
;
0175デフォルトの名無しさん
NGNGdup 2 < if drop 1 else dup 1- recurse swap 2 - recurse + then
;
0176172
NGNGスマソ。普通のFORTH使ったこと無いんで間違えました。
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNG我 君 許
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG一応できるみたいね。使った事ないけど。
http://ficl.sourceforge.net/ficl_oop.html
0184デフォルトの名無しさん
NGNGPerlの上を行ってるな〜
なんでも突き通せは思想なのかもなあ。
なんか関数型を使ったあと使うとめまいがしそうだ。
#FORTHに悪意のある書き込みではないので念のため。
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGおれスタック操作怖くてできない。
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGえ〜と、Mac用のフリーソフトを作ったことならあります。
でも普通のアプリケーション開発にFORTHを使う人は大変めずらしいと思いマスです。
Open FirmwareとかOpen Bootとか向けにFORTHで書かなければならなくなった
デバドラ屋さんは結構いるかも知れませんが職業プログラマじゃないので知りません。
スタック操作は慣れると不定個の返り値をもつ関数とか引き数としてスタックに積んだ
値を使っても使わなくても良い多態とかトリッキーなコードを書いてしまうという
両刃の剣。でも面白いですよん。
0192デフォルトの名無しさん
NGNGよりわずか12行のOOP拡張
: method ( m v -- m' v ) Create over , swap cell+ swap
DOES> ( ... o -- ... ) @ over @ + @ execute ;
: var ( m v size -- m v' ) Create over , +
DOES> ( o -- addr ) @ + ;
Create object 1 cells , 2 cells ,
: class ( class -- class methods vars ) dup 2@ ;
: end-class ( class methods vars -- )
Create here >r , dup , 2 cells ?DO ['] noop , 1 cells +LOOP
cell+ dup cell+ r> rot @ 2 cells /string move ;
: defines ( xt class -- ) ' >body @ + ! ;
: new ( class -- o ) here over @ allot swap over ! ;
: :: ( class "name" -- ) ' >body @ + @ compile, ;
0193192
NGNGクラス定義
object class
cell var text
cell var len
cell var x
cell var y
method init
method draw
end-class button
メソッド定義
:noname ( o -- ) >r
r@ x @ r@ y @ at-xy r@ text @ r> len @ type ;
button defines draw
:noname ( addr u o -- ) >r
0 r@ x ! 0 r@ y ! r@ len ! r> text ! ;
button defines init
継承
button class
end-class bold-button
: bold 27 emit ." [1m" ;
: normal 27 emit ." [0m" ;
:noname bold [ button :: draw ] normal ; bold-button defines draw
インスタンスの生成とメソッド呼び出し
button new Constant foo
s" thin foo" foo init
page
foo draw
bold-button new Constant bar
s" fat bar" bar init
1 bar y !
bar draw
0194デフォルトの名無しさん
NGNGクラス定義はおおっ!って感じだけど、
メソッド定義以降、わけわからんのでガクゥ・・
このへんから
>:noname ( o -- ) >r
>r@ x @ r@ y @ at-xy r@ text @ r> len @ type ;
>button defines draw
forthの日本語の仕様書/規格書ってオンラインで無いですか?
例えば、193のコードを動かすには最低限、どのレベルの規格に準拠している
必要がある、とか。
なんだかその辺が混沌としてるイメージがあって、
なかなか取っ掛かかれないのれす。
0195192
NGNG>>192のOO拡張コード自体はANS Forth上で動作します。
pForthでクラス定義が可能な事を確認しました。
GForthのライブラリには上記コードがOO拡張パッケージの
一つとして付属しているみたいです。
‥‥ANS Forthの日本語仕様書はWebで見かけた事がないですねぇ。
0196デフォルトの名無しさん
NGNG:noname は無名ワードの定義開始ワードですぅ。セミコロンまでの部分がコンパイルされますが、
通常のコロン定義と違って特定のワードにバインドされません。
その代わりに実行アドレスがスタック上に残ります。ANS Forthが標準で持っているワードです。
( から )まではコメントです。
>rはパラメタスタックのトップをPOPしてリターンスタックにPUSHするワードです。
メソッド呼び出し時のパラメタスタックのトップにはオブジェクトが積んであるはずなので、
オブジェクトをリターンスタックのトップに移したということです。
r@はリターンスタックのトップを複製してパラメタスタックにPUSHするワードです。
リターンスタックのトップに積んだオブジェクトは保持されたままです。
つまりこの文脈ではr@はselfに相当しているわけです。
r@ x @
でインスタンス変数xの内容をパラメタスタックに積む、という動作になります。
at-xyはカーソル位置を移動するワード(たぶん)。r>はリターンスタックのトップをPOPして
パラメタスタックにPUSHします。リターンスタックをワードが呼ばれた時の状態に戻しておかない
と暴走します。(゚∀゚)
セミコロンで定義が終了したあとのスタックトップには先ほど定義した無名ワードの実行
アドレスが残っていますから、それをbuttonクラスのdrawメソッドにバインドするのが
button defines draw
の部分です。
0197デフォルトの名無しさん
NGNG今までのお話だと、
リターンスタック
パラメタスタック
だけですか?
単に「スタック」というと、どれのことですか?
0198デフォルトの名無しさん
NGNG伝統的にはパラメタスタックとリターンスタックの二本ですが、流れ制御用のスタック
を持っていたり、float型専用スタックを別に持っている実装も存在しますね。
0199デフォルトの名無しさん
NGNGなるほど。ありがとうございます。
分けるのはやっぱり効率良いからですかね。
0200デフォルトの名無しさん
NGNG> 分けるのはやっぱり効率良いからですかね。
そうですね。パラメタとリターンアドレスが混在してしまうと、スタック上のデータの
操作が複雑になってしまいますし。
流れ制御用スタックについても同様な理由のようです。
float型は精度や実装によってスタックの1cellのサイズが通常の整数型と異なる
場合があるというのが理由かと思われます。
0201デフォルトの名無しさん
NGNG: :method :noname postpone >r ;
: ;method postpone r> postpone drop postpone ; ; immediate
: self postpone r@ ; immediate
: get @ ;
: set ! ;
↓使用例。ちょっとだけ見やすい?
object class
cell var x
cell var y
method init
method print
end-class point
:method ( x y -- )
self y set
self x set
;method point defines init
:method ( -- )
self x get .
s" : " type
self y get .
;method point defines print
point new constant foo
10 20 foo init
foo print
0202デフォルトの名無しさん
NGNG116で「FORTHの本質」という言葉が出てきましたが、
「仮想マシンのアセンブラであり、かつ構造化言語」というのがFORTHの本質だと思っています。
「オブジェクト指向FORTH」の名前で
「仮想マシンのアセンブラであり、かつオブジェクト指向言語」
つまり、チップが作り得るものを想像します。
0203デフォルトの名無しさん
NGNG+ 激しく電波 +
0204デフォルトの名無しさん
NGNGオブジェクト指向拡張部分をROMに焼いてチップ上に乗っけちゃえば
それっぽく見える代物になるか?
デムパっぽいな〜。
Color Forthもデムパっぽいけどナ〜。(´Д`)
0205デフォルトの名無しさん
NGNGこのスレの稼働率とは思えない
0206デフォルトの名無しさん
NGNG忘れた頃に上がるナリ。このスレの特徴ナリ。
http://hoge.s7.xrea.com/tiki/tiki.cgi?c=v&p=Forth
↑ム板 2ch TikiのForthのページ。ネタがあったら追加して欲しいナリ。
‥‥‥誰かPostscript、教えてホスィなり。
0207202の名無し
NGNG0208デフォルトの名無しさん
NGNGJava や Smalltalk のVMとか、Lispチップとかそんな感じじゃないかな。
Mops チップありでしょう。需要はないけど。
0209デフォルトの名無しさん
NGNGforthで一般的なやつって無いですか?
0210デフォルトの名無しさん
NGNGLispのmapに相当するような汎用イテレータですか?
素のままのForthではスタックへのアクセス以外はメモリへのダイレクトな
アクセスのようなものなので、「汎用的なイテレータをこなすワード」というよりは
汎用的なアクセサをもつ抽象化された「データ構造」自体が存在しないような‥‥‥。
いや、スタックがあった‥‥‥(´Д`)
Mopsの場合はクラスライブラリでイテレータ関連の機能に対応してるかな。
sequenceクラスのインターフェース(多重継承とかで)を持っていれば、
BEGIN each: <obj> WHILE <do something to the element> REPEAT
みたいなことは出来ます。
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG0 value SavedDepth
: (( depth -> SavedDepth ;
: )) depth SavedDepth - ;
: map ( P1...Pn n xt -- Q1...Qn n )
over >r >r
BEGIN dup 0 > WHILE swap r@ execute r> r> rot >r >r >r 1 -
REPEAT
drop r> drop r@
BEGIN dup 0 > WHILE r> r> -rot >r 1 - REPEAT
drop r> ;
0214213
NGNG・スタック上に一次元配列を作る。
(( 1 2 3 4 5 ))
各要素の後に要素の数をスタックに積んだ状態になる。
上の例だとスタックの状態は: 1 2 3 4 5 5
・配列の要素一つに対する操作用ワードを定義する。
: e++ 1 + ;
↑上のe++はスタックトップの値を1だけ加算して返す。
(( 1 2 3 4 5 )) ['] e++ map とすると、
(( 2 3 4 5 6 )) がスタックに返る。
: countUp ['] e++ map ;
と定義すれば、 (( 1 3 5 7 )) countUp で、
(( 2 4 6 8 )) がスタックに返る。
0215デフォルトの名無しさん
NGNG貴様それで何をたくらんでいる!?
まさか・・・世界征服かっ!?
0216デフォルトの名無しさん
NGNG世界征服はJava VMにまかせた!!(゚∀゚)
0217デフォルトの名無しさん
NGNG和んだ。
ていうかさ、変数使わずにスタックだけでガシコンガシコン
プログラム組んだら、何がよくなるの?
0218デフォルトの名無しさん
NGNG局所性‥‥かな?
0219デフォルトの名無しさん
NGNG: mapl ( P1...Pn n xt -- Q1...Qn n )
swap dup >r
BEGIN dup 0 > WHILE rot r> swap >r >r 1 - REPEAT
drop r@ swap >r
BEGIN dup 0 > WHILE r> r> r> -rot >r dup >r execute swap 1 - REPEAT
drop r> drop r>
;
サンプル↓
: dspNum ( n -- n ) dup . ;
: tpl ['] dspNum mapl ;
と定義した時、
(( 1 2 3 4 5 )) tpl
で、
1 2 3 4 5
と表示される。
0220デフォルトの名無しさん
NGNGForthタン萌え
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNG18人エントリー中の9位であーる。
9位入賞と言ってくれ。
でないと泣く。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNG#define cmdin ">>"
#define stksize 256
022622
NGNGCocoaがまだ良く分からないので、Standard Toolでもって、
ターミナルから動くようにだけしてみたヘタレです‥‥‥。
http://www.geocities.co.jp/SiliconValley-SanJose/4733/
‥‥‥‥‥‥寝る。
0227202の名無し
NGNG022822
NGNG>>227
Smalltalkのようにすべてがオブジェクトな世界なら、その方が美しくてイイ気がします。
‥‥‥Forthのことは忘れて一から独自言語にしてしまいますか。
比較演算子がスタックの上にbool型のオブジェクトを生成すればいいのかな?
でifTrue;メッセージをsendするという具合に。
手続きオブジェクトがレシーバになるという実装もアリかも‥‥‥。
‥‥‥でも実装の手間の割に効率は良く無さそうなのでヤル気が萎えるです。
アリモノのif else thenでいいぢゃん、とForthプログラマとしては考えてしまいます。
でもライブラリとかのコードを書くときには、簡潔で見栄えの良い表記になるかも。
(実装というかコード記述が楽になるのはこのレベルに達したときですよね。)
ところで、手続き渡しをしたいときにForthプログラマは伝統的に、
['] someWord
みたいな感じで、あるワードのエントリをスタックに積んでおいて、適当な時に
executeしていたわけですが、もう少し真面目にブロッククロージャに相当するモノを
実装するというのはイイかもしれないです。
022922
NGNG書けるようにしてみますた。
クラス「 ギコハニャ〜ン 」は「オブジェクト」を継承し
『 話せ: とは"逝ってよし"を文字列表示し改行』を実装する
クラス「 ギコフッサール 」は「ギコハニャ〜ン」を継承する
ギコハニャ〜ン ギコ
ギコフッサール フサフサ
ギコが話せ。
フサフサが話せ。
みたいに。
内部的には非分かち書き→分かち書きの処理をかましただけなんですけど、
該当部分はGikoForth自身でGiko.fth内に書いてあるので、Project Builderを
持ってなくてもGikoForth自身でいじって遊べまふ。
>>226のリンク先にうぷしてあるので、存分にいぢって下ちい。
0230202の名無し
NGNG条件分岐の構文としては
条件成立時の手続き 条件不成立時の手続き 条件判定手続き ifメッセージ
(条件成立時の手続き、条件不成立時の手続き、条件判定手続きをスタックに積んで、
スタックトップの手続きオブジェクトがifメッセージを受け取る)
と言うものを考えていました。しかしこれで二つの条件分岐をネストすると
後から実行される条件判定が前に来てしまいます。
先に実行されるものが先に記述される上手い構文があるか、
それともこれこそオブジェクト指向FORTHらしい構文と思うか、
もう少し考えてみます。
023122
NGNG_{ ." true" } _{ ." false } _{ c true = } :if
上のような文法を持つ架空スタック言語があったとして、
_{ ." true1" } _{ ." false1" } _{ c1 true = }
_{ ." true2" } _{ ." false2" } _{ c2 true = } :if :if
c1,c2共にtrueの時こういう風に実行しようとすると、
true2
true1
という順序になってしまうということでしょうか?
自然です。‥‥それでこそスタック。
と、いう冗談は置いておいて、
_{ ." true1" } _{ ." false1" } _{ c1 true = } :if
_{ ." true2" } _{ ." false2" } _{ c2 true = } :if
のように単純に並列ではダメなのですか?
02331
NGNGif c1 then
if c2 then true2 else false2 endif
else
else1
endif
と言うケースではc1の判定の後にc2の判定が行われますが、
_{
_{ ." true2" } _{ ." false2" } _{ c2 true = } :if
} _{ ." false1" } _{ c1 true = } :if
とc2が先に来てしまうと言うことです。
023422
NGNG了解しました。そういえばネストって書いてありましたね。(恥
実行順序は正しくても人間の思考の流れと記述が逆転するので
プログラムしづらいと‥‥‥。
では………
_{ c true = } _{ ." true" } { ." false" } :if
という構文にすれば、
_{ age 30 < }
{
_{ age 16 < } _{ ." タイーホ" } _{ ." ウマー" ) :if
} _{ ." マズー" } :if
となって条件の判定の順序が人間の思考と近いかもしれないですね。
_{ c true = } _{ ." true" } :ifTrue
_{ c true = } _{ ." false" } :ifFalse
という構文もあるとイイかもしれません。
制御構文はそもそも手続きに対するメッセージだと言う感じもしますし。
0235202の名無し
NGNGという構文では、:ifメッセージのレシーバは_{ ." false" }ですか。
それとも:ifメッセージは常にスタックの
二つ奥に送られると言うことでしょうか。
023622
NGNG_{ ." false" } がメッセージを受け取ればいいと思うんですけど。
どんなものでしょう?
023722
NGNG下のIF文は同じ構文になるようにしただけの似非実装でOOではないです。
(そもそもGikoForthにはまだオブジェクト以外の標準クラスがないので。)
道具が揃ったらオブジェクトでラップしようと思いまふ。
バイナリとソースは今晩うぷします。たぶん。
☆ アルファベットでの表記の例
: test { age | func -- }
:[ bl emit age . cr ]; -> func
age 30 <
:[ age 16 <
:[ ." タイーホ" func call ];
:[ ." ウマー" func call ]; :if
];
:[ ." マズー" func call ]; :if
;
☆ 日本語風表記での例
単語 検査 { 年齢 | 年齢表示 -- } を
【空白を一文字表示し年齢を数値表示し改行する】→年齢表示
年齢が30より小さいとき
【年齢が16より小さいとき
【"タイーホ"を表示し年齢表示を呼び出す】を
そうでないとき
【"ウマー"を表示し年齢表示を呼び出す】を
を選んで実行
】
そうでないとき
【"マズー"を表示し年齢表示を呼び出す】を
を選んで実行
と定義
0238デフォルトの名無しさん
NGNG0239202
NGNGこのばあい_{ ." false" }では
どのようなメソッドを実行したらよいのでしょうか。
Smalltalkではtrue(false)クラスではtrue(false)の場合の手続きだけを実行する
と言う風にしていますが、上手いメソッドが思い付きません。
024022
NGNGoProc oBool :ifTrue
oProc oBool :ifFalse
というメソッドが既に存在していれば、
:m :if ( oBool oProcT -- )
self -rot over
:ifTrue
:ifFalse
;m
こんな感じで良いのではないでしょうか?
-rot ( a b c -- c a b )
over ( a b -- a b a )
というスタック操作ワードを使用していますが。
024122
NGNG0242デフォルトの名無しさん
NGNGForthの構文ってきれいだね。
おもしろそうだな。
0243デフォルトの名無しさん
NGNGover :ifTrue
self swap :ifFalse
でもいい?
0245202の名無し
NGNGこれなら表でこの構文を使う方が好みです。
024622
NGNGあくまでもオブジェクトにこだわった実装の場合のシンタックスシュガー
ってことで。てへへ。
自分がやるときはFORTHのプリミティブ使って手続きクラスに直接実装しちゃうと思います。
024722
NGNGいちおうあげときます。
0248デフォルトの名無しさん
NGNG説明されても、やっぱりわけわからん。
おれには一生理解できないのか。
024922
NGNGわかりにくくてスンマソン。(T-T)
ローカル変数を使って、
:m :if { oBool oProcT -- }
oProcT oBool :ifTrue
self oBool :ifFalse
;m
でもよかったんだけどそれじゃ身も蓋もないと思ったので‥‥。
スタック操作は確かにわかりにくいと思います。自分も書くときはすぐに
ローカル変数を使って楽をします。
話は変わりますが、ブロックが前にくるタイプのif文のオブジェクトの
スタック上の順番をどうするのが良いか、もう少しいろいろと議論した方が
良いのかもしれませんね。
025022
NGNGhttp://www.geocities.co.jp/SiliconValley-SanJose/4733/
ブロックを使った例外処理とローカル変数を含む四則演算の中置記法の処理を
実装しまひた。
:[ 2 throw> ]; >catch
とか
i[ A^2+2*A+1 ] -> B
とか書けます。
あと地味な拡張として、アルファベット表記の動的束縛はこれまでは
anObject message: []
と書いていましたが、日本語表記との対応を考えて、
anObject ::message
とも書けるようにしまひた。
今度はかなり長く放置することになると思います。
‥‥‥‥寝る。
0251デフォルトの名無しさん
NGNGあげ。
0252ムーア
NGNG025322
NGNGいつもメンテしてくれてありがとん。
GikoForth : http://www.geocities.co.jp/SiliconValley-SanJose/4733/
なんだかんだでやっぱり気になるので、また手を付けてしまいました‥‥。
オブジェクト拡張を>>82のclassM10ベースに移行しました。
というわけで多重継承可になりました。
動的束縛しまくるGikoForthの場合、多重継承ベースのクラス構成だと、
遅くてたまらんとオモタのでスーパークラスを持てずインスタンス化
できないmix-inモジュールを定義できるようにしまひた。
非分かち書き拡張部にでっかいバグがあったので潰しました。
そのためすこし構文が変更になりました。
あー今度こそヤメルぞ‥‥‥。
0254コピペですまん
NGNG★ クラスの定義
クラス「じゃんけんモナー」は<オブジェクト>を継承し
☆ メソッドの定義
『手: ( -- 手 ) とは
3までの乱数に1を足す』
『表示: { 手 -- } とは
手が1と等しいならば"ぐー"を表示つぎに
手が2と等しいならば"ちょき"を表示つぎに
手が3と等しいならば"ぱー"を表示つぎに』
『じゃんけん: { | 相手の手 モナーの手 -- } とは
ここから
"なにをだすモナ? 1:ぐー 2:ちょき 3:ぱー それ以外:やめる"を表示し改行
数値入力→相手の手
自分の手。→モナーの手
相手の手が0以下相手の手が4以上のどちらかならば逝ってよし
つぎに
"あなたの手:"を表示し相手の手を自分で表示。改行
"モナーの手:"を表示しモナーの手を自分で表示。改行
モナーの手と相手の手が等しいならば
"引き分けモナ"を表示し改行
さもなければ
モナーの手から相手の手を引き1と等しい
モナーの手から相手の手を引き-2と等しい
のどちらかならば
"あなたが勝ったモナ"を表示し改行
さもなければ
"モナーが勝ったモナ"を表示し改行
つぎに
つぎに
を再び繰り返し』
を実装する
★ 「じゃんけんモナー」クラスのインスタンス「モナー」の生成
じゃんけんモナー「モナー」
☆ 「モナー」インスタンスの「じゃんけん」メソッドを起動
モナーとじゃんけん。
0255デフォルトの名無しさん
NGNG0256デフォルトのムーアたん
NGNG025722
NGNG>>256
ムーアたん‥‥(;´Д`)ハァハァ
GikoForth : http://www.geocities.co.jp/SiliconValley-SanJose/4733/
更新しますた。
Objective-CのCategoryぽいものを実装。
インスタンス変数は追加できないところがCategory風(?)。
(ところでアスペクト指向ってなんすか?)
JTerminalを使用するにはデヴェツールでビルドが必要なことに
いまさら気が付いてFinderから起動することのできるGikoForthX
アプリケーションをでっちあげますた。
これでようやく本当にデヴェツール持ってなくてもお試しできます。
025822
NGNGライセンスってどうするべきなんでせう??
pForthはパブリックドメイン。
classM10とBNFパーサーはライセンス不明。
たぶんパブリックドメインのような気がします。
(Forthコミュニティの伝統??嘘かも。でもMopsもPDSだし。)
GikoForthはGPLにすべきなんだろうか?
パブリックドメインでもいいのかな?
迷ってます。
あとターミナル版GikoForthは他のUNIX系OSでもコンパイルし直すだけで
そのまま動作するような気がします。
‥‥‥‥‥makeファイルってなんすか?(T-T)
0259ダミー・ムアー
NGNG>ライセンスってどうするべきなんでせう??
全部自分で作れば即解決。ガンバ!
>迷ってます。
全部自分で作れば即解決。ガンバ!
>‥‥‥‥‥makeファイルってなんすか?(T-T)
ググールで【マケファイル】って検索したらでてきます。
026022
NGNGダミーたん‥‥(;´Д`)ハァハァ
>全部自分で作れば即解決。ガンバ!
Cocoaネイティブに作り直すときにフルスクラッチに‥する?(氏
> ググールで【マケファイル】って検索したらでてきます。
http://www.google.co.jp/search?q=cache:Ex07HNJGMYUC:www.topworld.ne.jp/tw/red/sakura/0101/0112.html+%81y%83%7D%83P%83t%83%40%83C%83%8B%81z&hl=ja
(;´Д`)ハァハァ (;´Д`)ハァハァ (;´Д`)ハァハァ
0261デフォルトの名無しさん
NGNGftp://jamsoft.com.au/mike_hore/Mops/
age
0262デフォルトの名無しさん
NGNGダウソロードしたよ。
これでMac OS Xでも……(;´Д`)ハァハァ
とオモータんだけどEnterキーがきかねぇ。(怒
思わずcomp.lang.forth.macを覗いてみたら、
ウインドウをリサイズしてから他のアプリケーションを
フロントに持ってきて、も一度Mopsのウインドウを手前に
持ってくれば使える、とあった。(何のまじないだ?)
……ををコンパイルできる……けどInstallできねぇ(涙
スタンドアロンアプリを生成できないんですけど。
(これは何かの罰ですか?)
も少し待ちかなぁ……。
0263デフォルトの名無しさん
NGNGおおすごい。
うちもEnterきかなくて目が点でした。
これからやってみます。
0264デフォルトの名無しさん
NGNGアプリで表示させる日本語のタイトルやラベルが化けるんですが何か良い方法が
あるんでしょうか。
mops age
0265デフォルトの名無しさん
NGNGhttp://groups.google.co.jp/groups?dq=&hl=ja&group=comp.lang.forth.mac&selm=newscache%24wmxpvg%24wsm%241%4
> The tough reality is that for Mops to continue, it really does need more effort than I can manage alone.
> The IDE is showing its age -- in particular it now needs an OSX-native text editor.
> Also the Manual is way out of date, and needs a major revision.
> I'll do it if people need it, but otherwise I'd rather not bother.
> I've got other things I could be doing.
こんなこというてはります。
> But I'd really like to know now whether there are still a significant
> number of users who aren't in a position to contribute,
> for whatever reason, or whether there just aren't very many users any more.
とも言ってるんで、Mopsの開発継続して欲しい連中はMikeタンに
フィードバックしてくだちい。
今すぐに!
0266デフォルトの名無しさん
NGNGほんとだ。文字化けする‥‥。
対策は………ワカンナイ、ゴメソ。
0267デフォルトの名無しさん
NGNGとりあえずMikeタンにおてまみ出しときますた。
0268デフォルトの名無しさん
NGNG1.日本語のMops情報が限りなくゼロ
2.そもそもForth自体が超マイナー
3.本屋で日本語のForth本は手に入らない、今後も出る予定があるとは思えない。
4.結局ToolBoxの知識は必要になる。
5.したがってC言語の知識も必要になる。
6.日本語がインライン入力できない。解決するには結局ToolBoxどっぷりになる。
というつらい目にあうことになります。
最低限以下のようなページがないとつらい。
http://www.big.or.jp/~crane/cocoa/indexOnline.shtml
「Mopsはやっぱり!」
をだれかお願いします。(汗)
0269デフォルトの名無しさん
NGNGMopsはあまり初心者向きではないんですよね……。
MPWがフリーになる前は、無料でToolBoxを駆使できる唯一の
開発環境だったのですが、MPWもフリーになり、デベツールが
OS Xに付属している現在ではあまりアドバンテージがない……。
しかも付属のライブラリにバグがあったりしてそれを回避したり
直したりしながらプログラムすることになります。(涙
……じゃあいったい誰が使っているのか?といえばモノ好きなオレとか……。
……オレとか……オレとか……。
…………。
…………。
ところでMopsの英文マニュアルは、内容が古くなってはいますが、
Forth&OOP入門の書としてイイです。
……………英語ですけど…………。
0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNGOpenFirmware関係だったりするなぁ。
時代は変わった‥‥。
ググルでもみられるYO。
http://groups.google.co.jp/groups?hl=ja&group=comp.lang.forth.mac
0272デフォルトの名無しさん
NGNG0273>222タン作 GokiForth
NGNG0274デフォルトの名無しさん
NGNGあがってないよ。なんで?
0275273
NGNG0276デフォルトの名無しさん
NGNGちゃんとあがってるよ。
更新されてないだけでしょ。
027722
NGNG‥‥いやネタじゃなく。ついでに移転しました。
GikoForth : http://gikoforth.s13.xrea.com/
実はxreaがめずらしく一般サイトの募集をやっていたので出来心でスペース
とっちまいました。
更新内容ですが、文字列と手続きブロックをオブジェクトでラップしてみました。
"逝ってよし" とか 【2を掛けて1を足す】とかは
それぞれ「文字列」「ブロック」クラスのオブジェクトをスタックに返します。
肝心のクラスライブラリの中身はスカスカに貧相ですが、カテゴリを使って
クラスを派生することなくメソッドを追加したり置き換えたりできるので、
とりあえずこの段階で公開しときます。
Cocoaネイティブ版を作りかけましたが、ヘタレなんで何年かかるかワカランです。
ちょとやる気が萎えますた。
027822
NGNG:m ifTrue: ( b -- ) IF call: self THEN ;m
:m ifFalse: ( b -- ) not IF call: self THEN ;m
:m if: ( b ^blObj -- ) swap IF call: blockvec ELSE drop call: self THEN ;m
したがってブロックを使ったIF文モドキは今のところ以下のようになってます。
b true = :[ "True" ::print ]: :[ "False" ::print ]: ::if
trueやfalseがオブジェクトじゃないので、この順番でしか書けないんですよね。
0279ムアー
NGNGワシんとこはs8です。3ヶ月ぐらい前かな。
早ぇ。
0280デフォルトの名無しさん
NGNGムアーたんのサイトってどんなんだろ? (;´Д`)ハァハァ
0281チャルーズ・ムアー
NGNG躁病患者を一気に鬱病患者にするほどのネガティブ天体観測日記等です。
もちろんデフォルトで電波を通常のサイトの3倍(赤)飛ばしています。
天文台から。ムアー(´∀`)
0282名無しのワードさん
NGNGネタに聞こえないところがアレですなぁ…
0283デフォルトの名無しさん
NGNGおながい、キーワードをもう1ワードだけ‥‥‥。(;´Д`)ハァハァ
>>282
http://www.colorforth.com/
‥‥‥‥ネタにしかみえない自分は、聖地巡礼の旅にでてきます‥‥‥。
0284デフォルトの名無しさん
NGNGForthじゃないけど。
028522
NGNGF#って?ocamlってなに〜?と思いますた。
functionalのFだたのか。
http://gikoforth.s13.xrea.com/
更新しました。
またしばらく放置になりそうです。
0286デフォルトの名無しさん
NGNGていうかあったよ、Forth.NET
http://www.codeproject.com/dotnet/dforthnet.asp
0287デフォルトの名無しさん
NGNGOh my GOD !
0288トリップの ◆8VdVxENI
NGNG0289202
NGNGFORTHではキーワードを行の終わりに置いて字上げ(地上げじゃありませんよ)をするのがいいと思うのですがどうでしょう。
_____________(conditoin1) IF
______(conditoin2) IF
(procedure1.1) ELSE
(procedure1.2) THEN ELSE
______(conditoin3) IF
(procedure2.1) ELSE
(procedure2.2) THEN THEN
_________________BIGIN
(condition) WHILE
_(procedure) LOOP
IF文が何重にもネストした場合THENがいくつも並ぶことがありますが、
これが一行に詰め込めます。
0290デフォルトの名無しさん
NGNG逆Python記法??
0291デフォルトの名無しさん
NGNGTHENやELSEは書いているみたいなので段差でブロックをあらわしてるわけでは
ないと思うが‥‥‥
0293デフォルトの名無しさん
NGNGhttp://www.panix.com/~goshawk/Mops/_download.html
0295デフォルトの名無しさん
NGNG「パソコンユーザーのためのForth入門」age
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNGブートローダはわかんないけど、Forthの話題ならここで可かと。
0298デフォルトの名無しさん
NGNG訳してみようと思っているんですが、もしもう存在するなら無駄なこと
はしたくないので。
ご教示おながいします。
0299デフォルトの名無しさん
NGNGない、と思います。少なくともネット検索でひっかかる範囲には。
(私も見つけられなかった。)
ftp://ftp.taygeta.com/pub/Forth/Literature/ansforth.pdf
↑ANS Forthの規格書でこれが一番新しいのかなぁ?
手伝いたいけど英語苦手なので‥‥機械翻訳でよければ‥‥‥‥(T-T
0300デフォルトの名無しさん
NGNG揚げ。
0301デフォルトの名無しさん
NGNG030222
NGNG神!
‥‥‥地味に更新しますた。
http://gikoforth.s13.xrea.com/
0303 ◆dPyZXuuM
NGNGWikiかなり充実してま砂。
このスレの閲覧者、意外に多いのか。
030422
NGNG↑お茶目さん
‥‥それはともかく、
>>303
>このスレの閲覧者、意外に多いのか。
どうなんでしょう。(T-T
http://gikoforth.s13.xrea.com/wiki/wiki.cgi?RecentChanges
Wikiは、この辺↑から更新状況をチェックしてお好みの所に自由に書き込んで
いただけますと、涙でるぐらいウレスィかも。
ページも勝手にジャンジャン作って良いです。いや、ホント。
おながいします。
030622
NGNG0307301
NGNGで、DPANS3.htm翻訳中。
ページ数少ないし、分担したらサクサクっと終わるような気がするんだけど、
どうよ。
030822
NGNG↑ココですね。
じゃ、せっかくだから漏れはdpans6.htmをやるぜ!!
……でも今日は寝ます。ゴメソ。
0309デフォルトの名無しさん
NGNGhttp://gikoforth.s13.xrea.com/wiki/wiki.cgi?DPANS2%2EHTM%A4%F2%CB%DD%CC%F5%A4%B3%A4%F3%A4%CB%A4%E3%A4%AF%A1%C1
0310デフォルトの名無しさん
NGNG0311298
NGNG今、A. RationalのA.1 Introductionにかかっています。
素人さんなのであまり難しいところは訳せませんがぼちぼちやっていきます。
0312デフォルトの名無しさん
NGNGメ テ
0313デフォルトの名無しさん
NGNGス
0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGColorForthのちゃんとした実装ってあったけ?と疑問を持ちつつぐぐってみたら
なんと!!
http://www.colorforth.com/install.htm
>Updated 2002 September
驚きますた。ムーアタン、老いてなを左官。
しかしファイルシステムが昔懐かしのブロックのよーな。
当方マカにて動作確認できません。人柱キボンヌ。
0319名無しさん@Emacs
NGNG処理系が小さいからかな?
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNGそれ以後に定義したワードを全部削除しなきゃいけないんですよね?
拡張してくうちに収拾付かなくなりそうな気がするんですけど。
0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNG拡張するだけなら単に同名ワードを再定義しる。
過去に定義したワード自体の定義を変更したい場合には、辞書を再構築する方がよろし。
じゃあなぜ削除が存在するかと言えば、ファイルから定義を読み込み、実行し、処理が
終わったらそのワード定義以降のメモリを解放する、といった用途のためだと思われ。
0324デフォルトの名無しさん
NGNGANSのドラフトだとforgetは非推奨になってるね。メモリ管理用の
word setが出来たから必要なくなったってことかな。
0325デフォルトの名無しさん
NGNG愛着をもてるんだが、
意味ないよな。
JAVAでやった方が全然効率がいいのに
なぜか使ってしまう。
0326名無しさん@Emacs
NGNG0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNGムーアタンも「俺Forth」作るの推奨しているし(w
0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNG>>326
当方マカーなのでMac OS9で役に立つものを作る場合はMops使ってました。
Mac OS Xになってから昔のコードに不具合が出てきてちょっと疎遠になってます。
DというMac OS XでPowerPC Nativeコードを吐けるForthも持っていますが、ほとんど使っていません。
使った事はないけど、良さげな他プラットフォーム向けForth処理系で知っているのは、
GForth
bigForth
win32Forth
かな?
>>328
それもまた良し。
0331デフォルトの名無しさん
NGNGちなみに、モバイル板から来ますた。
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGなったらしいぞ。
ダウンロードは↓
http://www.activekitten.com/df102002.zip
0334デフォルトの名無しさん
NGNGナイスな情報サンクス!!早速ゲットだ!
…って、Palmデバイス一つも持ってません(w
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNG0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNG0344名無しさん
NGNGΛ_Λ | 君さぁ こんなスレッド立てるから |
( ´∀`)< 厨房って言われちゃうんだよ |
( ΛΛ つ >―――――――――――――――――――‐<
( ゚Д゚) < おまえのことを必要としてる奴なんて |
/つつ | いないんだからさっさと回線切って首吊れ |
\____________________/
(-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ…
(∩∩) (∩∩) (∩∩)
(-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ…
(∩∩) (∩∩) (∩∩)
(-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ…
(∩∩) (∩∩) (∩∩)
0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNGその発言で問題が起きたら
自分で責任をとれって事。
そんな当たり前の事もできないんだ。
年収はいくらですか?
0347デフォルトの名無しさん
NGNGキャップ漏れだったりして
0348デフォルトの名無しさん
NGNG0349デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0350デフォルトの名無しさん
NGNGまともじゃない掲示板なんて存在意義ないね。
そういうことならここじゃ意味ないと思うが。
0351デフォルトの名無しさん
NGNG0352デフォルトの名無しさん
NGNG0353デフォルトの名無しさん
NGNGのイザコザに巻き込まれた(利用された)、掲示板管理人ひろゆき氏。
だべ?
なんで加点のか不思議。
0354デフォルトの名無しさん
NGNG実家からはネット環境ないからできんよ、漫画喫茶からでないと。(w
0355デフォルトの名無しさん
NGNG[出せ]といわれて出すかどうか。
[見せろ]といわれて見せるかどうか。
[あるだろ]といわれてハイと言うかどうか。
そんだけのことのよーな気がする。
0356デフォルトの名無しさん
NGNGここは、人は少ないがForth言語についてのスレだ。
迷惑だから出ていけ。
0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNGスクリプト荒らしと思われ。
放置汁。
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGキタ━━━━━(゚∀゚)━━━━━!!!!
0362デフォルトの名無しさん
NGNG0363デフォルトの名無しさん
NGNGバカ丸出しだなw
0364デフォルトの名無しさん
NGNGとか適当に書いておこう。
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0369デフォルトの名無しさん
NGNG>荒らしとか犯罪のためなの?
そす。
246 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:52 ID:BH998yxV
>ひろゆき
俺のお気に入りのスレとか荒されてるんだがそういうのにも有効?
257 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:53 ID:rLfxQ17l
いずれは。
301 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:57 ID:zbarv++q
>ひろゆき
2ch閉鎖って考えたことある?
310 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:58 ID:rLfxQ17l
ラウンジが重いですとかいちいち電話してくる人がいたとき。
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNGすまん!
0374デフォルトの名無しさん
NGNG【ニュース速報】
【予告】小学生の登校を狙って・・・
あれだけ散々話題になったにも関わらず
1/8は犯罪予告スレが乱立してます。
人生捨てた人が多いのでしょうか? (;´Д`)
冗談でもこういうスレ立てはやめておきましょうね。
何もないことを祈ります。
つーか、ひろゆきが警告降臨してからもここのスレの1は予告書き込みしてるんですが (;´Д`)
冗談なのか本気なのかわからないのが怖いところです。
この記事投稿時点で現在進行形の速報です。
関連スレ:Part2
【ニュース速報】【予告】小学生の登校を狙って・・・
http://dempa.2ch.net/dat/2003/01/news-1042037071.html
以下はニュース速報板のものとは別の予告スレです
スレタイは過激なので伏せておきます。
【自己紹介】(略)
http://dempa.2ch.net/dat/2003/01/intro-1041997615.html
【ラウンジ】(略)
http://dempa.2ch.net/dat/2003/01/entrance-1042000392.html
何度も言いますが、こういうことはやめましょう。
捕まっても知らんよ。警察のご厄介になってるヤシ多いんだし(;´Д`)
(報告記者: 番組の途中ですが名無しです2号φ ★, 01/09 00:08)
0375デフォルトの名無しさん
NGNG書かなくていいわな。
0376デフォルトの名無しさん
NGNG0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG0380デフォルトの名無しさん
NGNGここはFORTHスレッドだ。人はごく少ないが生きている。
雑談は他所でやってくれ。
0381じじぃ
NGNGここ数日間、この板全体がコピペ爆撃に晒されておるのじゃよ。
コピペに向かって叫んでも、それは詮なきこと。悲しいのう。
自治スレで何やら対策を協議しているようじゃが、何時になった
らこの惨劇が終わることやら。
0382デフォルトの名無しさん
NGNGム板はこのスレしか見てないので気がつきませんでした。
とはいえ、これだけレスの少ない板だと本来のレスが埋もれて見にくいので
レスの削除依頼をかけようと思うのですがどうでしょう?
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG匿名は弱者保護のためですって言ってのは、やっぱり詭弁だったんだね (´・д・`)
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNGhobby 今何をされてるんでつか?
0387山崎渉
NGNG0388デフォルトの名無しさん
NGNG4ndってネタ?4thじゃないの?
0389山崎渉
NGNG0390山崎渉
NGNG■ このスレッドは過去ログ倉庫に格納されています