「コンパイラ・スクリプトエンジン」相談室9at TECH
「コンパイラ・スクリプトエンジン」相談室9 - 暇つぶし2ch32:デフォルトの名無しさん
05/12/22 21:24:49
>>23
すくりぷとげんごといんたぷりたとのちがいはなに?
ばいなりにおとすかどうか?

33:デフォルトの名無しさん
05/12/22 21:33:40
>>32
落ち着け!>>23は釣り臭いぞ。

34:デフォルトの名無しさん
05/12/22 22:18:33
さすがにLISPじゃ釣れなくなってきたなw
どんな阿呆でも、多少は学習能力があるということか

35:デフォルトの名無しさん
05/12/22 22:21:41
>>34
LISPに釣られてるアフォw

36:デフォルトの名無しさん
05/12/22 23:56:28
ベースはLispでも何でもいいんだけど、ドットで階層表現はほしい。
namespace.object.method
つーかluaって結構バランス良さげだね。
何気にproper tail recursionだし。
schemeと同じ様な書き方ができるっぽい。

37:デフォルトの名無しさん
05/12/23 00:30:46
>>36
>ドットで階層表現
リーダーマクロじゃ無理?
(そのままドットで繋げる形式は無理だと思うけど)

38:デフォルトの名無しさん
05/12/23 07:19:25
Lispスレでやれ。
どのみちこういう話してる面子は両方見てるんだろ? 俺もだけど。


39:デフォルトの名無しさん
05/12/23 08:00:10
Lispスレ見てる奴にとってはこのスレレベル低すぎだろ

40:デフォルトの名無しさん
05/12/23 08:17:24
そうなんだけどさ。>>36みたいな話はあっちでもたまに出た記憶が。

41:デフォルトの名無しさん
05/12/23 08:31:11
>>40
というか過去スレで a[x] みたいな配列アクセスとか . でのオブジェクトへの
アクセスとかは実現されてたと思う。でも荒しが粘着している現状で向こうの
住人がわざわざこっち覗きにきたりはしないと思われ。

42:デフォルトの名無しさん
05/12/23 08:59:00
質問。
oscm の構文定義で以下のようになっていたのだけれども

exp :
BOOL { Bool $1 }
| NUMBER { Number $1 }
| CHAR { Char $1 }
| STRING { String $1 }
| SYMBOL { Symbol $1 }

| LPAREN exp_list RPAREN
{ to_cons $2 Nil }

exp_list :
{[]}
| exp exp_list { $1::$2 }

上の定義の中で、

exp_list :
{[]}

の部分がどう作用するのかいまいちわかんないんですけど・・・
いつ、どの順序でこの部分がマッチするんですか?

43:デフォルトの名無しさん
05/12/23 11:08:52
その規則(1)は、何も無い部分(空トークン)からexp_listというnon terminalを
生成できることを意味している。exp_listを生成するもう一つの規則(2) exp exp_listは、
必ずexp_listというnon terminalを必要とするので、規則(1)がないとexp_listという
non terminalを生成することができない(帰納法のbase caseに相当する)。

規則(1)が使われる具体的なタイミングは、その構文規則でexpがstart symbolと
仮定すると、次のトークンがRPARENの時だと言える。

44:42
05/12/23 13:29:00
なるほど 次のトークンでRPARENが出たとき
exp exp_list { $1::$2 }
において、 $2 が [] になるということですね
ありがとうございました。

45:デフォルトの名無しさん
05/12/23 13:51:33
>>36
カモン。
スレリンク(tech板:20番)

46:デフォルトの名無しさん
05/12/29 00:25:03
ECMAScript程度の言語の構文解析にboost::spiritを使うのってまずい?

47:デフォルトの名無しさん
05/12/29 00:40:05
べつにまずくない

48:デフォルトの名無しさん
05/12/29 01:02:38
unko

49:デフォルトの名無しさん
05/12/29 01:09:40
ECMAScriptの文法は結構手強いよ。

50:デフォルトの名無しさん
05/12/29 09:20:53
既存のソフトウェア資産が全て0から作られると仮定して
OS側に管理が回りそうな機能と
言語側に標準的に割り当てられそうな機能を教えてくれ

例えばガベージコレクションはOSがやることになって
マルチスレッドは言語レベルでサポートされるのが良いのじゃないかと

51:デフォルトの名無しさん
05/12/29 09:50:25
threading が kernel level で support されてなかったらどうなるか考えてみた?

52:デフォルトの名無しさん
05/12/29 10:28:34
なぜそんな中途半端に英語をしゃべる?

53:デフォルトの名無しさん
05/12/29 11:13:42
>>52
それがナウなヤングなんだよ。

54:デフォルトの名無しさん
05/12/29 12:50:23
>>50
>既存のソフトウェア資産が全て0から作られると仮定して

あのなー、

その「全て0から作らなくてはならなくなった理由」がない状態で、
どの機能を何処に割り当てるべきか、なんてのが決まる訳が無いだろ?


55:デフォルトの名無しさん
05/12/29 13:21:18
OSの足りない機能を補うためにソフトウェア資産があるんだよ
OSの足りない分はソフトウェアがカバーしてるんだよ


56:デフォルトの名無しさん
05/12/29 13:28:14
>>53
ナウでクォー(クール)でヤングですよ。

57:デフォルトの名無しさん
05/12/29 20:52:43
マジレスすると、Rubyの多くの機能は本来はOSが提供するものだろうな。

58:デフォルトの名無しさん
05/12/29 21:05:47
それのどこがどうマジレスなんだ?

59:デフォルトの名無しさん
05/12/30 04:58:42
>>57がRuby要らずのOSを公開するそうです。
みなさんお楽しみに!

60:デフォルトの名無しさん
05/12/30 06:08:19
むしろRubyが必須なOSがあるのか知りたい

61:デフォルトの名無しさん
05/12/30 06:21:04
>>60
ない

62:デフォルトの名無しさん
05/12/30 06:24:26
Ruby 信者とアンチ Ruby が居なければ、このスレも随分と静かになるんだろうなぁ。

63:デフォルトの名無しさん
05/12/30 08:02:02
>>62
大差ないと思うよ。
半分くらいは俺が信者になったりアンチになったりしながら煽ってただけだから。
ちなみに俺はRubyもLISPも使ったことはない。

来年もよろしく。

64:デフォルトの名無しさん
05/12/30 09:38:36
>>63
大差あると思うよ。
もう半分は俺が信者になったりアンチになったりしながらクマしてただけだから。
ちなみに俺はRubyもLispも長年使い込んだ。

今年限りにしておこうか。

65:デフォルトの名無しさん
05/12/30 13:50:43
>>63 要するにお前の自演がウザいから消えてくれたらな…って話なんだよ。
空気読めねー奴だな…。「ちなみに」とかいわなくても君が Ruby を使えない
低能野郎って事は分ってるから来年こそは氏んでくれ。

でも空気読めないからノコノコでてくるんだろうなぁ

66:デフォルトの名無しさん
05/12/30 19:39:50
Rubyついでで恐縮だが、あのソースは本当に凄いな。
まったくの別次元だ。

特にスキャナ

67:デフォルトの名無しさん
05/12/30 23:27:35
パーサのトリックも凄いと思った。

68:デフォルトの名無しさん
05/12/31 04:07:32
GCもスレッドも凄いと思う。

...で、それって結局全部、Rubyの欠点になってるよな。

69:デフォルトの名無しさん
05/12/31 15:59:23
誰かRuby書きなおしてやれよw

70:デフォルトの名無しさん
05/12/31 16:27:46
スキャナとパーサは疑う余地がないよな。でもGCとスレッドって凄いっけ?

GCは、前見たときは、わりと標準的なmark-sweepだと思った。

スレッドは基本的に使ったことしかなくて、
スレッドスケジューラとかを作るやり方の話をよく知らなかったから
いまいち判断できなかった。
それでも、現実のOSなんかが搭載してるスケジューラに比べれば、
かなり簡潔(悪く言えばチープ)だろうな、と何となく思った記憶がある。

71:デフォルトの名無しさん
05/12/31 17:11:19
>>70
>GCは、前見たときは、わりと標準的なmark-sweepだと思った。

うーん、Bohemとかと比べるんなら「標準的」なのかもしれないけど、
BohemはC向けだからああならざるを得ないのであって、インタプリタ言語で
なにもわざわざCスタックをスキャンすることないのではないかと。
あれのおかげでsetjmpでレジスタを対比するようなトリックが必要になっているし
(そのせいでCPUごとの#ifdefやインラインアセンブラも必要になっているし)、
ネイティブスレッドと相性が悪いのもあれのせいでしょ。


72:デフォルトの名無しさん
05/12/31 19:05:16
>>71
言語上の問題じゃなくてオブジェクトメモリ操作のアトミック性の問題のためにスタックまで見る羽目になってるだけなんだけど
どうしたもんかねぇ。
個人的にGC関係が勉強になったというか良くできてるな~と関心しきりだったのはioなんだよね。
シンプルなのにジェネレーションベースなんでGCに興味がある人は見ておくべきだと思う。


73:デフォルトの名無しさん
05/12/31 19:12:39
> わざわざCスタックをスキャン
CのプログラムがRubyのオブジェクトを捕まえたときに、
Cのプログラムが明示的にそれを開放しなくても良いという利点がある。
これのおかげでCで拡張ライブラリを作ったり
Rubyを他のアプリケーションに組み込んだりしやすくなる。
・・・という目的があったと思った。

でもvolatileつけないといつの間にかオブジェクトが回収される罠があったり、
これのせいでRubyの高速化がしにくかったり。


74:デフォルトの名無しさん
05/12/31 20:28:43
なんだかんだ言っても好きだなw
お前らw

75:デフォルトの名無しさん
05/12/31 20:51:44
>>74
好きです。結婚してくださ(ry

76:デフォルトの名無しさん
05/12/31 22:51:46
volatileによるガードを期待するのはやめて、やばげなところでは
明示的にガードできるようにした方がいいんじゃないかねえ。EmacsのGCPROみたく。


77:デフォルトの名無しさん
05/12/31 22:53:28
EmacsがGCPROとconservative GCを併用できるというわけじゃないんで念のため
(できるのはできるが目的が違う)

78: 【小吉】 【1883円】
06/01/01 11:53:17
Rubyの運勢

79:デフォルトの名無しさん
06/01/01 17:14:23
ここでやるなよ。

80:デフォルトの名無しさん
06/01/01 20:50:42
アンチRuby房のほとんどが、メジャーになれない
重箱研究者だったりする件についてw

81:デフォルトの名無しさん
06/01/01 21:29:14
人生相談はこのスレの管轄ではありません

82:デフォルトの名無しさん
06/01/02 00:00:49
>>80
それは言えてるかも。ある意味素人が世界的に有名になって
(以下略

83:デフォルトの名無しさん
06/01/02 00:22:58
すっぱい葡萄理論w


84:デフォルトの名無しさん
06/01/02 00:50:46
その点Lispはそのような心配がない罠
人機の秘密は案外こんなところおにあったりする。


85:デフォルトの名無しさん
06/01/02 00:52:48
やはりLispが原点だね
Rubyだのなんだのと遠回りする馬鹿の多いことよ

86:デフォルトの名無しさん
06/01/02 02:57:54
Lispはある意味Cよりもコンピュータに近い所をプログラマに処理させるわけだから、
そんなに使い易いもんでは無いわな。
Rubyのシンタックスシュガーはやりすぎな感じもするけど……

誰か表記改良版のLisp作らんかね?


87:デフォルトの名無しさん
06/01/02 03:00:55
誰か=御自分
いいだしっぺの法則

88:デフォルトの名無しさん
06/01/02 03:20:15
JavaScript が C の皮を被った Lisp と言われていますよ。

89:デフォルトの名無しさん
06/01/02 03:35:36
>>88
ネイティブコンパイラとオプショナルな静的型付けと Dylan 風マクロが備わったら認めてやる。

ECMAScript に静的型付けを導入する話はどうなったんだろうか。

90:デフォルトの名無しさん
06/01/02 04:30:38
>>89
どっかで見た4thエディションでは予約語にはなってたようにおもう。
俺はバリアント型大好きだからいまさら感、感じてるけどね。

91:デフォルトの名無しさん
06/01/02 04:53:19
ところで、バリアント型大好きなんだけど、実装ってどういう感じになってるのかぜんぜん検討つかないんですよ。
ライターのM氏のページで、Cでの実装だと型そのものはUNIONにまとめてる感じでした。
やっぱり処理系が扱う変数型をまとめてUNIONにしてしまってフラグ変数で型を見分けて扱うというのが一般的なんでしょうか?
そのときに、たとえばWinapiに対する拡張とか、製作時点で未知のオブジェクトに対応する場合はどういう方向になるんでしょうか?
ヒントでもいいので、お返事お待ちしております。

92:デフォルトの名無しさん
06/01/02 05:01:58
>>91
大筋その認識で間違いない。
ただし未知のオブジェクトなど存在しないと思って良い。
複雑な構造のオブジェクトがあったとしても、
レコード型などのなんらかの既知の型の組み合わせでしかない。

93:デフォルトの名無しさん
06/01/02 05:23:43
>>92
お返事ありがとう。大筋でもあっててよかった。
Winapiのハンドル関連も元をたどればvoid*だったりするのかな。
構造体の内部表現とか結構気になるな。
うぅ。夢は尽きません。

ま、それはそれとして、参考になりました。

94:デフォルトの名無しさん
06/01/02 06:48:16
拡張モジュールを書いてバリアントを増やせる設計って可能だろうか?
つまり、型識別フラグのとりうる値がすべてわかっていないと書けない
部分というのが存在するかしないかなんだけど。
ちょっと考えた限りではなさそうに思える(効率は別として)。

95:デフォルトの名無しさん
06/01/02 08:23:22
最近 scheme の処理系を勉強で書きはじめたのですが
call/cc の実装で、継続を作成するという処理は
トップレベルに戻るコードと
そのときの環境オブジェクトというか全フレームを
対にしてまとめたものを保存しておけばよいのかなあと思ったのですが
gauche とかで、call/cc の実装を見ると結構複雑っぽいことを
しているんだけど、なんか考えが足りないのかなあ
識者の見識を聞かせてください

96:デフォルトの名無しさん
06/01/02 09:03:14
眠れないからC++のバリアントを試作してみたよ。
未知の構造体を格納しつつ自由にメンバにアクセスしたいときってどうやってやるんかな。
リフレクション自作とかしないといけないのかな・・・。ドウヤッテツクルンダ・・・。
void*に突っ込んで使用時にキャストがいいのかな??スクリプトエンジンでそんな指定どうやって??
テンプレートは一個しかできない上に決めうちしないといけないから向いてない感じがする。
悩む。

>>94
C言語的構造体指向OO風味だと、メモリの配置さえあってれば問題なく下位の構造体にアクセスできるから、
なんとか構造体EXとかは可能だと思う。関数ポインタつければ仮想関数もどきとかもできますぜ。
ただ、型識別フラグは拡張を指しているだけとかそういうことになりそう。
細かい指定はどうだろ、enumの拡張って動的にできるのかな。あぁ、INTつかえばいいのかな??
型ID予約制とかそういうことになって管理大変かも??


とか、書いてたらねむくなってきたなぁ。
論点ずれてたらごめんね。

97:デフォルトの名無しさん
06/01/02 09:30:51
>>95
継続というのはその時点での全アクティベーションレコード (スタック
フレームと思っておけばいい) そのものだから、基本的にはそれだけ
取っておけばいい。アクティベーションレコードを全部ヒープに
アロケートする処理系なら単にその先頭のポインタを掴むだけで済む。
概念的にはとても単純。

複雑になるのは効率を考えるから。普通のプログラムは、継続が絡まない
通常の関数呼び出し/復帰の方がはるかに多く、その場合はスタックを
利用する方が一般的にずっと速い。けれどスタック上のアクティベーション
レコードは関数復帰時に自動的に開放されてしまうから、継続が作られた
場合にそれを防ぐ何らかの方法がいる。継続作成時にヒープにコピーするとか、
継続作成時にスタックのベースを動かしてそれまでのスタックをヒープに
しちゃうとか、色々テクニックはある。

それから、単純な関数呼び出し/復帰モデルで賢い最適化をしたつもりが、
継続が入るとうまく動かなくなるってことも多い。効率を考えてゆくと
だんだん実装は複雑になる。




98:デフォルトの名無しさん
06/01/02 09:51:55
>>97
C++で、コードが複雑な場合に、最適化でバグの発生する理由がようやく理解できた


99:デフォルトの名無しさん
06/01/02 16:10:25
>>96
型式別のフラグ=型を理解するコードへのポインタ
にすればフラグの値を全部知ってる必要は無いでしょう?
実行時にロードされた場所が被るハズないって前提なのではあるけど。


100:デフォルトの名無しさん
06/01/02 16:57:04
C++の話は別でやってくれ
シッシッ

101:デフォルトの名無しさん
06/01/02 18:42:13
>>97
効率を考えると色々あるのですね
効率を考えずに単純に実装しようと思うのですが
一度中間言語へコンパイルし、仮想マシンなりで走らせるようにする部分は
継続を実装する上で必須なのでしょうか
中間言語とかなしでインタプリタのままで実装することはできないものかと・・・
例えば、(+ 2 (+ a 1)) とかで、(+ a 1) の継続を
その時点での環境を丸々コピー&(lambda (x) (+ x 2)) を
継続コードとして保存する、とか考えてたのですが、
S式全体から (lambda (x) (+ x 2)) の部分を取得する上手い方法が
思いつかないっす


102:デフォルトの名無しさん
06/01/02 18:50:56
っ CPS 変換

103:デフォルトの名無しさん
06/01/02 18:58:58
C++って、嫌われてるの?

104:デフォルトの名無しさん
06/01/02 19:01:53
>>102
なるほど!それがまさにそれに該当する方法っぽいです
ただどっちが簡単なんでしょうか

1.VM作って中間言語へコンパイルして継続を管理
2. CPSで継続渡し?みたいな形にS式をコンバート

なんか後者も結構メンドイ気がしてきた・・・
初心者向けなのはどっちですか?


105:デフォルトの名無しさん
06/01/02 19:39:59
別に中間言語にする必要もCPS変換かける必要もない。
ただ、スタックを陽に管理することになるので
(実装言語のスタックをそのままは使えない)
それを仮想マシンと言えなくはない。




106:デフォルトの名無しさん
06/01/02 20:23:15
効率、実用性を度外視して、とりあえず動くものを作りたいだけなら
CPS 変換の方が圧倒的に楽だと思う。
後は callcc 以外の Scheme インタプリタ作るだけだし。

ところで実装言語は何?

107:デフォルトの名無しさん
06/01/03 05:30:35
>>99
レスty!
ぜんぜん僕が思ってたのと違う方法なきがする。
型を理解するコードか・・・。変数のことかな。
勉強不足でうまく思い浮かばないOrz

そのほかでは、
名前と値保持の領域をmap使って管理するのがいいのかな。
これ使えばJS風味のバリアントできるな。
でも1オブジェクトに1mapってなんか色々コスト高いような・・・。

あとは関数をどうやって抽象化するかかな・・・。
これこそテンプレートのでばんか!?

という感じで色々ひねって見ます。
ありがとー。



108:デフォルトの名無しさん
06/01/03 08:14:25
>106
C#です。GCとか作る自信ないもんで。

109:デフォルトの名無しさん
06/01/03 08:35:02
>>107
typeinfoクラスへの参照をメンバに持っとけって話だろ。

110:デフォルトの名無しさん
06/01/03 08:49:43
>>108
実装する目的がわからんのだけど、もしただの勉強なら、
せっかくだから Scheme で実装したらどう?
(eval 使ってはい終わりって意味じゃないよ)
自分のインタプリタで自分のインタプリタを動かすのは
一度はやっておくべきだと思う。
見当違い、余計なお世話だったら無視してくれ。

111:デフォルトの名無しさん
06/01/03 09:23:29
>>110
C#で実装して、.net framework, managed directX と連携してゲームとか
簡単な画像処理のフィルタとかをお手軽に作れるような scheme インタプリタを
作ろうというのが処理系の目的といえば目的ですが・・・
現状はC#のインタプリタ部分は call/cc とかマクロとかその辺を
除けばほぼ完成まで来たので、とりあえずはこの路線で進もうかと。
scheme で実装するというのは発想自体思いつかなんだ
いずれやってみようかなと思いました

112:デフォルトの名無しさん
06/01/03 09:25:40
>>105
スタックを陽に管理するとは?


113:111
06/01/03 09:33:39
ごめん、上げてしまった

114:デフォルトの名無しさん
06/01/03 13:05:21
>>112
構文木を直接評価してくときに、素直に実装言語の(非末尾)再帰を
使うと、対象言語のスタックが実質的には実装言語のスタック上に
置かれることになるでしょ。そうすると継続を捕まえるのが面倒。
対象言語のスタックは自分で管理して、実装言語側で再帰しないように
評価器を呼んで行くことを「陽に管理する」と表現した。
実行時にCPS変換かけてるのと同じことだけどね。


115:デフォルトの名無しさん
06/01/03 19:18:40
GCを自分で実装しようとする人が多いのは
自分でメモリ管理することで(GC以外の部分でも)最適化の
余地が大きいからでせうかね?

116:デフォルトの名無しさん
06/01/03 19:24:11
>>115
コアの部分に、他人のクセだらけのソースコードを使えるか?という問題かと


117:デフォルトの名無しさん
06/01/03 19:43:53
良くも悪くもGCには、作った人の技術の粋が集まるから
他人のGCを使うのは、リスクが大きすぎるんだよな
何処にどんなバグが潜んでいるかは、作った人にしか分からない……


118:デフォルトの名無しさん
06/01/03 19:58:43
つか、他人の作ったGCって、Bohem以外にあったっけ?
C/C++にライブラリ乗せただけで使えるGCは原理的にコンサバ以外になり得ないので、
exactなGCが欲しければ、自分で作るしかあるまい。
だいたい、(mark sweepだとすれば)mark phaseはその言語のオブジェクト構造に
モロに依存するから、結局自分で書くことになると思うんだが。


119:デフォルトの名無しさん
06/01/03 20:29:35
Boehm使ってる。
自分で書くことも考えたんだけど、ネイティブスレッドとか
incremental GCへの対応はプラットフォーム依存のコードが
入って来るから、自分一人ではサポートしきれないという判断。
色んなアーキテクチャでテストとデバッグしてくれる要員が
いるくらいプロジェクトが大きくなればいいんだけれどね。



120:デフォルトの名無しさん
06/01/03 20:47:56
>>109
な!そんなクラスが!!!!
目から鱗です。
レスty!!

121:デフォルトの名無しさん
06/01/03 20:52:43
所詮俺言語ってことかw
俺言語に俺研究、本当にお前らときたら(ry

122:デフォルトの名無しさん
06/01/03 21:23:18
そりゃな、誰が好き好んで他人向け言語なんて作るんだ?
自分が好き勝手に色々な事をやりたいから作るんだよ。w
それで他人向けにもなっていて、神になれれば万々歳だよ。www

妄想入り過ぎだな……orz

123:デフォルトの名無しさん
06/01/03 23:19:20
それで成功した例が、お前らの嫌いなRubyって訳か。
ある意味皮肉なもんだ

124:デフォルトの名無しさん
06/01/03 23:28:49
つまり、ツンデレ?


125:デフォルトの名無しさん
06/01/03 23:43:19
そもそもC言語が自分がUNIX作るために作った俺言語だから。

126:デフォルトの名無しさん
06/01/03 23:45:05
>>124 なにそれ?
>>125 正当化に必死ワロw

127:デフォルトの名無しさん
06/01/03 23:51:48
>>126
表面上は嫌っている(ツンツン)が、
内面では認めている(デレデレ)って意味


128:デフォルトの名無しさん
06/01/04 00:21:52
Ruby最高!
実行速度の遅さと、色々と無駄の多くて破綻している文法以外……

129:デフォルトの名無しさん
06/01/04 00:33:21
ruby の文法って日本語的な思考方向(熟語が最後に来る)になってるような
気がしている

130:デフォルトの名無しさん
06/01/04 00:39:14
>>123
まあねえ。
このスレにいるような連中(のうち何割か)は、俺言語の5つや6つとっくに作ってて
(あるいは作りかけていて)、みーんなディスクの肥やしにしてるんだと思う。
言語処理系作るのなんて別に難しくないんだけど、ちゃんと完成させて、
かつちゃんと普及させる人は珍しい。その点じゃまつもとさんはすごいんだと思う。


131:デフォルトの名無しさん
06/01/04 00:39:41
obj.m1.m2.m3.m4

objをm1してm2してm3してm4する。
と書けるようになればいいのかも。


132:デフォルトの名無しさん
06/01/04 00:58:01
ruby のイメージってそんな感じなんですけど

133:デフォルトの名無しさん
06/01/04 01:05:40
>130
まだまだ諦めとらんよ。
(SchemeとIOを合わせたようなのを作成中)


134:デフォルトの名無しさん
06/01/04 01:10:11
SchemeやLispを使うとプロトタイプ作成は早いですよ
最近実感した

135:デフォルトの名無しさん
06/01/04 01:13:51
>>133
くだらねぇなあ。
そういう既存のものを中途半端に組み合わせたのって
数あるつまらん言語のうちの1つになるだけだろ。

136:デフォルトの名無しさん
06/01/04 01:21:07
有名どころが作ったとかではないなら、少なくとも何らかの他と
違う特徴がないとほんとに俺用で終わってしまうな。
Rubyだってフリーで国産とか、イテレータとか、一応特徴あったしな。
LispやSmalltalkやPrologやPerlなどは言うまでもないし。

137:デフォルトの名無しさん
06/01/04 01:24:14
Rubyが出てきた頃は、最初からオブジェクト指向を元に設計されてる
スクリプト言語が無かった。
今では珍しくもないと思われるかもしれないが。

138:デフォルトの名無しさん
06/01/04 02:21:53
Lisp系言語を作っても、ほぼLisp系言語愛好者(超少数派)しか注目しない
しかも、Lisp系言語愛好者は多少浮気をしたところで、
必ず最後はメジャー(少数派の中でだが)なCLかSchemeに戻る
したがって、どうあがいてもユーザーはほとんど出来ないだろうね

139:デフォルトの名無しさん
06/01/04 02:24:17
え?Lispなんて超がつくほどメジャーな部類では?

140:デフォルトの名無しさん
06/01/04 02:30:58
メジャーな言語一覧。
URLリンク(www.answers.com)
ここに載ってないのがマイナーの条件。

141:デフォルトの名無しさん
06/01/04 02:42:32
>>140
Hspとなでしこは世界ではダメだったか・・・
世界的にはRubyのほうが知名度高いんだな。

142:デフォルトの名無しさん
06/01/04 03:15:58
やっぱりLispですね
議論はここに戻る
遠回りするアホは嘲笑の対象だね

143:デフォルトの名無しさん
06/01/04 03:24:58
お願いだから、あんまり Lisp を釣りネタに使わないでくれ。

144:デフォルトの名無しさん
06/01/04 04:27:34
>>139
Lispがマイナー言語だとは書いてないだろ
Lisp愛好者が超少数派と書いたんだ
Lisp愛好者が多数派だと、本気で思ってるなら
死んだほうが良くねえか?
少なくとも、ボケ老人レベルの判断力としか思えんわ

145:デフォルトの名無しさん
06/01/04 05:31:54
全体の割合で見たら超少数派かもしれんが、
A言語愛好家、B言語愛好家、C言語愛好家、
~言語愛好家って、たくさん見てけば超人数
多い部類だと思うが。

146:デフォルトの名無しさん
06/01/04 05:40:35
"Cが好き" の検索結果 約 440 件
"Lispが好き" の検索結果 約 316 件
"Javaが好き" の検索結果 約 259 件
"Rubyが好き" の検索結果 約 186 件
"C++が好き" の検索結果 約 175 件
"Perlが好き" の検索結果 約 134 件
"Pascalが好き" の検索結果 約 57 件
"Basicが好き" の検索結果 約 25 件


147:デフォルトの名無しさん
06/01/04 05:49:19
Lisp愛好者って最近になってちょっと増えたんじゃないか?
高学歴の若者にファンが多い気がする。

148:デフォルトの名無しさん
06/01/04 05:55:12
>>146
"Cが好き"は別回答含んでねぇか?


149:デフォルトの名無しさん
06/01/04 06:02:24
ウェブ全体から検索で

"I love Ruby" の検索結果 約 21,500 件
"I love Java" の検索結果 約 17,200 件
"I love C" の検索結果 約 13,800 件
"I love Perl" の検索結果 約 9,980 件
"I love C++" の検索結果 約 1,610 件
"I love Basic" の検索結果 約 1,290 件
"I love Lisp" の検索結果 約 310 件

いろんな意味で m9(^Д^)プギャー!!

150:デフォルトの名無しさん
06/01/04 06:09:34
vのあとのlは比較的発音しにくいからな。
likeにしてみると多少マシなんじゃないかな?
やってないけど

151:デフォルトの名無しさん
06/01/04 06:13:08
"Lisp hacker" の検索結果 約 17,200 件中
"Java hacker" の検索結果 約 14,800 件中
"C++ hacker" の検索結果 約 1,540 件中
"Ruby hacker" の検索結果 約 969 件中

152:デフォルトの名無しさん
06/01/04 06:17:53
>>150
"I like Ruby" の検索結果 約 15,700 件
"I like Perl" の検索結果 約 14,600 件
"I like Java" の検索結果 約 14,000 件
"I like C" の検索結果 約 11,000 件
"I like Basic" の検索結果 約 1,600 件
"I like Lisp" の検索結果 約 653 件
"I like C++" の検索結果 約 508 件

なるほど、確かに多少マシだw

おまけ。

"Pythonが好き" の検索結果 約 91 件
"I love Python" の検索結果 約 12,100 件
"I like Python" の検索結果 約 24,300 件
"Python hacker" の検索結果 約 808 件

153:デフォルトの名無しさん
06/01/04 06:21:59
>>152
しかし、C++より多いのか。
いずれにせよ、それら超メジャー言語と張り合う程度に
愛好家はいるんだから、超少数派というのは当ては
まらないのではないか?

154:デフォルトの名無しさん
06/01/04 06:23:58
Lisp Hackerが多いってのがLispを象徴してるな。
Lisperっていうメジャーな代替表現があるのにこれはすごい。

155:デフォルトの名無しさん
06/01/04 06:30:48
おまいらプラス思考だな。
まあ、Ruby 厨の俺から見ても Lisp が超少数派なわきゃないと思うけどね。

>>153
C++ は確かに超メジャー言語だが、
"I love C++" "I like C++" って発言するほど C++ 自体が好きな奴って
あんまりいないんじゃないかという先入観がある。

>>154
Lisp Hacker ≒ Paul Graham

156:デフォルトの名無しさん
06/01/04 06:31:23
とりあえず、PythonとRubyは人名と宝石が引っかかってるぞ。

157:デフォルトの名無しさん
06/01/04 06:36:19
>>156
今じゃ誰もこんなこと言わないとわかっているが敢えて言わせて貰おう。
ネタにマジレスカコワルイ

158:デフォルトの名無しさん
06/01/04 08:00:51
まあ何だ。こと布教にかけては、本職の宣教師が最強だったってことじゃねえ?

159:デフォルトの名無しさん
06/01/04 08:28:35
話題がRubyに向かいやすいのは、Rubyの人気が出たことに対する
言語設計者の嫉妬にみえなくもない

160:デフォルトの名無しさん
06/01/04 08:44:56
このスレではRubyのソース読んだ人の割合が他の言語より多いってのも多少関係するかと。
ソースコード完全解説が出版されるはオンラインで公開されるは、挙句Matz氏もソース嫁と言わんばかりの勢いだからな。

161:デフォルトの名無しさん
06/01/04 09:27:27
308 "I hate Ruby"
743 "I hate Perl"
15500 "I hate Java"
726 "I hate C"
988 "I hate Basic"
257 "I hate Lisp"
1320 "I hate C++"

Javaダントツ人気で砂

162:デフォルトの名無しさん
06/01/04 09:32:26
何が嫌いということもないけれど
わざわざ触りたいという気には不思議とならない

163:デフォルトの名無しさん
06/01/04 10:00:09
Python Python!
URLリンク(www.boingboing.net)

164:デフォルトの名無しさん
06/01/04 10:04:42
ていうか、JavaとかBasicとかも違うのひっかかってるから。

165:デフォルトの名無しさん
06/01/04 10:24:01
まあ検索なんかに頼らなくても、
愛好家の数で言ったら、大体

C++、Java、Perl、Pythonなど>Ruby、Delphi、VBなど>Lisp、Basic、Pascalなど
>Cobol、PL/I、Fortran、Prologなど>>>>>>>>>マイナー言語の数々

って感じになるのは、これらを知ってる奴なら納得するだろ?


166:デフォルトの名無しさん
06/01/04 10:49:03
年も改まったのに頭の中は進歩しない奴ばっかりだな。
処理系の実装に関係ない話はどっかよそでやってくれ。


167:デフォルトの名無しさん
06/01/04 11:00:34
処理系と関係ないようでいて間接的に関係あります。

処理系を作っても、特徴がなければただの俺言語になる。
特徴があってもLispのように超少数派になる。
いや、Lispは超少数派ではない。←いまここ

168:デフォルトの名無しさん
06/01/04 11:04:45
特徴の有無が問題なのかよ
レベル低いなあ

169:デフォルトの名無しさん
06/01/04 11:06:55
特徴の有無は問題だろ
レベル低いなあ

↑これと同じくらいお前の論理は無意味

170:デフォルトの名無しさん
06/01/04 11:46:48
なんか、このスレすごいレベル低い・・・もうお気に入りから消そうかな・・・

皆さん、どう思います?

171:デフォルトの名無しさん
06/01/04 11:48:34
>>165
愛好家ってカテゴリだったらC++の位置はそこじゃねぇだろ、実用性じゃダントツだってのは認めるけどさ。
チームに一人デコ助がいるだけで地獄を「簡単」にみられる言語の筆頭だぜ。




172:デフォルトの名無しさん
06/01/04 11:50:58
もうスレ違い議論はやめてくれr
いつから言語比較スレになったんだ?

173:デフォルトの名無しさん
06/01/04 11:54:05
言語比較ほどの価値もないな。
個人個人が好き勝手に好きな言語を推しているに過ぎない。
検索結果がどうのこうのしょうもない外人が書いたようなリストを持ち出そうが、そんなもんが言語研究と何の関係があるんだよ。
お前らもうちょっと理性的に考えたらどうなんだ?

174:デフォルトの名無しさん
06/01/04 12:07:59
自分の好きな言語を押し付けたいだけの厨にそんな事言っても無視するだけだろうな

175:デフォルトの名無しさん
06/01/04 12:09:19
>>167
第二段が間違ってるぞ
「特徴があってもLisp系ではLisperしか食いつかないうえ、
 Lisperは試食しただけで、またCL Schemeに戻る」だ

176:デフォルトの名無しさん
06/01/04 12:20:32
特徴を「他の言語との比較」に頼ってるあたりが
井の中の蛙臭さの原因なんじゃなかろうか

177:デフォルトの名無しさん
06/01/04 12:27:35
まあLispとIoを組み合わせるなんて、いかにも中途半端なオタクが
考えそうなありふれたアイディア。
目だった特徴にはならん。

178:デフォルトの名無しさん
06/01/04 12:28:37
>>176
原因はむしろ比較の基準が使用者の人口なことじゃね?


179:デフォルトの名無しさん
06/01/04 12:31:14
IoってSmalltalkみたいなもんだろ?
CLOSじゃいかんのか?

180:デフォルトの名無しさん
06/01/04 12:34:10
Smalltalkはフォロワーを生み出してるところが偉大だな。
LispもSchemeやJavaScript、果てはRubyやPythonに至るまで
フォロワーを生み出したことに凄さがある。

181:デフォルトの名無しさん
06/01/04 12:42:45
そうニダ
Lisp起源ニダ
Ioも実はLispが起源ニダ

182:デフォルトの名無しさん
06/01/04 12:50:07
>>181
そもそもSmalltalkがLisp起源・・・

183:デフォルトの名無しさん
06/01/04 12:51:57
やっぱりLispですね
議論はここに戻る
遠回りするアホは嘲笑の対象だね

184:デフォルトの名無しさん
06/01/04 13:13:39
>>180
そうだな。何だかんだ言われても、HSPにもフォロワーはいるからな


185:デフォルトの名無しさん
06/01/04 13:23:41
フォロワーで言ったらCも相当なものだな

186:デフォルトの名無しさん
06/01/04 15:14:22
HSPにフォロワーはいるのかもしれないが、有名なフォロワーはいないな。

187:デフォルトの名無しさん
06/01/04 15:26:07
フォロワーってフォローする人の事じゃないの??

188:デフォルトの名無しさん
06/01/04 15:44:26
そうだな。「信者」の類義語とかかな。

189:デフォルトの名無しさん
06/01/04 16:26:19
小室です

今年は、環境ごとにミニ言語をさくっとでっち上げるのが
来ます

190:デフォルトの名無しさん
06/01/04 17:38:44
人じゃなくても概念や物でも擬人化して考えれば可じゃないか?

191:デフォルトの名無しさん
06/01/04 17:41:28
>141
Hspとなでしこって何?って素で思ったよ。漏れはorz
結構はびこってやがったのねん

192:デフォルトの名無しさん
06/01/04 17:46:36
>>180の言う「~のフォロワー」は「~に大きく影響されて生み出された言語」
という意味だろ。

193:デフォルトの名無しさん
06/01/04 18:12:27
ワカメちゃん・・・
  僕らはもっと、早く、

出会うべき、ダッタ、のかも、
               ウゥン・・・マスオ兄さん
シレナヒ・・・
             ダッテ・・・もっと早かったらァ・・・
               
                私ィ、赤チャンだyo^
イイの・・・
イイの・・・

イイ!!

194:デフォルトの名無しさん
06/01/04 18:33:22
今日 Essentials of Programming Language を読了した
すごくいい本だった
中身は scheme で ML 作る本だった
多相型、型推論、CPS変換まで丁寧すぎるぐらいだった
Friedman 本にハズレないっすわ

195:デフォルトの名無しさん
06/01/04 19:04:33
>>194
> 今日 Essentials of Programming Language を読了した
> すごくいい本だった
> 中身は scheme で ML 作る本だった
> 多相型、型推論、CPS変換まで丁寧すぎるぐらいだった
> Friedman 本にハズレないっすわ
大学院のとき、輪講でその本やったんだけど、俺、当時CPSで
脱落しました。orz
今でも、継続を使ったコルーチンなど、どうしてこうなるのか理解
できません。
今は、SICPからやりなおしています。EOPLには、機会を見て再挑戦
したいと思います。

196:デフォルトの名無しさん
06/01/04 19:38:32
やっぱりLispなんですね。
時が流れても、原点はLispであることを認識することができました。

197:デフォルトの名無しさん
06/01/04 20:03:15
Lispは機械語で作られてます。
時代が流れても、原点は機械語です。

198:デフォルトの名無しさん
06/01/04 20:16:08
こんな感じでスレ立てようか?

--- 言語処理系開発議論スレ ---
コンパイラ・スクリプトエンジン相談室があまりにアホばっかなんで立てました。
このスレの話題は処理系の実装に関する議論に限定します。

言語の善し悪しなどは遠慮ください。
つまり、実装の議論に直接関わらない限り言語のデザインに関する議論、
もちろんどの言語が優れているだの使われる言語がえらいだの特徴がどうだの
成功失敗だのユーザがどうだのどの言語が起源だのなどなどの議論は禁止。
処理系をどの言語で実装するのがいいだのも禁止。

過疎上等、高S/N比優先でいきましょう。
くだらなくてもにぎわってる方がいいという方にはもっとよいスレがあります↓

関連スレ:
「コンパイラ・スクリプトエンジン相談室」という名の言語比較厨隔離スレ
スレリンク(tech板)l50


199:デフォルトの名無しさん
06/01/04 20:18:33
機械語は二進数の数字で出来ています。
時代が流れても、原点は二進数の数字です。

200:デフォルトの名無しさん
06/01/04 20:21:25
Lispにしろ機械語にしろ、コンピュータで実現可能なアルゴリズムはチューリングマシンで実現可能なことと同値です。
時代が流れても、原点はチューリングマシンです。

201:デフォルトの名無しさん
06/01/04 20:27:47
チューリングマシンで実現可能なことは、λ計算で全て書けます。
時代が流れても、原点はλ計算です。


202:デフォルトの名無しさん
06/01/04 20:39:45
お久しぶりです、実装について質問させてくださいまし
クロージャの実装についてですが例えば、以下のソース

(let ((a 0))
(define hoge (lambda (x) (+ a x))))

を eval する際に、クロージャ hoge をどのようにクラス化
するかについてですが、
トップ環境フレームを top 、矢印は親を指すとして上の例だと

top <- frame1(aを束縛している)

のようにフレームが伸びていて、クロージャオブジェクトは
frame1へのポインタをメンバに持つように作成したとします

で、このクロージャへの呼び出しをするとき、例えば (hoge 10)としたとき
top <- frame2(10を束縛)
のように別フレームが伸びるじゃないですか。
このとき、(hoge 10)を評価するときに必要な環境として2つの連結リスト
top <- frame1
top <- frame2
が二つ必要になる?という見解はあってますか?評価手順としては
x の検索を frame1 に対してかける(見つかる)
a の検索を frame1 に対してかける(見つからない)
a の検索を frame2(クロージャクラスのメンバ変数) に対してかける(見つかる)
を順次探しにいく、という風にするという考え方?で良いのでしょうか
なんか上手く日本語化できなかったorzけど
壮大な勘違いをしている可能性もありそうなのでアドバイス求む

203:デフォルトの名無しさん
06/01/04 20:40:52
アホとは、Lispをあえて避ける行為のことでしょうか。

204:デフォルトの名無しさん
06/01/04 20:52:31
>>198
実装に関する質問だったらレベル低くてもOK?
当方このスレにかなり助けられているので相談できなくなるのは寂しい

205:デフォルトの名無しさん
06/01/04 20:59:23
>>198は他人がレベルを高くしてくれるのを待ってるだけの他力本願野郎。
誰も同意しないので、気にするでない。

206:デフォルトの名無しさん
06/01/04 21:04:09
>>202
んー、素直にやるなら、hogeの中の評価時には
top <- frame1 <- frame2
ってならない? 内側から探してけば自然にレキシカルスコープに
なると思うけど。


207:デフォルトの名無しさん
06/01/04 21:14:05
俺言語作ってる様な奴は大抵秘匿主義だからな。
俺もそう。
こんなスレのレベルが高くなるわけないだろ。

208:デフォルトの名無しさん
06/01/04 21:36:59
>>207
俺なんかこのスレの誰も及ばないくらいレベル高いことを秘匿してるけどな。

209:デフォルトの名無しさん
06/01/04 23:25:42
>>202
(let ((a 0))
  (define hoge (lambda (x) (+ a x))))
(hoge 10)
だと、3行目ではシンボルhogeに値が束縛されてないと思うぞ。

(define hoge #f)
(let ((a 0)) ; frame1
  (set! hoge (lambda (x) (+ a x)))) ; frame2
(hoge 10)

たぶん↑のようにしたいんだと思うけど、
この場合だと、letを評価した時点でframe1が作られ、top <- frame1 になり、
lambdaで作られた手続きは top <- frame1 の frame1 部分を参照する。
で、(hoge 10)が評価されたときに frame2 が作られて
top <- frame1 <- frame2 になる。
あとはaを検索するときは上から順に。という感じかな。

top <- frame2 のようなリスト(か何か)も必要になるけど、
これは継続絡みの話だと思う。

210:デフォルトの名無しさん
06/01/04 23:26:23
このスレ役に立つレスは>>1-6まで
あとは屑

211:デフォルトの名無しさん
06/01/04 23:26:28
>>181
>Lisp起源ニダ
>Ioも実はLispが起源ニダ

Ioじゃないけどそれに近い主張と、
URLリンク(shiro.dreamhost.com)

それに対する反論。
URLリンク(shiro.dreamhost.com)

反論側のほうが説得力あるような。
>LispのS式表記は、声高に、はっきりと、過去半世紀の間拒否されてきた。

まったくだ。

Lisp信者の改宗の話。
URLリンク(www.gembook.jp)

212:デフォルトの名無しさん
06/01/04 23:29:14
俺には反論側のほうが全く説得力ないように見えるけどな。

213:デフォルトの名無しさん
06/01/04 23:33:08
>>211
最後の記事を実際に見てみると、Lisp信者が改宗した話というよりは、
Lisp信者がLispを絶賛してる話にしか見えないぞ。

214:デフォルトの名無しさん
06/01/04 23:39:29
スレ違いも甚だしい
これだからLisp厨は・・・

215:デフォルトの名無しさん
06/01/04 23:40:21
211はどう見てもアンチLispだがな。
Lisp厨=アンチLispだったら同意。

216:デフォルトの名無しさん
06/01/04 23:40:36
> 他人がレベルを高くしてくれるのを待ってるだけの他力本願野郎

待つのを諦めたからの提案だと思うけど。


217:デフォルトの名無しさん
06/01/04 23:41:10
>LispのS式表記は、声高に、はっきりと、過去半世紀の間拒否されてきた。

これってどういう意味で言ってるのか知らないけど、括弧がネストしすぎると
見難いとかめんどくさいとかなら、Lisp信者でもそう思ってると思うぞ。

218:デフォルトの名無しさん
06/01/04 23:46:40
>>216
待ってないで自分で書き込めばいいのにね。

219:デフォルトの名無しさん
06/01/05 00:04:53
>>206,209
THX!! なんとなくわかってきたような。

hoge に束縛された closureオブジェクトは
メンバに top->frame1 のフレームリストをメンバに持っている、と。
で、(hoge 10) という関数呼び出しを評価するとき
hoge はクロージャなので、hoge.env( top->frame1 ) に対して、frame2(10を束縛)を
リストに連結して評価する( top->frame1->frame2 )、と。
もし hoge がプリミティブなら掴んだ環境を持っていないので、
素直に10を束縛したフレーム(frame'とする)を
top に連結して( top->frame' )評価する、ということでしょうかね?

>>209
>あとはaを検索するときは上から順に。
上からというのは最下層からということですか。
top からではないですよね?

ありがとうございました。

220:デフォルトの名無しさん
06/01/05 00:13:24
S 式を叩けば良いみたいな風潮は何とかならんかね。頭悪過ぎなんだが。

221:デフォルトの名無しさん
06/01/05 00:36:57
つか、S式のメリットって、マクロ以外にあるの?
そのマクロにしてからが、

URLリンク(www.rubyist.net)
>マクロは生産性の向上には有効、わかりやすさにはかなり不利

って言われてたりするわけだが。

222:デフォルトの名無しさん
06/01/05 00:56:31
知らない/調べない/でも批判する...

223:209
06/01/05 00:58:00
>>219
> 上からというのは
frame2側からね。

> もし hoge がプリミティブなら掴んだ環境を持っていないので…
プリミティブって、トップレベルで定義された手続きの事かな?
1. topを普通のフレームと同じように扱って、
  NULL <- top <- frame1 <- frame2 ....
  トップベルで定義された手続きはtop環境を参照。

2. topを特別なフレームと考えて
  NULL <- frame1 <- frame2 ...
  (検索して見つからなかったらtopから検索)
  トップレベルで定義された手続きはNULLを参照。

の、どっちかかな。

>>221
個人的には、リストがやたらと扱いやすいことを挙げたい。

>マクロは生産性の向上には有効、わかりやすさにはかなり不利
「構文を言語のユーザが拡張する」という考えに慣れていないだけだと思う。
matz氏自身、Rubyの構文の拡張を何度も行っているが、
Rubyを拡張したことでRubyがわかりづらくなったと本人は言ってないよね?

224:デフォルトの名無しさん
06/01/05 01:25:28
>>223
>個人的には、リストがやたらと扱いやすいことを挙げたい。

それは、リスト部分だけ、たいがいのスクリプト言語にある配列のリテラル
みたいに表記できるだけでは不足なの?
あとは簡潔に記述できるクロージャがあれば、(処理を変数などに代入することも
できるんだから)プログラムコードまでS式である必要は薄いんじゃ、って
疑問なんだけど。

>「構文を言語のユーザが拡張する」という考えに慣れていないだけだと思う。

ていうかその考え自体に批判的なんじゃないかなあ。
C++のオペレータオーバロードが、同じ文脈でよく批判されるよね?
Rubyの場合、Matz氏は言語設計者なんだから、拡張しても問題なし、
でもユーザがやるのは許さん、と。


225:デフォルトの名無しさん
06/01/05 01:43:42
そんなに知りたかったら自分で触ってみろよ。

226:223
06/01/05 02:52:56
>>224
> リスト
「後ろ半分だけ実体が共通なリスト」とか、
「変数aの参照しているリストの3番目以降のリストを変数bに参照させたい」とか。
全体から見ると、リストというよりはグラフになるのか。
このスレに沿った話題だと、
構文木をいじったり、クロージャのリストを実装したりが簡単。

> プログラムコードまでS式である必要は薄いんじゃ
マクロを一切使わないなら必要ないんじゃない?
自分の作りたいプログラムを書くのに十分な構文をサポートしている言語が
常にあるなら、と読み替えてもいいけど。

> C++のオペレータオーバロードが、同じ文脈で
その辺の話なら同意。
利点欠点は大体同じだよね。
マクロの利点欠点ははオペレータオーバロードよりもずっと大きいけど。

227:デフォルトの名無しさん
06/01/05 07:25:37
>マクロは生産性の向上には有効、わかりやすさにはかなり不利

いいんじゃない?生産性が上がればいいんだし。

228:デフォルトの名無しさん
06/01/05 12:01:40
>>211
御大ですら自分の好きな言語が一番素敵厨かYo!と思いマスタ(w


229:デフォルトの名無しさん
06/01/05 12:18:15
他人を改宗させようとは思わないけれど。
頭の中でコードを考えてる時はグラフなわけ。
S式だとそれをそのままシンプルに書き下せる感じがする。
そして、Emacsの式単位 (文字単位や行単位でなく) の編集は
頭の中のグラフを直接いじっている感覚がある。
他の構文は、読むときも書くときもいちいち頭の中の
構造と字面とを翻訳してやらないとならないんでかえって面倒。

230:デフォルトの名無しさん
06/01/05 13:25:03
a した結果を b して、その結果を c して、その結果を d する
というのを、頭の中では、
(d (c (b (a ... ))))
と考えるんだ、凄い頭だね

231:デフォルトの名無しさん
06/01/05 13:41:18
>>230
>a した結果を b して、その結果を c して、その結果を d する

この時点で違ってんじゃないの、Lisp 脳と C 脳では。

232:デフォルトの名無しさん
06/01/05 13:50:39
要は人によるってことでおさまりそうな議論だな

233:デフォルトの名無しさん
06/01/05 13:52:08
S 式に特定した話というではないが、read/write invariance なのが良いとは聞くね。
計算途中のデータを引っ張りだして、ちょっと修正してまた計算みたいなのを何も考えずに出来る。

234:デフォルトの名無しさん
06/01/05 14:58:34
>>230
そっちの方向にネストが深くなるときってのは、だいたい
逆に考えてる。欲しいものが先にあって、最後にdを呼べば
それが得られる、dがその結果を出すためにはcが返す値
が必要で… とトップダウンで。
逆にボトムアップで考えるときはletが深くなる。構造が
見えて来たらどんどん整理するけど。




235:デフォルトの名無しさん
06/01/05 15:18:04
>>231
Cでも d(c(b(a(..)))) なんだけど・・・
C++なら、hoge.a().b().c().d() とも出来る(どっちも出来る)が

236:デフォルトの名無しさん
06/01/05 15:37:37
>>235
文法の話じゃなくて、「~して、次に~する」という手続き的な考え方をしていないんじゃないかって事。

237:デフォルトの名無しさん
06/01/05 18:14:22
>>235
あ、それ初めて知った

238:デフォルトの名無しさん
06/01/05 18:25:13
逆にボトムアップで考えるときは・・・、とか書いてんじゃんw

let云々はCで言えば
a_result = a(...);
b_result = b(a_result);
c_result = c(b_result);
d(c_result);
といったやり方だし
これを、S式で書くとグダグダになるが

239:デフォルトの名無しさん
06/01/05 19:04:44
だからツリーをいじってるって言ってるだろ。
(let ((ra (a x)))
(let ((rb (b ra)))
(let ((rc (c rb)))
(d rc))))
でカーソルが一番最初にある時に、rcを束縛する
let式に行くのは C-M-d C-M-f C-M-f C-M-d C-M-f C-M-f
そのlet式全体をリファクタリングするために外に出したければ
C-M-Space C-M-w でカット。
(a x), (b ra), (c rb) の部分がどんなに複雑になっても
この操作は変わらない。木構造が変わらないからね。

a_result = a(...);
b_result = b(a_result);
c_result = c(b_result);
d(c_result);

でa(), b(), c() の部分が何行にもわたる式になった時に
同じことができるのかい。


240:デフォルトの名無しさん
06/01/05 19:08:17
スレ違い乙

241:デフォルトの名無しさん
06/01/05 19:12:42
emacs講座ですか

242:デフォルトの名無しさん
06/01/05 19:16:25
>>238
let*ってそのためにあると思ってたんだけど…。
(let* ((a-result (a ...))
     (b-result (b a-result))
     (c-result (c b-result)))
     (d c-result))
使った事ないけどさ。


243:デフォルトの名無しさん
06/01/05 19:26:42
どっちにしても、ぐだぐだやん。

244:デフォルトの名無しさん
06/01/05 20:06:48
何がぐだぐだなのかわからん。

245:デフォルトの名無しさん
06/01/05 21:30:18
Lisp脳と聞いて、Ruby脳が飛んで着ました。

246:デフォルトの名無しさん
06/01/05 21:42:14
Flexのライセンスについて質問なのですが、いまいち不明なところがあります。
Flexをつかって生成されたものに関してなのですが、

Note that the "flex.skl" scanner skeleton carries no copyright notice.
You are free to do whatever you please with scanners generated using flex;
for them, you are not even bound by the above copyright.

とあるので、生成されたものに関しては著作権表示すらなしに組み込むことが可能であってますでしょうか?

それとも、
This product includes software developed by the University of California, Berkeley and its contributors

この一文はやはりいれておかなければならないのでしょうか?

識者の方々よろしければご教授いただけたらとおもいます。

247:デフォルトの名無しさん
06/01/05 23:24:12
普通に読めば著作権表示入れる必要はないと思うけど…。

248:デフォルトの名無しさん
06/01/05 23:42:56
ここは Copyright and/or Copyleft については素人集団だからな。
一応、著作権スレにでもあたってみたら?

249:デフォルトの名無しさん
06/01/05 23:49:49
そういうツールで生成したやつは、たいてい著作権的には
ツールの方の著作権は関係ないって感じになる。

ライブラリリンクとかで、生成した成果物が、他人の著作物を含むと
ややこしくなるがこの場合そうじゃないしな。

250:デフォルトの名無しさん
06/01/06 00:14:17
>>249
その程度なら誰でも想像できるんだけどな
中途半端なカキコ見は混乱のもと


251:デフォルトの名無しさん
06/01/06 00:29:25
ていうか、246はどう見ても著作権表示入れる必要はないと
はっきり書いてあるようにしか見えんが。

252:デフォルトの名無しさん
06/01/06 00:56:01
>>251
俺にもそう読める。246よ著作権表示は一切不要と心得よ

253:デフォルトの名無しさん
06/01/06 01:23:45
246です。

みなさま質問に対してのご返答ありがとうございました。

ライセンスは色々とありまして、その中でも、特にツールで生成されたものに対しては扱いが分かりづらいものが
ありまして質問させて頂くに至りました。
コンパイラ・スクリプトエンジンに関連あるFlexについての質問でしたが、微妙にスレ違いだったかもしれません。
そのために気を害してしまった方がおられましたら、お詫び致します。


254:デフォルトの名無しさん
06/01/06 01:25:31
もともとスレ違いの連続みたいなスレだから

255:デフォルトの名無しさん
06/01/06 03:20:02
俺言語を作ってる人達の雑談スレッドだろ

256:デフォルトの名無しさん
06/01/06 05:58:15
>>255
俺言語は非難しないが、俺様言語な香具師が来ると痛すぎ

257:デフォルトの名無しさん
06/01/06 08:06:18
俺言語と俺様言語の違いとは?

258:デフォルトの名無しさん
06/01/06 23:18:40
Lisp と Ruby の違いと解く。
さて、その心は?

259:デフォルトの名無しさん
06/01/06 23:55:00
>>257
俺言語は局所的用途の為に作られたもの
俺様言語は自己満足のたまもの。



260:デフォルトの名無しさん
06/01/06 23:58:22
WinAPIの質問ですいませんけど、
WindowsでJIT作ろうとしたら

void *mem = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE)
memの先にコード書き込む
VirtualProtect(mem, size, PAGE_EXECUTE, &old)
ジャンプする

で良いんでしょうか?


261:デフォルトの名無しさん
06/01/07 00:46:43
WRITEをはずしておくと意図しないアレをアレできるからアレかも

262:デフォルトの名無しさん
06/01/07 19:10:16
>>259
うまい!
あんた、扇子あるよ。


263:デフォルトの名無しさん
06/01/07 20:11:22
ま、何を作ろうともLispに還元されるわけだけどね。

264:デフォルトの名無しさん
06/01/07 21:27:15
>>261
PAGE_EXECUTE

コミット済みページ領域に対する実行アクセス権を有効にします。
このコミット済み領域の読み取りまたは書き込みを行おうとすると、
アクセス違反が発生します。

265:デフォルトの名無しさん
06/01/08 05:32:27
>>264
そうだったんか・・・
PAGE_EXECUTE_READ とは別か・・・

266:デフォルトの名無しさん
06/01/08 23:06:40
りんご

267:デフォルトの名無しさん
06/01/08 23:30:44

===== FORTRAN 77 =====


268:デフォルトの名無しさん
06/01/09 01:38:26
DEFINT A-Z

269:デフォルトの名無しさん
06/01/10 23:40:58
なんで、最適化用語って変なのばかりなんだろう?
もうちょっと、かっこいい名前つけられんのかねぇ?

270:デフォルトの名無しさん
06/01/10 23:51:15
コンパイラの用語って変なのばっかり。
還元(reduce)って言葉見つけたとき、酸化還元の還元かとおもったよ。

271:デフォルトの名無しさん
06/01/10 23:56:40
合ってるよ。reduce には酸化還元の還元という意味もある。

272:デフォルトの名無しさん
06/01/11 00:05:43
コンパイラ用語に使うときは意訳でよいから別の言葉を使って欲しかった。

273:デフォルトの名無しさん
06/01/11 00:42:29
もとに戻すんだから意味的にも還元で問題なかろう。
日本語力の乏しさを棚に上げて何言ってんだ。

274:デフォルトの名無しさん
06/01/11 01:05:57
>>269
例えば?

>>272
じゃ、「リデュース」で。

275:デフォルトの名無しさん
06/01/11 01:22:05
上方遷移…余計わからんな

276:デフォルトの名無しさん
06/01/11 03:36:45
>>270
コンピュータ用語自体変なの多いから気にスンナ


277:デフォルトの名無しさん
06/01/11 05:21:22
自己満足のために、lispのdefmacroのc言語風なものを実装してます。
for(i=0,i<10,i++,printf("%d\n",i));
といったかんじのことは出来るようになったのですが、
for(i=0;i<10;i++){printf("%d\n",i);}と言った外側にブロックを
持ったマクロは、どうやって実現したらいいか悩んでます。
何かいい参考資料ないでしょうか???

278:デフォルトの名無しさん
06/01/11 06:05:07
>>277
URLリンク(mike-austin.com)

279:デフォルトの名無しさん
06/01/11 08:25:43
>>278
ありがとうございます。
Dylanですか。初めて聞きました。
結構古い言語なんですね。仕様読んでみます。
使ってみたい気がするのですが、windowsバイナリとか落ちてないのかなぁ。

280:デフォルトの名無しさん
06/01/11 08:36:56
>>279
商用の Dylan 処理系がオープンソースになったものがあるよ。
URLリンク(www.gwydiondylan.org)

281:デフォルトの名無しさん
06/01/11 12:53:41
>>280
ほんとだ。ちょっと探せば見つかるじゃん。orz
ありがとうござます。

Hygieneって書いてあるので、基本的に名前の衝突が回避されていて、
BNFを書くような感じでパターン照合を行うものがDylanのマクロと考えてよいのでしょうか?
パターン照合はやったことがないのですが、
構文解析器の自動生成ができる技術力ないと作れないような気がするのですが。。。


282:デフォルトの名無しさん
06/01/11 13:27:11
>>281
Schemeのsyntax-rulesの美しさに萌えろ。S式最強。

283:デフォルトの名無しさん
06/01/11 14:11:20
>>282
Schemeのsyntax-rulesが作れれば、そりゃ、もー、うれしいんですけど。
S式だとS式でない場合に比べて、実装が簡単になるのでしょうか?
それだと、うれしいんだけどなぁ。


284:デフォルトの名無しさん
06/01/11 15:55:15
>>283
どんな文法を使おうと、結局はツリーにしてマッチや変換をかけるでしょ。
S式の場合は最初からツリーになってるから前半の(どっちかっつうとtrivialな)
ステージが省ける、ってだけじゃないかと。
言語デザイナの立場だと文法も重要なんだろうけど。


285:269
06/01/11 20:30:31
>>274
例えば、皮剥き

286:デフォルトの名無しさん
06/01/11 20:53:09
パターンマッチマクロってどんな syntax の言語でも実装可能なの?

287:デフォルトの名無しさん
06/01/12 00:51:45
自分の欲しいsyntaxのマクロを人に書かせたいと見たw


288:デフォルトの名無しさん
06/01/12 06:39:51
>>286
可能か不可能かなら可能でしょう。
使いやすいとかわかりやすいものになるかどうかは別。

289:デフォルトの名無しさん
06/01/12 08:35:55
>>288
どうもありがとう。

>>287
Ruby や ECMAScript, Python は acceptable lisp と言われているけど、
マクロを追加すればもっと Lisp の強力さに近付くかなと。

290:デフォルトの名無しさん
06/01/12 11:28:30
>>287

自分は、schemeのsyntax-rulesを実装したいのだけど、
わからないので、簡単なソース付きで解説してほしいです。

自分のほしい言語をすべて書いてもらえたら幸せです。
schemeのスレとかで聞いたほうがいいのかなぁ?

>>287>>288>>289
PythonはDylanに似たマクロが入るとかいう噂がある(あった?)ようです。
どんな言語でも適用できそうなので、(よくわかってないのですが)
Dylanのマクロのアイディアはとにかく凄いような気がします。
C用のDylan風マクロとか、Java用のDylan風マクロとかあったら
そりゃもう、うれしいんじゃないかなぁと思います。


291:デフォルトの名無しさん
06/01/12 11:40:09
schemeのスレで質問してみました。

292:トラックバック ★
06/01/12 21:15:09
【トラックバック来たよ】 (ver. 0.11)
[タイトル] 萌え言語を作ろう!
[発ブログ] プログラム技術@2ch掲示板
スレリンク(tech板)l50
[=要約=]
日本語で書ける言語では「ひまわり」なんてのがありますが
いまいち使いづらいというか、萌えないw

ということで、萌え萌えな言語を作ってみようと言う企画です。





293:デフォルトの名無しさん
06/01/12 22:06:16
萌言語案

ハァハァ{



の機能

while(1){
...
}

294:デフォルトの名無しさん
06/01/12 23:04:56
萌えとハァハァは別だよ派
萌えもハァハァも一緒だよ派


295:デフォルトの名無しさん
06/01/13 00:30:47
#define _ 1

とかやると、

for (;_;) 仕事;

となるわなw

萌えないが、実感はむしろこっちのほうが(泣)


296:デフォルトの名無しさん
06/01/13 00:42:10
#define T_T 1

while (T_T) 仕事;

297:デフォルトの名無しさん
06/01/13 18:49:31
#define ハァハァ 999

while(ハァハァ) 言語スレ

298:デフォルトの名無しさん
06/01/13 23:33:15
変な用語の例(その2)

・せわしない。。。
・なまけた。。。

299:デフォルトの名無しさん
06/01/14 00:03:57
bool A = ture;
bool T_T = true;

for(;A;) wile(T_T) int y=-(T_T);

300:デフォルトの名無しさん
06/01/14 10:39:00
assert マクロって must って名前にしたほうがよくない?

assert ( a == b ) → must( a == b )


301:デフォルトの名無しさん
06/01/14 11:31:50
assert that a equals b (thatは略可)
はそのまま読めるけど、mustはどう読んだらいいんだ?

302:デフォルトの名無しさん
06/01/14 13:16:28
a == b で「なければならない」
should ( a == b ) とか must( a == b )


303:デフォルトの名無しさん
06/01/14 15:18:27
must(a == b) を a == b でなければならないと読むのは
英語的におかしくないか。
! 演算子みたいに must が演算子だとして a must== b ならわかるが。

304:デフォルトの名無しさん
06/01/14 15:25:59
must be (a is equal to b)
なんじゃないの。

305:デフォルトの名無しさん
06/01/14 15:42:50
だから、それが英語的におかしいといっている。

306:デフォルトの名無しさん
06/01/14 15:50:52
じゃ、 must be a condition of (a == b) は?

307:300
06/01/14 16:14:15
いや、まあそんなに深い意味で発言したわけじゃないけど
英語的にどうこうというか、
自分的にはこっちのほうが直感的かなと思っただけ
初心者に assert を教えたらピンとこなさそうな顔してたもんだから

308:デフォルトの名無しさん
06/01/14 16:24:42
個人的には ensure が良いと思う。ちょっと意味合いが変わって来ちゃうけど。

309:デフォルトの名無しさん
06/01/14 18:15:19
>>307
assertって単語になじみが無いだけだ、辞書引かせてからassertを使った例文を毎日一個5営業日続ければ覚える。


310:デフォルトの名無しさん
06/01/14 18:37:19
俺なら、

must.be.A.eq.B

が一番すんなりと入るかな?


311:デフォルトの名無しさん
06/01/14 19:04:13
俺なら、

zettai(a == b)

が一番すんなりと入るわ。

312:デフォルトの名無しさん
06/01/14 19:05:53
(a == b)じゃなきゃいやん

313:300
06/01/14 19:41:09
assert だけだと、どっちの場合に警告するのかよくわかんなくない?
a == b 「だったら」警告するのか
a == b 「でなければ」警告するのか。
must とか(あるいは311,312 でもいいけど)だと、
明らかに後者が連想されるんじゃないかなと思った

314:デフォルトの名無しさん
06/01/14 19:57:21
「ここでは(a == b)になると断言する」と日本語で言っても?

315:デフォルトの名無しさん
06/01/14 20:01:06
assert に 『警告する』 って意味は無いんだよなぁ……。

316:デフォルトの名無しさん
06/01/14 20:01:45
assert false の場合はどーやって解釈すりゃいい?

317:デフォルトの名無しさん
06/01/14 20:03:01
『常に偽であると表明する』

prolog の fail みたいな。

318:300
06/01/14 20:37:49
>>315
あ、ホントだ、やべえ!長いこと勘違いしとった!!
「断言する」で問題ないじゃん!
てことは、assert でも問題ナスorz

319:デフォルトの名無しさん
06/01/14 20:43:02
ドンマイ

320:デフォルトの名無しさん
06/01/14 20:43:14
>>316
正確には「もしここに来たら(a == b)がtrueであると断言する」と思えばいい。
assert falseは「もしここに来たらfalseがtrueであると断言する」、
つまり「ここには来ることはありえないと断言する」。

321:デフォルトの名無しさん
06/01/14 20:59:13
#define assert 断言する

断言する(a == b)

322:デフォルトの名無しさん
06/01/14 21:02:32
スキャナとパーザって、マルチバイト文字を通せるのですか?

323:デフォルトの名無しさん
06/01/14 21:12:13
通すように作れば通る。

324:デフォルトの名無しさん
06/01/14 21:56:47
シングルバイト文字の8バイトの連続だよ?
たまたま 0x80 より大きいだけ

325:デフォルトの名無しさん
06/01/14 22:15:08
>>324
アフォ来た~~~!!

326:デフォルトの名無しさん
06/01/15 01:00:21
>>324
8バイトって何だ8バイトって。

実際には322の言うように、通るように作れば通るし、今時flexもbisonも
8bitは通す。マルチバイト文字というと、SJISだと0x5c問題が出てくる
可能性は歩けど、それはlexerのつくりの問題だよな。


327:デフォルトの名無しさん
06/01/15 23:35:26
変な用語その3

マトン

328:デフォルトの名無しさん
06/01/15 23:41:00
羊肉?

329:デフォルトの名無しさん
06/01/15 23:41:51
自動羊肉

330:デフォルトの名無しさん
06/01/15 23:57:17
オートマタ。

331:デフォルトの名無しさん
06/01/16 00:59:16
オート マトン
というよりは
オー トマトン
何だが。

332:デフォルトの名無しさん
06/01/16 04:17:47
Oh! Tomato! n?

333:デフォルトの名無しさん
06/01/16 05:17:47
コンピュータ関係の変な用語ってのはKILLとかZOMBIEとかENTITYとかじゃねぇのか?


334:デフォルトの名無しさん
06/01/16 07:13:02
デムパな単語が、そんなに嫌か?

335:デフォルトの名無しさん
06/01/16 22:02:30
>>327
automate(自動)+ton(~風)、「自動っぽいもの」くらいの意味。

336:デフォルトの名無しさん
06/01/16 23:15:29
>>335
こらこら。だますんじゃない。

337:デフォルトの名無しさん
06/01/16 23:29:55
自動人形

338:デフォルトの名無しさん
06/01/17 01:33:13
ギリシャ語のautomatos(自立して動くもの)が語源だっけか。
別にどうでもいいけど。

339:デフォルトの名無しさん
06/01/17 23:22:03
>>329
昔食肉工場の機械が、簡易プログラムのような物で動いていて
たまたま羊毛の盛んな時期と重なった

340:デフォルトの名無しさん
06/01/18 00:58:17
>>339
ツマンネ

しかしあれだな、Lisp叩きやRuby叩きの話が出て来ると、すぐ「実装の話をしろよ!」という
主張が出て来るが、実装の話が好きな人達は、スレが閑散としてても実装の話はしないんだよな。

341:デフォルトの名無しさん
06/01/18 01:14:52
assertやらオートマータやらの話をしている輩が何を偉そうに

342:デフォルトの名無しさん
06/01/18 01:26:06
>>341
何一つ自分からネタ振れない輩が何を偉そうに。

つか、俺はassertやオートマータの話なんかしてないし。
だいたい、ここじゃちょくちょく構文解析+αのレベルで「間違い」が書き込まれる
ことがあるんだが、自称凄い人達はその訂正もしてくれないのな。

343:デフォルトの名無しさん
06/01/18 08:54:41
まず、自称このスレの間違いをわかってる君が、具体的に間違いを指摘してみては?

344:260
06/01/18 23:33:35
>>342
詳しい人らしいんで返答を乞うてみます。


345:デフォルトの名無しさん
06/01/19 06:52:05
342が「自分に何がわかっているのかを書かなくていい理由」を考えつくまで
もう少しお待ち下さい。

346:342ではないけれど
06/01/19 21:35:50
なぜこんな流れに。。。

俺はレベルの低い実装の質問を書き込んでいたものですが
342の人は多分質問に答えてくれた人なんじゃないかという
気がしています。

逆に意地悪な感じで初心者を馬鹿にしている人達は
初心者の質問が書かれるたびに
「このスレ~以外は意味ない」とかそんなんばかりでしょう。
そういうのはレベルが低くはないんですか?

347:デフォルトの名無しさん
06/01/19 22:39:30
エスパー光臨

348:デフォルトの名無しさん
06/01/19 22:59:51
マシンのネイティブコードを吐き出すための情報(命令セットってやつ?)はどこから入手したらいいのですか?
VMや構文木直辿りのインタプリタしかやったことないのでそろそろコンパイラにチャレンジです。

349:デフォルトの名無しさん
06/01/19 23:16:32
>>348
えーと、ギャグで言ってるんだよね?


350:デフォルトの名無しさん
06/01/19 23:23:56
前からテンプラにその情報源がないのは、
ひどく片手落ちな気がしてたよ

351:デフォルトの名無しさん
06/01/19 23:35:30
>>350
どのマシンがターゲットなんだかワカランのじゃ話にもならないし、少しだけ乗せるとアンチとか出てきて喧嘩になるし
ろくな事ないからじゃないの?


352:デフォルトの名無しさん
06/01/19 23:42:03
IA32だけならば、誰も文句いわねえと思うが・・・
マカーでさえもう文句いわねえ

とおもったが、このスレの二大言語(笑)の信者は
蚊帳の外に置かれてしまうかw

353:デフォルトの名無しさん
06/01/19 23:47:30
>>352
でIA32の場合インテルに資料請求するか秋葉あたりでデータシート買うって言う選択肢な訳だけど。


354:デフォルトの名無しさん
06/01/19 23:51:23
>>352 の意味が分からん。

355:デフォルトの名無しさん
06/01/19 23:52:08
lisp原理主義者はcarをeaxに、cdrをedxに。

>>353
例のpdfじゃ不足?

356:デフォルトの名無しさん
06/01/20 02:46:07
URLリンク(wiki.osdev.info)
でどうでしょう

357:デフォルトの名無しさん
06/01/20 02:53:46
PowerPC
URLリンク(opensolaris.org)

358:デフォルトの名無しさん
06/01/20 05:00:59
> でIA32の場合インテルに資料請求するか秋葉あたりでデータシート買うって言う選
> 択肢な訳だけど。

それ、いつの時代の話?
ほとんどのCPUの命令セットはWebから落せる。
しかも IA32 の場合、日本語に訳されてる。

URLリンク(www.intel.com)
にある
IA-32 インテル アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル
からどうぞ。

359:デフォルトの名無しさん
06/01/20 05:29:13
>>358
紙のマニュアルの方が扱いが楽だからなぁ。
プリントすると紙質の関係でつらいからね。


360:デフォルトの名無しさん
06/01/20 07:49:40
そんなの選択肢からはずす理由にはならんだろ。
知らなかっただけなのに、言い訳苦しすぎですよ先輩。

361:デフォルトの名無しさん
06/01/22 12:39:02
新しい言語本がでてるな。
リンゴに続けるか?




362:デフォルトの名無しさん
06/01/22 13:30:05
>>361
どれ?

363:デフォルトの名無しさん
06/01/22 14:24:41
>>361
KWSK

364:デフォルトの名無しさん
06/01/22 14:25:30
っていうかリンゴってどれだw
スモールコンパイラの制作で学ぶプログラムのしくみ?

365:デフォルトの名無しさん
06/01/22 19:48:58
>>364
リンゴ本はその通り。
別名綾タソ本


366:デフォルトの名無しさん
06/01/22 23:16:51
手続き呼び出し/呼び出されの制御はどうするのが一番簡単だと思います?
一時変数・局所データとか考えると色々と面倒……

一時変数については呼び出し側にスタック作っといて、呼び出され側が
勝手に取り出すようにするのが簡単かな?スタックマシンにすると構文木
を解釈するのが面倒臭そうだし……


367:デフォルトの名無しさん
06/01/24 00:04:05
>>366
作ろうとしているのが機械語吐くコンパイラなのか、バイトコード吐くのか、
Rubyみたいに解析木を実行するタイプなのかもわからんでは何も言えんわな。

>一時変数については呼び出し側にスタック作っといて、呼び出され側が
>勝手に取り出すようにするのが簡単かな?

呼び出し側と呼び出され側でスタックが違うの?

>スタックマシンにすると構文木を解釈するのが面倒臭そうだし……

意味わかんねえっす。どっちみち構文木は解釈しなきゃいけないのでは。

368:366
06/01/24 00:46:10
>367
おお、すみませぬ。インタープリタ作ろうとしています。
まずの目標はRubyみたいな解析木を実行するタイプですね。

>呼び出し側と呼び出され側でスタックが違うの?
一時変数の管理責任と、手続呼び出しの動作主体をどのように割り振ろうかな……
と思いまして。前述の例だと
 一時変数の管理責任:呼出側 -> スタック作って管理
 動作主体:呼び出され側 -> 駆動はこちら
とかを考えています。

>意味わかんねえっす。どっちみち構文木は解釈しなきゃいけないのでは。
確かにそうですな……知恵が回らなかった……


結局、
今日一日考えた結果、スタックマシンの連鎖みたいなのを作ってみることにしました。

369:デフォルトの名無しさん
06/01/24 01:29:56
>>368
実行環境フレームとか言う奴の事さしてんの?>>スタックマシンの連鎖


370:366
06/01/24 02:47:12
どっちかっていうと、駆動レコード+スタックマシンといった感じですかね。
(実装の手を抜くために)駆動ごとにスタックマシンを付けた感じ。

371:デフォルトの名無しさん
06/01/24 20:35:38
お手本がRubyだと、この擦れ的には受けが悪いかもw
おれは第三世

372:デフォルトの名無しさん
06/01/25 01:20:34
LISP最高!

373:デフォルトの名無しさん
06/01/25 01:42:38
>>372
なんでそこでLupinと言ってぼけないだよ

374:366
06/01/25 22:18:52
そういや、単純なスタックマシンだと(いくつ実引数を渡すかは関数側で決まるから)
オーバーロードでひどい目に会いそうですな……

取りあえずはスタックのリストを作って回避しようかと考えていますが、他にどんな
アイディアがあります?


375:デフォルトの名無しさん
06/01/25 22:24:52
オーバーロードを何時解決するかによる。コンパイル時に全部解決するなら問題あるまい。

376:デフォルトの名無しさん
06/01/25 23:18:18
>>375
メソッド名とシグニチャが結びついてれば実行時解釈でも問題ないしね。


377:366
06/01/25 23:20:36
そういやそうですな。

でも、折角だから多値戻しを実装してみたい気もするんですよね……
Rubyみたいに配列を戻す手もありますが。


378:デフォルトの名無しさん
06/01/25 23:37:20
あまり欲張らない方がいいよ。複雑にしすぎると作ってて嫌になる。

379:366
06/01/26 00:06:21
ははは、ご心配なく。かれこれ1年以上弄んでいますので、嫌んなるのは慣れっこです。
仕事だったら素直にC++使いますし。

まあ、未だに駆動が回んなくて鬱ですが…… “1+1”ができるのはいつになることやら……


380:デフォルトの名無しさん
06/01/26 18:25:17
ルビーに学べ

381:(ぱ)
06/01/26 21:14:22
どうもです。上のほうで出ていた「ライターのM」です(たぶん)。

Rubyのような解析木実行タイプの言語を作ろうとしていて、かつ、独自スタックも
使うつもりなら、うちのcrowbarなんかは参考になりませんか?

URLリンク(kmaebashi.com)

>>368
>一時変数の管理責任:呼出側 -> スタック作って管理
>動作主体:呼び出され側 -> 駆動はこちら

ここで言っている「一時変数」がローカル変数のことであれば、管理責任は
呼び出され側にあるのでは。呼び出し側は呼び出され側のローカル変数を
知らないからです。

引数についてであれば、呼び出し側で領域を確保するにしても、別段それを
スタックに積む必要はないように思います。
crowbarの場合、駆動レコードごとに、変数名と値の対応表を持っています
(ver.0.3以降は、クロージャの実現のためにスコープチェーンを持っているので
ちょっとややこしいですが)。関数呼び出しでは、呼び出し時に、呼び出され側の
駆動レコード(CRB_LocalEnvironment)を作成し、その中に、ローカル変数として、
実引数の値を突っ込んでいるだけです。

引数やローカル変数の領域をスタックに確保するという実装ももちろん考えられますが
(crowbarでは代入により実行時にローカル変数が作られるのでそれはできなかった)、
その場合、引数は呼び出し側で積むことになるのでは。

いずれにしても、関数呼出しごとにスタックを持つ必要なないと思うのですが、
どうでしょうか。crowbarは演算用の独自スタックを持っていますが、スタックは1本です。
まあ、crowbarのスタックは足りなくなるとrealloc()するので、そのへんの効率低下を
嫌って関数呼び出しごとに持つ、というのならわかりますけど。

382:(ぱ)
06/01/26 21:22:58
ついでに上の方の質問に。

>>91
>ライターのM氏のページで、Cでの実装だと型そのものはUNIONにまとめてる感じでした。
>やっぱり処理系が扱う変数型をまとめてUNIONにしてしまってフラグ変数で型を見分けて扱うというのが一般的なんでしょうか?

一般的かどうかは知りませんが、crowbarでは値を保持するために2箇所で共用体を使っています。
変数の値を直接保持するCRB_Valueと、変数から指された先のヒープ中にある、
CRB_Objectです。

>そのときに、たとえばWinapiに対する拡張とか、製作時点で未知のオブジェクトに対応する場合はどういう方向になるんでしょうか?

Winapiに対する拡張とかを狙って、ネイティブポインタ型というのを導入しています。
luaのユーザデータ型も同じようなもののように見えます。

>>96
>C言語的構造体指向OO風味だと、メモリの配置さえあってれば問題なく下位の構造体にアクセスできるから、
>なんとか構造体EXとかは可能だと思う。関数ポインタつければ仮想関数もどきとかもできますぜ。

これは、crowbarで言うところのCRB_Objectについては可能でも、CRB_Valueについては
不可能ですよね。

383:366
06/01/27 00:10:43
>381
情報サンクスです。考え方のところとか色々と参考になります。

ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

>ここで言っている「一時変数」がローカル変数のことであれば、
いえ、関数の戻り値ですね。最初は関数の戻り値を次の継続に直接渡そうかと
考えていたのですが、そうすると今の自分のアイディアだと(継続のずっと先にある)
ブロックのローカル変数から実引数を取ってくるのが面倒にだったので、少し悩んでました。
スコープチェーン作って管理するのもいいのですが、もっと簡単な方法が無いかな……と
いうことで、取りあえずはスタックマシンを利用する方法でトライすることにします。

>いずれにしても、関数呼出しごとにスタックを持つ必要なないと思うのですが、
call/ccを実装したいと思っているのですが、その都度スタックを保存するのも面倒だし
いっそのこと全部の継続にスタック持たせちまえ、という乱暴なアイディアから来ています。
……まだ実装できていないので、本当にうまくいくのか不明ですが……


384:デフォルトの名無しさん
06/01/27 00:27:50
アイデアだけではなぁ、
なぜ既にあるものを使わん?
アフォ?

385:366
06/01/27 00:37:09
>384

既にある言語では無いから作っているんだけど……Schemeは近いものを感じるけどね。

あと、勉強という意味では車輪の再発明も重要だよ。


386:デフォルトの名無しさん
06/01/27 02:00:33
一年以上やって1+1も出来ないんだろ?
勉強になってるか疑問だな。

>ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
>ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

形無し&プロトタイプ指向だからポイント違う?
何言ってんだお前。

387:366
06/01/27 02:45:51
> 一年以上やって1+1も出来ないんだろ?
> 勉強になってるか疑問だな。

あら、そう? 1+1てけっこう大変だよ?
まあ、継続とか移譲とかグラフとかオートマトンとか、回り道が多いちゃ多いがね。
それもまた勉強。


>形無し&プロトタイプ指向だからポイント違う?
>何言ってんだお前。

どういう意味?


388:デフォルトの名無しさん
06/01/27 09:10:54
もういいから来るな。
一年以上で未だ1+1もできないほど頭悪いんだろ?
これから先何年もアホ質問書き込まれるかと思ったらゾッとする。

389:デフォルトの名無しさん
06/01/27 12:24:31
継続でスタック保存するのが面倒ってんなら、駆動レコードを全部
ヒープに置くって手もあるが。それだとcall/ccは駆動レコード
チェインの頭の掴んでおくだけだよ。
性能を気にしてるわけでもなさそうだし、駆動レコードごとに
スタックなんて面倒なことをなぜするのかよくわからない。


390:デフォルトの名無しさん
06/01/27 13:54:36
Lisp使いはリストを見ると車とかCD-Rとかを使い出す

391:デフォルトの名無しさん
06/01/27 13:58:48
>>390
どうして車とCDRに発想が結びつくの?

392:デフォルトの名無しさん
06/01/27 14:28:07
なにこの変なマジレス

393:デフォルトの名無しさん
06/01/27 14:39:34
Lisp使いはCD-Rのことを「クダー」と読むんだな

394:デフォルトの名無しさん
06/01/27 17:54:48
久多良木信者はLisp使いか否か?

395:デフォルトの名無しさん
06/01/27 18:21:20
>>391
しらないけどcarとcdrだからじゃない?

396:(ぱ)
06/01/27 20:21:31
>>383
>ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
>ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

crowbarは思いっきり型なし&プロトタイプベースのつもりですが。

>いえ、関数の戻り値ですね。最初は関数の戻り値を次の継続に直接渡そうかと
>考えていたのですが、そうすると今の自分のアイディアだと(継続のずっと先にある)
>ブロックのローカル変数から実引数を取ってくるのが面倒にだったので、少し悩んでました。

継続をやりたいということ自体初耳なわけですが。

継続は詳しくないので以下見当外れならすみませんですが、
「Rubyみたいな解析木を実行するタイプ」で、解析木を再帰で辿っているとすれば、
「Cのスタックどうするの?」という疑問が出てきます。
「関数の戻り値を次の継続に直接渡そう」ということだから、CPS変換を前提にしている?
だとすればそれはもう「Rubyみたいな解析木を実行するタイプ」とは言えないのでは。

>>389
関数内での、計算途中の値を積んでおくスタックのことなんじゃないでしょうか。


397:デフォルトの名無しさん
06/01/27 22:07:07
1+1ねぇ、マジレスするけど、
yacc触りはじめてその日でできたよw

398:デフォルトの名無しさん
06/01/27 22:27:40
コンパイラ構成法の一番最初の項目が電卓だからな。

399:デフォルトの名無しさん
06/01/27 22:43:00
1+1が一年以上できないとか言ってるなら、いったんScheme作ればいいのに。
コアな部分に限れば仮想マシンとコンパイラそれぞれ一日で書けるよ。
そしたら作りたい俺様言語で何をどうするかも少しは見えてくるんじゃね?


400:デフォルトの名無しさん
06/01/27 22:45:01
>>398
うちの大学は字句解析だったよ…。

401:デフォルトの名無しさん
06/01/27 23:53:04
>>398
漏れが最初にやったのは逆ポーランド式の理解だった・・・懐かしいな


402:デフォルトの名無しさん
06/01/28 00:42:37
きっかけを大別すると、
・yacc/lexまたはbison/flexで独学
・大学や専学でコンパイラ/インタプリタの講義
って感じなのかな?

403:デフォルトの名無しさん
06/01/28 00:43:46
授業でちょっとやったけど、あまりに講義資料・内容がヘボかったから独学に切り替えたなぁ。

404:デフォルトの名無しさん
06/01/28 00:58:28
情報処理の講師の説明よりも、数学の講師の説明の方が、実は分かりやすかったりするんだよな。w


405:デフォルトの名無しさん
06/01/28 01:02:41
アルゴリズムの大半は、数学の勉強だからな

406:366
06/01/28 04:22:49
しまった……中途半端な情報で混乱させていますね。すみません

>389
今作っている実装だと、駆動レコードチェイン+駆動レコード内のスタックといった
感じにしています。>396の指摘通りですね……と言っても詳しく説明していないから
わかんないよね。ごめん

>396
>crowbarは思いっきり型なし&プロトタイプベースのつもりですが。
失礼しました。まだ読み込んでいないので……

>「Rubyみたいな解析木を実行するタイプ」で、解析木を再帰で辿っているとすれば、
>「Cのスタックどうするの?」という疑問が出てきます。

今のところ、Cの関数処理プロセスに頼らない(再帰を使わない)で、
・解析木から継続の連鎖を作る
・継続を駆動する
という駆動を外部からループで回そうとしています。

>399
そうなんだけど、作りたいのはSchemeじゃないし、Schemeからちょっと離れているし。
……とはいっても、練習に作ってみるのもいい勉強かな……

>388
はあ。

407:デフォルトの名無しさん
06/01/28 04:27:43
1年で1+1が作れない、最低限の理解力すら無い人間が406を書いたと思うと
その恐ろしい知ったかぶりに愕然とする

408:デフォルトの名無しさん
06/01/28 04:45:28
しばらく放っとけないのか?

409:デフォルトの名無しさん
06/01/28 06:12:16
俺は407の方の噛みつき具合いの方が愕然とする。


410:デフォルトの名無しさん
06/01/28 08:15:29
>>409
そう? このスレの伝統だと思ってた。

411:デフォルトの名無しさん
06/01/28 10:56:44
1+1 って、意外と難しいよ。特に数値オブジェクトを + メソッドで加算する場合……とか。
経験ない人が独学でやるには、1年はちょっとキツ過ぎじゃないか? とか擁護してみる。

412:デフォルトの名無しさん
06/01/28 11:08:31
まあそういうのは人による部分が大きいよ。
CSのバックグラウンドあってOOにドップリつかった人がやり始めれば理解するのに1日かからないだろうし、逆にこれからプログラミングを始めますって人には1年じゃ無理だろうし。
極端に言えばね。
一口に何日で理解したとか何年かかっても理解できないとかから能力を量ってしまうのはナンセンスだとは思う。

413:デフォルトの名無しさん
06/01/28 11:18:12
10秒デデキマツタ!

if(strcmp(str,"1+1"))
printf("2\n");


414:デフォルトの名無しさん
06/01/28 11:38:52
>>413
情報サンクスです。考え方のところとか色々と参考になります。

ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。


415:デフォルトの名無しさん
06/01/28 12:32:42
>>406
> 今のところ、Cの関数処理プロセスに頼らない(再帰を使わない)で、
> ・解析木から継続の連鎖を作る

それをCPS変換というんじゃ…
でも素直にCPS変換したらスタックなんて出てこないと思うんだけど
(「計算途中の値」も全て継続への引数になる)。
それとも複数の引数を渡す際に、既に計算した引数の値を一時保存
しておくエリアってことかな。それを「スタック」と呼ぶのはどうかと
思うが (FILOである必要がないから)。

スタックは、普通の関数呼び出し→リターンに特化した一種の最適化
なんだよ。>>406 が何か特別な最適化のアイディアを試したいなら
別だが、原理を理解するために書いているなら、まず基本的な
CPS変換→実行系を動かしてみることをお薦めする。判断に迷うところは
とりあえず簡単に実装できるほうで書いてみる。書いてみないとわからない
ことってたくさんあるからね。とにかく動かしてから、別のアイディアを
試してみればいい。



416:デフォルトの名無しさん
06/01/28 12:58:32
>411
そうだよね……自分の場合は駆動に引っ掛かっています。オブジェクトとメソッドを
等価に扱おうとして、『どうやって駆動すりゃいいの?』というところで散々悩んでいます。
あとは名前解決とか変数呼び出しとか……

>412
OOにはけっこうドップリ漬かっているんですけどね。
ここまで彷っているのは『当たり前と思っていた駆動とか関数呼び出しが、いざ
やってみると全然当たり前じゃなかった』というのが大きいですかね。


>407, 413, 414
へえ?

417:デフォルトの名無しさん
06/01/28 13:16:19
>415
>それをCPS変換というんじゃ…
……そうだった。

> でも素直にCPS変換したらスタックなんて出てこないと思うんだけど
最初は素直にCPS変換していたんですけど、レキシカルスコープやろうとしたときに
(オレ言語のアイディアが邪魔して)うまくアクセスリンクが処理できなかったので、
スタック……というか単なるリストも併用する形を検討しています。

> まず基本的なCPS変換→実行系を動かしてみることをお薦めする
やっぱりそっちの方が近道かな……もうちょっと悩んでみます。

418:366
06/01/28 13:38:37
>>415
情報サンクスです。CPS変換のところとか色々と参考になります。

ただ、自分の目指しているのはCの関数処理プロセスに頼らない(再帰を使わない)ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

419:デフォルトの名無しさん
06/01/28 13:41:57
ありゃ、騙りも出て来たか……これだからIDの無い板は駄目だよな。
そろそろ名無しに戻るか。

>418
ふうん?

420:デフォルトの名無しさん
06/01/28 13:42:19
>>419
ふうん?

421:デフォルトの名無しさん
06/01/28 13:48:08
彼は型無し&プロトタイプ指向の言語に対して

>ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
>ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

とか言ったのが一番面白かった。最高にバカ丸出しで。


何か言われたら、はあ?とかへえ?とかふうん?とか、
何か言い返さないと気がすまないってのもポイント高し。

422:デフォルトの名無しさん
06/01/28 13:50:38
>>421
で?

423:デフォルトの名無しさん
06/01/28 13:58:54
>>422
10ポイントアップ

424:デフォルトの名無しさん
06/01/28 17:51:31
プライドだけ高そうだね。技術は(ry

425:デフォルトの名無しさん
06/01/28 17:55:29
ここの住人はプライド高いからナァ
ただし、技術は(ry


426:デフォルトの名無しさん
06/01/28 18:08:16
お前の事か?

427:デフォルトの名無しさん
06/01/28 18:52:11
プライドが高くなるのは仕方が無いのでは?
PGの四大欲求の一つである、言語の作成をやってるわけだし
OSと言語とファイルシステムとAIで良かったんだっけ?


428:デフォルトの名無しさん
06/01/28 19:03:38
OS と言語と AI は分かるけど、ファイルシステムってのは何で?
4 番目に来るのは、Emacs とか Smalltalk みたいな「環境」じゃないかな。

429:デフォルトの名無しさん
06/01/28 23:43:42
OSと言語は分かるけど、AIってのは何で?
アフォ?

430:デフォルトの名無しさん
06/01/28 23:48:46
ちょwww「四大欲求」てwww

431:デフォルトの名無しさん
06/01/28 23:58:48
ファイルシステムってOSの一部じゃないの?

432:デフォルトの名無しさん
06/01/29 00:06:41
DOS

433:デフォルトの名無しさん
06/01/29 00:50:20
どっちかってーと、OS・言語・マイクロコード(CPUの)・BIOS(とかEFI)
とかの方が

434:デフォルトの名無しさん
06/01/29 01:50:22
それはただLow Levelな方をかき集めただけじゃん

435:デフォルトの名無しさん
06/01/29 01:55:09
OS、言語、データーベース、ゲームじゃね?w

436:デフォルトの名無しさん
06/01/29 01:58:33
AIは、作れなさそうだから実際に作ろうとまでは思わないが、
願望を持つ奴は多いと思う。
ゲーム、言語、OS、AIだろう。

437:デフォルトの名無しさん
06/01/29 06:09:51
この人、数学者としてはいまいちなのかもしれないけど、
計算機科学の実情についてはよく分かってるね。
URLリンク(www.ritsumei.ac.jp)

>>428
どうでもいい話だけど、現代においてはOSこそ「環境」ではないのかな。

438:デフォルトの名無しさん
06/01/29 06:23:47
>>437
この人は自分が高いレベルにいすぎて、考え方の基準が高すぎるね。
確かに数学者を目指すレベルからすれば、計算機科学はおちこぼれが
流れる分野なのかもしれないが、一般の高校生から見れば
やっぱり、数学が必要な学科だよ。
単位とるにも数学的なものの考え方が必要な科目ばかりだしね。
一般の高校生の99%は大学でどちらかと言えば数学嫌い
になるだろうし。
一般の高校生のレベルと数学者のレベルを混同してるように見える。

439:デフォルトの名無しさん
06/01/29 06:30:44
そりゃ、京都大学理学部出身から、立命館大学情報工学科みりゃ
レベル低くも見えるだろ。
それでもそこにいる学生は相対的に数学が得意で好きだった学生
なんだということが理解できないんだろうな。

440:デフォルトの名無しさん
06/01/29 09:23:25
理学と工学は似て非なるものだしな。

441:デフォルトの名無しさん
06/01/29 15:33:57
工学で一度数学の必要性を身に沁みるとまじめに勉強する気にもなるもんだが。
一度数学の講義を受けないとそもそも数学の必要性に気付けない罠。


442:デフォルトの名無しさん
06/01/29 15:41:09
>>436
ああなるほど、ようやく分かった
人工無能の事ではなく、ホントの人格の事だったのか

人間の場合は四つの判断力を持ってるからな。
直感と理性の再現だけならどうにかなるかもしれないが、
感情と欲求の再現となると、なかなか難しいだろな


443:デフォルトの名無しさん
06/01/29 16:30:38

PGの3第欲求

(1)OS
(2)言語
(3)ハーレム

この辺りが本当の所だろう。


444:デフォルトの名無しさん
06/01/29 16:34:41
で、エロゲで代用するわけか

445:デフォルトの名無しさん
06/01/29 19:55:35
プログラマをPGと略す奴にろくな奴がいない

446:デフォルトの名無しさん
06/01/29 20:06:05
>>443
OSも言語も興味ないやつはいくらでもいそうだけどな。

447:デフォルトの名無しさん
06/01/29 20:15:58
(1)金
(2)酒
(3)ハーレム

448:初心者
06/01/29 21:13:56
質問です。
Yaccとかで論理式の短絡評価を行う常套手段はどのようなものでしょうか?
例えば、if(a==b||c==d) でa==bが確定するとc==dの評価はスキップ可能ですが、
Yaccとかだと、先にa==bとc==dが認識されてしまうと思うのです。

449:デフォルトの名無しさん
06/01/29 21:53:31
>>448
yaccが生成するのは構文解析器。
意味解析は通常は構文解析で構文木を作った後のステップであって、yaccはやってくれません。

[文字列]→字句解析→[トークン列]→構文解析→[構文木]→意味解析→[一時コード]→最適化→[ましなコード]→コード生成→[出力コード]
というように道のりは長い。
yaccがやってくれるのは構文解析だけ(でも構文解析は最適化の次に面倒くさい部分なので大助かり)。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch