トップ «前の日記(2009-03-16) 最新 次の日記(2009-03-18)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ToDo:


2009-03-17

_ 医者

そういえば

「薬三つ出しとくよ、抗生物質と痛み止めと胃薬」 「胃薬ってなんすか」 「抗生物質飲むんだから胃薬必要なのは当たり前でしょ。胃荒れちゃうから」

とかそんなかんじの会話があって、 今にして思うとこれもひどい気がした。 当たり前じゃないよ

(00:07)

_ split/join

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)

_ あと

C はどっちかというと strtol とか使いつつポインタ進めるような ループを書くことを楽しむ言語ではないかという 妄想があるため、まあそのままでもいいんじゃないかとも

(00:25)

_ 沈黙の艦隊

最近コンビニで復刊してるので地道に買って読んでいる。 足りない分は中古で補完したり別に面白くない部分は飛ばしたりしつつ。 まあ昔読んだことはあるのだけど、地味に面白いなあと思う。 まず「ぼくの考えた理想の社会」ネタは個人的に好きなんだよなぁ。 自分でもよくぼんやり考えるし。

あれこれ考えると自分的には、 「暗黙のうちに個人同士で助けあう仕組みになっていて、戦争がない」 あたりがとりあえずぼくの考えた無敵の理想社会の要素なわけだけど、 後者は目的の同意は簡単に得られるのに方法論がサッパリ見当がつかないんだよね。 そいう意味で破天荒な 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回展開されちゃこまる。

さらに、マクロは外から展開していかなければならない。

これらを両立させるには、

  • 外から展開していって
  • 引数を代入する時にマクロ展開を行なう(つまりminの中のminはここで展開)
  • 引数代入の時に使ったマクロは覚えておいて
  • マクロの再帰的な発動と同様、引数代入の時に使ったマクロも発火させない

という感じでやればいいんだと思う。 TCC 的には nested_list をややこしいことにすればたぶん良い。

(22:17)

_ さて

まだややこしいな…

単に nested_list を pop しないだけだと、 第二引数以降に影響出ちゃうか。

(22:29)

_ TCC

C99 に載ってたマクロの例を喰わせてみたら 結果違ったり無限ループしたり色々ひどいなー。 これは大変めんどくさいな。

(22:43)

本日のツッコミ(全2件) [ツッコミを入れる]
_ (2014-05-24 10:42)

assert の中に副作用のある式を入れたらまずいですよ
#define NDEBUG すると消えてしまうので

_ shinh (2014-05-24 10:42)

全くですね。社内ライブラリの CHECK のつもりでなんか assert にしてしまいました。ご指摘ありがとうございます。

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

2009年
3月
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 31
1.shinh(2014-05-24 10:42) 2.団子厨(2014-05-24 10:42) 3.shinh(2014-05-24 10:42)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h