ToDo:
http://partake.in/events/8c2cd95b-b6d4-4d9f-917e-a98ba9aafd25
僕の中では人類 vs ksk という感じだった。 フタを開けてみると人類善戦したなーという感じもあったけど、 まぁ 50B はすごく良いものだった。
もうちょいなんか準備してこいよという感じだったけど、 まぁなんか適当に紙とかにみんな書いてくれて良かった。 意外と人数いたあたりのがあれだった。
hirose さんが関西の方だということなんで 汚ない家に来てもらったり。 色々と教えてもらって僕はありがたかったんだけど、 環境としてはネカフェの方が良かったろうなーとか思った。 あとで予備の布団がカビくさい気付いてそっちも申し訳なかった。 てか干さなんと。しかし梅雨
(00:45)
http://twitter.com/#!/mametter/status/75937905503248385
なんかこのへんでまた話がされてるみたいだった。 前も書いたかもだけど個人的にはすごく欲しい…
RArray に is_sorted みたいな bitfield ぶちこんでしまうってのは 無理なんだったっけ…
(00:49)
http://twitter.com/hotpepsi/statuses/74847188701818880
objdump -x とかはともかく、 -S くらいは普通の linux 上で C/C++ 書いてるプログラマは 年に数度くらいは必要になったりあった方が便利になる気がするっていうか、 知らない/使えない/使わないのは損かなぁと思う。 「linux 上で C/C++ 書いてるプログラマ」が普通でない…ってこともないよねたぶん。
なんかごく最近 objdump -S を普通の用途で使った。 なにやら
static Mutex mu; mu.lock(); // foobar mu.unlock();
みたいなコードを見て、「これたぶん mutex 2回はる感じになるんですよねー」 とか言ってて、しかし本当だっけか…ってことで
#include <stdio.h> struct C { C() { puts("C"); } }; void func() { static C c; } int main() { func(); func(); }
みたいなコードを書いて、 objdump -S したら __cxa_guard_acquire とか出てきたので、 ああやっぱり、とか言ってたのだった。
しかしあとでよく objdump -S の出力を見ると、
400760: 48 83 ec 18 sub $0x18,%rsp static C c; 400764: 80 3d dd 04 20 00 00 cmpb $0x0,0x2004dd(%rip) # 600c48 <guard variable for func()::c> 40076b: 74 0b je 400778 <func()+0x18> 40076d: 48 83 c4 18 add $0x18,%rsp 400771: c3 retq 400772: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
って感じのコードが吐かれていて、 <guard variable for func()::c> ってやつがノンゼロならロックもなんもせずに 抜ける感じになっていた。
つまりロックの中で <guard variable for func()::c> ってのを ダブルチェックしつつ更新してくれるから大丈夫みたいなコードになってるんだろうなぁ と。
で、 objdump -S のおかげで関数内にコンストラクタのある型の static 変数がある場合に、 一度しか実行しないことを保証するためのコストが高いかと思ったら そうでもない、ってことがわかったのだった。
今回はまぁ単に気分で追っかけただけだけど、パフォーマンスとかが重要な時は まぁ普通に知りたい情報だと思う。
(01:50)
前 | 2011年 6月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
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扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
先日はどうも、とても楽しかったです。
Array#bsearch みたいなのが欲しかったら是非応援のお便りを……。
ユースケースがあるとなおよろしいです。
応援のお便り待ってます!
is_sorted は要素を破壊的に書き換えた場合に sorted じゃなくなるのの検知が難しいです。
ary = [[3],a=[2],[1]]
ary.sort! # 一旦 sorted
a[0] = 4 # ary と直接関係ないイベントで sorted じゃなくなる
あとは <=> の再定義とか。
> is_sorted は要素を破壊的に書き換えた場合に sorted じゃなくなるのの検知が難しいです。
そう? rb_ary_modify() 内でis_sorted フラグをクリアすればいいんじゃないかな。
rb_str_modify で coderange をクリアするようなもので。
<=>の再定義はどうしようもないけど
よく見るんだ。sorted なのは ary 、破壊的に変更されるのは a です。
先日は泊めてもらって本当にありがとうございます。
色々話を聞けて、すごく楽しくて、最高でした!
> よく見るんだ。sorted なのは ary 、破壊的に変更されるのは a です。
あー、なるほど。世の中難しいですねぇ