05/05/13 19:15:15
>>174
2ちゃんねらって、誇れるものをあまり持たない人が多いような気がします。
だから、そうなるのでしょうね。
176:デフォルトの名無しさん
05/05/13 19:36:23
結果として複雑になったのならともかく自らわざわざ複雑にしてしかもそれに見合うメリットが見当たらないのはどうかと
177:42
05/05/13 20:46:09
>>162
>Perlのlexer/parserってあんな言語でも実は綺麗なの?
最初にRubyを出したのは俺だけど、Perlを出さなかったのは、Perlは
あまりにソースが読みにくくて読むのを断念したからだ w
だから、parserがlexerにどれくらいちょっかい出してるのかも知らない。
「Rubyソースコード完全解説」に相当する日本語解説もないしね。
別にアンチRubyってわけじゃないよ。>>150だって、推測だけどたぶん
ふだんはCとかJavaとかC++とかC#とか使ってて、たまたま>>126のリンク見て
びっくり仰天なんじゃこりゃ、と思っただけだと思うよ。
なんでもかんでもアンチだの信者だのにしたがる方こそ病んでないか。
ところで、メソッド呼び出しの括弧が省略できるのは、
「引数がひとつもないとき」は明らかなメリットがあるよな。
ひとつでも引数があるのなら、括弧ぐらいつけりゃいいじゃん、と
俺は思うけど。文末のセミコロンもね。
>>174
というわけで俺はアホだから、>>47の
>むしろ変数で情報を渡すよりカプセル化に有益なんでは。
>それ以後%startと整合性をとる必要を生じる
という発言の趣旨を>>52以来ずーっと教えて欲しいと思ってるんだが。
178:デフォルトの名無しさん
05/05/13 21:11:42
俺も括弧くらい付けりゃ良いじゃんと思う
文法は厳格かつ単純な方が好きだな
if-then-else の else が省略出来ないとか、四則演算に優先順位が無いとかでも問題無し
179:デフォルトの名無しさん
05/05/13 21:54:46
LISPがオススメ
究極の汎用プログラミング言語
180:デフォルトの名無しさん
05/05/13 22:00:28
もうお前ら、forth でも使ってりゃいいよw
181:デフォルトの名無しさん
05/05/13 23:32:47
括弧を省略できるってのは結構大きいよ。
>>178
単純で、四則演算に優先順位が無くてもOK
あなたにオススメの言語はHSPです。よかったね。
182:デフォルトの名無しさん
05/05/13 23:33:32
HSPは言語ではありません。
以後、HSPの話題はゲ製板で行ってください。
183:デフォルトの名無しさん
05/05/13 23:36:34
HSPに対する反応はぇぇぇぇぇぇぇぇぇ!
>>182
そんなあなたにオススメの言語はHSP3です。
コレは優先順位つくらしいよ。よかったね。
184:デフォルトの名無しさん
05/05/13 23:36:55
言語といえば、LISPりんごですよ!
185:デフォルトの名無しさん
05/05/13 23:41:33
LISP も HSP も大して変わらないよ。
ものは試しに、
LISP
↑この横棒を少し上に持ち上げてご覧
直ぐに HSP に変わるから。
186:デフォルトの名無しさん
05/05/13 23:45:57
文法の話とかしだすと宗教戦争になるから駄目だな(わら
187:デフォルトの名無しさん
05/05/14 00:16:37
評価するならヒューマンインターフェース的な評価手法を採るべきだ
188:デフォルトの名無しさん
05/05/14 06:23:37
日本語で懇切丁寧に解説してあるのを読んで「ソースコードを読んだ」と威張り、
ソースコードを読めないとコーディングの汚さのせいにし、
Rubyを読んだ程度でさも様々な言語のソースコードを読んだように振舞う42の
いるスレはここですか?
189:デフォルトの名無しさん
05/05/14 06:57:53
Rubyのソースが糞なのは、言語仕様側も少なからず影響してるからなあ・・
190:デフォルトの名無しさん
05/05/14 06:58:42
あ、すまん。
糞なのは、は言い過ぎた。
汚く見えるのは、に読み替えてね。
つい本音が出てしまった。
191:デフォルトの名無しさん
05/05/14 07:06:35
Rubyは入門者用のソースの解説本があるから、ソースを覗いた人は一番多いんじゃないかい。
悪口いいっぱはともかく、言語の規模考えても、準拠ポイントとしてはちょうどいいんじゃないか。
192:デフォルトの名無しさん
05/05/14 07:19:18
なんでわざわざ入門者用に糞ソース読む本が出たんだろうね。
本という形態だとすでにバージョン的に無意味になってる部分も多いだろうし。
Rubyの動作原理ならともかく、糞ソース読む練習に良いとか?
193:デフォルトの名無しさん
05/05/14 07:23:59
>括弧を省略できるってのは結構大きいよ。
なんつーか、ad hoc 感ブリバリで好きになれないな
194:デフォルトの名無しさん
05/05/14 07:53:49
現実問題、実用レベルに達した処理系で
「ソースが糞」じゃないプロジェクトなんてあるの?
195:デフォルトの名無しさん
05/05/14 07:55:25
>>192
> Rubyの動作原理ならともかく、糞ソース読む練習に良いとか?
あの本、能書きにはそれっぽく書いてある。だけど実際の本文は
「わかった奴が教えを垂れる」スタイルなんで、あんまり
ソースの読み方の参考というのにはならない。
前提となる知識が先に書いてあるのは別にいいんだが、何をとばして何を読む
ってのが説明の都合で決まりすぎで、ソースの読み手から見た判断という視点
じゃない。
196:デフォルトの名無しさん
05/05/14 10:40:28
>>185
ホントダw
I-I S P
197:デフォルトの名無しさん
05/05/14 10:41:29
偶然の一致がこれほど恐ろしいとは
198:42
05/05/14 12:19:46
念のため書いとくけど、Rubyのソースが全編糞とは俺は思ってないからね。
eval.cのsetjmp/longjmpの乱用と、parserとlexerがグローバル変数で
状態を共有してるのがひどいと言ってるだけ。他はまあ、普通のCソースだと思う。
>>188
>ソースコードを読めないとコーディングの汚さのせいにし、
Perlのソース読んだことあるかい?
199:42
05/05/14 12:39:23
補遺:
setjmp/longjmpの乱用についても、実行形態を考えるとやむを得ないところは
あるんだよな。
いっそバイトコードインタプリタにでもした方がよかったんじゃないかとも
思う。そうするとGCも今のコンサバGCじゃなくなって、もはや原型をとどめなく
なりそうだが。
200:デフォルトの名無しさん
05/05/14 15:42:13
プププププ このスレおもしれー。
Perlのソースコードが汚いって?
少なくともRubyが***自力で***読めてPerlが読めない理由はねえよ。
てめえのおつむが足りないってことを精一杯開陳しつつしかも自分では
認めないって、最悪じゃね?
しかもいっちょまえに批評家気取って、はーゲラゲラゲラ
しかもえらそうなくせに何言ってるかわかってなさげなトンチンカンぶりがラブリー
201:デフォルトの名無しさん
05/05/14 15:44:11
>>200
ソースは汚いと思わないが、build課程はかなりひどい物の一つだと思うぞ。
202:デフォルトの名無しさん
05/05/14 17:01:52
Perlのは暗号だからな、読む気にもならん
203:42
05/05/14 19:50:57
そもそも俺は自分はアホだと再三言ってるんだがねえ。
何がそんなに気に入らないんだか。
>少なくともRubyが***自力で***読めてPerlが読めない理由はねえよ。
へえ。
Rubyのソースが間違いなく***自力で***読める人のご意見。
URLリンク(jp.rubyist.net)
| Perl のソースコードは印象的だよね。すごい。読めない。
| マクロの嵐で、よくわからない識別子が山のように出てきて、
| いったい何? みたいな、すごい略語でさぁ。ほんとに、名前重要。]
| この識別子は、何を表しているのか、何をしようとしているのか、
| わかんないんだよ。
204:デフォルトの名無しさん
05/05/14 20:02:36
そりゃ自分で書いたコードなんだから読めるだろ。
それが論拠になると本気で思ってる? 痛い奴。
205:デフォルトの名無しさん
05/05/14 20:20:43
>>203
>>53
206:デフォルトの名無しさん
05/05/14 22:53:41
>>194
その通り!
めずらしく、いい書き込みだなw
207:デフォルトの名無しさん
05/05/14 23:33:01
だから、Perlが汚いからといってRubyが汚くないという話にはならないの
ことあるごとにPerlをもちだしてくる信者はいい加減にしろ
208:デフォルトの名無しさん
05/05/14 23:44:40
Ocamlのソースは綺麗だったよ
実用レベルなのか知らないけど
209:デフォルトの名無しさん
05/05/15 00:04:59
>>208
高速な事は事実。
210:デフォルトの名無しさん
05/05/15 01:17:27
OCamlのソースはコアのインタプリタ以外OCamlで書かれてるからね。
Cで処理系書いてる限りソースが糞になるのはやっぱり避けられないのかも?
211:デフォルトの名無しさん
05/05/15 01:22:45
LISPも、というか関数型言語は綺麗なソースが多い気がする。
それぞれの言語自身で記述する風習みたいなのがあるからかね。
212:デフォルトの名無しさん
05/05/15 02:02:08
関数型言語に限らずbootstrapしてない言語処理系なんて
表現能力のなさを露呈してるようなもんじゃないかな。
WindowsをUnixで作ってるみたいな。
SubversionのソースをCVSで管理してるみたいな。
もちろんスクリプト言語のように目指すところが違えば話は別だけど。
213:デフォルトの名無しさん
05/05/15 03:37:32
>>211
SBCL は C の部分が汚くて悶絶した
214:デフォルトの名無しさん
05/05/15 03:45:28
そうか? 普通に読めたけどなあ。SBCL。
215:デフォルトの名無しさん
05/05/15 03:59:02
読めるけど、エラー処理省いてたり、マジック文字列埋め込んでたり、バータリ的な所が
けっこうあったよ。-Wall 付けてビルドするとやたら Warning が出るし。
たまにクリーンアップのパッチが提出されてるけど、マージされてるのか疑問。
216:デフォルトの名無しさん
05/05/15 07:41:04
すれ違いですまんが、「バータリ的」って何?
217:デフォルトの名無しさん
05/05/15 07:44:34
場当たり的
218:デフォルトの名無しさん
05/05/15 08:24:59
>>217
サンクス。
人の名前かと思ったんでワケワカラン様になってた。
219:デフォルトの名無しさん
05/05/15 11:39:02
>>212
ブートストラップの意味おしえて
220:デフォルトの名無しさん
05/05/15 11:40:28
>>219
ストローストラップの弟
221:デフォルトの名無しさん
05/05/15 13:08:41
コンパイラ業界でのbootstrapは、
コンパイラが自分自身のソースをコンパイルすること。
(だよね?
222:デフォルトの名無しさん
05/05/15 13:38:45
話の流れを折ってすいませんが、
Engineering a Compiler
URLリンク(www.amazon.com)
ってどんなもんでしょうね?
223:デフォルトの名無しさん
05/05/15 14:56:04
>>222
☆☆☆☆★
初学者はドラゴンブック嫁って事になってるの?メリケンでもいまだに。ちょっと安心していい?
224:219
05/05/15 17:24:53
>>221
TNX!
225:デフォルトの名無しさん
05/05/15 17:38:46
ネタにマジレスかもしれないが、ストローストラップって誰?
ひょっとしてストラウストラップのこと?
ストローストラップって発音することがあるの?
226:デフォルトの名無しさん
05/05/15 17:44:52
アメリカ<=>イギリス
227:デフォルトの名無しさん
05/05/15 17:45:00
URLリンク(www.research.att.com)
228:デフォルトの名無しさん
05/05/15 18:05:33
ステューステュオップ
229:デフォルトの名無しさん
05/05/15 18:08:30
いい声してるなあ
230:デフォルトの名無しさん
05/05/15 18:11:32
>>228
耳腐ってんのか?
ステゥーステュオァプ
231:デフォルトの名無しさん
05/05/15 18:21:41
「C++でお勧めの本ありますか?」
「ステゥーステュオァプでも読んどけ」
「……宇宙人?」
232:デフォルトの名無しさん
05/05/19 14:36:35
練習で、生成系を使わずにCのプリコンパイラを作ろうと思っているのですが、
ソースコードの意味解析をやる必要があるかどうかが直感的にわからなくなってしまいました。
#define文は型検査をする必要はないので、いわゆる意味解析の必要ってない気もするのですが、
プリコンパイルはそれはそれで一つの言語であるので、どこかで意味解析が必要になりそうな気もします。
実際に必要なのかどうなのか、簡単な理由と共に教えてもらえないでしょうか?
どうぞよろしくお願いします。
233:232
05/05/19 15:30:19
プリコンパイラってなんだ…プリプロセッサですね…
234:デフォルトの名無しさん
05/05/19 16:26:45
なんで既存のプリプロセッサを読まないんだろう……
235:デフォルトの名無しさん
05/05/19 16:30:36
俺様と同じように言葉だけ覚えてほとんど理解できてない感じのレスだな。
そんな俺様が勘で答えてやろう。
C言語本体としての意味解析はいらない(と思う、というか構文解析もできないだろう)。
マクロ言語としての意味解析はいるかもしれない。
ただ、Cのマクロ言語は本当に簡単な言語なので、
構文解析まで通れば意味解析はほとんど何もすることが
ないかもしれない。ひょっとしたらあるかもしれない。
236:235
05/05/19 16:32:40
あ、あれ?既存のプリプロセッサを読めとか
そういうレベルの話なの?
やっぱり全然見当違いのレスしちゃったかも。
ごめん、なかったことにしてくれ。
237:232
05/05/19 17:22:08
>>234
直感ですが、cppやgccのpre-processorのコードは高速化のために最適化されていて、
私みたいな知識のない人間が追うには辛いのではないかと思っていました。
反省して読んでみることにします。
>>235
まさにそういう感じです<言葉だけ覚えてほとんど理解できてない。
理解するために簡単そうに見えるプリプロセッサを作ろうと思ったのですが、
作る前に色々と考えていたら意味解析のセクションが必要なのかどうかがわからなくなって…
とりあえず、プリプロセッサの意味規則がどんなものかを考えることが重要なのですね。
まだ紙の上で考えている状態なので、具体的にどのような構文木を出せばよいのか、
そこのところで悩んでいる途中で出た疑問でした。
わかっていない私にわかりやすく説明してくれてありがとうございました。
238:デフォルトの名無しさん
05/05/19 21:07:54
情処かどっかで
世の中のCのプリプロセッサはバグだらけ
みたいな論文を見たような気がする。
239:232
05/05/19 21:50:18
仕様はかなり細かいみたいですね<プリプロセッサ
(あくまで参考として:URLリンク(www.sra.co.jp))
240:デフォルトの名無しさん
05/05/19 22:15:21
>>232
小さいCPP(1ファイルに収まるくらいのやつ)が入ってるよ
URLリンク(www.lsi-j.co.jp)
241:デフォルトの名無しさん
05/05/20 02:20:54
このスレにはソースを読めばなんでもわかると思ってるやつしかおらんのか。
242:デフォルトの名無しさん
05/05/20 03:23:19
ソース読まない奴は無能
243:デフォルトの名無しさん
05/05/20 05:55:55
仕様書にはいつもソース読めと書いてます。
結局ソース見るのが一番早い。
244:デフォルトの名無しさん
05/05/20 09:44:15
>>243
10行くらいならね。
245:デフォルトの名無しさん
05/05/20 17:22:18
JavaやVBAのパーサを書いて見たいんですが、どっかにgrammarでも落ちていないですか?
246:デフォルトの名無しさん
05/05/20 17:44:30
Javaならあるよ。VBAは知らない。
URLリンク(java.sun.com)
247:デフォルトの名無しさん
05/05/20 18:57:23
レスサンクスです。
早速構文チェッカーでも書いてみます。
やはりC++より構文規則は見た目きれいですね。
C++の構文はどこもかしこもオプションだらけでよくJavaプログラマが汚いという意味がよくわかりました。
私もC++パーサを書いたあと、しばらくはC++でプログラムしなくなりました。
248:デフォルトの名無しさん
05/05/20 21:23:32
>>238
たぶんこれだろ。
URLリンク(lc.linux.or.jp)
URLリンク(www.ipa.go.jp)
249:デフォルトの名無しさん
05/05/20 22:49:23
>>247
その意見には激しく同意した上で、なおかつC++が最高の言語だと思う自分がいる
250:デフォルトの名無しさん
05/05/20 23:17:35
なんか、俺はプログラミングするたびに違う言語使ってる気がする。
統一したほうがいいのだろうか。
251:デフォルトの名無しさん
05/05/20 23:24:33
またScheme処理系作っちまった
やめられない
252:デフォルトの名無しさん
05/05/20 23:27:55
同じ物ばかりつくって飽きないの?
253:デフォルトの名無しさん
05/05/20 23:35:07
もうとまらねーよ
254:デフォルトの名無しさん
05/05/20 23:39:04
>>252
Scheme処理系は何個あっても困らないからねえ
255:デフォルトの名無しさん
05/05/21 00:54:16
JVMで動くCOBOLを作ってみてくれ。
256:デフォルトの名無しさん
05/05/21 00:55:17
お前ら、もっと斬新なことしてくれよ
実装なんか興味ないからさ。
257:デフォルトの名無しさん
05/05/21 01:18:36
タガログ語プログラミング言語とか。
258:デフォルトの名無しさん
05/05/21 01:33:11
>>251
公開キボンヌ
259:デフォルトの名無しさん
05/05/21 01:33:48
面白いこと=トロイ
な頭の俺をどうにかしてください
260:デフォルトの名無しさん
05/05/21 01:35:50
>>256
そんなあなたに「りんg(ry」
261:デフォルトの名無しさん
05/05/21 01:50:59
プログラムを2つ与えると、その実行結果が等価になるか判断する処理系作って。
用途は、たとえば自分でソートのプログラムを作ったけど正しいか自信が無いときに、
単純で遅いが明らかに正しいソートプログラムと比較させる。
全自動は無理だと思うから、人間が色々手伝ってもかまわない。
「入力の長さnの帰納法」とかヒントをあげると、少なくてもn=1のときは
単純にn=1が保証されるものとして最適化するだけで判定できそうな気がする。
262:デフォルトの名無しさん
05/05/21 01:54:55
>>261
どうやらスレ違いぽいな
完璧なプログラム
スレリンク(tech板)
263:デフォルトの名無しさん
05/05/21 09:35:34
>>251さん、リクエストします。
JavaScriptでScheme処理系を書いてください
264:デフォルトの名無しさん
05/05/21 10:38:57
>>261
しかも、内容が馬鹿っぽいw
265:デフォルトの名無しさん
05/05/21 10:59:05
一般的にはムリって
計算論で結論出てなかったっけ?
266:デフォルトの名無しさん
05/05/21 11:05:29
>>261
少なくとも、理論上無理。そんなことができるなら、世の中もっと幸せになってる。
267:デフォルトの名無しさん
05/05/21 11:51:13
>>251
>>263をR5RS準拠でヨロスク
268:デフォルトの名無しさん
05/05/21 14:49:33
プログラムが停止するかどうかすら判定できない、じゃなかったかなあ。
269:デフォルトの名無しさん
05/05/21 15:08:56
>>268
「有限時間内で」が大事。
270:デフォルトの名無しさん
05/05/21 15:25:18
>>261は最初から「全自動では無理」と言ってるんだが…
理論上無理とか言ってるやつは
proof assistantというものが存在することすら知らんのだろうな。
いずれにせよ>>262の言うとおりスレ違いだろう。
271:デフォルトの名無しさん
05/05/21 16:19:22
>>251 氏
後学の為に是非公開してくださいませんか。宜しくお願いします。
272:デフォルトの名無しさん
05/05/22 00:51:20
schemeの処理系なんて、重厚長大で完璧めざしてるR5RS準拠から
読みやすさ重視orお遊びのトイプロジェクトまで、山ほどあるぞ。
273:デフォルトの名無しさん
05/05/22 07:48:12
>>271
R5RS規格書は50ページ程度と言われてるけど内容濃いしね
省かれた暗黙仕様もあるから準拠しようとすればそれなりに工数掛かる
>>267
おれが今回作ったのは継続もなくスタックベースでそもそもRxRS前提に書いてない
throwみたいに親側へ飛ぶだけだし、スタックオーバーフローもする
ちゃんとしたのは別にあるんだけど、デカくなりすぎた
そこそこの速度で動く&俺言語やアプリへの組み込みが目的だった
俺言語2k行ぐらいで最低限の最適化だけやったいい加減なやつ
速度はguile1.7.2と同じぐらい。。。guileは速度捨ててるね
274:デフォルトの名無しさん
05/05/22 08:52:51
>>273
おー、俺言語大好き人間って結構いるんだな
俺はSelf系つかprototype系好きなんで何個も作ったけど、Schemeは一度も作ったコトないや
275:デフォルトの名無しさん
05/05/22 16:33:47
俺言語への組み込みScheme?
どんなものか想像できない。
276:デフォルトの名無しさん
05/05/22 16:49:51
よくあるパターンは、scheme式をbuiltin型として使えるというものかな。
prologを組み込むと時々便利。
277:デフォルトの名無しさん
05/05/23 16:39:26
Scheme in javascriptやin rubyを作ってるんだけど、
何かの仕様に準拠しないと達成感がない。
でもRxRSの複素数とかくだらないの実装するのは面倒くさい上に、
母言語(javascriptとか)の数値表現がそのまま使えなくなって
滅多に使わないのに全体的に遅くなりそうなあげく、利便性まで下がる。
同じことで悩んだor悩んでるやついる?
278:デフォルトの名無しさん
05/05/23 18:49:26
>>277
つcoercion semantics
279:デフォルトの名無しさん
05/05/23 19:22:56
Coercin semantics?ってsubtypeに基づく変換とかのアレですよね。
Schemeに型はないんですが、soft-typingしろってことでしょうか。
誤解があったかもしれないので捕捉。
Scheme in javascriptってjavascriptで書かれたScheme実行エンジンを意図してました。
i = scheme_eval("(+ 1 2)");
みたいに実行できるようなの。これでiには普通の3が代入されるか、
自分で定義したclass SchemeNumberのインスタンスが入るか、が問題です。
前者が嬉しいけど、複素数とかの対応はどうするべきかな、と。
280:デフォルトの名無しさん
05/05/23 22:06:51
>>275
俺言語との通信やプリプロセッサの拡張とか
funclist.scm:((f 1) (g 2) (h 3))
俺言語:
#s (define func-list (with-input-from-file "funclist.scm" read))
#s(for-each (lambda(x) (puts x "() { printf(\"myname:" (car x)
"\\n\"); return " (cadr x) "; }")) func-list)
register_func() {
#s(for-each (lambda(x) (puts "scm_add_proc(\""(car x)"\", (scm_proc_t)"(car x)", 0);"
" printf(\"defined:"(car x)"\\n\");")) func-list)}
main() {
register_func();scm_write(scm_eval_string(#ss`(+ ,@(map(lambda(x)(list(car x))) func-list))));;scm_newline();}
↓
f() { printf("myname: f \n"); return 1; }
g() { printf("myname: g \n"); return 2; }
h() { printf("myname: h \n"); return 3; }
register_func() {
scm_add_proc("f", (scm_proc_t)f, 0); printf("function defined:f\n");
scm_add_proc("g", (scm_proc_t)g, 0); printf("function defined:g\n");
scm_add_proc("h", (scm_proc_t)h, 0); printf("function defined:h\n");
}
main() {
register_func();scm_write(scm_eval_string("(+ (f) (g) (h))"));scm_newline();}
↓
function defined:f
function defined:g
function defined:h
myname: h
myname: g
myname: f
6
281:デフォルトの名無しさん
05/05/23 22:09:36
>>279
おれだったらevalの結果をそのままwriteできるようにする。
結果が数値だけとは限らないので。
scheme_write(scheme_eval(scheme_read()));
もしくは
scheme_write(scheme_eval_string("(+ 1 2)"));
経験的に特に明示しない限りschemeならschemeの型で持ちまわる方が都合良い。
282:デフォルトの名無しさん
05/05/23 23:45:06
>>280
イラネw
283:デフォルトの名無しさん
05/05/23 23:50:14
綾本って思いっきり中田さんの授業配布プリントに
説明を加えただけにしか見えないのだが。
284:デフォルトの名無しさん
05/05/23 23:55:31
そう言われても俺には確かめようが無い
でも中田先生の教科書は(・∀・)イイ!!
285:デフォルトの名無しさん
05/05/24 00:41:48
>>281
>schemeならschemeの型で持ちまわる方が都合良い。
処理系の作成者としては当然その通りで、気持ちもわかるんだけど、
処理系のユーザとしては不便だと思うんだよね。
いちいちscheme_number_from_javascript_number(1)とかしなきゃならんのは。
どうにかならんかな、みんなどうしてるかな、って疑問でした。
286:デフォルトの名無しさん
05/05/24 02:28:26
三日ほどかけて、生まれてはじめてコンパイラを作った
900行ほどのTinyBASIC以下のダメ言語だけど
とりあえず、エラトステネスの篩が動いてる
しかし、明らかにヘボい機械語を吐いているのに
エラトステネスでVC++とほとんど実行速度に差が無い
うちのマシンがefficeonだからかなあ?
やっぱコンパイラは速いね
287:デフォルトの名無しさん
05/05/24 02:36:05
私も、インタプリタをつくり、コンパイラに拡張したことがあります。
言語つくりを学ぶとかなりプログラミングの理解度が高まることが実感できました。
少し高度だけど、プログラミングを生業にするなら、1度はチャレンジすることをお勧めします。
決して損とは思いません。
288:デフォルトの名無しさん
05/05/24 02:49:35
勉強といっても三日だし
しかも半分は、STLとVC++の使い方の勉強だった気がするw
残りはVC++のデバッガーに機械語を教えてもらってたかんじ
しかし、カウンタのインクリメントでさえpushとpopを二回ずつりながら
へぼへぼと計算するうちのヘボコンパイラと
inc eacだけで済ませそうなVC++が
ほとんど実行速度に差が無いのは解せないなあ
289:デフォルトの名無しさん
05/05/24 07:35:11
測定の仕方が悪いか、コンパイラにバグがあるか。
290:デフォルトの名無しさん
05/05/24 17:27:21
計測は、無負荷状態で、
clock_t c = clock();
Sieve();
cout << double( clock() - c ) / CLK_TCK << end;
こんなかんじ
一億までの素数を全部求めた場合の所要時間は、
efficeon 1.6GHzで、VC++が30.5秒程、へぼ言語が31.5秒程
計算結果は、VC++とへぼ言語で一緒にしかならないから
コンパイラのバグで不当に速い可能性はうすい
ちなみにへぼのカウンタ変数のインクリメントのコードは↓、我ながらひどいもんだw
mov eax, i
push eax
mov eax, i
mov eax, [eax]
push eax
mov eax,1
pop ebx
add eax,ebx
pop ebx
mov [ebx],eax
VC++は↓、まとも
mov edx, [i]
add edx, 1
mov [i], edx
291:デフォルトの名無しさん
05/05/24 19:23:34
エラトステネスのふるいだと
メモリアクセスがネックになるんじゃないかな。
伝統にのっとってfactやfibで。
292:デフォルトの名無しさん
05/05/24 19:35:32
同感.後taraiを回すとか.
どうでもいいが,>290のVCのコードでループカウンタにレジスタが割りついてないのが気になる.
293:デフォルトの名無しさん
05/05/24 19:42:20
スタックマシン向けのコード生成法っぽいな?
294:デフォルトの名無しさん
05/05/24 20:43:05
>>293
つかスタックマシンのコードをx86へ分解してるだけだと思うよ。
コードジェネレータで頭ひねらずに済むから処理系を作ってる途中では有用だろうし。
295:デフォルトの名無しさん
05/05/24 21:49:05
>>290
とりあえず mov eax, i は lea eax, i だとして、
それぞれのコードを1億回ループするのを適当に計ると
へぼ: 1613771636
VC++: 1119915436
クロック掛かる。1.6GHz に換算すると
へぼ: 1.0秒
VC++: 0.7秒
程度の違いだな。
296:デフォルトの名無しさん
05/05/24 21:50:51
>>295
失礼。 mov eax, i でよかった。
297:デフォルトの名無しさん
05/05/24 22:08:35
>>295
クロック数って そんなに正確に測れるんですか?
シミュレーション?
CPU のマニュアルから計算したやつ?
298:デフォルトの名無しさん
05/05/24 22:17:21
sieveではスカラ最適化はほとんど利かないと思う。
しかし1億で30秒は遅い気もするが…>290でループ変数が
レジスタに載ってないあたりを見ると、元ソースの問題かな。
299:デフォルトの名無しさん
05/05/24 22:29:07
>>297
発想が逆だ
300:デフォルトの名無しさん
05/05/24 22:29:21
ヘボ言語のソースがみたい。
(ふるいのソース、処理系そのもののソースじゃなくて)
301:デフォルトの名無しさん
05/05/24 22:48:54
>>300
array sieve[1000000]
i = 0
init:
sieve[i] = 1
i = i + 1
if i <= 1000000 then jump init
i = 2
loop1:
if sieve[i] = 0 then jump skip
j = i + i
loop2:
sieve[j] = 0
j = j + i
if j <= 1000000 then jump loop2
skip:
i = i + 1
if i <= 1000 then jump loop1
i = 2
fin:
primes = primes + sieve[i]
i = i + 1
if i <= 1000000 then jump fin
1000*1000; "未満の素数が"; primes; "個あります\n"
302:デフォルトの名無しさん
05/05/24 22:50:36
うわインデントが
array sieve[1000000]
i = 0
init:
sieve[i] = 1
i = i + 1
if i <= 1000000 then jump init
i = 2
loop1:
if sieve[i] = 0 then jump skip
j = i + i
loop2:
sieve[j] = 0
j = j + i
if j <= 1000000 then jump loop2
skip:
i = i + 1
if i <= 1000 then jump loop1
i = 2
fin:
primes = primes + sieve[i]
i = i + 1
if i <= 1000000 then jump fin
1000*1000; "未満の素数が"; primes; "個あります\n"
303:デフォルトの名無しさん
05/05/24 22:58:42
どうでもいいが、primesが初期化されてないような希ガス。
初出の変数は0?
304:デフォルトの名無しさん
05/05/24 23:01:49
うす
labelに使われてない変数は初出時に0
305:デフォルトの名無しさん
05/05/25 01:00:41
あれかね、今時のCPUはx86のコードを内部的にRISCな命令に変換したりするから
(efficeonならなおさらだ)、その段階でスタック操作がレジスタに割り当てられて、
内部的には似たようなコードで実行されてたりするのかね。
だとしたらすげー。
306:デフォルトの名無しさん
05/05/25 01:39:20
いま、Athlon XPで試したら
速度全くといっていいほど変わらない
信じられない
Pen4ではどうなるのか知りたいなあ
307:デフォルトの名無しさん
05/05/25 12:07:51
factやfibでも同じような速度なの?
だとしたらマイクロオペコードすげー。
308:デフォルトの名無しさん
05/05/25 15:48:09
いや、関数呼び出しは実装してないんで
ローカル変数実装するのが、(ちょっとだけ)面倒だから
まじめに比較したい人がいるなら、ソース出すけど
309:デフォルトの名無しさん
05/05/25 18:38:40
普通に1から1億までを足すプログラムとかで十分差がでると思うが。
310:デフォルトの名無しさん
05/05/25 18:40:29
最適化しないと変わらないんじゃない?
311:300
05/05/26 00:06:05
>>302
ソースTNX!
へぼ言語どころか、めっちゃ気に入りそう(ハート)
あんた、センスあるねぇ。。。
312:デフォルトの名無しさん
05/05/26 02:47:24
i = 1
r = 1
fact:
r = r * i
i = i + 1
if i <= 1000000 then jump fact
"1000000! = "; r; "\n"
多倍長じゃないとか気にするな。
ただのベンチマークだから。
313:デフォルトの名無しさん
05/05/26 03:31:29
めんどくさいから、誰かやって
もう飽きたし・・・
URLリンク(rerere.sytes.net)
314:デフォルトの名無しさん
05/05/26 19:17:26
>>305
んなわけない
sieveみたいな2重ループ程度じゃ適当に作っても差はあんま出ない
>>313見た限りでは関数作れないっぽいけど
同じやり方でループのネスト深くしたり、fiboとかアッカーマン関数で
比較したりすると倍以上差が出てくるよ
VMとかインタプリタに比べれば問題ない差だろうけどね
315:デフォルトの名無しさん
05/05/26 22:17:47
>>314
ヤッターマン関数って何?
ぐぐっても出てこんかったorz
316:デフォルトの名無しさん
05/05/26 22:32:08
>>315
アッカーマン関数でもヤッターマン関数でも出てくるけど?
317:デフォルトの名無しさん
05/05/26 22:54:33
ポチっとな
318:デフォルトの名無しさん
05/05/27 00:20:48
Fibonacciの関数呼び出し程度では大した差はでない
Ackermannはコンパイラが末尾再帰を認識するかどうかでかなり差が出るはず
普通の処理でも変数の数や間接参照とかが増えてくれば違ってくる
319:デフォルトの名無しさん
05/05/27 01:08:54
Borland C++ Conpilerについての質問です
c:\bcc32\Bin の中に
bcc32.cfgを作って
-I"c:\Bcc32\include"
-L"c:\Bcc32\lib"
と書きます
ILINK32.cfgを作って
-I"c:\Bcc32\include"
-L"c:\bcc32\lib"
と書きます
URLリンク(www.kumei.ne.jp)
ここのソースをコピペしてコンパイルします
bcc32 -W menu01.cpp のほうはうまく行きました
brc32 menu01.rc menu01.exe って入力しても、windous.hが見つからないとエラーでます
brc32 -i c:\bcc32\include menu01.rc menu01.exe とディレクトリを指定してやったらコンパイルできました
このようにディレクトリを指定せずにコンパイルさせる設定ってどこでするのでしょうか?
320:デフォルトの名無しさん
05/05/27 02:13:26
【初心者歓迎】C/C++室 Ver.17【環境依存OK】
スレリンク(tech板)
321:デフォルトの名無しさん
05/05/27 02:39:07
>Fibonacciの関数呼び出し程度では大した差はでない
これどういう意味?
322:デフォルトの名無しさん
05/05/27 05:46:16
fibでも関数値のメモ化のあるなしで大きく違ってきそうだが。
323:remi@id5214.bbs.盗撮倶楽部
05/05/27 14:32:00
はじめまして れみです。
向こうのbbsで質問したところ、こちらで聞いたほうがより高度な技法を
教えていただけると紹介いただき、まかりこしました。
のぞき穴最適化技法についてお知恵をお借りできませんか。
尚、使用レンズ口径は3.00mmです
よろしくお願いします
324:デフォルトの名無しさん
05/05/27 15:09:36
そのレンズを通して見える範囲でソースコードを手でチューニングすればいいです。
見える範囲が終わったら視野を移動するかスクロールします。
ファイルの最後までいったらおしまいです。お疲れ様でした。
325:デフォルトの名無しさん
05/05/27 18:52:21
どういう誤爆だ?
業者にしてはまったく意味が無い。
誰かAIのテストでもしてるのか?
326:デフォルトの名無しさん
05/05/27 18:54:35
スコープについて聞いてるんじゃないか?
327:デフォルトの名無しさん
05/05/27 18:57:13
うまい
328:デフォルトの名無しさん
05/05/27 19:04:44
>>322
すまんが、そういう話じゃない
関数呼び出しのテストにしても変数が1個や2個の値参照程度では
違いは出にくいということ
メモ化すれば当然速くなる
329:デフォルトの名無しさん
05/05/27 20:24:00
ackermann関数は変数が何個の値参照なん?
330:デフォルトの名無しさん
05/05/27 20:50:02
mann個
331:デフォルトの名無しさん
05/05/27 20:52:11
>>329
lispの例題とかで見たこと無い?
ものすげーえげつない再帰呼び出しのテストだと思ってくれ。
332:デフォルトの名無しさん
05/05/27 21:35:57
>>331
すまんが、そういう話じゃない
関数呼び出しのテストにしても変数が1個や2個の値参照程度では
違いは出にくいということ
333:デフォルトの名無しさん
05/05/27 21:41:48
こんな感じ?
extern yattarman(){
printf("アフォ\n");
}
334:デフォルトの名無しさん
05/05/27 21:50:56
ack(m,n) = n+1 if m = 0
ack(m-1, 1) if n = 0
ack(m-1, ack(m,n-1)) otherwise
335:デフォルトの名無しさん
05/05/27 21:53:10
>>334
すまんが、そういう話じゃない
関数呼び出しのテストにしても変数が1個や2個の値参照程度では
違いは出にくいということ
336:デフォルトの名無しさん
05/05/27 22:06:19
ここはお前の話をみんなで静聴するスレじゃないぞ。
各人がしたいように話を転がしていくだけだ。
337:デフォルトの名無しさん
05/05/27 22:08:15
仕切り厨の自己否定乙ww
338:デフォルトの名無しさん
05/05/28 00:28:16
>>337
すまんが、そういう話じゃない
関数呼び出しのテストにしても変数が1個や2個の値参照程度では
違いは出にくいということ
339:デフォルトの名無しさん
05/05/28 03:12:13
>>333
そう、それだ!
340:デフォルトの名無しさん
05/05/28 04:15:37
>>333
extern coffee(){
printf("ボケ\n");
}
extern lighter(){
printf("ゴルァ\n");
}
341:デフォルトの名無しさん
05/05/28 23:34:48
アメ、コーヒー、ライター?
342:デフォルトの名無しさん
05/05/29 01:10:17
ヤッターマン
343:デフォルトの名無しさん
05/06/04 04:52:17
そろそろN88BASIC作ろうと思うんだけど、どう?
344:デフォルトの名無しさん
05/06/04 12:18:56
N05BASICの誤りでは?
どんな畑になることやらw
345:デフォルトの名無しさん
05/06/04 21:04:29
>>344
???
346:デフォルトの名無しさん
05/06/04 21:16:13
>>345
しぃーっ!見ちゃだめ!
347:デフォルトの名無しさん
05/06/04 22:01:33
bison -v で出力される *.output と言うファイルの書式の解説って
マニュアルには含まれてないと思うのですが、ありますか?
348:デフォルトの名無しさん
05/06/04 22:05:10
>>347
人が見て理解できれば十分だと思うけど……
*.output ファイル自体をいじるとか、そういうことを考えているの?
349:デフォルトの名無しさん
05/06/04 22:34:23
>>348
state 100
nls -> '\n' . (rule 200)
とかあった場合、この点(.)は何を意味するものなの?
350:デフォルトの名無しさん
05/06/05 00:02:52
オライリーの本読め。解説してあったと思うが。
なくてもそれくらい見当つかないんじゃ困るとは思う。
351:デフォルトの名無しさん
05/06/05 00:12:32
lex&yacc でイイデツカ?
352:デフォルトの名無しさん
05/06/05 00:22:29
うん。
353:デフォルトの名無しさん
05/06/05 03:26:05
>>344
それ以前に2000年問題に対応してください
354:デフォルトの名無しさん
05/06/05 03:35:03
>>344==353
355:デフォルトの名無しさん
05/06/05 11:17:47
>>349
LALR(1)
356:351
05/06/05 18:39:22
>>352
ありがとう。
>>355
LALR(1) の標準記法とかあるのですか?
357:デフォルトの名無しさん
05/06/05 18:47:49
>>356
標準かどうかしらんが
LALR(1)を勉強した人なら一瞬で分かる。
358:デフォルトの名無しさん
05/06/05 19:46:23
>>353
畑は1年単位のサイクルの筈。
359:デフォルトの名無しさん
05/06/05 23:06:16
>>344==353==358
360:デフォルトの名無しさん
05/06/06 08:56:20
並列化コンパイラを作ることになったんですが、
なにをどうすればいいかわかりません
良い本、サイトなどあれば教えてください
361:デフォルトの名無しさん
05/06/06 09:14:01
TAに泣きつけ。
362:デフォルトの名無しさん
05/06/06 10:51:43
並列化のための補助文法を言語的に持っているという意味?
それとも複数の演算素子にコードを割り振る方?
363:360
05/06/06 17:05:12
そもそもコンパイラそのものがわかっていないので
1から勉強できるようなものがあると助かるとです
364:デフォルトの名無しさん
05/06/06 18:37:44
360は早稲田の学生
365:デフォルトの名無しさん
05/06/06 19:54:03
>>363
まずは、りんご畑系の本を勧める。
366:360
05/06/07 02:28:10
>>364
駅弁です
>>365
リンゴ畑とは?
367:デフォルトの名無しさん
05/06/07 23:42:17
予約語と識別子との区別を、字句解析時に行ってしまうのがいいのか、構文解析時になってから行うのがいいのか悩んでいます。
字句解析時に行ったほうがわかりやすいような気もするけど、構文解析時に行ったほうが柔軟になるし(予約語と同じ名前のメソッド名を定義できるとか)。
みなさんはどうしてますか。
368:デフォルトの名無しさん
05/06/07 23:52:07
作ろうとしている言語の文法を合うように
決めればいいんじゃない?
つまんない意見でごめんな
369:デフォルトの名無しさん
05/06/07 23:59:39
ほぼ同意。
ps.りんご畑だとパーサだったかな?
370:デフォルトの名無しさん
05/06/08 00:12:20
typo
×文法を合うように
○文法に合うように
371:デフォルトの名無しさん
05/06/08 01:10:48
>>367
>予約語と同じ名前のメソッド名を定義できるとか
そもそもこんなことができると紛らわしいからよした方が…
ワインバーグが「プログラミングの心理学」のどっかにそんなことを書いていたはず。
372:デフォルトの名無しさん
05/06/08 01:17:01
>>371
古い概念にとらわれるな
373:デフォルトの名無しさん
05/06/08 10:02:30
>>372
歴史に学べ
374:デフォルトの名無しさん
05/06/08 10:04:01
>>367
ifという名前のローカル変数を作ってしまってif文が使えない
とかいうことになるので、字句解析でやっといた方がいいんじゃないかな。
375:デフォルトの名無しさん
05/06/08 10:41:04
素人な質問だけど、構文解析どう書くの?
IDENT expr IDENT block IDENT block
で$1と$3と$5がそれぞれ"if" "then" "else"であることを
アクションでチェック?現実に実現可能なもの?
376:デフォルトの名無しさん
05/06/08 12:25:52
構文木を識別子以外のものに基づいて組み立てれば無問題。括弧とか。
377:デフォルトの名無しさん
05/06/08 12:26:47
>>360
育男ちゃんに代打ちしてもらえばいいじゃん
378:デフォルトの名無しさん
05/06/08 13:08:32
文法の、どこに error を噛ませれば良いのか分からんですたい
379:デフォルトの名無しさん
05/06/08 13:39:49
エラーが発生したらなかったことにしたい単位のところ。
全てが式の言語なら式。Cみたいのなら文か関数。
例外処理のcatchのようなもんだ。
380:デフォルトの名無しさん
05/06/08 20:52:34
それよりも的確な場所でエラーを検出することができるかどうかだよ
極端な言語で言えば、LISP系はソースコードの何行目でエラーが出た、
とかの検出が困難。
S式として妥当ならreadが通ってしまう。
readに通した時点で行の情報は失われる。
よく知らないけどLISPのエラー検出の最小単位って関数かな?
エラー検出とかのためにリストがどの行のものか保存するLISP処理系ってある?
381:デフォルトの名無しさん
05/06/08 20:56:29
VCのコンパイラって/Pオプションでプリプロセッサを通した結果がとりだせるじゃないですか
bccではそのようなコンパイルオプションってないですか?
382:367
05/06/08 21:04:00
ご回答いただいた皆様、どうもありがとうございます。
そもそもの動機は、事前にすべての予約語を予測することができない(あとで必ず新しい予約語を追加したくなる)ので、
せめて識別子がくることが明確にわかっている場所でなら、予約語でも識別子として使えるようにしておけば、
新しい予約語を追加したときに、多少なりとも影響を小さくできるかなと思ったからです。
また個人的には「switch」や「end」をメソッド名として使えたらなーと思うことがあったので、メソッド名であることが明らかなら
予約語でもメソッド名にできるようにしたかったのです。(Rubyだとそれができるみたい)
しかーし、発想をかえまして、予約語になんらかのプレフィックスをつけることにしました。
PHPやPerlでは、変数名と予約語がかぶらないように変数名のほうにプレフィックスをつけますが、
それとは逆に予約語にプレフィックスをつければ、変数名やメソッド名とかぶらなくてすむんじゃないかと。
ifやwhileにプレフィックスをつける言語なんてきわものっぽいですが、なんか気に入ったのでこれでいくことにします。
スレ汚しすみませんでした。
383:デフォルトの名無しさん
05/06/08 21:06:52
>>379
いや、俺が気になるのは、それが全てのエラーを正しく捕まえてくれるのかと、無限ループが起きないかどうかです
……多分、yyerrok の挙動の理解が甘いような気がするんだけど
根元に error を仕込みたいですけど、エラーリカバリ後のゴミが結構引っかかります orz
384:デフォルトの名無しさん
05/06/08 21:54:44
もれが気になるのは、ねーちゃんのケータイかどうかってことだ。
385:デフォルトの名無しさん
05/06/08 21:59:44
>>384
どっからそういう話になるんだ?
誤爆?
386:デフォルトの名無しさん
05/06/08 22:12:00
URLリンク(www.sidhe.org)
Parrotの実装について
387:デフォルトの名無しさん
05/06/08 23:24:31
予約語と識別子の区別はなんとでもなると思うが、
後から追加した予約語の文法定義はどうやって追加するの?
ってあたりが気になった。
388:デフォルトの名無しさん
05/06/09 20:22:41
>>380
gaucheとか、エラー時に行番号を表示してくれるから何かやってるんじゃない?
389:デフォルトの名無しさん
05/06/09 23:54:13
>>380
>>388
構文木のノード毎に、行数を覚えておけば済むでしょ
390:デフォルトの名無しさん
05/06/10 00:05:29
>>389
(´,_ゝ`)プッ
391:デフォルトの名無しさん
05/06/10 00:49:48
gaucheってランタイムエラーのときも行数表示するん?
392:デフォルトの名無しさん
05/06/10 00:50:19
「人権擁護法案」を知って下さい。どう考えるかは 貴方次第です。
法務省 第154回国会(常会)提出主要法律案 人権擁護法(案)
URLリンク(www.moj.go.jp)
ズームイン朝でおなじみ、 辛坊治郎さんのコラムです。
URLリンク(shinsho.shueisha.co.jp)
こちらは櫻井よしこさんのコラムです。
URLリンク(blog.yoshiko-sakurai.jp)
櫻井よしこ 人権擁護法案緊急リポ(SAPIO 6月22日号6月8日発売)
URLリンク(www.uplo.net)
URLリンク(www.uplo.net)
URLリンク(www.uplo.net)
URLリンク(www.uplo.net)
他にもこのような方々が危険性を危惧しています。
西尾幹二
URLリンク(nitiroku-nishio.jp)
西村幸祐
URLリンク(nishimura-voice.seesaa.net)
タックルと報道2001とチャンネル桜の動画。
URLリンク(nur.ath.cx)
参考資料 国連の勧告といわれる物
国内機構の地位に関する原則(パリ原則)
URLリンク(www.moj.go.jp)
393:デフォルトの名無しさん
05/06/10 09:18:46
>>391
するよん。バックトレースにも表示される。
394:デフォルトの名無しさん
05/06/10 13:02:02
>>367
字句解析で識別するしかない。
予約語のない(キーワードと同じ変数名が使える)言語としてはPL/Iがある(あっ
た、というべきか)。が、たとえ予約語のない言語でもキーワードは字句解析
で識別しないとダメだろう。
そのような言語では、具体的にはこういうふうにする。
stmt: IF expr THEN ....(略)
expr: Identifier
Identifier: IDENTIFIER | IF | THEN ...
むろんCのような文法ではこれはconflictをおこすので無理だが、
PL/Iならなんとかなるかもしれない。もっともPL/IがLR(1)で記述できるかど
うかは不勉強にして知らない。もっと長い先読みが必要かもしれない。
395:りんごタン
05/06/11 11:18:27
>>394
> むろんCのような文法ではこれはconflictをおこすので無理だが、
> PL/Iならなんとかなるかもしれない。
どういうことですか?
PL/1 自体、リアルでは使ったこと無いんですが(つまり、本の知識のみ)
conflict の発生に大きな違いがでますか?
396:デフォルトの名無しさん
05/06/11 12:39:18
>>394
LISP みたいに () で囲むというような規則を厳守すれば、キーワードの識別は意味解析まで遅らせられる気がしますが
397:デフォルトの名無しさん
05/06/12 10:53:24
URLリンク(llvm.cs.uiuc.edu)
RubyComp: A Ruby-to-LLVM Compiler Prototype (Anders Alexandersson, M.S. Thesis)
Abstract:
Dynamic programming languages are not generally precompiled, but are interpreted at run-time.
This approach has some serious drawbacks, e.g. complex deployment,
human readable source code not preserving the intellectual properties of the developers and
no ability to do optimizations at compile-time or run-time.
In this paper we study the possibility to precompile the Ruby language, a dynamic object-oriented language,
into Low Level Virtual Machine (LLVM) code for execution by the LLVM run-time,
a compiler framework for lifelong optimization of an application.
The result of the project is a Ruby compiler prototype, describing the infrastructure and overall design principles
to map the highly dynamic properties of the Ruby language into low-level static constructs of the LLVM language.
The LLVM framework supports different hardware platforms, and by using LLVM as the target of compilation
the benefits of that portability are gained.
398:デフォルトの名無しさん
05/06/12 13:34:32
ほう。
漏れ自身はRubyは全然使ってないんだが、
世界中にファンが居るんですね。
動的言語としてのRubyの言語仕様のうち、
コンパイルしにくい要素って何なのでしょうか
399:デフォルトの名無しさん
05/06/12 17:17:28
eval?
400:デフォルトの名無しさん
05/06/12 17:23:55
(´・ω・`) エヴァってても関係無いがな
401:デフォルトの名無しさん
05/06/12 17:38:48
evalとリフレクション?
>>400
ないの?
lisp系以外でevalのある言語のコンパイラってある?
perlccやexerbのようなのでなく。
402:デフォルトの名無しさん
05/06/12 17:53:24
Lisp 以外のネイティブコンパイラは知らないけど、
Lisp と同じようにすれば良いかと
(スタンドアローンは要件に無かったから)
403:デフォルトの名無しさん
05/06/12 18:29:58
LISP房とRUBY房ほど、有名な房はいないなW
404:デフォルトの名無しさん
05/06/12 18:31:03
房?
405:デフォルトの名無しさん
05/06/12 19:38:28
JavaとかC++は??
406:デフォルトの名無しさん
05/06/12 20:48:33
>>403
2大棒
407:デフォルトの名無しさん
05/06/12 21:30:37
>>398
コンパイルしにくいというよりは、staticに決めにくいということでは?
メソッド呼び出しをstaticにすることなんか絶対にできないし、
クラス定義でさえ実行文だから、staticにクラスを作成しておくこともできないし、
ローカル変数と引数なしのメソッドの見分けもつかないし。
staticにできることといえば、事前に構文解析してツリーつくるぐらいだけじゃねえか?
408:デフォルトの名無しさん
05/06/12 22:13:27
>>407
Rubyは知らないが、アンタの話がピント外れなのはよく判る。
409:デフォルトの名無しさん
05/06/12 22:34:09
>>408
スレ的にピントをぼかしてるのはおまい様ではないのかえ?
410:デフォルトの名無しさん
05/06/12 22:37:21
>>407
>staticにできることといえば、事前に構文解析してツリーつくるぐらいだけじゃねえか?
そう、exerbはまさにそれ。
でもevalがあるからパーサが不要というわけじゃない。
結局スクリプトにインタプリタをくっつけただけ(に毛が生えた程度)
411:デフォルトの名無しさん
05/06/12 23:01:58
>>410
でもその”毛”は結構デカイんだよな(w
412:デフォルトの名無しさん
05/06/12 23:06:40
剛毛
413:デフォルトの名無しさん
05/06/12 23:13:18
>>402
lispのevalってコンパイラではどんな風に実装されてるの?
多分S式に特化した工夫があるんだよね。
>>411
作るのは大変だろうけど、そんなに実行効率変わるもんなの?
414:デフォルトの名無しさん
05/06/12 23:33:12
おれは、どちらかというとパイパン派だけどな
415:デフォルトの名無しさん
05/06/13 00:13:17
>>409
ほっといてやれよ、408が知らないのはRubyだけじゃないだろ。
416:デフォルトの名無しさん
05/06/13 00:51:55
LISPのevalがする仕事ってのは入力リストを
コードと見なしてマクロ展開しながら評価してくだけ。
S式になってる時点で字句解析が済んだリストの状態ってことだから、
たとえば動的に作成した引数リストを渡したいだけならreadしたものを
そのままapplyに渡せたりするので、少し工夫すればevalを使う
必要はあんまりない。
ほとんどコンパイル済みのクロージャとかで間に合う。
この辺rubyとかperlのevalの事情とはだいぶ違う。
417:デフォルトの名無しさん
05/06/13 01:18:37
よくあるようなschemeコンパイラが出力するネイティブコードには
1) プログラム全体のS式(パースなどはされてるかも)
2) S式を評価するインタプリタ(eval)
に加えて、最適化用に
3) defineされた関数をコンパイルしたネイティブコード
があらかじめ含まれてる、って理解でいいかな。
しかし一部のschemeコンパイラ(chezとか)の異常な速さには、
もっと秘密がありそうだw
418:デフォルトの名無しさん
05/06/13 01:30:09
は? 1を含む必要が理解できないんだが。
419:デフォルトの名無しさん
05/06/13 01:44:14
>>417
ChezやGaucheなどの速い部類のschemeは
read後のevalの代わりにcompileフェーズが入る。
もちろんマクロはcompile直前に全て展開される。
read→compile→run(→write)
420:デフォルトの名無しさん
05/06/13 01:59:54
>>418
あ、schemeはリフレクションみたいにプログラムをデータとして扱うことはできないのか。
じゃquoteされてるとこだけでいいのかも。(自信なし)
>>419
あー、JITか。なるほどなるほど。サンクスです。
Rubyも爆速コンパイラ作ってJITやhotspotすればいいんだな。(無理)
421:デフォルトの名無しさん
05/06/13 02:01:09
>>416
むしろevalが出てくるLISPコードは下手糞が書いたものか、
自分で評価周りを拡張するとかの特殊用途ぐらい。
422:デフォルトの名無しさん
05/06/13 02:02:31
>420
誤解があるようだけど
schemeのS式もLISPと同じくプログラム=データですよ。
423:デフォルトの名無しさん
05/06/13 02:09:49
いったんdefineされた関数の定義を、S式として取り出して扱うこともできるんでしたっけ。
(define (f x) x) の f から '(lambda (x) x) を取り出すみたいな。
だとしたら>>417の1がいるかな、と思ったんですが。
424:デフォルトの名無しさん
05/06/13 02:46:12
>>423
かなり昔のLISPの本を読んだね?
今はdefine定義された関数を評価するとクロージャという
Schemeオブジェクトとして抽象化される。
クロージャからデータ(コードの印字表現)は基本的に取り出すことはできない。
コンパイルすると不要な情報は消えてしまうし、できたとしても処理系依存で実装される。
もちろん取り出せる処理系もある。
まあ、これ以上詳しくはschemeスレで聞くか、適当な入門サイトでも見た方が。
425:398
05/06/13 12:14:36
下らん。もう一回言うね。
>>397の研究内容を踏まえて、
動的言語としてのRubyの言語仕様のうち、
コンパイルしにくい要素って何なんだろうね。
426:デフォルトの名無しさん
05/06/13 13:26:07
>>425
は?今まで言われてきた通りじゃないの?
>the main difficulty of compiling Ruby is the fact that the program can
>be updated during run-time
とあるから、論文の著者自体は>>407を問題視してると思われ。
つか、論文あるんだから読めよ。
427:デフォルトの名無しさん
05/06/13 13:43:04
>>424
なるほど、ありがとうございました。
schemeというとプログラム=データだってよく聞くんですが、
その本質の意味や利点をいまいち理解できてないんですよね。
入門サイトに行ってきます。
428:デフォルトの名無しさん
05/06/13 14:05:56
>>426
ちょっと目を通した。
>>407そのまんまの話で、proof of conceptという事でがっくり。
今後に期待といった感じか。
429:398
05/06/13 18:15:38
>>426
論外だな。もう一回言うね。
>>397の研究内容を踏まえて、
動的言語としてのRubyの言語仕様のうち、
コンパイルしにくい要素って何なんだろうね。
430:398=428 ◆Nj.Bk96Vy2
05/06/13 18:21:49
>>429をスレ荒らしと判定。レス削除依頼を出します。
431:デフォルトの名無しさん
05/06/13 19:47:55
>>429
そもそもrubyはコンパイルできないじゃん
しにくいという以前に、できない言語なんだよ
432:デフォルトの名無しさん
05/06/13 20:41:35
英語読めないんだね
433:デフォルトの名無しさん
05/06/13 21:28:11
>>431
はぁ?
そんな言語ありませんが?
アフォですか?
434:デフォルトの名無しさん
05/06/13 21:44:05
コンパイルの定義で揉める巧妙な書き込みがなされているな
435:デフォルトの名無しさん
05/06/13 21:44:44
Rubyは存在しないらしい、という学説がここに提唱されました
436:デフォルトの名無しさん
05/06/13 22:35:40
具体的な根拠も書かずに煽るだけの輩がいるからねぇ
437:デフォルトの名無しさん
05/06/13 23:19:26
>>436
発狂?
438:デフォルトの名無しさん
05/06/13 23:23:15
Rubyの開発周りはキチガイだらけだからね
439:デフォルトの名無しさん
05/06/13 23:25:50
なんだ荒らしか
440:ptr->433
05/06/14 00:13:09
要は、コンパイラが作れないような言語はないってことでしょ?
441:デフォルトの名無しさん
05/06/14 00:31:05
インタプリタが作れる言語ならコンパイラは原理的には作れるね。
コンパイルするメリットがあるかどうかはともかく。
442:デフォルトの名無しさん
05/06/14 01:18:12
eval
443:デフォルトの名無しさん
05/06/14 03:51:04
下らん。もう一回言うね。
>>397の研究内容を踏まえて、
動的言語としてのRubyの言語仕様のうち、
コンパイルしにくい要素って何なんだろうね。
444:デフォルトの名無しさん
05/06/14 03:57:46
>>443をスレ荒らしと判定。レス削除依頼を出します。
445:デフォルトの名無しさん
05/06/14 07:50:41
>>425をスレ荒らしと判定。レス削除依頼を出します。
446:デフォルトの名無しさん
05/06/14 07:59:05
うへ、プ板版のkouei35みたいなやつが居るな。
こういう奴がいると強制ID制度ほしくなるな。
447:デフォルトの名無しさん
05/06/14 10:36:44
>>434
件の論文は、中間コードへのコンパイルの事だと思うのだけど。Ruby-toLLVM compiler
こっちではネイティブコードへのコンパイルを想定してる様な雰囲気ですよね。
>>428
sRubyについて調べてみては?
448:デフォルトの名無しさん
05/06/14 10:54:58
なんだRubyの人って説明不足で揉めるような書き込みが大得意なんだな。
最初からLLVMって書いてあるのに。
449:デフォルトの名無しさん
05/06/14 11:02:24
>>447
> sRubyについて調べてみては?
えぇ~と、なんか前聞いた覚えあるんだけどこれかな?
URLリンク(thekode.net)
Robert Feldt, sRuby - A Ruby dialect for low-level programming
450:デフォルトの名無しさん
05/06/14 11:15:29
これだからRubyがからむと嫌なんだ・・・
451:デフォルトの名無しさん
05/06/14 11:51:46
中間コードへのコンパイルもネイティブコードへのコンパイルも
本質的に他言語への翻訳でしょ。
コンパイルの定義で揉めるというのは、
「インタプリタとスクリプトをくっつけて単体実行可能にしたもの」
を出力するのはコンパイルと言えるか否か、という話じゃないの?
>>450
まあでも、字句解析構文解析のかみ合わなくて不毛な話題よりは
今の方が面白いよ。
452:デフォルトの名無しさん
05/06/14 18:30:27
下らん。もう一回言うね。
>>397の研究内容を踏まえて、
動的言語としてのRubyの言語仕様のうち、
コンパイルしにくい要素って何なんだろうね。
453:デフォルトの名無しさん
05/06/14 19:03:05
そんなに何度も繰り返すなら、
まずはコンパイルしにくくない要素のコンパイルをあなたが説明してね。
454:デフォルトの名無しさん
05/06/14 19:55:33
ここまでくると荒らしだな
455:デフォルトの名無しさん
05/06/14 20:22:40
>>450
lispもなw
456:デフォルトの名無しさん
05/06/14 21:15:48
Lisp で荒れる理由: アンチが厨だから
Ruby で荒れる理由: ユーザが厨だから
457:デフォルトの名無しさん
05/06/14 21:18:31
>Lisp で荒れる理由: アンチが厨だから
Lispユーザーが平気でこう言うあたりが、荒れる真の理由かねw
458:デフォルトの名無しさん
05/06/14 21:39:52
まあ日本のLisp人口の多数派は40前後のおっさんだからね。
459:デフォルトの名無しさん
05/06/14 21:45:03
Lispは40年前に生まれた言語だから、生まれた時から、Lispってる計算になる
460:デフォルトの名無しさん
05/06/14 21:46:43
>>458
こういう FUD を平気で言うあたりがアンチが厨だという証拠w
461:デフォルトの名無しさん
05/06/14 21:50:00
年齢が40前後がなんでFUDになるのだろう。
462:デフォルトの名無しさん
05/06/14 21:55:53
この公式はどうだろう
アンチLISP=Rubist
アンチRuby=LISPer
463:デフォルトの名無しさん
05/06/14 21:58:23
>>460は数少ない現役厨房Lisperか。大事にせにゃw
464:デフォルトの名無しさん
05/06/14 22:02:58
>>462
すなわち、こういう事のようだな(↓)
LISPシンパ≒Rubyシンパ
465:デフォルトの名無しさん
05/06/14 22:18:29
………………………… き り す て …………………………
466:デフォルトの名無しさん
05/06/14 22:20:02
lispもなw
たったこの一言が原因で、しつこく粘着して
しっかりと荒らすんだから、ある意味すごい
467:デフォルトの名無しさん
05/06/14 22:28:37
………………………… Reset …………………………
468:デフォルトの名無しさん
05/06/14 22:46:48
このスレでLispとRubyの話題は禁止ということで
469:デフォルトの名無しさん
05/06/14 22:55:05
………………………… >>468 を は つ げ ん き ん し …………………………
470:デフォルトの名無しさん
05/06/14 23:11:53
荒れてる原因はRubyでもLispでも信者でもアンチでもないと思うんだが…
単に話が理解できないバカが原因だろ?
471:デフォルトの名無しさん
05/06/14 23:11:57
3大禁句(↓)
Li(ry
Ru(ry
りん(ry
472:デフォルトの名無しさん
05/06/14 23:14:03
>>458
ってことは、煽りでなくて若者には人気がないってことですか?(LISP)
素朴な疑問としてなんでなんでしょうね?
(書籍が少ないから?)
473:デフォルトの名無しさん
05/06/14 23:15:10
>>470
はげどう
474:デフォルトの名無しさん
05/06/14 23:19:01
>>472
↓で同じ質問をして、身をもって知ってみてはどうか?
スレリンク(tech板)
しかし粘着がまだいるな
475:デフォルトの名無しさん
05/06/14 23:24:31
>>472
書籍って言語解説書のこと?
そんなもの必要なの??
要らないと思うなぁ。
476:デフォルトの名無しさん
05/06/14 23:27:03
>>472
Lispの黄金時代というのが太古の昔あっての。
汎用機屋以外は、猫も杓子もLisp Lisp、
Lispしか動かないマシンが続々と発売された。
普通の商売としてLispを使った経験のある人間がその世代なんじゃ。
477:デフォルトの名無しさん
05/06/14 23:31:32
ありえん。
数式処理屋、エキスパートシステム屋、AI屋、あと画像処理屋くらいなもんだろう
Lisp専用機使ってたのは
478:デフォルトの名無しさん
05/06/14 23:37:11
LISPのアンチというのがわからんな。
LISPの機能とかは他の言語で代用は無理だからなあ。
まあEmacsなかったらm4以下の存在だったかもしれない。
479:デフォルトの名無しさん
05/06/14 23:39:59
アンチを作りたくてしょうがなさそうな発言だね。
480:デフォルトの名無しさん
05/06/14 23:42:36
>>478のようなやつがなんでこのスレにいるんだ…あきらかに無縁だろ…
481:472
05/06/14 23:50:38
>>475
やはり本がないと(汗
>>477
専用器なんてあったんですか!
ある意味凄い。
482:デフォルトの名無しさん
05/06/14 23:56:08
シンボリ
483:デフォルトの名無しさん
05/06/15 00:02:03
>>477
「Lisp専用機」という存在自体が今の人間にとってはそれこそ「ありえん」だろう。
この黄金期も短かった。
最大の理由は、当時登場した万能太陽神に信仰を奪われたこと。
おまけの理由としては、一大国家施策としてヤンキーでなくおふらんすの言語を推進したこと。
今となっては>>478が言うように、エディタのおまけ言語としてしかLispをさわったことのない
人間のほうが多くなってしまった。
484:デフォルトの名無しさん
05/06/15 00:04:03
IPSJ>コンピュータ博物館>年表と日本の歴史的コンピュータ
ワークステーション・Lispマシン
URLリンク(www.ipsj.or.jp)
URLリンク(www.ipsj.or.jp)
1974:MIT:CONSマシン
1974:Xerox PaloAlto:Altoワークステーション上にInterLispを移植
1976:MIT AIラボ:CADRマシン
→Symbolics、LMI(LISP Machine Inc.)社の商用Lispマシンの原型となった
1979:神戸大:神戸大Lispマシン開発
URLリンク(www.ipsj.or.jp)
1982:大阪大:LispマシンEVLIS開発
URLリンク(www.ipsj.or.jp)
1983:電電公社:通研LISPマシンELIS試作機稼動
URLリンク(www.ipsj.or.jp)
1984:理研:数式処理計算機FLATS開発
URLリンク(www.ipsj.or.jp)
1984:富士通:Lispマシン FACOM α 発表
URLリンク(www.ipsj.or.jp)
485:デフォルトの名無しさん
05/06/15 00:08:57
>483
フランス産はどれも優雅だねぇ。
486:デフォルトの名無しさん
05/06/15 00:29:25
フランスの言語って何?
OCaml は何やら汚らしい感じがするが
487:デフォルトの名無しさん
05/06/15 00:37:50
Prolog?Ada?
488:デフォルトの名無しさん
05/06/15 01:59:55
>>484
すげーな富士通までやってたのかw
当時どれだけ影響力あったかわかるな。
489:デフォルトの名無しさん
05/06/15 02:15:24
技術的系譜はこんな感じだそうです。(IPSJ情報)
神戸大TAKITEC→富士通FACOM α(試作機)→理研FLATS(発案:故後藤英一先生, 設計協力:富士通, 製作:三井造船)→FLATS2
→富士通FACOM α(製品版)
阪大EVLIS(並列処理)…→?
湯浅先生達の超並列機は、どういう技術的系譜にあるのだろう・・・?
490:489
05/06/15 02:29:29
訂正。FLATSは各種の高速化技法を導入したオリジナルですね。
・神戸大TAKITEC→富士通FACOM α(試作機)→富士通FACOM α(製品版)
\NTT武蔵野通研 ELIS → NTT-IT ELIS-8100/VME/8200 (LSI開発協力:沖電気)
・理研FLATS(発案:故後藤英一先生, 設計協力:富士通, 製作:三井造船)
→後藤磁束量子情報プロジェクト FLATS2
・阪大EVLIS(並列処理)…→?
491:デフォルトの名無しさん
05/06/15 02:29:36
やっぱりこのスレでLISPとRubyの話は厳禁
492:デフォルトの名無しさん
05/06/15 02:31:33
………………………… >>491 は げ ん き ん …………………………
493:デフォルトの名無しさん
05/06/15 02:41:27
Lispは別に問題ないよ
Rubyが出てくると荒れてるだけ
494:デフォルトの名無しさん
05/06/15 02:51:33
>>493
これだけスレ違いのレスが続いて何が「Lispは別に問題ないよ」だよ
495:デフォルトの名無しさん
05/06/15 03:19:40
荒らしてる本人に自覚が無いだけだな
496:デフォルトの名無しさん
05/06/15 08:25:59
スレ違いなんだよ こっちでやれ
CommonLisp Scheme Part13
スレリンク(tech板)
497:デフォルトの名無しさん
05/06/15 13:18:50
スレが進んでるなぁ……
地面に置かれた砂糖に集まるアリみたい。
アリは嫌いだよ。急所噛まれた事あるから。
498:デフォルトの名無しさん
05/06/15 14:30:40
>コンパイルの定義で揉める巧妙な書き込みがなされているな
>なんだRubyの人って説明不足で揉めるような書き込みが大得意なんだな。
この内容で揉めたほうがマシだったな。現状よりは。
499:デフォルトの名無しさん
05/06/15 18:51:24
>>484
LISP専用マシンが何故必要とされたの?
今に例えると、例えば、 Ruby専用マシンみたいなものだよね?
全然考えられない!
500:デフォルトの名無しさん
05/06/15 19:15:09
頭悪すぎ
501:デフォルトの名無しさん
05/06/15 19:26:30
>>499
速いからだよ
502:デフォルトの名無しさん
05/06/15 20:16:45
>>499
特定の言語を効率よく実行できる専用マシンは、昔のようにハードのオマケでソフトが在った時代には普通だった
ちなみに、今の御時世では Java 専用マシンがあったりする
別に不思議じゃない
503:デフォルトの名無しさん
05/06/15 20:27:33
・当時、汎用機アーキテクチャの標準(IBM/360~370)は姿を現していたが、
それ以外のアーキテクチャはまだまだ未発達もしくは未普及だった。
当時の汎用機アーキテクチャでは必ずしも効率的に実行できない処理のために、
科学技術計算専用マシンや特定言語専用マシンの研究が始まりつつあった。
・MITのMacプロジェクトでLispアプリケーションを蓄積したが、
実行には高価な中~大型汎用機(ITS, GE Multics, DEC-10/20)が必要で、
小回りが効かなかった。
そこでPDP並みの価格で中~大型機並みの性能を持つ
Lisp用パーソナル・ワークステーションが開発された。
504:デフォルトの名無しさん
05/06/15 22:11:57
>>499には時代という物が理解できないんだろうな。
505:デフォルトの名無しさん
05/06/15 22:22:50
>>499
>>500-504まで、誰もわかってないようだからわからないことを気に病むことはないよ。
同時代のおっさんにはあまりに自明のことなんだが、
わかったからといって何かの足しになるわけでもなし。
スレ違いだし、このへんでひっぱるのはやめよう。
506:デフォルトの名無しさん
05/06/15 22:34:42
最近見た中で一番ショボいハッタリだ
507:デフォルトの名無しさん
05/06/15 22:50:41
20代のLISP使いだけど
おっさんネタはさっぱりわからんなあ
昔のPC板ってのがあるから
いいかげん懐古ネタは他所でやんなさいよ
昔のPC
URLリンク(bubble3.2ch.net)
508:デフォルトの名無しさん
05/06/15 22:54:22
>>507
いやPCの話じゃないんだが…
と一応ツッコミは入れとくが、スレ違いということには同意
509:デフォルトの名無しさん
05/06/15 23:04:49
>>507
ちらっとその板みたが、自分からみたらちっとも昔ではないのですな。
すでにPC前提ってあたりで昔ではないのですよ。
荒らすつもりじゃ無く純粋に懐古趣味としての昔話かと思って期待がはずれたのです。
510:デフォルトの名無しさん
05/06/15 23:42:23
>>507
アホか。リアルタイムで知らない事でも、
文献やWebを駆使して勉強するもんだよ。
特にLispなんて80年代に最盛期を迎えた言語だからな
511:デフォルトの名無しさん
05/06/16 19:36:39
LISPの全盛期はいつだ? 80年代か? MLは今なんだよ…。
512:デフォルトの名無しさん
05/06/16 20:28:40
>>511
> MLは今なんだよ…。
いいえ。
513:デフォルトの名無しさん
05/06/16 21:22:31
80年代つーと洋楽だなあ
514:デフォルトの名無しさん
05/06/16 21:24:57
>>511
桜木君…
515:デフォルトの名無しさん
05/06/16 22:03:41
いいかげんにしろ、スレ違いだ。
516:デフォルトの名無しさん
05/06/16 23:46:50
そ / _r 、 、 .ヽ、 R
| L_ , - ´  ̄ ̄ ` ヽ 、 ',ヽー/_ヽーヽ/ヽイ _) u
な < / ヽ, / λ ヽ. b
の // イ ヽ .i く チ\イ_レヽ_/ルノヽ ) y
か \! !イ-/─レイ、ル─ヽ, / >i .レイ ,r=、 ,.-=ゝiイ ヽ, y
| .| ̄i /イ,r=-、 ,-=ヽiミ}<] !レイレi { !_r! i、_r! リ ) 最
,、 / .レ| i { i、r! i、_r!} ア | | !,"" ___ "" ! ! く. 高
` | i,"" ____ "" | | | .| ! i ヽ、 ! j ,イレ > ! !
i リヽ、 ! `j ,イ !| | |ノル `レ ,_--_イiレ - 、/ ̄ヽ、
レi レ`レ ,--_イ レ、 リレ' rイくi-/ / , ---ヽ、/__
人/ヽ、_ ,イくi--//__人__人_ ,く,_[><]__//_(⌒)-、i,_ ノ
はあ / / i (>Y<) ) 最R今 ( ,ヽi ' (_ゝ_ヽ_ノノノ ´
はは i / .! `´ ). 高u 夜 ( ./ .! ヽ、___ノ
はは > / イ、 ヽ, ! b も ( / <、_ 、 _ く
はは < / ヽr----─> ! y ( / / / ヽ\
517:516
05/06/17 00:33:33
誤爆しました
518:俺の学生時代はi386でGoferかな
05/06/17 00:36:23
>>516
さっさと氏ねよ
>>511-512
定理証明系の開発は70年代
SML/NJの開発は80年代半ば
その後87~98がHaskell標準化・・・もしかして進歩止まってるやん
519:デフォルトの名無しさん
05/06/17 00:39:16
>>518
スレ違いのお前もな
520:デフォルトの名無しさん
05/06/17 00:42:57
>>519 はぁ?煽りやり過ぎて、話題がスレ違いかどうか判断もできなくなってるのか。
521:デフォルトの名無しさん
05/06/17 00:44:16
>>520
どこからどう見てもスレ違い
522:デフォルトの名無しさん
05/06/17 00:45:07
キチガイが粘着中
まともな人はしばらくお待ち下さい
523:デフォルトの名無しさん
05/06/17 00:47:39
やっぱりこのスレでLISPとRubyの話は厳禁だな
524:デフォルトの名無しさん
05/06/17 03:45:37
MLじゃないの?
525:デフォルトの名無しさん
05/06/17 20:09:56
>>523
ではmallocとfreeについて話そう。
526:デフォルトの名無しさん
05/06/17 20:11:36
>>525
やっぱこのスレではコンパイラについて話さないとな
527:デフォルトの名無しさん
05/06/17 21:22:29
lambda liftingについて分り易く教えてください
528:デフォルトの名無しさん
05/06/19 04:50:11
荒らしがいなくなるとスレが止まるんだなぁ。
つかLispもMLも禁止の言語処理系スレって…。
>>526
コンパイラの定義を教えてくれ。
>>527
URLリンク(foldoc.doc.ic.ac.uk)
529:デフォルトの名無しさん
05/06/19 09:55:44
LALR(1) を勉強するのにお勧めの書籍かサイトありましたら
教えて下さい。
530:デフォルトの名無しさん
05/06/19 11:02:50
・コンパイラの構成と最適化 中田 育男
URLリンク(www.amazon.co.jp)
531:デフォルトの名無しさん
05/06/19 15:27:01
>>528
よくわからない
変数が増えただけに見えるorz
引数渡しにするってことかな?
532:デフォルトの名無しさん
05/06/19 16:10:29
だいたいLispやMLの全盛期の話のどこがスレの趣旨に沿ってるんだよ?
そんな話はLispやMLのスレでやれよ
533:デフォルトの名無しさん
05/06/19 16:52:39
>>531
処理系を作る立場で考えてみると良いんじゃないかな。
534:デフォルトの名無しさん
05/06/19 18:01:40
>>530
それって最適化でしょ?メインは
535:デフォルトの名無しさん
05/06/19 19:57:38
>>529
Dragon Bookでいいんじゃないの。
536:デフォルトの名無しさん
05/06/19 20:34:44
>>530
良書には違いないが、LALRつーわけどもないだろ。
537:デフォルトの名無しさん
05/06/19 20:56:36
>つーわけどもないだろ。
?
538:デフォルトの名無しさん
05/06/19 21:05:16
>>536をparseするのにお勧めの書籍かサイトありましたら
教えて下さい。
539:デフォルトの名無しさん
05/06/19 21:08:06
>>538
・コンパイラの構成と最適化 中田 育男
URLリンク(www.amazon.co.jp)
540:デフォルトの名無しさん
05/06/19 21:13:07
>>538
Dragon Bookでいいんじゃないの。
541:536
05/06/19 22:33:02
スマソ、「つー訳でもないだろ」の誤りorz
542:デフォルトの名無しさん
05/06/20 00:02:19
>>536
> LALRつーわけでもないだろ。
?
コンパイラ本の一つも読まずにアフォレス、とても痛い小学生だな
543:デフォルトの名無しさん
05/06/20 07:23:45
>>541を意味解析するのにお勧めの書籍かサイトありましたら
教えて下さい。
LALRの良書っていうわけでも無いだろ
ってことか?
じゃあ>>541がLALRの良書を薦めてくれ。
544:デフォルトの名無しさん
05/06/20 17:15:35
そもLALR一つに絞った本が良書と言えるのか?
545:デフォルトの名無しさん
05/06/20 19:51:09
>>544
それってyaccの入門書のレベルな希ガス
546:デフォルトの名無しさん
05/06/20 21:58:07
>>545
いや、案外その手の本は扱ってない。
547:デフォルトの名無しさん
05/06/20 22:17:16
はぁ?
LALRわかんなきゃyacc/bisonは使えないじゃん
548:デフォルトの名無しさん
05/06/20 22:28:32
>>547
理屈ではそうだけど、実際はそうじゃないんだよ。
549:デフォルトの名無しさん
05/06/21 01:20:40
全然自慢にならねぇ主張だな。
わけわかんないけど使ってるって?へ
550:デフォルトの名無しさん
05/06/21 01:31:52
紳士的に解釈すれば、ツールの使い方がわかれば
LALRアルゴリズムの詳細なんて知らなくても良い
ということじゃないかなあ。
いや、ある程度は知ってないとまずいかな。
yaccの作成するテーブルがどういう理屈で作成されてるかぐらいは・・
551:デフォルトの名無しさん
05/06/21 01:33:23
いやちゃう。
単にyaccが吐いたコードにアクション追加したり文法をデバッグするのが無理
552:デフォルトの名無しさん
05/06/21 04:07:32
>>550
どうだろう?yaccって結構簡単に使えるけど、それとLALRの理解は別だと思う。
極端な話し、関数電卓ぐらいのパーサならLALRの知識なんて必要ないし。
ちがうかな?
553:デフォルトの名無しさん
05/06/21 04:29:04
それで結局、今出てるyacc/lex本のLALRの解説は充実してるのか?
554:デフォルトの名無しさん
05/06/21 09:30:36
何するつもりか知らないけど、
LALRだけ勉強しようというのは効率が悪いから
普通の文法解析の教科書では一通りの文法を説明している。
・再帰下降パーサで書ける文法
・LALRパーサじゃないと書きにくい文法
・その他、演算子順位文法、属性文法
とか知っておくと、扱いたい文法が上記のいずれに近いのか、
素早くもしくは効率的に実装するには、どうすれば良いか
判断できるようになると思う。
555:デフォルトの名無しさん
05/06/21 11:58:26
[課題Q]3角形の底辺の長さ,高さをキーボードから読込み,その面積を計算するプログラムを作成しなさい.
ただし,底辺の長さ,高さ,面積の値を入れる変数名をそれぞれteihen, takasa,mensekiとし,いずれも実数型(double型)とする.
void main( void )
{
double teihen, takasa, menseki;
printf( "底辺は?\n" ); /* 入力を促すメッセージを表示 */
scanf( "%d", &teihen );
menseki = teihen * takasa / 2;
printf("%f\n",menseki);
}
これ誰か完成させてくれ
556:デフォルトの名無しさん
05/06/21 12:28:11
>>555=スレ違いのキチガイ
557:デフォルトの名無しさん
05/06/21 13:09:35
次スレから「相談室」ってのを外そうよ。
この文字だけ見て書き込んでいるとしか思えない致傷多すぎる。
558:デフォルトの名無しさん
05/06/21 13:24:09
>>555は単なる構ってチャンだろ。キチガイはさっさと逝け
559:デフォルトの名無しさん
05/06/21 21:03:15
標準入力から直接入力すると、行末の改行が削れてしまうんですが、
それを考慮すると行番号の計測ってどうやるんでしょうか
560:デフォルトの名無しさん
05/06/21 21:13:37
>>559 スレ違い。初心者向け相談室へ逝け
561:デフォルトの名無しさん
05/06/21 23:43:16
LALRの話しもすれ違い???
562:デフォルトの名無しさん
05/06/22 01:15:48
構文解析の話なんてつまらんだろ
563:デフォルトの名無しさん
05/06/22 01:24:54
おれはおもしろいと思うよ。
むしろ他人の作った完成品を貶したり褒めたりするのはよそでやってほしい。
564:デフォルトの名無しさん
05/06/22 04:10:23
文法なんて結局は宗教戦争みたいなもんじゃん。
他人の作った完成品の工夫を見て学ぶのもおもしろいよ。
つか、このスレはいつまでたっても構文解析か荒らしの話しかしてないし…。
565:デフォルトの名無しさん
05/06/22 13:00:54
字句解析・構文解析 ⇒ つまらん。話したくない
意味解析・目的コード生成 ⇒ 各々の機械語スレへどうぞ
各種言語に依存した…… ⇒ 厨は引っ込め
このスレは、何について話すスレなんだ?
566:デフォルトの名無しさん
05/06/22 13:20:55
>>565
実装レベルの話はどうでもいい。
567:デフォルトの名無しさん
05/06/22 13:21:16
>>565
というか厨はお前だろ。
568:デフォルトの名無しさん
05/06/22 16:42:34
>>565
うーん、そこで「他でヤレ」っつってるのは、
単なる荒らしだと思うよ。相手にする必要なし。
つか荒らし被害者のフリして荒らすなって(笑
569:デフォルトの名無しさん
05/06/22 18:08:49
>>1
> 字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換,
> CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化,
> それにVM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。
> 意味論に関する話題も歓迎です。
字句解析・構文解析以外にも沢山話題はあるじゃない。
570:デフォルトの名無しさん
05/06/22 18:12:09
じゃとりあえず話題をどうぞ(マジ
最近、プログラミング言語系の開発とかやってないなぁ~(遠い目
571:デフォルトの名無しさん
05/06/22 18:17:23
んじゃ制御フローの話題でも。
最近は制御フロー解析はstructuralな手法に移りつつあるようだけど、reducibleでないループ
はどうしてる? そこだけ古典的な方法でやってる?
572:デフォルトの名無しさん
05/06/22 18:20:19
質問するときは、まず相手を探し、次に質問を選ばなきゃ。
>>570に書いたとおり、俺はスルー
573:572
05/06/22 18:23:37
つか俺、ドラゴンブックの和訳出る手前で
コンパイラーに関する体系的な勉強が止まってる。
ドラゴンブックに型変数の話がちょこっとしか載ってなくて、興味が萎えたんだよなぁ。
574:デフォルトの名無しさん
05/06/22 18:33:58
subset型が欲しいなと思うときはある。
y : { x in Int | P(x)}みたいな感じで。
ただしimpredicativeなものは勘弁。
575:デフォルトの名無しさん
05/06/22 18:34:32
Matz召還して議論したらどぉーお?
576:デフォルトの名無しさん
05/06/22 18:52:50
>>574
Pascalの範囲型みたいな話だね。
構文上の判りやすさはさておいて、
そーゆーのはObject指向で解決できるのでわ?
(constractorや各種演算子で範囲型を外れないようにチェックして、
もし外れたら例外発生、とか)
577:デフォルトの名無しさん
05/06/22 18:55:32
オブジェクト指向と型は何の関係もない
578:デフォルトの名無しさん
05/06/22 19:10:02
オブジェクト指向のクラスを型とみなす事「も」できる。
通常のOOプログラミングでは、型とクラスの相違は曖昧にされる事が多い。
理論では識別したがるみたいだけどw
579:デフォルトの名無しさん
05/06/22 19:12:12
なんで区別したがるんだっけ?
何度か読んだ覚えがあるけどど忘れした
580:デフォルトの名無しさん
05/06/22 20:13:18
俺も教えて欲しい
581:デフォルトの名無しさん
05/06/22 20:31:22
Haskellなんか、クラスと型は別もんだけど
そういう意味じゃないの?
582:デフォルトの名無しさん
05/06/22 20:32:48
クラスがあるのに静的型が無い言語とか、そもそもクラスが無い言語とかもあることから来たのでは?
583:デフォルトの名無しさん
05/06/22 21:06:03
言語処理系に関する研究の進展によって、
それまで言語処理系の内部機構だったものが、
言語ユーザに安全かつ判りやすい形で開放される事がある。
・・・メモリー・アロケーション然り、ユーザ定義型しかり。型変数、型推論も。
Lispとか、OOとか、そーゆー「開放」を前倒しした形で試すには、
良いプラットフォームなのでわ?と
584:デフォルトの名無しさん
05/06/22 21:11:57
>>583
日本語でお願いします
585:583じゃないが
05/06/22 21:15:44
言語として本格的に実装する前の実験段階の実装には、LISP や OO を使うと良いのではないか?
って読んだ
586:デフォルトの名無しさん
05/06/22 21:21:16
お前の日本語力、理解力が低いのは、よく判った。
これまでの言語処理系発展の歴史の中で、
それまで言語処理系内部の仕組みとしてユーザの立ち入りを禁止していた機構
例えば:メモリーの動的アロケーション、型の追加定義、型を推測する仕組み
が、簡潔かつ安全な形でユーザに開放されてきた。
・Lispのように高階関数で言語の実行機構を弄る事ができる言語、
・オブジェクト指向言語のように、データと操作をカプセル化して新しい型を定義しやすい言語、
は、上記のような「新しい機構のユーザへの開放」を実験するのに適しているのではないか?
以上
587:583=586
05/06/22 21:22:41
>>585
介錯かたじけないっす。
>>586は>>584宛ての熱いラブレターでつ・・・
588:583じゃないが
05/06/22 21:25:17
読みにくいです
589:デフォルトの名無しさん
05/06/22 21:28:39
はい。反省。
さっき翻訳の真似事で下訳してたから、
むちゃくちゃな語順の日本語をしゃべってるかもしれない・・・
590:デフォルトの名無しさん
05/06/23 00:07:11
>>586
アフォ
591:デフォルトの名無しさん
05/06/23 00:11:25
哀れな奴
592:デフォルトの名無しさん
05/06/23 02:12:10
字句解析はできる
コンパイルも通って実行もできる
でも実行した結果は意味不明
そんな感じの文章
593:デフォルトの名無しさん
05/06/23 04:16:57
重箱の隅つつくだけ
594:デフォルトの名無しさん
05/06/24 04:24:43
>>553
O'Reilly の Lex & Yacc には少なくても無い。
用語の説明コーナーに出ているだけ
595:デフォルトの名無しさん
05/06/24 22:01:28
bison でのエラーメッセージの出し方で質問です。
スクリプト言語を作ろうとしてて
入力にエラーがあったときに詳細なエラーメッセージを出したいんですが
どのようにしたらいいでしょうか?
例えば
if x != 0 {
^
'(' expected.
とか出したいんですが、そもそも「if文の途中」というのが
取れるんでしょうか?
また、現在注目しているトークンの値(yylexからの戻り値)
はどこかに格納されてるでしょうか?
596:デフォルトの名無しさん
05/06/24 22:08:57
まあ>>595くらいのレベルがこのスレにちょうどあってる気がする
597:デフォルトの名無しさん
05/06/24 23:12:59
見てると、LispとRuby、両方ともアンチが厨なだけに見える。
厨だから、ちょっとこの二つが出てくるとすぐ暴れだして
荒れる。
598:デフォルトの名無しさん
05/06/24 23:18:57
>>597
わかってないな。
何かを貶す時の基本は度外れに褒めまくること。
そうすれば>>597のようなアホがほいほいつられてくれる。
599:デフォルトの名無しさん
05/06/25 00:32:42
>>595
lexerはどうしてるの?
Lex等を使わずに自分で書いたのなら、どこまで処理してるかは把握してるのでは?
lookahead tokenの値は変数yycharにおさめられてます。
600:デフォルトの名無しさん
05/06/25 01:21:33
>>595 bisonのオプション
#define YYERROR_VERBOSE 1 /* Enable verbose error messages. */
マニュアルにも出てるはず
> そもそも「if文の途中」というのが
> 取れるんでしょうか?
bison の error を使えば if文の途中でパース失敗した
ときのアクションとか付けられる
なんか説明しづらいけどマニュアルのサンプルに出てそう
601:デフォルトの名無しさん
05/06/25 09:59:34
>>595
すれ違い。
Lisperより
602:595
05/06/25 10:03:24
みなさんありがとうございます。これから試してみようと思います。
>599
flexを使ってます。bison側で「@x」と書けば、トークンの位置が取れると
URLリンク(www1.kcn.ne.jp)
に書いてあったんですがまだ試してません。yycharですか、ありがとうございます。
>600
YYERROR_VERBOSE は試してみました。多少わかりやすいエラーメッセージが
yyerrorに与えられるようになったんですが、自動生成じゃなく自分でエラーメッセージを
決めたいんです(Cコンパイラが出すような)。
error は今のところトップレベルでやっちゃってるんで、
そこを文それぞれにもってかないとだめなんですね。
603:デフォルトの名無しさん
05/06/25 12:44:21
>>601
死ね。
604:デフォルトの名無しさん
05/06/25 19:51:54
>>601 ってなにもの?
Lisp 屋からみてもはずかすぃんだけど...
605:デフォルトの名無しさん
05/06/25 22:03:06
>>604
おまぃLisp屋を騙ってる素人だろ。
Lispはプログラムとしていきなり構文木書かせるから、
文法パーサ(yacc, bison, Rie)はイラネェ~んだよ
だから、「コンパイラ/スクリプトの話題に文法パーサはイラネェ」
プログラミングに精通してる人向けのジョークなんじゃねぇ?
;; あ、素人の人には判らない話だから、
;; そこの人、ムキになって否定しないように・・・
606:デフォルトの名無しさん
05/06/25 22:06:14
よく分からんが、>>605 が素人だということはよく分かった
607:デフォルトの名無しさん
05/06/25 22:15:28
はいはい、わかったわかった(苦笑
608:デフォルトの名無しさん
05/06/25 22:16:27
まあ、大体はあってるんじゃないか。
全くいらないってわけじゃないが、他と比べて
簡単であることは間違いない。
609:デフォルトの名無しさん
05/06/25 22:19:30
文法パーサ・ジェネレータは 使わない。
S式に関する文法は ある。
妙に関心してるのも出てくる始末(苦笑
素人相手にジョーク飛ばすのも大変だなぁ。
610:デフォルトの名無しさん
05/06/25 22:22:26
なるほど。
>>605 みたいにスーパーな Lisp 屋ならば、
SICP の超循環評価器なんてイラネェ~んだろうな。
611:デフォルトの名無しさん
05/06/25 22:42:27
>>609
なんだ、お前は「文法パーサ」って言葉でツールの類を指してたのか。
612:デフォルトの名無しさん
05/06/25 22:49:41
601でギャグを言ったつもりだったっぽいなw
613:デフォルトの名無しさん
05/06/25 22:50:45
yacc の検索結果のうち 日本語のページ 約 17,600 件中 1 - 10 件目 (0.15 秒)
構文解析器 の検索結果のうち 日本語のページ 約 10,200 件中 1 - 10 件目 (0.23 秒)
パーサ の検索結果のうち 日本語のページ 約 53,700 件中 1 - 10 件目 (0.19 秒)
パーザ の検索結果のうち 日本語のページ 約 8,720 件中 1 - 10 件目 (0.04 秒)
文法パーサ の検索結果のうち 日本語のページ 約 24 件中 1 - 5 件目 (0.22 秒)
614:デフォルトの名無しさん
05/06/25 22:58:59
久しぶりにに揚足鶏取れたんで、大喜びか。
下らない人間だ
615:デフォルトの名無しさん
05/06/25 23:00:52
「LALR文法パーサ」=構文パーサの一種
バカは覚えときな。