1 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 00:25:25 ] The C++ Standards Committee www.open-std.org/jtc1/sc22/wg21/ wikipedia ja.wikipedia.org/wiki/C%2B%2B0x C++0x pc11.2ch.net/test/read.cgi/tech/1149440647/ C++0x 2 pc11.2ch.net/test/read.cgi/tech/1191842951/ C++0x 3 pc11.2ch.net/test/read.cgi/tech/1204808027/
75 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 13:51:46 ] その名前は決定事項なのか… 「イオータ」から連番を代入する機能だって想像できるわけないじゃん。あほらしい
76 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 13:54:19 ] >>73 Rangeは名前の通りRangeを生成するだけで、コピーの作業まではやってくれないぞ。
77 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 15:09:29 ] >>73 >>75 ttp://cpplover.blogspot.com/2008/07/c0x9iota.html int i = 1; std::generate(first, last, [i] () mutable { return i++; }); ラムダ式は適当だけど、これじゃだめなのかな。 あった方が便利だろうけど。
78 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 15:20:38 ] 普通にインクリメントしたら挿す値が1増えるようなイテレータがあればいいだけなんじゃないか。
79 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 15:28:23 ] >>75 じゃあおまえはλ式ときいて意味が分かるのか?
80 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 15:48:06 ] ソース上にlambdaなんてないじゃん。
81 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 15:53:01 ] #include <boost/lambda/lambda.hpp> あるじゃん。
82 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 15:54:24 ] 誰がboostの話をしてる
83 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 16:05:58 ] 関数名はもっと説明的にしろって話だろ
84 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 16:39:54 ] initializeContainerBySequencialNumber()ですか iotaでいいや
85 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 16:45:14 ] sequenceとかでいいんじゃねえの。
86 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 16:52:20 ] atoiの逆関数だろ>iota
87 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 16:56:47 ] >>86 みんな言おうと思っても言わなかったのに…
88 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 17:02:27 ] >>86 フカクニモワロタ
89 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 17:17:42 ] APL由来らしいけど、Lispで数列的な操作によく使うよ?>iota
90 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 17:33:51 ] iota_iteratorがほしい
91 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:01:16 ] >>76 C++ は GC 機能持ってないくて 戻り値でオブジェクトを返すコスト高いからそういう仕様になってるだけで、 コピー作業の有無は本質じゃないのでは。 >>89 いや、マイナーな言語はマイナーな命名規則でやってくれてもいいんだけど、 大衆が使う言語で変な名前使われると初心者が寄り付かなくなるぞ。 indexe generator → i → ι なんて誰が想像するんだよ。
92 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:05:17 ] Lispがマイナーとな
93 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:08:29 ] C++もLispも同じくらいマイナーですよw
94 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:11:37 ] >>92 あ、いや、知名度はあるな。 なんだろ、マニア向け言語。
95 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:11:38 ] >>90 それなんてboost::counting_iterator?
96 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:23:18 ] counting iterator があるのにわざわざ iota の名前を取ろうとする C++ に絶望した
97 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 21:14:30 ] 「STLによるコンポーネントデザイン」(2000年)って本にiotaって紹介されてたけど。 copy_ifと同じようにSTLに(当時)存在しないアルゴリズムとして。
98 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 22:36:12 ] >>90 つ concept_map InputIterator<int> { typedef int value_type; typedef int reference; typedef int* pointer; typedef int difference_type; int operator*(int x) { return x; } };
99 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 22:37:32 ] > InputIterator < ForwardIterator
100 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 08:27:34 ] C++0xでダックプログラミングなんて本でないかなぁ。 別にダックプログラミングだけじゃなくてもいいけど
101 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:11:53 ] APLがマイナーとな?
102 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:17:06 ] duck typingじゃないのか。
103 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:50:44 ] >>101 シェア的にはマイナーだろ
104 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:53:16 ] アヒル思考プログラミング
105 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:12:27 ] >>101 正直、APLはマイナーだと思う。w
106 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 14:24:43 ] STLが影響受けてる言語だけどな。
107 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 17:11:06 ] >>106 を読むまで apache portable library の話をしていると思ってたらそれも APR でした\(^o^)/
108 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 17:12:24 ] ここまでアイオタの話無し
109 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 17:13:42 ] アイダホ?
110 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 19:51:36 ] >>106 それはAdaじゃないの?
111 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 19:52:29 ] いろんなものの影響を受けてるんですよ
112 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 20:47:53 ] 言語やライブラリの設計者は言語マニアなことが多いから メジャーなライブラリが影響を受けているからといって、 その言語がメジャーとは限らない。
113 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 23:54:24 ] >>110 Adaは最初の実装言語ですよ。 まともなgenericsのあった数少ない言語だったから。 設計に関してはAPL, FP, Lisp, pure functional, CLU, smalltalkの影響が大きい。
114 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 23:55:49 ] SIMULA のことも忘れないでください
115 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 08:10:28 ] 志村後ろ
116 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 11:38:33 ] DVDでるね。
117 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 14:14:12 ] >>113 言語拡張を最低限にとどめて何とかなる関数型言語 # 簡単じゃん, 作ってしまえや 言語拡張しようとすると数年がかりになる手続き型言語 # いあ, それは, まだコンセンサスが… って, 理解でいいのか?
118 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 02:51:25 ] 何故極端な単純化で物事を理解しようとするのかわからん。
119 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 03:02:52 ] 再帰使いまくりでスタックぶち壊す関数型言語と 副作用使いまくりでデータぶち壊す手続き型言語ですね、わかります
120 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 08:02:55 ] >>118 馬鹿が「俺はもうわかっている」と思うための唯一の方法だからでは。
121 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 08:13:03 ] >>119 つ proper tail recursion
122 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:28:47 ] 今度は終わらない末尾最適化関数で時間をぶち壊すんですね
123 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:31:32 ] >>122 頭悪そう…
124 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 11:35:55 ] 要するに頭の悪い人は何も書けないという話
125 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 12:02:56 ] >>124 それは中途半端に頭がいい人。 頭の悪い奴は気軽に書いて、しっかりぶち壊す。
126 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 12:42:02 ] >>125 書けないというのは、書き方に悩んだりして手が出せないという意味ではなく、 まともな物を書けないという意味ね。
127 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:44:59 ] 再帰は悪と教え込まれてきたC系プログラマが 今更まともにラムダ式を使いこなせるわけがないということですね、わかります
128 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:52:07 ] Fortran じゃあるまいし、そんなこと教える奴いねーだろ
129 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:46:46 ] えー 「再帰はスタックを壊すので、出来るだけループに書き換えましょー」って習うじゃん 書き換えの練習問題とかお約束じゃん 最近は違うの?
130 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:50:37 ] いまどき再帰でスタックを「壊す」とは珍しい環境だな。 エラーになるとか、無闇に重くなるとかが普通だろ。
131 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:53:04 ] >>129 「出来るだけ」ってことは暗に「出来ない」ケースでは使えってことでは? つか、再帰が悪とかってレベル低すぎでしょ。w
132 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 03:14:57 ] 珍しくレベルが低い話しですね
133 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 07:14:34 ] >>129 何歳なんだおまえは。50歳ぐらいか?
134 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 07:38:15 ] >>130 末尾コールしをジャンプにしてるだけじゃん 関数型言語だと結構普通にやってるみたいだけど、CとかC++で 末尾以外の再帰をループに展開する奴ってあるの? # アッカーマンとか、タライとか………
135 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 07:41:29 ] アッカーマン関数をループに展開する関数型言語なんてない。
136 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 07:56:08 ] タライってなんだ?調べても盥しかでてこねーぞ
137 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 07:59:22 ] >>136 たらいまわし関数で調べなおせ。
138 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 08:00:05 ] たらいまわし関数で google よろし
139 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 08:26:47 ] 出てきましたーぞ。ありがとうございましたーぞ。
140 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 10:09:15 ] >>135 手元にある sbcl でオプティマイズかけたら loop に展開したぞ lisp は関数型じゃないと言われればそれまでだが…
141 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 10:20:41 ] >>129 最近のことは知らんが 俺の世代もそうだったから言いたいことはよく分かるw 再帰テンプレートで終端条件の特殊化を書き間違って しばらく帰ってこなくなったりしたときに、ふと当時を思い出して和む
142 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 10:36:40 ] Ackのループ化は末尾だけ(>>134 )でしょ。 それともスタックや継続使って、 第一引数も第二引数も0じゃない時をループ展開してるの?
143 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 13:17:34 ] VC++2008 SP1日本語packはいつでんの?
144 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 13:21:28 ] >>143 ここは C++ スレじゃなくて、 C++0x スレですよ。
145 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 16:39:42 ] 日本語版でも TR1 が欲しいということでしょ。 TR1 は 0x じゃないという主張なら分からんけど。
146 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 23:51:02 ] 末尾再帰はVCでもGCCでもループに変換するよ
147 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:20:18 ] >>146 末尾再帰の展開は末尾コールのジャンプ変換と等価
148 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:27:02 ] >>146 末尾コールのジャンプ変換とループへの変換との違いは?
149 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:28:42 ] >>147 ね
150 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:29:55 ] >>142 > 第一引数も第二引数も0じゃない時をループ展開してるの? 中間表現に CPS 使うと分岐/呼び出しが末尾コール に変換可能なので最終的にループになるらしい 詳細は識者に聞いて
151 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:30:27 ] gcc(たぶん4とかから)には末尾再帰の最適化を明示的にコンパイラに指示するオプションがあるらしいよー -foptimize-sibling-calls Optimize sibling and tail recursive calls.
152 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:38:22 ] >>148 > 末尾コールのジャンプ変換とループへの変換との違いは? ジャンプ先が別のルーチンか呼自分の内部かの違いに過ぎないだろ? アセンブラやってる奴ならみんな使ってると思うんだが…
153 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:40:17 ] >>152 編集ミス x …が別のルーチンか呼自分の… o …が別のルーチンか自分の…
154 名前:152 mailto:sage [2008/07/12(土) 00:46:52 ] 補足 つっても, 戻り番地スタックに積む程度のコストみたいだが
155 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:48:33 ] GCC 3.4.4で f(a, n) { if (a==0) return n; return f(a-1, n*a); } が _f: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax jmp L3 .p2align 4,,7 L6: imull %edx, %eax decl %edx L3: testl %edx, %edx jne L6 popl %ebp ret でした
156 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:51:35 ] >>150 継続スタイルに変換できるのはしってるよ、そんなの常識。 CPSを中間表現に使っているコンパイラも、 オブジェクトコードの生成ではCSP止めてます。 再帰スタックの代わりに、継続の入れ子を持ち運ぶのはとても効率が悪いので。 まともな処理系でAck関数をループや継続に変換して実行するものはないでしょ? お遊びや学習用ってことなら俺も書いたことがあるけれど。
157 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:52:25 ] >>155 こんなのコンパイルしてみ int f(...){return ...;} int g(...) {return f(...);} おそらく g() の最後は call f になると思う
158 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:54:04 ] >>157 gccがやるのは自己再帰の関数内ジャンプだけじゃないの? > おそらく
159 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:57:24 ] >>157 それはインライン展開すべきなの?
160 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:59:19 ] >>156 CL-USER> (lisp-implementation-type) "SBCL" CL-USER> (lisp-implementation-version) "1.0.17.42" CL-USER> (defun a (x y) (declare (optimize (speed 3) (safety 0)) (type fixnum x y)) (cond ((zerop y) 0) ((zerop x) (the fixnum (* 2 y))) ((= y 1) 2) (t (the fixnum (a (- x 1) (the fixnum (a x (- y 1)))))))) A CL-USER> (disassemble 'a) ;;; 続く
161 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 01:00:53 ] ;;; 続き 1/2 CL-USER> (disassemble 'a) ; 03B5BE33: L0: 4885C9 TEST RCX, RCX ; no-arg-parsing entry point ; 36: 750D JNE L2 ; 38: 31C9 XOR ECX, ECX ; 3A: L1: 488D65F0 LEA RSP, [RBP-16] ; 3E: 488B6DF8 MOV RBP, [RBP-8] ; 42: C20800 RET 8 ; 45: L2: 488D04D500000000 LEA RAX, [RDX*8] ; 4D: 4885C0 TEST RAX, RAX ; 50: 7505 JNE L3 ; 52: 48D1E1 SHL RCX, 1 ; 55: EBE3 JMP L1 ; 57: L3: 4883F908 CMP RCX, 8 ; 5B: 7507 JNE L4 ; 5D: B910000000 MOV ECX, 16 ; 62: EBD6 JMP L1 ; 64: L4: 488BC2 MOV RAX, RDX ; 67: 4883E801 SUB RAX, 1 ; 6B: 488945E8 MOV [RBP-24], RAX ; 6F: 4883E908 SUB RCX, 8 ; 73: 488BC5 MOV RAX, RBP
162 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 01:02:22 ] ;;; 続き 2/2 技と1行だぶらせてある ; 73: 488BC5 MOV RAX, RBP ; 76: 488BDC MOV RBX, RSP ; 79: 4883EC40 SUB RSP, 64 ; 7D: 488943F8 MOV [RBX-8], RAX ; 81: 488BEB MOV RBP, RBX ; 84: 488D0506000000 LEA RAX, [RIP+6] ; 8B: 488945F0 MOV [RBP-16], RAX ; 8F: EBA2 JMP L0 ; 91: 488B55E8 MOV RDX, [RBP-24] ; 95: EB9C JMP L0 ; 97: 90 NOP ; 98: 90 NOP ; 99: 90 NOP ; 9A: 90 NOP ; 9B: 90 NOP ; 9C: 90 NOP ; 9D: 90 NOP ; 9E: 90 NOP ; 9F: 90 NOP ; NIL CL-USER>
163 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 01:05:57 ] Common Lispは使いたくないな
164 名前:デフォルトの名無しさん [2008/07/12(土) 01:28:52 ] >>163 ほっとけ、Lisp は俺の電卓だ
165 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 01:32:00 ] >>164 最近電卓はPythonに宗旨替えしました
166 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 01:40:14 ] 俺の電卓はRuby
167 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 04:06:59 ] そこはウソでもよいから「俺の電卓はC++コンパイラ」と書くべきだろ・・・スレ的に考えて
168 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 04:14:48 ] テ、テンプレート!
169 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 07:41:25 ] じゃあ俺の電卓はghostscript
170 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 12:09:16 ] 俺の電卓はgoogle マジで
171 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 13:48:43 ] 俺の電卓は電卓
172 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 13:51:02 ] calc.exeで十分
173 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 15:00:26 ] >167 小数計算ができませn! ><
174 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 15:25:10 ] 本物のC++プログラマは、ジョブをこなすのに、実行時プログラミングをまったく必要としない。 彼らはキーパンチャーと規格準拠なC++0x コンパイラ、そしてアニメがあれば完璧に幸福になれるのだ。 本物のプログラマはテンプレートで整数値演算をする。 本物のプログラマはで固定小数点数演算をする。 本物のプログラマはテンプレートでIEEE754の単精度演算を必要ならば'実装する。 本物のプログラマは倍精度演算をテンプレートとコンパイラの64bit整数型でする。 もしテンプレートで出来なければ、プリプロセッサでやる。プリプロセッサで出来なきゃ、それはやる価値がないのだ。
175 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 17:36:56 ] たらいまわし関数なんてはじめてきいたんでぐぐるとこんなのでてきた /* 再帰的に定義された次のような関数。特に用途はない。 */ int tarai(int x, int y, int z) { if (x <= y) return y; return tarai(tarai(x - 1, y, z), tarai(y - 1, z, x), tarai(z - 1, x, y)); } たった数行なのに何が起こるか想像できないのは、おれだけ? 大学の時、再帰で書けばエレガントになる、ループで書くのは素人、と刷り込まれたので 再起が出てくるたびに自分はセンスがないと思わされた苦い思い出。