2 part forth

1デフォルトの名無しさん
垢版 |
NGNG
第四世代
2007/04/24(火) 23:36:56
異常だな。〜 if 〜 then 〜 else のせいだったりするんかね?
……forthに何があったらもっと流行るかな?
325sage
垢版 |
2007/04/24(火) 23:53:34
て、むしろ正常ってこと?
2007/04/28(土) 23:24:51
Forthを使いたいと思う人より、Forthの処理系を造りたいと思う人の方が多そうな予感
2007/04/30(月) 07:13:54
自分もForthを作っているクチ
毎日、Forthでプログラム作ってるぜ!って奴はいますか?
2007/04/30(月) 08:55:54
ど素人の趣味なので毎日はしませんが、Forth系じゃないコードはほとんど書きません。

むしろForthでForthを作れば良いのではないかと思います。
2007/04/30(月) 12:17:29
>328
Schemeみたいに最低限のプリミティブを用意して、それからForthを組むようにしたら面白いかもね。
Lispだとこんな感じか。
ttp://ja.wikipedia.org/wiki/LISP#.E6.9C.80.E5.B0.8F.E3.81.AELISP

Forthの場合、スタック関連の操作、代入、分岐、Immediate、postponeぐらいで
実装できそうな気がする
330328
垢版 |
2007/04/30(月) 21:27:11
>>329
古典的なForthみたいにですね。
昔はアセンブリで書いた核の部分は、今はCでいいですからね。
ただ、何を核にすれば必要十分なのかについて、あまり資料がないですね。
四則演算と論理演算(ビット操作)もあった方がいい気もしますが、どうなんでしょう
(Lispは四則演算はいらない?)。
gforthはそういうやり方らしいですけど、
実行速度のためCで書き込むプリミティブを多めに取ったと書いています。

はじめ漠然と考えていたのは、間接スレッディングのforth環境の上でネイティブ方式のforthを頭から書いてしまう
というようなことでした。Executableフォーマットのファイルを作るのが結構面倒ですけど。
そこまでしなくても、Cのダイナミックライブラリとのインターフェイスがforth上で書ければ、
ほとんど何でもforthでできるんですけどね。
逆に言えば、マシンやOSの低レベルの仕様を調べないと派手なことをするのは難しいので、
そこが難点かも知れません。

もともとforthは言語仕様自体は貧弱なので、
アプリケーション毎に自前の言語を組上げていくみたいな面白さもあります。
インプットストリームも弄れるので、シンタックスまで変更できますし。
それがあまり面白がられていないということですかね。
2007/05/03(木) 09:02:05
昔、近所の古本屋で標準FORTHを100円で保護したのだが、捨ててしまった。漏れの馬鹿。
ところで、Beginning Forthを注文した。米国からなので2週間くらいかかりそう。
2007/05/06(日) 22:37:02
Forthはともかく資料不足。よって今更ながら英語の入門書をもう一個:
ttp://www.mpeforth.com/books.htm
『Programming Forth』 - Stephen Pelc et al.
2007/05/16(水) 04:42:21
汎用で考えるとやっぱり今どきスタックは32ビット長ですよねえ。
そこで移植にお勧めの埋め込み用32ビットプロセッサって何がありますか?
I/Oがたっぷり用意されているので遊べるかなって思いますがどうでしょう。
2007/05/24(木) 20:39:30
パフォーマンス優先ならSHじゃね?
最近秋葉でも手に入りやすくなったし。

FORTHコンパイラをアセンブラでガリガリに書きたい人なら
アセンブラが書きやすいH8かな。
2007/06/05(火) 19:20:03
φ(。。) めもめも
2007/06/05(火) 20:54:14
HDLだけでFORTHは作れる?
2007/06/11(月) 13:07:14
>>336
作れるみたいですね やってみたことないけどw
ttp://www.ultratechnology.com/chips.htm
この中のMicroCoreって初めて知りました
ttp://www.microcore.org/
2007/07/26(木) 16:12:13
joyの話しようぜ
2007/09/15(土) 23:22:38
後で読む: i386 / Linux 向け Forth コンパイラの作り方。

ttp://www.annexia.org/_file/jonesforth.s.txt
2007/09/26(水) 15:51:44
CでForthの処理系を書いてみた。
GCにはBoehm GC、辞書にはJudy Arrayを使ったので
ほとんど手間がかかっていないわりに速かった。
まだ単純な処理しか出来ないけどrubyとかより速いかも。
2007/09/29(土) 00:15:24
ささやかな期待
2007/09/29(土) 19:36:42
rubyより遅いforhtなんてあるのか?
2007/09/29(土) 19:51:26
>>342
rubyで書けばいいんじゃね?
2007/09/30(日) 17:21:13
>>343
激しく楽しくない気が
2007/09/30(日) 19:36:18
>>340
GC?
2007/10/02(火) 20:36:49
>>345
Garbage Collector でそ。
2007/10/02(火) 22:29:09
(forthに)GC?

てことじゃないか?
348345
垢版 |
2007/10/03(水) 23:33:04
>>347
フォローありがとうございます。

>>346
すみません。347さんの線でお願いします。

どう使うのかなあ?と。
2007/10/04(木) 15:23:24
concatenative
2007/10/07(日) 11:41:29
" hoge" は汚なく感じるな
"hoge" か " hoge " だろと
2007/10/16(火) 01:35:58
http://www.forthfreak.net/index.cgi?ForthBestPractices

Programming guidelines when you start doing forth programming:
* try to keep your words to one line, two lines max
* try not to pass more than 3 items on the stack to a word, preferably only 2
* try not to juggle more than 3 items on the stack within a word if you can
2007/10/24(水) 17:49:19
FreeBSD 6.2 では boot loder の動作を
コントロールするために ficl という forth が使われていて
るので、勉強中です。

FreeBSD のサーバーをリモートから管理しています。

以前のバージョンでは nextboot(8) で別ディスク上のカーネルを
次回のみテスト的に起動する設定ができたのですが、今のバージョン 6.2 では
nextboot(8) では同一ディスク内のカーネルのテスト的起動しかできません。

二台のディスクがついているマシンのそれぞれのディスクに別々にOSを
インストールして、交互にアップデートをかけたいのです。
リモートからのコントロールしかできないので、ssh のアクセスができなく
なると一万円払ってOS再インストールなので

そんなわけで、forth のcodeを見ているのですが、難しいです。 orz

FreeBSDのloader 改造したりしている人はいませんか?

353デフォルトの名無しさん
垢版 |
2007/11/03(土) 19:38:03
いまふ
2007/12/22(土) 11:53:19
dsForthがアドエスで動くのはガイシュツ?
2008/01/04(金) 04:23:01
notガイシュツ
2008/01/27(日) 13:50:29
このスレの人たちが使う電卓はRPLだったりするの?
2008/01/27(日) 15:03:59
HPの電卓?
358356
垢版 |
2008/01/27(日) 17:17:11
>>357
そうです。RPNの間違いでした。
2008/01/27(日) 18:59:27
HP41CV,HP28,HP48SX,HP32S,と使ってきましたよ。
ちなみに今使っているHP35は問題大あり!

2008/02/07(木) 10:12:19
Adobe高速JavaScript実装、バイトコードにForthを採用
http://journal.mycom.co.jp/news/2008/02/07/011/index.html
2008/02/07(木) 15:34:36
LLVM涙目
2008/02/07(木) 21:52:21
単なるスタックベースのVMなだけじゃないの?
JavaVMとか既存のVMと一緒でしょ
2008/02/16(土) 22:40:23
急に某ゲーム機上で動くforthが作りたくなって>>339が挙げてるやつ読んでるんだが(まあこれはi386用だけど)、わかりやすいなこれ
実を言うと今までforthはあまり理解してなかったけど、モヤモヤしてたことがすっきりしてきた
しかしforthってシンプルで美しいなぁ
Lispやsmalltalkに負けないと思うのに、このマイナーさ…
2008/02/17(日) 00:09:41
concatenative languageあたりをキーワードにWebをさまよってみると良いよ。
joy factorあたりが面白いかね。おいらも俺言語作成中。
2008/02/17(日) 00:24:42
factor は良いねぇ。秘かに期待している。
2008/02/18(月) 11:50:59

基本的に

1.stackの一番上と二番目の値に対して演算
2.stackの一番上だけ取り除く
3.stackのn番目と一番目を交換

の機能だけがあると思ってていい?
2008/02/19(火) 07:10:53
concatenativeに?
それならスタックに対する関数適用だけかな
368デフォルトの名無しさん
垢版 |
2008/03/20(木) 14:28:46
forthのコメントってもしやforthで書かれてる?
( コメント ) ←これ
2008/03/20(木) 15:22:35
>>368
実装にもよるけど、
ワード ( を読むと、フラグが立って、ワード ) まで無視する。
Forth で書いてある、ってこういう意味ってことでいいのかな?
370デフォルトの名無しさん
垢版 |
2008/03/20(木) 15:50:12
>>369
いやなんかマクロみたいな機能を使って書かれているのかなーと
forth知らないので全然分かんないんですけど

要するに↓みたいにforth言語で書かれているのか?ってことです
: ( hoge hoge ... ;
2008/03/20(木) 20:15:20
『標準FORTH』だと pp.166 にある。

: ( 29 WORD DROP ; IMMEDIATE

29 は ')' のコード

WORD はスタックトップと同じキャラが出てくるまで入力を読んで、
その先頭のアドレスをスタックトップに置くワード。DROP は説明の
必要ないな。IMMEDIATE は直前に定義されたワードを、
イミディエイトワードにするワード。

C マガジンのきだあきらさんの連載『千言万語』の Forth の時に
紹介してたネタだったような気もする。
2008/03/20(木) 20:16:04
千言万語単行本にならねーかな
2008/03/20(木) 21:37:32
追加。
イミディエイトワード、というのが、プログラムの実行時ではなく
読み込み時に意味を持つワードなので、マクロのような機能と
言えるかもしれません。
374デフォルトの名無しさん
垢版 |
2008/03/21(金) 07:42:46
>>371-373
サンクス

http://www.geocities.jp/naosacra/mops/particle2/immediate.html
これ見てるけどimmediateの意味がいまいちわからん…
何のためのものなんだ?

: ( 29 WORD DROP ; IMMEDIATE
例えば↑にimmediateがついてなかったらどういう動作になるんだろう
2008/03/21(金) 08:55:03
仮に ( がイミディエイトワードで無かったとすると、

: hoge ほげほげ ( ほげほげ ) ;

とか書いた場合に、hoge の定義の一部として、実行される部分になって
しまいます。定義中でも直ちに実行されるワードがイミディエイトワードです。
376デフォルトの名無しさん
垢版 |
2008/03/22(土) 10:18:31
>>375
なるほど
理解した。サンクス
377デフォルトの名無しさん
垢版 |
2008/03/27(木) 22:38:05
最近、Concatenativeな言語というもの目にしたんでage

2008/03/28(金) 00:23:41
なんか酷いのみつけてきたwwwww

ちょっと草植えときますね型言語 Grass
http://www.blue.sky.or.jp/grass/doc_ja.html

スタックマシン使ってるってだけみたいだが(俺には良く分からん)
2008/03/31(月) 10:36:35
forth厨はなんでもかんでもスタックマシンにするな
2008/04/03(木) 02:09:52
factorでHelloWorldのCGIやってみた
httpdからのfactor起動はバッチファイルで

USING: io ;
"Content-type: text/html; charset=Shift_JIS\n\n" print
"<HTML><head><title></title></head>\n<body>" print
"はろ〜factor表\示可能\" print
"<br>\n</body></HTML>" print

なんか楽しいw
2008/04/10(木) 03:00:58
あれ?factorの新しいの入れたら日本語出なくなった
エンコード関係?
2008/05/14(水) 14:10:30
factorソースから入れるのめんどくさいな・・・
gitなんて初めて知ったよ
2008/06/03(火) 17:56:33
何か面白い話無い?
2008/06/05(木) 11:05:57
スタック1本で動作する処理系作れ
2008/06/05(木) 16:18:58
バロースのメインフレームはシングルスタックなんだぜ?
2008/06/05(木) 18:37:49
wikipediaより

> スタックを1つしか持たないスタックマシンは、
> 計算モデルとしては非常に弱い。例えば、1-スタックマシンでは、
> 0n1n(0の並びの後に同じ個数の1が並ぶ言語)のような単純な言語も認識できない。
> 1-スタックマシンの計算能力は、有限オートマトンよりも高いが、
> 決定性プッシュダウン・オートマトンよりも低い。

> 一方、複数のスタックを持つスタックマシンはチューリング機械と等価である。
> 例えば、2-スタックマシンでは、チューリング機械をエミュレートできる
> (チューリング機械のヘッド位置から左側のテープをひとつのスタックが代替し、
> 右側のテープをもうひとつのスタックが代替する)。

へぇ〜
2008/07/17(木) 00:50:58
factorのドキュメント消えてら
388デフォルトの名無しさん
垢版 |
2008/08/01(金) 21:55:57
V
http://en.wikipedia.org/wiki/V_(programming_language)

Onyx
http://www.canonware.com/onyx/

Forthもこれらも俺には使いこなせないんだけどね orz
389388
垢版 |
2008/08/01(金) 21:57:15
Vはこっちのページも
http://code.google.com/p/v-language/
2008/08/02(土) 03:04:06
Forthの実装中sage
実装法のドキュメント付きで晒すかも
2008/08/02(土) 04:01:08
forthって、引数の数ミスるだけで崩壊するよな

>>390
どんな俺フォースを見せてくれるんだい?
誰もいないしここ、日記帳のつもりで使ってくれよ。
2008/08/02(土) 06:07:26
久々にレスキタワァ*・゜゚・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜゚・* !!!!!
2008/08/02(土) 08:44:15
>>390
http://www.google.co.jp/search?hl=ja&q=codepad&btnG=%E6%A4%9C%E7%B4%A2&lr=

どんな言語使って作るかしらん
こんなの補助として使ってみるのも便利かもしらん
394390
垢版 |
2008/08/02(土) 14:40:33
過疎っぷりに見てる人もいないと思ったら、意外といたのね。

>>391
Forthの実装は初めてなので、古典的で教科書通りのIndirect Threaded Code、
Cで書いた仮想マシンの上で動かすってかんじで。
今はMac OS XとLinux(x86)とLinux Zaurus(arm)の上でぽちぽち書いてる。
ポータビリティーは良いのでメモリがあって速度も気にしなければ
簡単にマイコンにも移植可能だと思う。H8なら余裕かな。
今月のトラ技の78K0基板持ってるんだけど、こっちはきついかも。

>>392
あばばばばばば

>>393
おお、こんな面白いのがあったのね。
とりあえずアカウント取ってみた。
このスレに落書きしつつ、blogにまとめてけばいいかな。

ANS-ForthのCORE準拠を目指して
http://www.taygeta.com/forth/dpans.html
読んでるんだけど、けっこうめんどいなあ。
ある程度実装の目処がたったらコード晒してくつもり。
少々お待ちを。
2008/08/04(月) 22:59:11
Forth は実装が簡単だって聞いてたんで、
自分も作ってみようとちょっと調べたんだけど、
仕組みがよく分からなかったし(ワードの定義とか)、
規格に沿った物にしようとすると意外に仕様が大きくて、
挫折しますた><
396390
垢版 |
2008/08/05(火) 23:09:27
>>395
辞書まわりは次の10個のワードがあればOK(たぶんね)

CREATE
COMMA(,)
[
]
IMMEDIATE
TICK(')
COLON(:)
SEMICOLON(;)
FIND
WORD

このあたりのワードの挙動は、
http://www.annexia.org/forth
ここのjonesforthを参考にすればいいと思う。
これをインスパイヤしたCと日本語のドキュメントを書いてるんだが・・・仕事が忙しくてね・・・
これをざーっと読んで、yforthあたりの簡単な処理系のコード眺めて
実際に動作を確かめればANS-Forthの準拠もそう難しくないかと。

たださ、ANS-Forthって処理系の内部の規定しすぎじゃね?
もっと好きなようにやらしてくれよ。一回確保したWORDが二度と解放できないとか、
文字列はヌル終端しない代わりに文字数を記憶するとか、ちょっと気持ち悪い気がする。

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

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

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

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

たとえば

[ 10 20 30 ] #sum

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

10 20 30 3

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

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

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

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

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

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

逆に言うと簡単にぶっ壊れるとも言う
2008/10/03(金) 16:59:48
Cとかの他の言語の常識持ち込もうとしてるヤツいないか?
「Forthではこう書く」ってのに納得いかないなら
悪いことは言わんから、使うのやめとけ
2008/10/03(金) 17:54:20
スタックっつうのはあくまで機械にやさしいものであってユーザーフレンドリーなものじゃないしな
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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