ToDo:
そういえば
「薬三つ出しとくよ、抗生物質と痛み止めと胃薬」 「胃薬ってなんすか」 「抗生物質飲むんだから胃薬必要なのは当たり前でしょ。胃荒れちゃうから」
とかそんなかんじの会話があって、 今にして思うとこれもひどい気がした。 当たり前じゃないよ
(00:07)
http://b.hatena.ne.jp/entry/http://shinh.skr.jp/m/?date=20090316%23p06
個人的な感覚では、バッファ破壊してようが 一旦ポインタのリストを返しちゃうような実装だと strtol 連打より遅くなっちゃうし、 かといって callback 渡すような実装だとめんどくさいし、 それにたぶん今時のアーキテクチャじゃ分岐予測的な観点で最速じゃない。 まあ関数オブジェクトなり C++0x の lambda を渡す実装ならいいんだろうけど。
でまあというわけで split/join とかしたい時は 99% 速度なんて気にしてないという法則から、 普通に vector<string> かえす split がとりあえず あったりいいんじゃないかなぁとか思うわけです。 まあ insert_iterator を引数とする関数でも許せなくはない。 join は input iterator 二つに対して lexical_cast<string> かまして 合成していくようなのがあればいいんじゃないかな。
なんかしら、C++ の遅くなるようなものは加えれない原則は インターフェースを壊滅的に使いにくくしてると思うんだよなぁ。 他には assert(hogeMap.insert(make_pair("abc", 4)).second); とか書き飽きた。 second とか冗談じゃないというかんじ。
(00:24)
最近コンビニで復刊してるので地道に買って読んでいる。 足りない分は中古で補完したり別に面白くない部分は飛ばしたりしつつ。 まあ昔読んだことはあるのだけど、地味に面白いなあと思う。 まず「ぼくの考えた理想の社会」ネタは個人的に好きなんだよなぁ。 自分でもよくぼんやり考えるし。
あれこれ考えると自分的には、 「暗黙のうちに個人同士で助けあう仕組みになっていて、戦争がない」 あたりがとりあえずぼくの考えた無敵の理想社会の要素なわけだけど、 後者は目的の同意は簡単に得られるのに方法論がサッパリ見当がつかないんだよね。 そいう意味で破天荒な SF とは言えその方法論が語られるのは面白い。
あとたぶんかわぐちかいじが見開きのとこかなんかに書いていた、 「この本に出てくる人はどの立場の人もみんな自分の仕事に真摯です」 みたいなのがいいなと。 マンガって安易に悪役出しがちだけど、 実際んとこは自分が悪だとはとても思ってない者同士で あらそうケースの方が多いよねー的な
(00:37)
まとめると、
#define min(a, b) ((a) < (b) ? (a) : (b)) printf("min=%d\n", min(1, min(2, -1)));
は常識で考えて展開してくれないとこまる。
int A = 1; #define A 1+A #define B(x) x printf("%d\n", B(A));
は常識で考えて2回展開されちゃこまる。
さらに、マクロは外から展開していかなければならない。
これらを両立させるには、
という感じでやればいいんだと思う。 TCC 的には nested_list をややこしいことにすればたぶん良い。
(22:17)
typedef struct { unsigned long long a: 1; unsigned long long ll: 50; unsigned int r; } S;
に対して
S s; s.ll = 0x123456789aULL;
がこうなる。 こう長くなっちゃうと 最適化しないコンパイラの方が読みにくいとおもう
8048459: 48 b8 9a 78 56 34 12 mov $0x123456789a,%rax 8048460: 00 00 00 8048463: 48 c7 c1 9a 78 56 34 mov $0x3456789a,%rcx 804846a: 48 89 ca mov %rcx,%rdx 804846d: 89 55 ec mov %edx,-0x14(%rbp) 8048470: 48 89 c2 mov %rax,%rdx 8048473: 89 4d e8 mov %ecx,-0x18(%rbp) 8048476: 8b 4d ec mov -0x14(%rbp),%ecx 8048479: 48 89 55 e0 mov %rdx,-0x20(%rbp) 804847d: 8b 55 e8 mov -0x18(%rbp),%edx 8048480: 48 8b 4d e0 mov -0x20(%rbp),%rcx 8048484: 48 89 45 d8 mov %rax,-0x28(%rbp) 8048488: 48 b8 ff ff 03 00 00 mov $0x3ffff,%rax 804848f: 00 00 00 8048492: 48 21 c1 and %rax,%rcx 8048495: 48 89 c8 mov %rcx,%rax 8048498: 48 c1 e0 01 shl $0x1,%rax 804849c: 48 8b 4d f0 mov -0x10(%rbp),%rcx 80484a0: 48 ba 01 00 f8 ff ff mov $0xfffffffffff80001,%rdx 80484a7: ff ff ff 80484aa: 48 21 d1 and %rdx,%rcx 80484ad: 48 89 c2 mov %rax,%rdx 80484b0: 48 89 c8 mov %rcx,%rax 80484b3: 48 09 c2 or %rax,%rdx 80484b6: 48 89 d0 mov %rdx,%rax 80484b9: 48 89 45 f0 mov %rax,-0x10(%rbp)
(00:20)
8048459: 48 b8 9a 78 56 34 12 mov $0x123456789a,%rax 8048460: 00 00 00 8048463: 48 c7 c1 9a 78 56 34 mov $0x3456789a,%rcx 804846a: 48 89 ca mov %rcx,%rdx 804846d: 89 55 ec mov %edx,-0x14(%rbp) // 32, 0x3456789a 8048470: 48 89 c2 mov %rax,%rdx 8048473: 89 4d e8 mov %ecx,-0x18(%rbp) // 32, 0x3456789a 8048476: 8b 4d ec mov -0x14(%rbp),%ecx 8048479: 48 89 55 e0 mov %rdx,-0x20(%rbp) // 64, 0x123456789a // uint32 edx = 0x3456789a; 804847d: 8b 55 e8 mov -0x18(%rbp),%edx // uint64 rcx = 0x123456789a; 8048480: 48 8b 4d e0 mov -0x20(%rbp),%rcx 8048484: 48 89 45 d8 mov %rax,-0x28(%rbp) // 64, 0x123456789a 8048488: 48 b8 ff ff 03 00 00 mov $0x3ffff,%rax 804848f: 00 00 00 // uint64 rcx = 0x3ffff & 0x123456789a; // 18bit from LSB 8048492: 48 21 c1 and %rax,%rcx 8048495: 48 89 c8 mov %rcx,%rax // uint64 rax = (0x3ffff & 0x123456789a) << 1; 8048498: 48 c1 e0 01 shl $0x1,%rax 804849c: 48 8b 4d f0 mov -0x10(%rbp),%rcx 80484a0: 48 ba 01 00 f8 ff ff mov $0xfffffffffff80001,%rdx 80484a7: ff ff ff 80484aa: 48 21 d1 and %rdx,%rcx 80484ad: 48 89 c2 mov %rax,%rdx 80484b0: 48 89 c8 mov %rcx,%rax 80484b3: 48 09 c2 or %rax,%rdx 80484b6: 48 89 d0 mov %rdx,%rax 80484b9: 48 89 45 f0 mov %rax,-0x10(%rbp)
なるほどね。 bitmask が根本的に間違ってるよ。 OK 一見 fix できてる。 つかたぶんこれ x86 でも動くな。
(01:13)
> cat bitfield_ll2.c #include <stdio.h> int main() { struct sbf2 { long long f1 : 3; } st2; st2.f1 = 3; printf("%lld\n", st2.f1); } > gcc bitfield_ll2.c && ./a.out 3 > gcc -m32 bitfield_ll2.c && ./a.out -18650500345888765
GCC ってこのへんどうなの…
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7018
うーん int より小さいものに long long 使うなってか。
(02:28)
http://code.google.com/p/jaikuengine/
opensource すか。
177348 642108 6749045 total
web service の OSS 化って珍しい気もするな。 OpenPNE とかあるか。
一見だからどうした感は否めないけど、 OpenPNE とかみたいにプラグインとかつくれるんなら なんかコミュニティごとに立てるとかできたりするんかいな。 ちなみに OpenPNE に本当にプラグインがあるかは知りません
(03:04)
http://d.hatena.ne.jp/kazuhooku/20090216/1234771983
さすがに 24 はうざいかなあ… とループ書いてみたけど sscanf の方が良い気もした。
#include <stdio.h> #include <stdlib.h> #include <assert.h> int main() { int i; char* buf = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24"; unsigned hits[24]; char* p; for (p = buf, i = 0;; i++) { hits[i] = strtol(p, &p, 10); if (!*p) break; assert(*p == ','); p++; } assert(i == 23); for (i = 0; i < 24; i++) { assert(i+1 == hits[i]); } }
要は assert がうざいのだけど、 strtok は微妙だし strtok_r も標準じゃないしなぁとかいう。 やっぱ split/join は必要なんだよなぁ。
(10:30)
#include <stdio.h> int A = 1; #define A 1+A #define B(x) x int main() { printf("%d\n", B(A)); }
で TCC が 3 とか出力しやがってこまる。 おそらく、 B(A) => B(1+A) => 1+A => 1+1+A の順番で展開されてそうに思える。
でも K&R にある
#define cat(x, y) x ## y cat(cat(1,2), 3)
とかいう例でちゃんとコンパイルコケるってことは 外からやってるのかなぁ。
(11:18)
なんか最近頻尿とか残尿感とかそんな感じだなあとか思ってたけど そろそろなんか明らかにおかしいだろと思ったので病院へ行ってきた。
で、なんかちんこもまれるわケツに指つっこまれるわで大変なのだった。いたかった。 ケツに指つっこむのは前立腺の触診プラス精液回収が目的らしいんだけど、 あんま精液出ないな若いのにとか罵倒されてついでに言葉責めもされた。
老人にケツに指つっこまれて精液出すのが正常だなんてひどい話です。
で、なんか出ないもんだから尿道になんか少し入れられて大変いたかった。 あと運動してるかと聞かれてノーと言うと 運動しないヤツは頭でっかちで中身が無いとか そのうち鬱になるとか言われた。
その時はおもろいオッサンだなーとか思ってたけど、 冷静に考えるとひどい話だった。
でまあ前立腺炎とのこと。 悪いことにはならんけどあんま簡単には治らんとのこと。 ひどい。 運動しろ酒飲むな香辛料喰うなと踏んだりけったりである。
そろそろ自分の体のパーツで健康的な部分が無い気がする。
(22:04)
http://longlong.way-nifty.com/blog/2009/03/post-4cf4.html
ええまさに懇親会の存在を知ったタイミングでは ああなんか別にやるのは気まずいかと思ったのですが。
とかなんとかでタイミング的には すごい速度で会場提供を持ちかけてくださった woさんに感謝的な
先に懇親会に気付いてたり会場提供無かったらヤメてたと思うし
(14:03)
http://shinh.skr.jp/h/?HackTheCellPostMortem
693 ってガロア組かっ!とか思ったけどスレの 693 さんのことだとわかった。
予想以上にあっさり人数が増えてびっくり嬉しいのですけど、 残念ながらそろそろ人数的に厳しいかもらしいのでした…
なんかなんかちゃんとやらんとかなあと思う一方、 こんだけ面白そうな人いたらほっといても面白いだろうという予想も。
http://d.hatena.ne.jp/ku-ma-me/20090312/p1
おもしろい。
def f(x) x+1 end def g(x) y=x+1 y+1 end p [1].dmap+1 p f([1].dmap) p g([1].dmap)
g が動くといいんだけどな
(10:07)
http://d.hatena.ne.jp/odz/20090310/1236698884
#include <stdio.h> struct Foo { int i; }; void with_paren() { Foo* foo = new Foo; foo->i = 42; delete foo; foo = new Foo; printf("with paren: %d\n", foo->i); } void without_paren() { Foo* foo = new Foo; foo->i = 42; delete foo; foo = new Foo(); printf("without paren: %d\n", foo->i); } int main() { with_paren(); without_paren(); }
手元の GCC では同じ結果になりやがったけど、 cl.exe では、
with paren: 5374216 without paren: 0
とかになった。
↑コメントで指摘いただいたけど with と without が逆。ひどい
(00:43)
紙媒体でゲットした。
反応が以上に悪かったけど、 インテルの英語サイトの方にある連絡先に 本全部の注文番号を送って後は ping しまくれば良かった。 ちゃんと通れば1円も払わずにわざわざ海外から送ってくれる。
嬉しいと言わざるをえない。
(10:43)
http://hiraitamado.web.fc2.com/mindex.html
まなぶ以外はどんな感じなのかなあと適当に見てみたらいいの見つけた。 実は新都社すごいんじゃないかな
(22:12)
http://d.hatena.ne.jp/odz/20090311/1236775799
POD型は () をつけるとゼロ初期化だったと思うます。
ゼロじゃなくて各メンバに () つけるとかだったかも知れないけど PODなら実質同じだよね。
あと cl.exe もできたバイナリも wine で動かしてます
dmc.exe とか dmd.exe とか bcc32.exe とかも入ってて、 GCC でクロスコンパイルするとかよりこっちの方がラクなんだよな…
(22:16)
じゃなかったけと思ったけど これだとなんかな…
#include <stdio.h> struct S { int i; }; void print_s_without_paren() { void* i; (&i)[-1] = (void*)42; S s; printf("%d\n", s.i); } void print_s_with_paren() { void* i; (&i)[-1] = (void*)42; S s = S(); //const S& s = S(); printf("%d\n", s.i); } int main() { print_s_without_paren(); print_s_with_paren(); }
まぁなんかしら GCC でもこっちなら movl $0, -0x10(%rbp) とかがあるかどうかが変わる
(22:28)
http://shinh.skr.jp/h/?HackTheCellPostMortem
懇親会は詳しい検討はむずかしいかも、 とのことなのでまぁやる方向でいいんじゃね、 ということに
勝手に書き換えていただけると幸いです。 あと kik さん kodera さん herumi さんは強制参加です。 ぜひ
(23:41)
http://homepage1.nifty.com/herumi/diary/0903.html#9
http://tripper.kousaku.in/20090307.html#p01
思いついてしかるべきだったなあ…と思います。 幸い計数の部分は工夫する余地はあるけどあまり速度に影響しないんですよね… lqr 減らすのがなんだかんだで一番効きそうな気がするけどどうなのかなー
(01:03)
http://d.hatena.ne.jp/youz/20090308/1236482522
ぱっとわからない。継続脳が全く育ってないなあ。 後で考える or kinaba 先生の何かをわくてかしてまつ
(02:18)
一回戦落ち…300位まで通るんだと思ってたんだけど、 250位まで通して後50人はシードってことだったみたいだ。 そうならそうとはっきり書いてよねえ。
http://www.topcoder.com/tc?module=Static&d1=tournaments&d2=tco09&d3=marathon&d4=schedule
こっちにはちゃんと書いてある
http://www.topcoder.com/tc?module=Static&d1=tournaments&d2=tco09&d3=overview&d4=rules&d5=marathon
(10:37)
http://pc11.2ch.net/test/read.cgi/tech/1173057314/237
よくわからないけど eban さんのご協力のもと できるようになったみたい。
(10:38)
寝過ごした。
予戦落ちとかウケますね
忘れてた→酔っ払って寝てた→寝過ごした
とか僕の能力を全て出し切った感じである。 その結果が予戦落ちなのだから、まぁ順当な結果なのだと思う。
(01:50)
http://www.fukkan.com/fk/VoteDetail?no=3761
復刊されたらしい。 らしいっていうか知らせが来るってことは なんかの拍子でリクエストボタン押したんだろうなぁ。 でも買わないと思うんだな。
読むと成田使いたくなくなるけど、 まぁなかなか使わないのも難しいよねというような。
(01:56)
http://longlong.way-nifty.com/blog/2009/03/hack-the-cell-0.html
そんなに不安定ってなんなんだーという。 単純に少ない数字には倍率が減るって話でもないだろうし…
(10:42)
http://longlong.way-nifty.com/blog/2009/03/post-d5ab.html
完敗ですねー。 まぁもともとこいつには勝てんだろ的な人の一人だったので当然な気もします。
まぁいいや。 hack the cell にかこつけて CPU の今後と最適化について僕に教える会を開催したいと思うので、
http://homepage1.nifty.com/herumi/diary/latest.html
http://longlong.way-nifty.com/
http://garakuta.homelinux.org/~nosuke/diary/
http://d.hatena.ne.jp/methane/
あたりの人は東京近辺にいらっしゃったらとりあえずいかがでしょうか。 2ch の人とかよくわからんけどコメント含めて なんらかの手段で通信がいただけたら考える的な。
知らんけど候補日は 3/21 or 3/28 とかそのへんで。
(14:12)
実質負けてたってことだろうなぁ。 命令数的に勝ってる感じがない。
http://homepage1.nifty.com/herumi/diary/0903.html#7
まぁワンオブ勝てんだろー候補だし略
あと README の文章破綻ぷりというか説明する気ないっぷりには 色々理由があって主にねむかったとか。
とりあえず僕もカウントしてみよう。
even 1269 xor 530 selb 284 cntb 155 sumb 105 shli 32 a 80 ah 50 ai 1 and 27 andbi 5
odd 1270 stqr 147 lqr 583 lnop 27 shufb 68 rotqbyi 128 rotqbii 283 rotqmbii 32 hbrr 1 brnz 1
見て比較した感じ、
という感じっぽい。 つか post-mortem のために PS3 欲しいというのは…
(14:30)
herumi さん shuffle 使ってなくね? 説。 なにかコード見た感じ rotq と sel だけでやっちゃってそうな… そのへんは微妙に勝ってそう、かな?
個人的には shufb は今回一番萌えた命令だったんだけど。
(14:37)
http://www.kmonos.net/wlog/95.html#_1109090307
あまり理解してないけど、 Cyan の方が shibuya.lisp で return がうんぬん… とか発表されてたので質問して、 たぶん kinaba さんが今書いておられるようなものだと理解してたので、 ちょっとやってみた。
globalVar = 0 hello = ^(): globalVar = return return(0) x = hello() print x print globalVar(x+1) print "\nDONE\n"
うーん 0 とだけ表示されちゃう。 かえせないってことかなぁ。
retret = ^(): return(return) x = retret() print x
とすると #<cont 219f5c00> とか出てくる。
retret = ^(): return(return) x = retret() print x()
何も出てこない。
retret = ^(): return(return) x = retret() print x()()()()()()()()()
何も出てこない。エラーにならないのもよくわからんが…
なんかしら未定義な感じの動作になってそうだなぁという感じで残念?
http://www.geocities.jp/takt0_h/cyan/doc/ref/about-continuation.html
この説明見るとできても良さそうに思えるんだけどな
(16:33)
前 | 2025年 4月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
_ け [assert の中に副作用のある式を入れたらまずいですよ #define NDEBUG すると消えてしまうので]
_ shinh [全くですね。社内ライブラリの CHECK のつもりでなんか assert にしてしまいました。ご指摘ありがとうござい..]