1 名前:デフォルトの名無しさん mailto:sage [2005/05/06(金) 08:28:29 ] プログラミング言語処理系の開発に興味のある人達のスレッドです。 字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化, それにVM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。 意味論に関する話題も歓迎です。 前スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ 4 pc5.2ch.net/test/read.cgi/tech/1100097050/ 5 pc8.2ch.net/test/read.cgi/tech/1106129164/ (前スレ) 関連リンクは多分 >>2-10 あたり
232 名前:デフォルトの名無しさん [2005/05/19(木) 14:36:35 ] 練習で、生成系を使わずにCのプリコンパイラを作ろうと思っているのですが、 ソースコードの意味解析をやる必要があるかどうかが直感的にわからなくなってしまいました。 #define文は型検査をする必要はないので、いわゆる意味解析の必要ってない気もするのですが、 プリコンパイルはそれはそれで一つの言語であるので、どこかで意味解析が必要になりそうな気もします。 実際に必要なのかどうなのか、簡単な理由と共に教えてもらえないでしょうか? どうぞよろしくお願いします。
233 名前:232 mailto:sage [2005/05/19(木) 15:30:19 ] プリコンパイラってなんだ…プリプロセッサですね…
234 名前:デフォルトの名無しさん mailto:sage [2005/05/19(木) 16:26:45 ] なんで既存のプリプロセッサを読まないんだろう……
235 名前:デフォルトの名無しさん mailto:sage [2005/05/19(木) 16:30:36 ] 俺様と同じように言葉だけ覚えてほとんど理解できてない感じのレスだな。 そんな俺様が勘で答えてやろう。 C言語本体としての意味解析はいらない(と思う、というか構文解析もできないだろう)。 マクロ言語としての意味解析はいるかもしれない。 ただ、Cのマクロ言語は本当に簡単な言語なので、 構文解析まで通れば意味解析はほとんど何もすることが ないかもしれない。ひょっとしたらあるかもしれない。
236 名前:235 mailto:sage [2005/05/19(木) 16:32:40 ] あ、あれ?既存のプリプロセッサを読めとか そういうレベルの話なの? やっぱり全然見当違いのレスしちゃったかも。 ごめん、なかったことにしてくれ。
237 名前:232 mailto:sage [2005/05/19(木) 17:22:08 ] >>234 直感ですが、cppやgccのpre-processorのコードは高速化のために最適化されていて、 私みたいな知識のない人間が追うには辛いのではないかと思っていました。 反省して読んでみることにします。 >>235 まさにそういう感じです<言葉だけ覚えてほとんど理解できてない。 理解するために簡単そうに見えるプリプロセッサを作ろうと思ったのですが、 作る前に色々と考えていたら意味解析のセクションが必要なのかどうかがわからなくなって… とりあえず、プリプロセッサの意味規則がどんなものかを考えることが重要なのですね。 まだ紙の上で考えている状態なので、具体的にどのような構文木を出せばよいのか、 そこのところで悩んでいる途中で出た疑問でした。 わかっていない私にわかりやすく説明してくれてありがとうございました。
238 名前:デフォルトの名無しさん mailto:sage [2005/05/19(木) 21:07:54 ] 情処かどっかで 世の中のCのプリプロセッサはバグだらけ みたいな論文を見たような気がする。
239 名前:232 mailto:sage [2005/05/19(木) 21:50:18 ] 仕様はかなり細かいみたいですね<プリプロセッサ (あくまで参考として:ttp://www.sra.co.jp/wingnut/gcc/cpp-j.html)
240 名前:デフォルトの名無しさん mailto:sage [2005/05/19(木) 22:15:21 ] >>232 小さいCPP(1ファイルに収まるくらいのやつ)が入ってるよ www.lsi-j.co.jp/freesoft/
241 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 02:20:54 ] このスレにはソースを読めばなんでもわかると思ってるやつしかおらんのか。
242 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 03:23:19 ] ソース読まない奴は無能
243 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 05:55:55 ] 仕様書にはいつもソース読めと書いてます。 結局ソース見るのが一番早い。
244 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 09:44:15 ] >>243 10行くらいならね。
245 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 17:22:18 ] JavaやVBAのパーサを書いて見たいんですが、どっかにgrammarでも落ちていないですか?
246 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 17:44:30 ] Javaならあるよ。VBAは知らない。 java.sun.com/docs/books/jls/
247 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 18:57:23 ] レスサンクスです。 早速構文チェッカーでも書いてみます。 やはりC++より構文規則は見た目きれいですね。 C++の構文はどこもかしこもオプションだらけでよくJavaプログラマが汚いという意味がよくわかりました。 私もC++パーサを書いたあと、しばらくはC++でプログラムしなくなりました。
248 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 21:23:32 ] >>238 たぶんこれだろ。 lc.linux.or.jp/lc2002/papers/matsui0920p.pdf www.ipa.go.jp/jinzai/esp/15mito/mdata/11-6.html
249 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 22:49:23 ] >>247 その意見には激しく同意した上で、なおかつC++が最高の言語だと思う自分がいる
250 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 23:17:35 ] なんか、俺はプログラミングするたびに違う言語使ってる気がする。 統一したほうがいいのだろうか。
251 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 23:24:33 ] またScheme処理系作っちまった やめられない
252 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 23:27:55 ] 同じ物ばかりつくって飽きないの?
253 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 23:35:07 ] もうとまらねーよ
254 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 23:39:04 ] >>252 Scheme処理系は何個あっても困らないからねえ
255 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 00:54:16 ] JVMで動くCOBOLを作ってみてくれ。
256 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 00:55:17 ] お前ら、もっと斬新なことしてくれよ 実装なんか興味ないからさ。
257 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:18:36 ] タガログ語プログラミング言語とか。
258 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:33:11 ] >>251 公開キボンヌ
259 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:33:48 ] 面白いこと=トロイ な頭の俺をどうにかしてください
260 名前:デフォルトの名無しさん [2005/05/21(土) 01:35:50 ] >>256 そんなあなたに「りんg(ry」
261 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:50:59 ] プログラムを2つ与えると、その実行結果が等価になるか判断する処理系作って。 用途は、たとえば自分でソートのプログラムを作ったけど正しいか自信が無いときに、 単純で遅いが明らかに正しいソートプログラムと比較させる。 全自動は無理だと思うから、人間が色々手伝ってもかまわない。 「入力の長さnの帰納法」とかヒントをあげると、少なくてもn=1のときは 単純にn=1が保証されるものとして最適化するだけで判定できそうな気がする。
262 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 01:54:55 ] >>261 どうやらスレ違いぽいな 完璧なプログラム pc8.2ch.net/test/read.cgi/tech/1041126217/
263 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 09:35:34 ] >>251 さん、リクエストします。 JavaScriptでScheme処理系を書いてください
264 名前:デフォルトの名無しさん [2005/05/21(土) 10:38:57 ] >>261 しかも、内容が馬鹿っぽいw
265 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 10:59:05 ] 一般的にはムリって 計算論で結論出てなかったっけ?
266 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 11:05:29 ] >>261 少なくとも、理論上無理。そんなことができるなら、世の中もっと幸せになってる。
267 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 11:51:13 ] >>251 >>263 をR5RS準拠でヨロスク
268 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 14:49:33 ] プログラムが停止するかどうかすら判定できない、じゃなかったかなあ。
269 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:08:56 ] >>268 「有限時間内で」が大事。
270 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:25:18 ] >>261 は最初から「全自動では無理」と言ってるんだが… 理論上無理とか言ってるやつは proof assistantというものが存在することすら知らんのだろうな。 いずれにせよ>>262 の言うとおりスレ違いだろう。
271 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 16:19:22 ] >>251 氏 後学の為に是非公開してくださいませんか。宜しくお願いします。
272 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 00:51:20 ] schemeの処理系なんて、重厚長大で完璧めざしてるR5RS準拠から 読みやすさ重視orお遊びのトイプロジェクトまで、山ほどあるぞ。
273 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 07:48:12 ] >>271 R5RS規格書は50ページ程度と言われてるけど内容濃いしね 省かれた暗黙仕様もあるから準拠しようとすればそれなりに工数掛かる >>267 おれが今回作ったのは継続もなくスタックベースでそもそもRxRS前提に書いてない throwみたいに親側へ飛ぶだけだし、スタックオーバーフローもする ちゃんとしたのは別にあるんだけど、デカくなりすぎた そこそこの速度で動く&俺言語やアプリへの組み込みが目的だった 俺言語2k行ぐらいで最低限の最適化だけやったいい加減なやつ 速度はguile1.7.2と同じぐらい。。。guileは速度捨ててるね
274 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 08:52:51 ] >>273 おー、俺言語大好き人間って結構いるんだな 俺はSelf系つかprototype系好きなんで何個も作ったけど、Schemeは一度も作ったコトないや
275 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 16:33:47 ] 俺言語への組み込みScheme? どんなものか想像できない。
276 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 16:49:51 ] よくあるパターンは、scheme式をbuiltin型として使えるというものかな。 prologを組み込むと時々便利。
277 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 16:39:26 ] Scheme in javascriptやin rubyを作ってるんだけど、 何かの仕様に準拠しないと達成感がない。 でもRxRSの複素数とかくだらないの実装するのは面倒くさい上に、 母言語(javascriptとか)の数値表現がそのまま使えなくなって 滅多に使わないのに全体的に遅くなりそうなあげく、利便性まで下がる。 同じことで悩んだor悩んでるやついる?
278 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 18:49:26 ] >>277 つcoercion semantics
279 名前:デフォルトの名無しさん mailto:sage [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 22:09:36 ] >>279 おれだったらevalの結果をそのままwriteできるようにする。 結果が数値だけとは限らないので。 scheme_write(scheme_eval(scheme_read())); もしくは scheme_write(scheme_eval_string("(+ 1 2)")); 経験的に特に明示しない限りschemeならschemeの型で持ちまわる方が都合良い。
282 名前:デフォルトの名無しさん [2005/05/23(月) 23:45:06 ] >>280 イラネw
283 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 23:50:14 ] 綾本って思いっきり中田さんの授業配布プリントに 説明を加えただけにしか見えないのだが。
284 名前:デフォルトの名無しさん mailto:sage [2005/05/23(月) 23:55:31 ] そう言われても俺には確かめようが無い でも中田先生の教科書は(・∀・)イイ!!
285 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 00:41:48 ] >>281 >schemeならschemeの型で持ちまわる方が都合良い。 処理系の作成者としては当然その通りで、気持ちもわかるんだけど、 処理系のユーザとしては不便だと思うんだよね。 いちいちscheme_number_from_javascript_number(1)とかしなきゃならんのは。 どうにかならんかな、みんなどうしてるかな、って疑問でした。
286 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 02:28:26 ] 三日ほどかけて、生まれてはじめてコンパイラを作った 900行ほどのTinyBASIC以下のダメ言語だけど とりあえず、エラトステネスの篩が動いてる しかし、明らかにヘボい機械語を吐いているのに エラトステネスでVC++とほとんど実行速度に差が無い うちのマシンがefficeonだからかなあ? やっぱコンパイラは速いね
287 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 02:36:05 ] 私も、インタプリタをつくり、コンパイラに拡張したことがあります。 言語つくりを学ぶとかなりプログラミングの理解度が高まることが実感できました。 少し高度だけど、プログラミングを生業にするなら、1度はチャレンジすることをお勧めします。 決して損とは思いません。
288 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 02:49:35 ] 勉強といっても三日だし しかも半分は、STLとVC++の使い方の勉強だった気がするw 残りはVC++のデバッガーに機械語を教えてもらってたかんじ しかし、カウンタのインクリメントでさえpushとpopを二回ずつりながら へぼへぼと計算するうちのヘボコンパイラと inc eacだけで済ませそうなVC++が ほとんど実行速度に差が無いのは解せないなあ
289 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 07:35:11 ] 測定の仕方が悪いか、コンパイラにバグがあるか。
290 名前:デフォルトの名無しさん mailto:sage [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 19:23:34 ] エラトステネスのふるいだと メモリアクセスがネックになるんじゃないかな。 伝統にのっとってfactやfibで。
292 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 19:35:32 ] 同感.後taraiを回すとか. どうでもいいが,>290のVCのコードでループカウンタにレジスタが割りついてないのが気になる.
293 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 19:42:20 ] スタックマシン向けのコード生成法っぽいな?
294 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 20:43:05 ] >>293 つかスタックマシンのコードをx86へ分解してるだけだと思うよ。 コードジェネレータで頭ひねらずに済むから処理系を作ってる途中では有用だろうし。
295 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 21:49:05 ] >>290 とりあえず mov eax, i は lea eax, i だとして、 それぞれのコードを1億回ループするのを適当に計ると へぼ: 1613771636 VC++: 1119915436 クロック掛かる。1.6GHz に換算すると へぼ: 1.0秒 VC++: 0.7秒 程度の違いだな。
296 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 21:50:51 ] >>295 失礼。 mov eax, i でよかった。
297 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 22:08:35 ] >>295 クロック数って そんなに正確に測れるんですか? シミュレーション? CPU のマニュアルから計算したやつ?
298 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 22:17:21 ] sieveではスカラ最適化はほとんど利かないと思う。 しかし1億で30秒は遅い気もするが…>290でループ変数が レジスタに載ってないあたりを見ると、元ソースの問題かな。
299 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 22:29:07 ] >>297 発想が逆だ
300 名前:デフォルトの名無しさん [2005/05/24(火) 22:29:21 ] ヘボ言語のソースがみたい。 (ふるいのソース、処理系そのもののソースじゃなくて)
301 名前:デフォルトの名無しさん mailto:sage [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 22:58:42 ] どうでもいいが、primesが初期化されてないような希ガス。 初出の変数は0?
304 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 23:01:49 ] うす labelに使われてない変数は初出時に0
305 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 01:00:41 ] あれかね、今時のCPUはx86のコードを内部的にRISCな命令に変換したりするから (efficeonならなおさらだ)、その段階でスタック操作がレジスタに割り当てられて、 内部的には似たようなコードで実行されてたりするのかね。 だとしたらすげー。
306 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 01:39:20 ] いま、Athlon XPで試したら 速度全くといっていいほど変わらない 信じられない Pen4ではどうなるのか知りたいなあ
307 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 12:07:51 ] factやfibでも同じような速度なの? だとしたらマイクロオペコードすげー。
308 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 15:48:09 ] いや、関数呼び出しは実装してないんで ローカル変数実装するのが、(ちょっとだけ)面倒だから まじめに比較したい人がいるなら、ソース出すけど
309 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 18:38:40 ] 普通に1から1億までを足すプログラムとかで十分差がでると思うが。
310 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 18:40:29 ] 最適化しないと変わらないんじゃない?
311 名前:300 [2005/05/26(木) 00:06:05 ] >>302 ソースTNX! へぼ言語どころか、めっちゃ気に入りそう(ハート) あんた、センスあるねぇ。。。
312 名前:デフォルトの名無しさん mailto:sage [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 03:31:29 ] めんどくさいから、誰かやって もう飽きたし・・・ ttp://rerere.sytes.net/up/source/up6309.zip
314 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 19:17:26 ] >>305 んなわけない sieveみたいな2重ループ程度じゃ適当に作っても差はあんま出ない >>313 見た限りでは関数作れないっぽいけど 同じやり方でループのネスト深くしたり、fiboとかアッカーマン関数で 比較したりすると倍以上差が出てくるよ VMとかインタプリタに比べれば問題ない差だろうけどね
315 名前:デフォルトの名無しさん [2005/05/26(木) 22:17:47 ] >>314 ヤッターマン関数って何? ぐぐっても出てこんかったorz
316 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 22:32:08 ] >>315 アッカーマン関数でもヤッターマン関数でも出てくるけど?
317 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 22:54:33 ] ポチっとな
318 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 00:20:48 ] Fibonacciの関数呼び出し程度では大した差はでない Ackermannはコンパイラが末尾再帰を認識するかどうかでかなり差が出るはず 普通の処理でも変数の数や間接参照とかが増えてくれば違ってくる
319 名前:デフォルトの名無しさん [2005/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" と書きます www.kumei.ne.jp/c_lang/bcc/bcc_05.htm ここのソースをコピペしてコンパイルします bcc32 -W menu01.cpp のほうはうまく行きました brc32 menu01.rc menu01.exe って入力しても、windous.hが見つからないとエラーでます brc32 -i c:\bcc32\include menu01.rc menu01.exe とディレクトリを指定してやったらコンパイルできました このようにディレクトリを指定せずにコンパイルさせる設定ってどこでするのでしょうか?
320 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 02:13:26 ] 【初心者歓迎】C/C++室 Ver.17【環境依存OK】 pc8.2ch.net/test/read.cgi/tech/1115958601/
321 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 02:39:07 ] >Fibonacciの関数呼び出し程度では大した差はでない これどういう意味?
322 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 05:46:16 ] fibでも関数値のメモ化のあるなしで大きく違ってきそうだが。
323 名前:remi@id5214.bbs.盗撮倶楽部 mailto:sage [2005/05/27(金) 14:32:00 ] はじめまして れみです。 向こうのbbsで質問したところ、こちらで聞いたほうがより高度な技法を 教えていただけると紹介いただき、まかりこしました。 のぞき穴最適化技法についてお知恵をお借りできませんか。 尚、使用レンズ口径は3.00mmです よろしくお願いします
324 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 15:09:36 ] そのレンズを通して見える範囲でソースコードを手でチューニングすればいいです。 見える範囲が終わったら視野を移動するかスクロールします。 ファイルの最後までいったらおしまいです。お疲れ様でした。
325 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 18:52:21 ] どういう誤爆だ? 業者にしてはまったく意味が無い。 誰かAIのテストでもしてるのか?
326 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 18:54:35 ] スコープについて聞いてるんじゃないか?
327 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 18:57:13 ] うまい
328 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 19:04:44 ] >>322 すまんが、そういう話じゃない 関数呼び出しのテストにしても変数が1個や2個の値参照程度では 違いは出にくいということ メモ化すれば当然速くなる
329 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 20:24:00 ] ackermann関数は変数が何個の値参照なん?
330 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 20:50:02 ] mann個
331 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 20:52:11 ] >>329 lispの例題とかで見たこと無い? ものすげーえげつない再帰呼び出しのテストだと思ってくれ。
332 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 21:35:57 ] >>331 すまんが、そういう話じゃない 関数呼び出しのテストにしても変数が1個や2個の値参照程度では 違いは出にくいということ