ときどきの雑記帖 i戦士篇

最新ページへのリンク
目次ページへのリンク

一つ前へ 2010年1月(下旬)
一つ後へ 2010年2月(上旬)

ホームへ

2010年02月10日

■_

・今日はもうなんかごたごたして仕込みも中途半端なものばっかだなあ。 が、but しかし。

■_ まだまだぜんぜんおわんない♪

今日はもうこれに尽きる(笑)

神様で中学生なアニメ「かみちゅ!」が待望のBlu-ray BOX化 :おた☆スケ -おたくのスケジュール帳- 2005年に放送されたTVアニメの全16話(テレビ未放送話4話を含む)を収録した「かみちゅ! Blu-ray BOX」が6月2日に発売されることが決定。 収録内容 | かみちゅ! かみちゅ!

かみちゅ!~かみさまでちゅうがくせい~ 88柱目

34 名無しさん@お腹いっぱい。 [] 2010/02/08(月) 21:06:43 ID:/m0+ELfO Be:
    中古セットが14,800円で売ってたんでレジ持ってったら、中古セールだったみたいで11,000円で買えた
    ラッキー♪ 

59 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:18:50 ID:vz89fr8T Be:
    >>34
    早まったな

    http://forest.kinokuniya.co.jp/ItemIntro/623527 

60 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:19:10 ID:q0nqOhI9 Be:
    いよいよだな・・・俺に本気を出させてくれよ 

61 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:19:51 ID:wl60RYvL Be:
    俺だってBD欲しいさ… 

62 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:19:58 ID:v0ncK0y7 Be:
    今日なんか発表あるんだっけ? ないんだっけ? 

63 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:20:44 ID:wl60RYvL Be:
    >>59
    えっマジで出るの!?ひゃっほおおおおおおおおいい 

64 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:21:34 ID:v0ncK0y7 Be:
    って>>59来てたー 

65 名無しさん@お腹いっぱい。 [] 2010/02/10(水) 00:21:39 ID:PjcYCAId Be:
    >>59
    > 画面アスペクト: 4:3

    えっ 

66 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:23:45 ID:sg5m5145 Be:
    どうなってんだよw 

67 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:23:55 ID:bE80Xhv7 Be:
    前スレの書き込みはマジだったか。遂に出るのか。 

68 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:25:20 ID:Wa0eiMAi Be:
    コメンタリーはR.O.Dと同じで取り直しかな? 

69 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:25:43 ID:uj6PVQyK Be:
    >>65
    何かの間違いであってほしい 

70 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:26:34 ID:5Zedde7I Be:
    しかし、R.O.Dから2ヵ月後か。みんなどっち買うんだw 

71 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:26:39 ID:DYHe7u0c Be:
    この日を待ってたんだよ 

72 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:28:00 ID:JjBBZskX Be:
    記念に閉まってた直筆サイン入りポスターを飾るか

    >>70
    普通に両方 

73 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:30:47 ID:q0nqOhI9 Be:
    6月まで待ちきれん 

74 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:31:07 ID:Xi2rlecC Be:
    単純に誤植だと思うけどなw
    おれもこの値段なら両方買えるよ 

75 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:31:46 ID:5AU04OEt Be:
    >>68
    コメンタリーは新規録りおろし。
    ttp://www.dmm.com/mono/dvd/-/detail/=/cid=n_666anzx5061/

    >>59のアスペクト比は間違いだと信じたい。
    明日ってか今日中には公式サイトで発表あるだろうし。 

76 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:34:44 ID:66Fcm3x9 Be:
    さて、テレビとPS3買いに行くか。 

77 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:35:06 ID:v0ncK0y7 Be:
    やっと出雲の回のコメンタリが聞けるんだな 

79 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:39:30 ID:DnWCgqTd Be:
    いや、いやいやいや!
    コメンタリは旧DVD版のも聞けるようにしてくださいよ 

80 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:39:43 ID:Wa0eiMAi Be:
    >>75
    舛倉はサービス精神旺盛だな
    まあこれでDVDを手放せなくなった訳だがw 

86 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:45:13 ID:3lh5b1DA Be:
    ゆりえ様がBDに降臨されたと聞いて。 

88 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 00:50:49 ID:AXguKDoV Be:
    何この伸びw 

89 名無しさん@お腹いっぱい。 [] 2010/02/10(水) 00:53:18 ID:vzZdQyNP Be:
    BD-BOXキタ━━━━━━(゚∀゚)━━━━━━!!!! 

94 名無しさん@お腹いっぱい。 [] 2010/02/10(水) 01:01:27 ID:vzZdQyNP Be:
    ※ BD版には、HD DVDの神様が追加されます 

106 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 01:24:19 ID:An4r+zuK Be:
    DVDの神様今までありがとうございました。
    はじめまして。BDの神様。 

107 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 01:26:25 ID:q0nqOhI9 Be:
    さて、寝るか。
    起きたら4:3が治ってますように 

109 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 01:32:13 ID:bVU+kWBT Be:
    生きててよかった
    こんなに心が高鳴ったのは久しぶりだ 

129 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 07:37:44 ID:avbXAfNY Be:
    BDと聞いて飛んできますた 

131 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 07:45:44 ID:dLbeafB5 Be:
    明日から尾道行くんで御袖天満宮でBD発売のお礼を奏上してくる。 

132 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 07:49:00 ID:avbXAfNY Be:
    でこれってHD製作なのかどうなのか…
    それによって買うかどうか決めるんだが。アプコンなら買わない。 

133 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 08:04:58 ID:dLbeafB5 Be:
    >>132
    SD、HD両説あるがいずれも決定打と言えるような信頼出来るソースがない。 

134 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 08:08:03 ID:PqZWT7Sh Be:
    Twitterにいる舛成監督に訊いてみようかな 

135 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 08:15:08 ID:18nj/bS8 Be:
    BD再生出来る環境にないけど買うわ 

136 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 08:20:51 ID:QqmVRHfs Be:
    ついに俺にもBDドライブを買う日が来たか… 

137 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 08:22:10 ID:dAAEltBV Be:
    DVD買い逃してたから、これを機に買うかな 

154 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 11:29:49 ID:66Fcm3x9 Be:
    ゆりえ様のために、PS3買ってきた。
    次はモニターだ。
    6月が待ち遠しいなぁ。 

157 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 12:50:04 ID:j7gi3SdA Be:
    販売店で特典やおまけつかないかな?
    いい特典がつくのであればPS3もそこで買おう。 

158 名無しさん@お腹いっぱい。 [] 2010/02/10(水) 13:52:53 ID:dLbeafB5 Be:
    やばい。ゆりえ様をBDで観られると思うと、興奮して仕事が手につかない。どうしよう。 

172 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 17:13:10 ID:2q/1piOU Be:
    スレやけに伸びてるなw
    BD化の所為か。 
    背景の美しい作品だから、ある意味良かったかも 

179 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 18:25:15 ID:rSEkSi9u Be:
    かみちゅ! Blu-ray BOX【完全生産限定盤】
    http://www.sonymusicshop.jp/detail.asp?goods=ANZX-5061

    やっぱり16:9の間違いか 

180 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 18:28:34 ID:pg/X/6Zh Be:
    安いなしかし 

181 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 18:29:03 ID:aAiQVKMT Be:
     結構安いな。DVD確保済だけど、画質によっては買うかも。 

183 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 18:31:23 ID:rSEkSi9u Be:
    公式サイトも更新されてるな 

184 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 18:37:19 ID:7sgBr0rd Be:
    MAKOまだゆりえ様いけるじゃないか! 

186 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 18:39:32 ID:bE80Xhv7 Be:
    公式も数年ぶりに更新かあ。新録されたゆりえ様のナレーションを聞いたが、
    やはりMAKOの声が往時のものとは変わっているなあ。別にそれが悪いとは言わない。
    人も声も変わっていっておかしくないものだし。 

191 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 18:54:50 ID:sIt0/Cgp Be:
    「3枚組」てこれ1枚に5話~入るのか
    ブルーレイのことよく知らんけど画質は期待せんほうがいいんかな
    まあ脳内補正で余裕だけどどうせなら最高画質で見たいなあ 

192 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 18:59:34 ID:iCE6xqni Be:
    >>191
    2層でMPEG-4 AVC記録だったら
    最高画質でも問題なく入るだろう 

194 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:08:47 ID:jB+HJmwD Be:
    >>191
    ディスク仕様は全く問題なし。
    ただしこれはアプコンの可能性が高いので、
    同じアニプレのDTB、化、ザムドのような
    クッキリした画質は期待しない方がいい。 

196 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:10:26 ID:iueCyIl+ Be:
    発売告知CMきたな
    テンション上がってきた 

197 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:11:54 ID:q0nqOhI9 Be:
    公式サイト更新してる!

    しかもこのCMのMAKOヴォイスは新録だろ 

198 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:13:16 ID:iueCyIl+ Be:
    ああーやべえBD再生機器ないけど欲しいわ 

199 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:16:26 ID:0/J2UgVp Be:
    ちょっと大人になったゆりえ様って感じだな 

200 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:16:43 ID:PjcYCAId Be:
    AmazonからHDモニターとBDドライブキタ━━━━━━(゚∀゚)━━━━━━!!!!



    何か試そうとしたけどよく考えたら俺BDディスク一枚も持ってねぇや…
    っていうか急いで買わなくても良かったのに気付いた…
    でも、ゆりえ様への信仰心は認めて欲しい。 

201 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:16:57 ID:CbBPIB07 Be:
    BD化と聞いてすっ飛んできた
    ただお金ないから買えねorz 

203 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:20:29 ID:9k+IqL+b Be:
    イヤフゥゥゥゥゥゥ!!!!!!!
    PS3売り飛ばしてでも買うわ 

209 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:48:51 ID:YkMBJehV Be:
    BD化とはこれまたうれしいニュースだ
    おじちゃん買っちゃうよ 

210 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:51:52 ID:5AU04OEt Be:
    今夜のMXでのDTB再放送あたりからTV CM流れそうだな。

    化みたいなくっきり画質ではなかったとしても買うよ俺は。 

212 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 19:55:41 ID:HDjz2+Yj Be:
    MAKO声ちょっと変わったな
    ゆりえ様+みたいになってる 

238 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 22:09:37 ID:ZTyDvpTW Be:
    アルターゆりえ様も再販してくれ 

240 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 22:15:14 ID:KbGAbUzN Be:
    完全生産限定版・・・ってどういうことですか?
    一定日までに予約集めて、その予約数だけ生産ということですか。
    それとも、最初から製作数が決まっている ということですか?

241 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 22:17:35 ID:IZhBGqac Be:
    >>240
    基本は予約期間内に受注した分だけのロットを出荷、で終了
    ただしDTBみたいにバカ売れした場合は追加出荷もありますよ、と 

246 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 22:37:17 ID:MQcb/oaZ Be:
    再生環境無いから とりあえず買って神棚行きかな 

248 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 22:42:44 ID:+u85vH/V Be:
    ちょうどDVDを揃えようと思ってたらまさかBD化とはw
    しかし再生機がないから買うべきか迷うぜ… 

249 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 22:45:12 ID:InGCvjMR Be:
    再生機はいつでも売ってるけどBOXは再版されない場合もあるぜ! 

250 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 22:46:25 ID:EyznOqjK Be:
    >>248
    再生機は、後でも買える。
    かみちゅBD-BOXは、後には買えない。
    予算が限られている場合、どちらを優先すべきかは、明らかだよね。




    そうやって、LDP持ってないのにLDたくさん買ってしまった人が・・・ 

260 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:06:44 ID:zSr3oYP6 Be:
    久々にアイスキャンディー聴いたら涙出てきた
    調べてみたら5年前かーそりゃ涙腺も緩くなってるわ 

261 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:07:43 ID:MQcb/oaZ Be:
    痛快アクションコメディ 

262 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:11:28  ID:MrHIgfnS Be:
    ノスタルジックほのぼのコメディ 

263 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:11:47 ID:iBjs6ign Be:
    >>261
    爆裂ハートフルコメディです 

264 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:14:40 ID:Wa0eiMAi Be:
    アラフォーが校内暴力のない中学校を妄想したらこうなりました

265 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:16:05  ID:+u85vH/V Be:
    萌えジブリとか誰かが言ってたような 

266 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:16:29 ID:AJ3mf00n Be:
    滅多に他人の作品を褒めない禿様が絶賛したアニメ。 

267 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:16:57 ID:bE80Xhv7 Be:
    個人的には大人向けジブリって感じかなあ。 

268 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:18:11 ID:AXguKDoV Be:
    それはちょっと美化しすぎじゃね?
    確かに良い作品だけど。 

272 名無しさん@お腹いっぱい。 [sage] 2010/02/10(水) 23:45:16 ID:iueCyIl+ Be:
    MXでさっきかみちゅBDのCMきたぞ
    アニプレ提供番組なら頻繁に見られそうだ 

284 名無しさん@お腹いっぱい。 [sage] 2010/02/11(木) 00:57:25 ID:7JMUCGVe Be:
    どこで予約するか迷うな
    尼はまだなのか 

289 名無しさん@お腹いっぱい。 [sage] 2010/02/11(木) 01:31:57 ID:0OQoLCcX Be:
    紀伊國で予約した 

290 名無しさん@お腹いっぱい。 [sage] 2010/02/11(木) 01:51:10 ID:eNaZDYM0 Be:
    アマ○ンで…、アマ○ンで予約しなくては…! 

販売店オリジナルの特典とかできたりするのかなあ。 でも R.O.D では聞かなかったような。 まあ予約をどうするかはちょっと様子見。

■_ 本日の巡回から

■_ なんでもありだな

Head First シリーズは。

O'Reilly Japan - Books :: New and Upcoming
近刊書籍

Head Firstネットワーク 	978-4-87311-443-9 	¥3,360 	2010年02月
Head First PHP & MySQL 	978-4-87311-444-6 	¥4,200 	2010年03月
Excelプロトタイピング 	978-4-87311-441-5 	¥3,200 	2010年03月
Rubyベストプラクティス 	978-4-87311-445-3 	¥3,200 	2010年03月

2010年02月08日

■_

ちと身辺が慌しくなってまいりました。

■_ mbなんちゃらはむずい

めもがき:2010年2月7日分
2010/2/7(Sun) ○[NetBSD] libedit I18N への道(その3)

@ mbtowc(3) は使うな

まずは私が source-changes-d@ に投げた 指摘の 4. についてすな。
mbtowc(3) をなぜ library function が使っちゃ駄目かの説明をば。

仕様には以下の一文があります。

    For a state-dependent encoding, this function is placed into its initial state 
    by a call for which its character pointer argument, s, is a null pointer.
    Subsequent calls with s as other than a null pointer shall cause the internal 
    state of the function to be altered as necessary.

そうです、eucJP や Shift_JIS そして UTF-8 のような stateless encoding だけを使ってると
忘れがちなのですがmbtowc(3) は内部にステート情報を持つ上「静的に確保」されるので、
strtok(3) なんかと同様に再入可能じゃないのです。

(略)

それにですね、そもそもこういう1バイトづつ読み込んで変換可能かを試みるってなコードの場合
mbtowc(3) を使うとバッファ管理が自前になるのでひじょーに生産性が悪いんですよ。

(略)

とてもめんどくさいです >< これを mbrtowc(3) を使うように書き直すバヤイ、こっちの関数
は変換途中のマルチバイトの欠片を mbstate_t 中に保持してくれるので、MB_*_MAX やらバッフ
ァ管理を意識する必要がなくなり

    #include <locale.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <wchar.h>

    int
    main(void)
    {
    	FILE *fp;
    	mbstate_t st;
    	size_t n = 0, ret;
    	char ch
    	wchar_t wc;

    	setlocale(LC_CTYPE, "");

    	fp = ...

    	mbrtowc(NULL, NULL, 0, &st);
    	for (;;) {
    		ch = (unsigned char)fgetc(fp);
    		if (ferror(fp))
    			abort(); /* file read error */
    		if (feof(fp))
    			break; /* end of file */
    		ret = mbrtowc(&wc, &ch, 1, &st);
    		if (ret == (size_t)-1)
    			abort(); /* illegal byte sequence */
    		if (ret != (size_t)-2) {
    			if (wc == L'\0')
    				break; /* NUL terminator */
    			wprintf(L"%lc", wc);
    		}
    	}
    }

とコードが若干スッキリします、まぁ前回も書いたけど fgetwc(3) 使えばもっと簡単に

(以下略)

あーそういえば、glibc の regex とか gawk とか grep やらで mbrtowc を使うように 変えられてたような記憶があるけどそういうことだったんでしょか。

http://www.opengroup.org/onlinepubs/9699919799/functions/mbsrtowcs.html

DESCRIPTION

For mbsrtowcs(): [CX] [Option Start]  The functionality described on this reference 
page is aligned with the ISO C standard. Any conflict between the requirements 
described here and the ISO C standard is unintentional. This volume of POSIX.1-2008 
defers to the ISO C standard. [Option End]

The mbsrtowcs() function shall convert a sequence of characters, beginning in the 
conversion state described by the object pointed to by ps, from the array indirectly 
pointed to by src into a sequence of corresponding wide characters. If dst is not a 
null pointer, the converted characters shall be stored into the array pointed to by 
dst. Conversion continues up to and including a terminating null character, which 
shall also be stored. Conversion shall stop early in either of the following cases:

    * A sequence of bytes is encountered that does not form a valid character.
    * len codes have been stored into the array pointed to by dst (and dst is not 
      a null pointer).

Each conversion shall take place as if by a call to the mbrtowc() function.

(略)

The implementation shall behave as if no function defined in this volume of 
POSIX.1-2008 calls these functions.

ほう。

■_ 続・コメント欄は燃えているか

なんつーかそのなんだごにょごにょ。 それはともかく、コメントを参照しづらいのはどうにかしてもらえないのかなあ。 コメントがついてるのかすら分かりづらいし


OpenMPの実行時ライブラリと並列ループ(1/4):CodeZine
>Sleep(1)を200回繰り返したなら200msかかると推測されるが、~
が理解できないほど基本文法が読み取れないのでしたら、
この記事の「対象読者」から除外されてしまいます。
除外された方が、延々と意味不明なコメントを残されるのは迷惑です。

私はこの言葉が理解できないと入っていません。
そもそも、このインドリさんの記事のどこに書いているのかと聞いているのです。
何度もいいますが、WindowsリアルタイムOSじゃないので誰も思いません。って言っているじゃないですか。
あなた方は根本的な文の内容の受けとり方がズレています。
記事の内容についてのコメントも同じです。
この記事の内容は、OpenMPのループを使うとスピードがUPするけども、
サンプルでは実際とは違うから

> 実務でループ構文を使用する際には、このサンプルをもとに処理効率を実際に測定するプログラムをコーディングするか、
市販の並列処理に対応した開発ツールを使用してパフォーマンスをよく確認してください。

と書いているのだと思います。
さらに、OpenMPは見かけとスピードが違うからなんか早いと感じたら疑うことと書いているじゃあないですか?
私の会社の人たちも全員同じ意見です。


>筆者が想定している読者はCの基本的文法をマスターし、
並列化プログラミングに興味を持っている方です。

記事にこう書いてあるのに、どうして対象読者から除外だと言われないといけないのですか
ここのサイトの管理者はこういった誹謗中傷者たちをどうして放っておくのですか?


>自己弁護は自分の名前でしましょうよ。
それ私のこと?もしそうだとしたらどうして私だけ実名を名乗らないとだめなのですか?
そのことで私に何か被害があったらどうするのですか?
みんなもペンネームで書いているじゃあないですか?
Cお姉さん (2010/02/09 23:54)
ドリィちゃんへ
はい。私は人の欠点をついたり、平気で傷つけたりするのは嫌いな人です。
でも、人は絶対誰も傷つけないとはいかないものですけどね。


セロへ
勉強している読者にコメントを書くなというのですか。
貴方も聞きたいことがあって聞いているのではないですか?
読者にコメントをするなというのであれば、コメント欄をなくせばいい。
全部ね(貴方達も)
このサイトは読むだけで楽しみにしている人はコメントを書けず、
文句をつける人はコメントをかける場所なのですか?
悪口、欠点つきサイトは、今はやりのサイト虐めや、自殺問題(社会問題)そのものです。
このサイトに管理者はいないのですか?
人の欠点や悪口ばかり載せて、本当に読めば不愉快になるサイトですね。
皆、勉強しているので、下らない事にこだわった文ばかりで、
次の新しい記事はないのですか?


久内へ
筆者はサンプルでOpenMPを使ったらスピードがUPすると言っています。
でも、何度もサンプルだから実際とは違うと注意を書いています。
そもそも、Sleepの事が本題ではない記事だと思います。
なぜ、Sleepにこだわるのですか?
何の命令文でも良いではないですか?
「 /* 逐次的に何かの処理をする */」と書いているじゃあないですか。

>処理効率を実際に測定するプログラムをコーディングするか、
市販の並列処理に対応した開発ツールを使用してパフォーマンスをよく確認してください。
って書いているじゃないですか。

Sleepという命令が嫌なら、自分の好きな命令文を心で思っていればいいじゃないですか。
何度も書きますが、無限の組み合わせがあるからじゃないですか?
筆者が書こうとしていることと、すごくずれていますよ。
そんなに一語一句文句をつけたら、それこそ文に「、」「。」がないとか、
?がついていないとか言っているのと同じですよね。


επιστημη へ
別にSleep命令でも良いと思うけど。
どうしてSleep命令にこだわるのか・・・

>- Sleep(1)を200回繰り返したなら200msかかると推測されるが、実測値があまりにかけ離れている。
筆者がどこに書いていますか?
無限の中からあなたの思うようなサンプルを選ぶのは大変ですね。
Sleep嫌いですか?
(何を書いても気に入らないのでは)
その様にとれますよ。
心の広い方ならば、この著者はSleepを使ったんだな~と思っていればいいんじゃないですか?
サンプルなんですから(私がやったら動いたし)
私は勉強して楽しんでいるので邪魔をしないで欲しいのです。
間違った記事ではないと思います。
Cお姉さん (2010/02/09 01:11)
長文になるとどうしても個性が出てしまうもんですねー。
ドリィちゃん (2010/02/08 20:03)
筆者は

>- Sleep(1)を200回繰り返したなら200msかかると推測されるが、実測値があまりにかけ離れている。

の様な事は何度見ても書いていません。
どこに書いているのですか?
我々と書いていますが、グループになっているのですか?
この記事を見ている私とって、こんなコメントが目にあたると迷惑しています。
間違った事は書いていませんよ。
筆者が書いていない事を書いていると決め付けて意見を書くのはやめてほしいです。
知らない人が読むとまるで筆者がこの様なことを書いていると思ってしまいます。
むりやり、記事になん癖をつけているように見えます。
楽しんでいる読者に迷惑をかけないでほしい。
このサイトはどうしてこんなコメントを載せているのですか?
プロならばWindowsはリアルタイムOSではないから、誰もそんな事を思いません。
どこにも筆者はそんなこと書いていません。よく読んでください。
ほんと、こんな人迷惑です。
こんな事ばかり書くから筆者は次の記事に移れないのではないですか?
プロなら思わない様な事でダラダラ書き、文をとめないでください。
この手のプログラムは、きっちり書こうと思うと、画面いっぱいになりますよ。
プロならばそんな事察しますよ。
人って沢山ダラダラいっぱい書いていたら読む人が大変です。
他の方法もあるけれど、この記事はたまたまSleepを使っただけで、
こんな方法、あんな方法といっぱい無限に筆者は書いたほうが良かったというのですか?
(そんな記事疲れるなあ、Cお姉さんは。)
みんなの勉強のため、読者は色々打って考えるのがいいのでは?
だから勉強になるのでは?
筆者が意見書かないのは、貴方が屁理屈ごねてダラダラ・ダラダラ書いてくると思っているからかも。
(あくまでも私の想像ですよ)
だって、私もうんざりしているから。

>- 「1ループあたりの処理時間と処理回数を増加させるにつれパフォーマンスが向上していることと...」とあるが、"パフォーマンス"とは何を指すか。処理時間? スレッド数の違いによる処理時間の比?
>- 「ループ構文の高い処理効率を確認できます」の"処理効率"とは何を指しているか。
それもプロならばわかりませんかぁ?

>これ以上論を重ねる気はありません。
私ははじめから論を重ねる気はありません。
迷惑をしているのでこういうコメントは書かないで欲しいのです。
本当はこんなことまで書きたくなかったのです。
察してください。


Cお姉さんより
Cお姉さん (2010/02/08 19:40)
>聞いているだけなら、ね。
「ただ聞いているだけで」と書いていたのに・・・
その意見は意味がわかりません。
それと、「間違った問題のある記事が掲載され続けている」という意見は酷過ぎます。
私が試したところこの記事のとおり動きましたし、間違っていませんよ。
会社で他の人にも間違っているのか聞いてみましたが、
別に間違っていないという意見でした。
ってことは、人それぞれ方法があるだけで、
間違っていると思っているのは貴方の意見です。
間違っていないと思っている人もいるのです。
なので、間違った記事と決め付けて書くのは、よくないと思います。

私もプログラミングを知り尽くしているわけではなく、
勉強し続けていますが、サンプルコードの意味がわからなかったのは、
貴方がわからなかっただけなので、間違っているのではないと思います。
繰り返しになりますが、意味がわからないので疑問を投げているだけならば、
間違った問題のある記事と決めてつけて書くのはよくないです。
このライターを傷つけていると思います。

私は、意見は人それぞれなので良いのですが、
間違った問題のある記事と決め付けて書いたり、
他のライターの迷惑と書くのは良くないと思っています。
(このライターさんに謝ったほうがいいと思います。)

Cお姉さんより



次回の記事を待っています。
Cお姉さん (2010/02/08 13:53)
スピードはハードとか条件によって異なるし、
無限に方法は有るのだけど、
たまたま説明のためにSleepを使った場合の事を書いていると思います。
Sleepを使うか、使わないかは自由なので、
ライターは

>この連載で解説に使用するサンプルコードはあくまでもOpenMPの基礎を理解するためのものであり、
実務でOpenMPを使用する際にはよく理解してから用途に適したプログラミングを行ってください。

と書いているのだと思います。
ただ、気になることがあって、ライターに聞いているだけならば、「他のCodeZineライターにも不本意だし迷惑です。」
と書いているのは書きすぎだと思います。
プログラミングを知っている人ならば、解説に使用するサンプルコードと読めば、
意味がわかるので、迷惑とは思わないと思います。
人それぞれ、意見ややり方は違うけど、
その事で人を攻める様な書き方(人を傷つける文)は、
大人としてよくないです。
きちんと、始めから最後までよく読んでから書きませんか。
新人の時は、はやとちりで謝ればすみますが、
年々に社会人として責任が生じてくるものです。
Cお姉さんより


次回の記事は何時ごろ載りますか?教えて下さい。
Cお姉さん (2010/02/08 00:45)

いやもうなんというか(笑)

■_ C++ FQA

例によって五月雨式にやっていきます。


C++ FQA Lite: Defective C++

* No compile time encapsulation (コンパイル時の encapsulation がない)

In naturally written C++ code, changing the private members of a class requires 
recompilation of the code using the class. When the class is used to instantiate 
member objects of other classes, the rule is of course applied recursively.

自然に書かれた C++ のコードでは、あるクラスのプライベートメンバーを変更することはその
クラスを使うコードの再コンパイルを要求することになります。そのクラスが別のクラスのメン
バーオブジェクトのインスタンス化のために使われたときも、当然この規則が再帰的に適用され
ます。

This makes C++ interfaces very unstable - a change invisible at the interface level 
still requires to rebuild the calling code, which can be very problematic when that 
code is not controlled by whoever makes the change. So shipping C++ interfaces to 
customers can be a bad idea.

このことは C++ のインターフェースをとても不安定なものにしてしまいます。インターフェー
スレベルでは不可視な変更でさえ、それを呼び出しているコードの再ビルドを要求してしまうこ
とになりますが、これはそのコードが、変更を行った人物によってコントロールされていないも
のであったときに非常に問題になるかもしれません。ですから、C++ のインターフェースを顧客
に対して出荷 (shipping) するというのは bad idea な可能性があるのです。

Well, at least when all relevant code is controlled by the same team of people, the 
only problem is the frequent rebuilds of large parts of it. This wouldn't be too bad 
by itself with almost any language, but C++ has...

確かに、最低限すべての relevant code が同じチームの人間によってコントロールされている
場合には、問題となるのはプログラムの large part に対する頻繁な再ビルドだけです。このこ
とはほとんどの言語においては悪すぎる (too bad) ことにはなりません。しかし C++ は…


* Outstandingly complicated grammar (とんでもなく複雑な構文)

"Outstandingly" should be interpreted literally, because all popular 
languages have context-free (or "nearly" context-free) grammars, while C++ 
has undecidable grammar. If you like compilers and parsers, you probably know what 
this means. If you're not into this kind of thing, there's a simple example showing 
the problem with parsing C++: is AA BB(CC); an object definition or a function 
declaration? It turns out that the answer depends heavily on the code before the 
statement - the "context". This shows (on an intuitive level) that the C++ 
grammar is quite context-sensitive.

"Outstandingly" は文字通りの意味で解釈されるべきものです。なぜならばすべての
popular な言語は文脈自由、もしくはほぼ文脈自由な文法 ("nearly" context-free 
grammars)を持っているのに対して、C++ は undecidable な文法を持っているからです。あなた
がコンパイラーやパーザーといったものが好きであるのならその意味を多分ご存知のことでしょ
う。もしそういったことに詳しくないのなら、例としてAA BB(CC); を C++ がどのように解析す
るか考えてみてください。これはオブジェクトの定義 (object definition) と関数宣言 
(function declaration) のいずれでしょうか? その答えはこのコードの前の文 (statement)、
つまり "context" (コンテキスト、文脈) に非常に依存しているものです。このこと
は C++ の文法が非常に context-sensitive であることを (intuitive level で) 示しています。

In practice, this means three things. First, C++ compiles slowly (the complexity takes 
time to deal with). Second, when it doesn't compile, the error messages are frequently 
incomprehensible (the smallest error which a human reader wouldn't notice completely 
confuses the compiler). And three, parsing C++ right is very hard, so different 
compilers will interpret it differently, and tools like debuggers and IDEs 
periodically get awfully confused.

実際の状況では、これには三つの意味があります。第一に、コンパイルが遅い(複雑なものは
それを処理するのに時間を要します)。第二に、コンパイルが行われなかったときにエラーメッ
セージがしばしば incomprehensible 
(the smallest error which a human reader wouldn't notice completely confuses the compiler).
なものとなってしまう。
そして三番目、C++ を正しく解析することはとても難しいためにコンパイラーが異なれば解釈も
異なるであろうということであり、同時に、デバッガーや IDE のようなツールが periodically 
get awfully confused するということです。

And slow compilation interacts badly with frequent recompilation. The latter is caused 
by the lack of encapsulation mentioned above, and the problem is amplified by the fact 
that C++ has...

さらに、遅いコンパイルは頻繁な再コンパイルとの相性がよくありません。後者の問題は先に指
摘したカプセル化の欠如 (lack of encapsulation) によって引き起こされます。そしてこの問
題は C++ が抱えるある事実によって増幅される (amplified) のですがそれは…

* No way to locate definitions (locate definitions の手段がない)

  

■_ 本日の巡回から

■_ ん?

プログラム板雑談スレッド Part 3 
569 デフォルトの名無しさん [sage] 2010/02/09(火) 22:18:08 ID: Be:
    ありゃ。気がついたら Nils M Holm氏によるLightweight Compiler Techniquesなどが
    パブリックドメイン化されているね。和訳したいけど暇ねえよ。orz
    ttp://www.bcl.hamilton.ie/~nmh/t3x.org/zzz/ 

570 デフォルトの名無しさん [sage] 2010/02/09(火) 22:59:48 ID: Be:
    何!
    それはとても興味深いタイトル
    読んでみよう 
Tech Stuff
Nils' Tech Stuff

 372KB 	Die Anatomie einer Programmiersprache 	1994 	book, 135p 	(See Lulu Press, 2006)
1.28MB 	Lightweight Compiler Techniques 	1996, 2002 	book, 262p 	(See Lulu Press, 2006)
 128KB 	Logic Programming in Scheme 	2007 	book,  41p 	(See Lulu Press, 2007)
  29KB 	Mini Scheme (+strings, chars etc) 	2009 	program 	R4RS Scheme subset
 262KB 	Scheme 9 from Empty Space 	2008 	book, 130p 	(See Lulu Press, 2008)
 215KB 	Scheme 9 from Empty Space 	2009 	program 	R4RS Scheme interpreter
 428KB 	Sketchy LISP, 3rd. Ed. (PDF) 	2008 	book, 180p 	(See Lulu Press, 2008)
 140KB 	Sketchy LISP, 4th. Ed. (HTML) 	2009 	online book 	(See above)
 744KB 	zen-style programming 	2008 	book, 336p 	(See Lulu Press, 2008)

All of the above stuff is now in the public domain no matter what the license files in 
the individual packages say. In case your country does not have a concept like the 
public domain, this means:

    * Do whatever you want with it. I don't care.

-- Nils M Holm, 10/2009 

ほほー。

2010年02月08日

■_

・スーパーボウル
録画はしたものの観る時間がががが。

・工人舎のちっこいの
現物を初めて見ました。 確かに小さい。キーボードはちょっと微妙かなあ。 財布に余裕があればねえ(最近こればっか)。

・おられる
むかーし聞いた話なんですが、どこかの社長だか役員の人が別の会社を訪れて 「×☓君はおりますか」と受付に尋ねたところ、 「ただ今×☓はおりませんが」的な返事が受付から返ってきました。 んで、その社長(か役員か)氏は突如として、 「なぜ同じ会社の人間に敬語を使うのか」と烈火のごとく怒り出したとかなんとか。 という話を 「おられる」は誤用か? | 株式会社きじねこ を読んで思い出しました。 「おりますか」と「おられますか」は違うものですけどね。はい。

■_ エンバカもなあ


Delphi 6 Personalのインストールについて | OKWave

こんにちは。

現在 Windows vista Ultimate 32bitに参考書の付録で付いていた
Borland Delphi 6 Personalをインストールしようとしたのですが
インストール番号とキーの入力を求められています。
しかし、参考書通りに進めようとしても、現在そのライセンス
情報を登録するURLが違っているようで登録ができません。

どなたか上記のライセンス情報を登録する方法をご存じありませんか?

Borland C++ は 5.5.1を今でも配布しているのに、Delphiは… Turbo Delphiも配布してませんし。

■_ 関数型言語は…

もいっちょOKWaveから。


大学でC言語やJava等を習いました. | OKWave

大学でC言語やJava等を習いました.
次のセメスターからは手続き型言語とは違う
SMLという関数型言語を講義を履修しなければならないようなので,
春休み中に勉強しておこうかと思いました.
しかしSMLを少しかじってみたのですが関数型言語は代入という概念もなく
数学のような感じであまりおもしろくないと感じ,関数型言語を学ぶ意欲が少し無くなってしまいました.

そこで関数型言語を学ぶ意義についてどなたか教えていただけないでしょうか?
よろしくおねがいします.

■_ とっととまとめてしまおう

というわけでいいかげん蹴りけりをつけようということで。
明快入門コンパイラ・インタプリタ開発 C処理系を作りながら学ぶ (林晴比古実用マスターシリーズ)

まず、作成する言語の仕様はおおむねこんな感じです。

CCI-C の言語構成
・変数は int 型のみをサポートし、初期化はできない。配列は1次元のみを利用できる。
・定数は10進整数および文字定数のみをサポートする。またprintf()の第1引数としてのみ文字列リテラルを利用できる。
・エスケープ文字は \n のみをサポートする。それ以外の「\+1文字」パターンでは'\'を単純に抜く。
・関数の型はvoid および int だけである。引数は int 型(およびvoid)のみ利用できる。
・配列を引数渡しすることはできない。int型関数は末尾にreturn文が必要。
・演算子は次のものを利用できる。多重代入もできる(a=b=10)。
・組み込み関数としてprintf()、input(),exit()が用意されている。
  scanf() の実装はできない(ポインタ機能がない)ので、数値入力用にinput()を用意した。
  printf() の第1引数は文字列リテラルで指定する。
  printf() 関数は、引数2個までという限定機能である。
・C の printf() 関数は、不適切な書式指定により暴走する可能性がある。たとえば
  printf("%s\n", n);  は動作不定である。CCI-Cでは、書式指定が適切な整数出力系
  であることをチェックし、不正であればエラー表示する。
・制御文はif for while do-while switch break continue を利用できる。goto文はない。
・コメントは範囲コメント/*~*/と1行コメント//が利用できる。
・次のように入力すると生成コードを表示できる
  cci myprog.c --code
・C言語の「こんなこともできる」的機能はほとんどサポートしていない。
100;  //意味のない式
"abcde";

int b, ary[10];
b = 2[ary];

if (c > 5) {
  int d; //ブロックで変数宣言は不可

}

int foo(int, int);  引数名省略は不可

・そのほか、処理が複雑になるようなことは、ほとんどサポートしない。たとえば、
  関数プロトタイプの局所宣言などはできない。初期値が代入されていない変数の参照も
  無警告である。「if (条件1||条件2)」で、「条件1 が真なら、条件2 は評価しない」
  というショートカット判定もしない。

でざっと見た感じですが オリジナル仮想機械向けコードを出力というのはあまり気にはなりませんでした。 ネイティブコードを出力しないのかという不満をもたれる方もあるかもしれませんが、 仮にネイティブコード出力をするとなると、 実在のアセンブリ言語のソースなりオブジェクト形式の(coffとか)ファイルを使ったら使ったで、 アセンブラやリンカーを用意しなければならなくなるし、 対象のCPUをx86に限ったとしても、 WindowsかUNIX系かでシステムコールやらなんやらがぜんぜん違ってくるし切りがないので この割り切りはまあ致し方のないことだと思います。

んで仮想マシンですが、

・スタックアーキテクチャ
・32ビットワード

で、 命令語のフォーマットには 8ビット(命令)+8ビット(フラグ) と 8ビット(命令)+8ビット(フラグ)+32ビット(データ)の二種類があります。

ひとつプラスしたいのが、作成する言語で文字列リテラルをサポートしていること。 昨年出版された、おそらく想定する読者層が被っているであろう類書では 文字列が使えませんでしたからね。

で、目次に沿っていくと

第1章 コンパイラの基礎
1.2 インタプリタとコンパイラ
1.3 コンパイラの構成
1.4 本書で想定する実行環境
1.5 本書で開発する処理系
1.6 CCI-C用サンプルプログラム
第2章 文法の表現
2.1 構文図技法
2.2 BNF記法
2.3 終端記号と非終端記号
2.4 BNF記法の別表現
第3章 字句解析
3.1 字句とトークン
3.2 字句解析ルーチンの役割
3.3 コメントの除去
3.4 文字種表の設定
3.5 列挙定数値の工夫
3.6 トークンの取得

この三つはまあ見出しで見当つくでしょう。

そして式の解析になるわけですが、

第4章 式の解析
4.1 式の表現
4.2 演算子順位表による構文解析
 逆ポーランド記法を使う式解析
 変換パターン
 変換する方法
 式の評価
 逆ポーランド記法プログラム

清く正しく逆ポーランド記法への変換から始まります。 見出しにある「変換する方法」が、演算子順位法を使ったものです。

そしてこのあと再帰下向き構文解析とlex/yaccを用いた構文解析へと 説明が進むのですが、本書のコンパイラーでは lex/yacc は使用しません。 4.4はまあちょっとした紹介程度のものです。

4.3 再帰的下向き構文解析
 構文規則を使う構文解析
 再帰的下向き構文解析ルーチン
 電卓プログラムを作る
 構文規則の制約
 条件式と代入文の処理
 代入規則と式の値
 式の値の削除
 多重代入と右結合
 C方式の構文規則
 C方式の式解析ルーチン
 解析ルーチンの再帰的記述

4.4 LexとYacc

4.5 解析木と構文木
 解析木を作る
 構文木を作る
 構文木を使ったコード生成
 中間コードの生成

そして、わたしが本書で一番の得点を与えたいと思ったのがこの第5章です。 変数の名前やら何やらを管理する「記号表」について図もたくさん用いて かなり詳細に解説されています。ドラゴンブック辺りと比べても ことこの部分に関してはこの本のほうが良く書けているかもしれません。 まあそれはどのようなことに主眼を置いて本を書くかということに関連するのでしょうが、 ちょっとコンパイラー作りに興味があるけど、実力は…という人にとっては、 この記号表の処理は結構高いハードルになるように思います。 その意味からも、良く書けている部分ではないでしょうか(偉そう)。

第5章 宣言の処理と記号表
5.1 記号表の作成
5.2 記号表への登録
5.3 記号表の探索
 リニアサーチ
 バイナリサーチ
 ハッシュ法
5.4 コンパイルの開始
 宣言の処理
 スタートアップ処理
 関数アドレスのバックパッチ
 ジャンプ命令のバックパッチ
 アセンブラコード生成時のジャンプ命令の処理
 静的領域サイズの格納
 宣言の切り分け
 型名と識別子の設定
5.5 変数宣言の処理
 変数宣言の処理方法
 配列宣言と整数定数式の判定
 大域名と局所名の管理
 記号表の領域管理
 局所用記号表の開始と終了
 変数アドレスの設定
 境界調整
 初期化の処理
5.6 関数宣言の処理
 関数宣言の処理方法
 局所用記号表の用意
 引数の処理
 関数プロトタイプの設定
 関数の実行開始アドレスの設定
 引数アドレスの設定
 関数の正しさの確認
 関数本体の解析
 main関数の処理
 記号表の後処理

後はもう流します(笑)

第6章 コードの生成
6.1 コード生成関数
6.2 変数の大域・局所判定
6.3 左辺値と右辺値
6.4 一次式の処理
6.5 単項演算子の処理
6.6 二項演算子の処理
6.7 定数畳み込み
第7章 仮想マシンのメモリ管理
7.1 メモリの構成
7.2 記号表領域
7.3 オブジェクトプログラム領域
7.4 オペランドスタック領域
7.5 ユーザーメモリ領域
第8章 文の処理
8.1 文とブロックの処理
8.2 式文
8.3 複合文
8.4 while 文
8.5 do 文
8.6 for 文
8.7 if 文
8.8 continue 文と break 文
8.9 switch 文
8.10 return 文
第9章 関数呼び出しと関数処理
9.1 関数呼び出しの手順
9.2 フレームの確保
9.3 レジスタマシンでのフレームの確保
9.4 CALL命令とRET命令
9.5 オペランドスタックと実行時スタック
9.6 関数呼び出し時のスタック内容
9.7 関数の呼び出し処理
9.8 関数の入り口処理
9.9 関数の本体処理
9.10 関数の出口処理
9.11 組み込み関数の処理
第10章 インタプリタの処理
10.1 インタプリタの働き
10.2 アドレスの処理
10.3 マクロの利用
10.4 メモリサイズのチェック
10.5 プログラムの終了
10.6 命令の通訳実行
第11章 誤り処理
11.1 誤り処理の基本
11.2 誤り処理の方法
11.3 単純な誤り対策
第12章 コードの最適化
12.1 最適化の基本
12.2 最適化の方法
第13章 おわりに

ところどころ、ちょっとしたコラムのようなものがあるんですが、 いくつか興味深い話題もあります。

Note:
初期 FORTRAN の式解析
関数の名前
木の巡回
1パスとバックパッチ処理
JIS-Cの一次式と単項式
浮動小数点定数の処理
不連続の定数並び
制御文の多重記述
式2と式3を入れ替えたfor文
目的コードがアセンブラの場合の引数渡し例
return文とコントロールパス

「バックパッチ」なんて大昔のコンパイラ本以来久しく見なかったような気がします。 FORTRAN の式解析は、中田先生の本にあったかな。

コンパイラーのソースコードが付録のCD-ROMに収録されています。 ネットで配布するのとどちらがいいかはちょっと判断つきません。 CD抜いても劇的に価格は下がらないでしょうし。 ただ、容量に余裕があるのだから、Windows 用のコンパイラー(MinGWとか)を 一緒に収録してもいいんじゃないかなとは思いましたが、 ライセンス的に面倒があったのかもしれません。


2010/02/06  00:44    <DIR>          .
2010/02/06  00:44    <DIR>          ..
2009/12/08  15:43    <DIR>          cci_c
2009/12/08  16:13             3,915 readme.txt

2009/12/08  15:43    <DIR>          .
2009/12/08  15:43    <DIR>          ..
2009/12/07  11:27               609 cci.c
2009/12/07  21:57            81,920 cci.exe
2009/12/07  11:56             3,230 cci.h
2009/12/07  21:56               177 ccimake.bat
2009/12/07  13:05            13,299 cci_code.c
2009/12/07  13:05             2,590 cci_misc.c
2009/12/07  11:27            31,247 cci_pars.c
2009/12/07  12:52             2,548 cci_prot.h
2009/12/07  12:52             4,068 cci_tbl.c
2009/12/07  14:42             8,618 cci_tkn.c
2009/12/07  17:54               335 cp_add.c
2009/12/07  17:54               285 cp_base.c
2009/12/07  17:54               718 cp_prime.c
2009/12/07  17:54               882 cp_qsort.c
2009/12/07  17:54             5,898 minicalc.c
2009/12/07  17:54             4,263 polish_p.c
2009/12/07  17:54             5,786 token_p.c

最後に、ソースコードの一部を。 スタイルについては特にコメントしません。 が、C++ で書かれた類書のものより良いとは言えるでしょう。

/**********************************************************/
/*    filename:cci_pars.c 構文解析                        */
/**********************************************************/
#include "cci.h"
#include "cci_prot.h"

Token token;                                          /* 現在処理中のトークン */
int blkNest = 0;                 /* ブロックの深さ 0:大域 1:関数 2:関数内の{} */
int err_ct = 0;                                               /* 総エラー個数 */
SymTbl tmpTb = {"",noId,NON_T,0,0,0,0};                     /* 一時格納記号表 */
SymTbl *fncPt = NULL;                             /* 翻訳中の関数の記号表位置 */
TknKind last_statement;                                 /* ブロック内最後の文 */

int localAdrs;                                        /* 局所変数アドレス管理 */
#define START_LocalAdrs 1*INTSIZE                     /* 局所変数割付開始番地 */
                                             /* 先頭4バイトは戻り番地用に確保 */
#define INT_P(p)   (int *)(p)                          /* int型ポインタに変換 */
/*---------------------- continue,break処理用*/
#define LOOP_SIZ 20
struct {
  TknKind stkind;                                                 /* 文の種類 */
  int looptop;                              /* ループ開始位置(continueの飛先) */
  int break_flg;                                   /* break文があれば真にする */
} loopNest[LOOP_SIZ+1];                               /* ループ文のネスト管理 */
int loopNest_ct = 0;                                      /* 使用中の最終位置 */
/*---------------------- switch処理用*/
#define SWTCH_SIZ 10
struct {
  int def_adrs;                                          /* defaultの対応番地 */
  int startCaseList;                                  /* caseList[]の開始位置 */
} swchNest[SWTCH_SIZ+1];                              /* switch文のネスト管理 */
int swchNest_ct = 0;                                      /* 使用中の最終位置 */

#define CASE_SIZ 100
struct {
  int value, adrs;                                      /* caseの値と対応番地 */
} caseList[CASE_SIZ+1];
int caseList_ct = 0;                                      /* 使用中の最終位置 */

int compile(char *fname) /* コンパイル */
{
  initChTyp();                                                    /* 文字種表 */
  gencode2(CALL, -1);                         /* main関数呼出。番地-1は仮設定 */
  gencode1(STOP);                                           /* プログラム終了 */

  fileOpen(fname);
  token = nextTkn();
  while (token.kind != EofTkn) {
    switch (token.kind) {
    case Int: case Void:                                        /* 変数か関数 */
      set_type(); set_name();                             /* 型名と名前を格納 */
      if (token.kind == '(') fncDecl(); else varDecl();      /* 関数,変数宣言 */
      break;
    case Semicolon:
      token = nextTkn();                                      /* 何もせず次へ */
      break;
    default:
      err_ss("構文エラー", token.text);
      token = nextTkn();
    }
  }
  if (err_ct == 0) backPatch_callAdrs();            /* 関数呼出未定番地を後埋 */
  *INT_P(mem_adrs(0)) = mallocG(0);            /* 静的領域サイズを0番地に格納 */

  if (err_ct > 0) fprintf(stderr, "%d個のエラーが発生しました。\n", err_ct);
  return err_ct == 0;                                     /* エラーなしなら真 */
}

void varDecl(void) /* 変数宣言 */
{
  for (;;) {
    set_aryLen();                                         /* 配列なら長さ設定 */
    enter(tmpTb, varId);                          /* 変数登録(アドレスも設定) */
    if (token.kind != ',') break;                                 /* 宣言終了 */
    token = nextTkn(); set_name();                              /* 次の変数名 */
  }
  token = chk_nextTkn(token, ';');                               /* ';'のはず */
}

はあ。これだけでもどっと疲れが ○| ̄|_

ということで、 最新コンパイラ構成技法 でも (コンパイラ―原理・技法・ツール (Information & Computing)) でもドンと来いな人には物足りなさ全開になると思いますが、 どんなものかちょっと知ってみたいという向きにはわりとオススメできるんじゃないかと。 ただ、読んでて1980年代後半の本じゃなかろうかという感触があったのはここだけの話。 内容が古臭いと言うのではないのですが、構文図を使ったりとか、 バックパッチの話とか。

あ、最後の最後にもう一個。瑣末なことなんですが気になった記述がいくつか。

lexとyaccについて、 Lex、Yaccと終始一貫してそれぞれの頭文字を大文字で書いていること。 全部小文字じゃなかったっけ? これが一つ目。 もう一つが 103ページ(から104ページ)にあった またかち合いの発生を減らすために、剰余計算のとき、 分母となる値を素数にするとハッシュ値の偏りが少なくなる という記述。別に表の大きさは素数でなくてもハッシュ関数がちゃんとしたものなら 問題ないという話ではありませんでしたっけ? と、こんなもんかな。

■_ 本日の巡回から

2010年02月07日

■_

・連載終了
まんがくらぶの今月号を読み返していて気がついたんですが、 「ノンストップおヨメ道」今月が最終回だったんですね。 四コマ誌の連載はわりと最終回に気がつかなくて、あの作品最近見てないような気がするなあ と数ヶ月後に知るとか。まあ、一部のひいき作品を除いてはあまり一生懸命 読んでないというのがあるのかも

・REBOL
reddit でスレッドが立ってて気がついたんですが(本日の気づき二つ目)、 まだやってたんですねえこれ。 REBOL without a cause « Torquing Wet Strainers 確かオープンソースでないからスルーしたような記憶が。

■_ 条約

信じられないが、本当だ Part105
623 名無し三等兵 [sage] 2010/02/07(日) 18:38:21 ID:??? Be:
    米が日本にハーグ条約加盟迫る 「拉致問題支援に悪影響」
    http://www.47news.jp/CN/201002/CN2010020601000521.html

    えええええ?
    日本ってハーグ条約に加盟してなかったっけ?? 

624 名無し三等兵 [sage] 2010/02/07(日) 18:40:34 ID:??? Be:
    とおもったら、ハーグ条約ってこんなにあるのな。

    >ハーグ国際私法会議で締結された条約はハーグ条約という通称で呼ばれることが多い。
    >ただしこの通称は国際私法とは関係ない他のいくつかの条約の通称としても使われるため
    >注意が必要である。

    >以下に条約の締結年と名称の一覧を示す。 ただし、全ての条約が発効しているわけでは
    >なく、また各構成国が全ての条約を批准しているわけではない (日本が批准しているもの
    >については※で示した)。

    * 1954年 - 民事訴訟手続に関する条約 - ※
    * 1955年 - 物品の国際売買の準拠法に関する条約
    * 1955年 - 本国法と住所地法の抵触に関する条約
    * 1956年 - 外国の会社、社団及び財団の法人格の承認に関する条約
    * 1956年 - 子に対する扶養義務の準拠法に関する条約 - ※
    * 1958年 - 子に対する扶養義務に関する裁判の承認執行に関する条約
    * 1958年 - 物品の国際売買における所有権の移転の準拠法に関する条約
    * 1958年 - 物品の国際売買における合意された裁判所の管轄に関する条約
    * 1961年 - 未成年者の保護に関する官庁の権限及び準拠法に関する条約
    * 1961年 - 遺言の方式に関する法律の抵触に関する条約 - ※
    * 1961年 - 外国公文書の認証を不要とする条約 - ※
    * 1965年 - 養子縁組に関する裁判の管轄、準拠法及び承認に関する条約
    * 1965年 - 民事又は商事に関する裁判上の文書の外国における送達及び告知に関する条約 - ※
    * 1965年 - 裁判所の選択の合意に関する条約
    * 1970年 - 民事又は商事に関する証拠の収集に関する条約 

625 名無し三等兵 [sage] 2010/02/07(日) 18:40:37 ID:??? Be:
    * 1970年 - 離婚及び別居の承認に関する条約
    * 1971年 - 民事及び商事に関する外国判決の承認執行に関する条約と附属議定書
    * 1971年 - 交通事故の準拠法に関する条約
    * 1973年 - 遺産の国際的管理に関する条約
    * 1973年 - 製造物責任の準拠法に関する条約
    * 1973年 - 扶養義務に関する裁判の承認執行に関する条約
    * 1973年 - 扶養義務の準拠法に関する条約 - ※
    * 1978年 - 夫婦財産制の準拠法に関する条約
    * 1978年 - 婚姻の挙行及びその有効性の承認に関する条約
    * 1978年 - 代理の準拠法に関する条約
    * 1980年 - 国際的な子の奪取の民事面に関する条約[4]
    * 1980年 - 裁判への国際的なアクセスに関する条約
    * 1985年 - 信託の準拠法及び承認に関する条約
    * 1986年 - 物品の国際的売買契約の準拠法に関する条約
    * 1989年 - 死亡による財産の相続の準拠法に関する条約
    * 1993年 - 国際養子縁組に関する子の保護及び国際協力に関する条約
    * 1996年 - 親責任及び子の保護措置についての管轄権、準拠法、承認、執行及び協力に関する条約
    * 2000年 - 成年者の国際的保護に関する条約
    * 2005年 - 管轄合意に関する条約[5]
    * 2006年 - 口座管理機関によって保有される証券についての権利の準拠法に関する条約(en:Hague Securities Convention)[6]
    * 2007年 - 子及びその他の親族の扶養料の国際的な回収に関する条約
    * 2007年 - 扶養義務の準拠法に関する議定書

    でこのニュースは
    国際結婚で生まれた子を離婚後に日本人親が引き取って帰国するのを「拉致」と捉える
    アメリカが怒ってるらしい。知らんよそんなこと。 

626 名無し三等兵 [sage] 2010/02/07(日) 18:49:22 ID:??? Be:
    ハーグ条約多すぎww
    ちょっとは場所変えるとか考えたらどうなんだ。

    そう言えば動物保護のワシントン条約と軍縮のワシントン条約を絡めたラノベがあったなあ。 

たくさんあるんだなあ。 知らなかった…w 国際結婚云々の話は聞き覚えあったけど。

■_ Emacs

Emacs を「学ぶ」価値はあるかとかなんとかいう数日前に取り上げた話題。 あまりその後伸びませんでしたが、いくつか目立った意見をご紹介。


Is emacs a useful tool for a CS student to learn? : programming

I'm a CS major and currently enrolled in a C++ course. I've done plenty of Java 
programming in the past along with assembly, some C and Python, but this is my first 
swing at C++. I've heard about emacs before, but I'm not really too sure how its 
useful and if its a necessary tool to learn.

So I come to you proggit, is it worth it for me to learn emacs as I learn C++? If so, 
is there a good way to get jumpstarted on learning it? And should I use emacs..xemacs?

FYI: I run Ubuntu and all of my assignments/projects will be compiled with g++ on 
debian machines
Learn either emacs or vim. Doesn't matter which, but learn one as well as you possibly 
can. Your editor is your toolbox.

I totally agree with the above. There are never ending religious debates between the 
Emacs and Vi camps but for all intensive purposes it doesn't matter. Use whichever 
feels more comfortable to you.

Once you get a handle on them you will find that you can code much faster then you 
could previously just because of all the shortcut keys and such. Its a steep learning 
curve at first which will be pretty painful. Keep a cheat sheet handy and don't be 
afraid to spend the 5 minutes now searching online for a way to do something, it will 
often pay dividends later.

yes, yes, a thousand times yes! (or: <F3> y e s <F4> M-999 <F4>)

It does has a steep-ish learning curve, but it clicks very quickly if you dogfood it 
for editing for a couple of days. Just (1) keep a cheat sheet handy, and (2) keep a 
separate sheet tacked up in front of you and write down new commands as you learn them. 
It will become automatic in no time.

The short-term payoff is that you're using g++ on Ubuntu, and emacs is a natural fit 
(you will need an editor anyway, rather than using an integrated IDE).

The real benefit, however, is that if you stick with it you'll reap the benefits for 
the rest of your life, because it will be available on any platform you're asked to 
use over your entire career, and as you build a repertoire and a toolbox of macros 
you'll have these for the rest of your life.

If you like, you can read this for inspiration.

Emacs is without question the most advanced and comprehensive text editor in the world. 
By far. It's hard to learn, but once you do you are truly more capable than your peers 
that don't grok it. Emacs also makes you better looking and smarter.

I can't fairly describe the extensibility of the editor, but you should think of Emacs 
as a computer programming language that is designed specifically to help you edit text. 
(It does look like a regular text editor, but it's not.) As you use Emacs more and 
more, you start to treat it more like a programming language, tweaking, extending, and 
adding editing functions to help you write code (and generally process text) faster.

It could take years, really, but you will be a better programmer if you learn Emacs. 
There simply isn't another editing tool out there that you can take as far. I'm 
curious to see if anyone here will dispute that. Do not be discouraged by the 
appearance of the program. (Most people walk away at the sight of Emacs.) The power 
behind the program is very real.

Finally, as a computer programmer, you'll deal with text a lot more than most can 
imagine. Especially as we move into the future, where all data looks more and more 
like plain text. I don't think it'll hurt you to have a good grasp of the best text 
manipulation tool there is.

Note: I salute Vim too, because it's a wonderful editor. It's the only software 
package that I know of that compares to Emacs. It even has some advantages over Emacs, 
such as allowing users more efficient use of the keyboard when manipulating text. I 
wholeheartedly recommend Emacs nevertheless.

■_ GA144

Forth inventor Chuck Moore announces 144 core CPU capable of 100 billion ops/sec : programming Forth の作者が面白いチップを作った(設計した)という話がそれなりに話題に。



GA144 Brief
GA144 144-computer Chip

The GA144 is the most powerful chip we have created to date, with 144 g18 computers 
and capable of up to 100 billion operations per second. This chip is currently being 
fabricated as a pre production shuttle run, and based on results of testing during 
Autumn of 2009 it could go to production as early as the start of 2010.

The chip measures 4.7 x 4.5 mm in a 180 nm process. That size was chosen because it is 
the largest chip we can presently package in the 10x10 mm QFN-88. 104 pads border the 
chip (16 ground pads connect to the exposed die attach paddle; 16 power pads and 72 
signal pads connect to the 88 pins on the edges of the package) and 8 rows of 18 
computers fit inside.

Low power results from our computer (one node of an array) being asynchronous 
(unclocked). Low energy results when each of the 144 computers is executing 
instructions only when it actually has something to do. Spec sheets will be 
forthcoming. Meanwhile this list of features should prove impressive. Bill Muench 
composed a handy poster with much info.

(以下略)

否定的な意見が多いように見受けられますが、そういうのはおいといてひとつ。


Forth inventor Chuck Moore announces 144 core CPU capable of 100 billion ops/sec : programming
TL;DR - summary for ones who do not follow his inventions:

he designs forth processors. Each core runs tiny forth program. Cores have connections 
to their 4 (or 8?) neighbours, from there core can get input data, process it and pass 
it to other neighbour core. So, only perimeter cores can talk to RAM (yes!) and I/O 
ports

When programming this monster, you plan (on the plain map) which core executes which 
tiny program, then give each core its forth bytecode.

Then that mill starts ticking, and you have quite good digital signal processor to use 
in radios/comms equipment.

Kind of that.

edit: on site you've got all doc. 2) demo programs there use only chain of cores, so 
number of cores can just be left idle.

いかに低電力消費でがんばるかってことでいいのかな?

■_ 本日のム板から


C++相談室 part77
508 デフォルトの名無しさん [sage] 2010/02/07(日) 10:07:23 ID: Be:
    >>497
    CとC++は別物。焼きそばとカップ焼きそばくらい違う。 

509 デフォルトの名無しさん [sage] 2010/02/07(日) 10:26:19 ID: Be:
    お寿司とカリフォルニア巻くらい違う。 

510 デフォルトの名無しさん [sage] 2010/02/07(日) 10:35:22 ID: Be:
    どれも底辺が喜んで食う物ってのがまたw 

511 デフォルトの名無しさん [sage] 2010/02/07(日) 11:05:46 ID: Be:
    カテゴリは同じだけどグレードが違うってことでしょ 

512 デフォルトの名無しさん [sage] 2010/02/07(日) 11:23:49 ID: Be:
    最近はこのスレ荒れるなぁ。

    ちょっとはみんな自重しようぜ。 

513 デフォルトの名無しさん [sage] 2010/02/07(日) 11:29:55 ID: Be:
    そこはグレードは同じだけど、カテゴリが違うってしておかないと 

なんとも微妙なたとえだが好きだこういうの。


C++相談室 part77
516 デフォルトの名無しさん [] 2010/02/07(日) 14:41:41 ID: Be:
    コンストラクタに初期化並び?を書くと何か最適化されるの?
    abc() : member(0) {} 

517 デフォルトの名無しさん [sage] 2010/02/07(日) 14:47:45 ID: Be:
    そこに初期化子を書かないと初期化できないじゃないか。

518 デフォルトの名無しさん [sage] 2010/02/07(日) 14:50:02 ID: Be:
    最適化関連はアセンブラコード見て確認してみ? 

519 デフォルトの名無しさん [sage] 2010/02/07(日) 14:50:53 ID: Be:
    >>516
    そこにかかずしていつ初期化するのだい? 

521 デフォルトの名無しさん [sage] 2010/02/07(日) 15:07:48 ID: Be:

    hoge() { member = 0; }

    コンストラクタの中に書く俺は異常なのか・・・? 

522 デフォルトの名無しさん [sage] 2010/02/07(日) 15:08:59 ID: Be:
    >>521
    異常というか、C++の初期化子の意味を理解してください。

    ・・・Effective C++すら読んでないでしょ。

523 デフォルトの名無しさん [sage] 2010/02/07(日) 15:10:03 ID: Be:
    >>521
    それ初期化やない、代入や。 

524 デフォルトの名無しさん [sage] 2010/02/07(日) 15:11:15 ID: Be:
    俺はメンバの数が圧倒的にふえるとそう書くな 

525 デフォルトの名無しさん [sage] 2010/02/07(日) 15:12:39 ID: Be:
    >>521

    節子、それ、初期化やない、代入や!

    って言おうと思ったら既に言われてしまった。 

526 デフォルトの名無しさん [sage] 2010/02/07(日) 15:13:39 ID: Be:
    >>524
    お前もかよwこのスレは・・・。
    Effective C++ぐらい読めよ。そして従えよ。

527 デフォルトの名無しさん [sage] 2010/02/07(日) 15:14:13 ID: Be:
    つ constメンバ変数 

528 デフォルトの名無しさん [sage] 2010/02/07(日) 15:14:36 ID: Be:
    引数なしの場合って書く? 

529 デフォルトの名無しさん [sage] 2010/02/07(日) 15:19:37 ID: Be:
    constメンバをstaticじゃなく宣言する意味ってなんかあんのか 

530 デフォルトの名無しさん [sage] 2010/02/07(日) 15:20:14 ID: Be:
    引数なしだと組み込み型はそれを明示しないと初期化されないので、初期化したい場合は書く。
    どうでもいい場合は書かない。 

531 デフォルトの名無しさん [sage] 2010/02/07(日) 15:21:12 ID: Be:
    >>528
    何の引数が無い場合?メンバ変数(クラス)ならそいつらのデフォルトコンストラクタで初期化しとけば良いじゃん。 

まあちょっとわかりにくい?


C++相談室 part77
538 デフォルトの名無しさん [sage] 2010/02/07(日) 15:38:36 ID: Be:
    C++をやっててboostに触ってないってのはモグリですか 

540 デフォルトの名無しさん [sage] 2010/02/07(日) 15:40:09 ID: Be:
    >>538
    はい。
    それとVCしか使えない人もモグリです。 

541 デフォルトの名無しさん [sage] 2010/02/07(日) 15:42:31 ID: Be:
    >>538
    メモリーリーク?なにそれ?おいしいの?
    なんだSTLって使い物になるんじゃん。
    MPLすげー。ソースコードが半分になるじゃん。

    C++の世界が全く変わるよ。良い意味で。

542 デフォルトの名無しさん [sage] 2010/02/07(日) 15:44:15 ID: Be:
    >>538
    さすがにねぇ。。

    >>541
    > メモリーリーク?なにそれ?おいしいの?
    いいすぎだろw
    メモリーリークを知っているからこそ
    役立つんだろ?

543 デフォルトの名無しさん [sage] 2010/02/07(日) 15:45:34 ID: Be:
    boostいらねよ。
    使えるのはメモリー管理だけだろ。
    それ以外たいして入らない。
    メモリも他のライブラリで代替えすれば完全に入らない。 

544 デフォルトの名無しさん [sage] 2010/02/07(日) 15:47:36 ID: Be:
    >>543
    いるか要らないかねぇだろ
    本題を読めよw 

545 デフォルトの名無しさん [sage] 2010/02/07(日) 15:48:07 ID: Be:
    >>543
    最初の行が矛盾してるぜ。

    欲しいところだけ使いたいのに、全部入れるとでかすぎるって話なら同意。 

546 デフォルトの名無しさん [sage] 2010/02/07(日) 15:50:39 ID: Be:
    * typedef struct hogehoge..., (struct fuga*)malloc(sizeof(struct fuga))...
     C++は初めてか?肩の力抜けよ。

    * catch(...){ throw; }
     落ち着け

    * カスタムアロケータを自作したり等、STLをやっと使いこなせるレベル
     頑張って^^;

    * shared_ptrやMPL等でboostを導入しまくる
     そうだよね保守性は重要だよね

    * boostのソースから必要な部分だけもってきて改変
     本当に分かってやってるのか?という懸念 

549 デフォルトの名無しさん [sage] 2010/02/07(日) 15:58:43 ID: Be:
    boostは中身を理解して使うならいいよ
    理解せずに使うやつは潜り 

550 538 [sage] 2010/02/07(日) 16:00:23 ID: Be:
    そうかー…
    SymbianでC++をやってた自分としてはboostは若干異世界なんだよね 

■_ すすまねー

今日は外出しなかったのに、書評進まんかった。

■_ 本日の巡回から

  • UK STUDIO - プログラマの報酬について
  • Software transactional memory
  • On the need to use error-correcting memory
  • Got 4GB RAM, no ECC? Then you have >95% probability to get a bit error in the next three days : programming
  • 「窓の手」公式サイト
    そのおかげでプライベートの時間を以前より確保出来そうな気がしていますので、Windows7対応版の開発を着手しました。
  • カイジの名場面を再現した「利根川焼き土下座香炉」、肉の香りのお香付き - GIGAZINE
  • 劇場版涼宮ハルヒの消失を観てきました - 梶本裕介の日記
  • 興味のある技術に Cygwin と書いておいたら面接で爆笑された - BOOLEANLABEL
  • fladdict » オトンと妹にiPadのプロモビデオを見せてみた
    別にプログラムもしなけりゃ、フォトショップも使わない二人にとっては正に夢のようなマシンっぽい。
  • もしかしてEmacsってさ。: たわごと
    Emacsに慣れたひとがEmacsのキーバインドを求めるのは当然なのですが、同様にWindowsのキーバインドに慣れたひとがそれを求めるのも当然でしょう、と。
  • 【2ch】ニュー速クオリティ:【ワンフェス】徹夜組みがペナルティで入場規制!始発組み大勝利wwww
  • GNUとは? | OKWave
  • 哀と欲望の日々。: WZR-HP-G300NHを導入、そしてダメだコイツ。
  • オープンソースの品質:夜な夜な海外ネット:ITmedia オルタナティブ・ブログ
  • suicaは実はたまに落ちている - 紅茶屋くいっぱのあれこれ日記
    そんな後から決まる仕組みが動くわけないだろうと。で、そこで名言。そんなこといったって動いちゃってるんだもん。って。
  • Twitter / haseshin: バイクが売れないのは、みんなAKIRAに出て来た金田 ...
  • 2010年02月06日

    ■_

    本のタイトルを控えるのを忘れてしまって詳しいことが調べられないのですが、 組み込み関連のソフトウェア開発全般についての解説を、 オーム社のマンガでわかる~シリーズほどではないにしろ ふんだんに使って行っているような本を見かけました。 見覚えのある感じの絵だったけど、さてどなただったやら。

    ばくだんいわです(謎)。

    ■_ Thirty-seven Reasons I Love Ruby

    一つ一つ見ていくと、どうだろうそれはと思うものもあったり。

    
    Thirty-seven Reasons I Love Ruby
    
    Thirty-seven Reasons I Love Ruby
    
    I won't bother giving the history of the Ruby language here. For those of you who 
    haven't heard of it, the definitive web site is www.ruby-lang.org, and comp.lang.ruby 
    is the newsgroup. For those who have, I present to you the reasons I love this 
    (relatively) new language. You may also visit my main Ruby page if you didn't come 
    from there.
    
    (以下細かい説明の部分は略)
    
       1. It's object-oriented.
    
       2. It's a pure OOP language.
    
       3. It's a dynamic language.
    
       4. It's an interpreted language.
    
       5. It understands regular expressions.
    
       6. It's multi-platform.
    
       7. It's derivative.
    
       8. It's innovative.
    
       9. It's a Very High-Level Language (VHLL).
    
      10. It has a smart garbage collector.
    
      11. It's a scripting language.
    
      12. It's versatile.
    
      13. It's thread-capable.
    
      14. It's open-source.
    
      15. It's intuitive.
    
      16. It has an exception mechanism.
    
      17. It has an advanced Array class.
    
      18. It's extensible.
    
      19. It encourages literate programming.
    
      20. It uses punctuation and capitalization creatively.
    
      21. Reserved words aren't.
    
      22. It allows iterators.
    
      23. It has safety and security features.
    
      24. It has no pointers.
    
      25. It pays attention to detail.
    
      26. It has a flexible syntax.
    
      27. It has a rich set of libraries.
    
      28. It has a debugger.
    
      29. It can be used interactively.
    
      30. It is concise.
    
      31. It is expression-oriented.
    
      32. It is laced with syntax sugar.
    
      33. It has operator overloading.
    
      34. It has infinite-precision integer arithmetic.
    
      35. It has an exponentiation operator.
    
      36. It has powerful string handling.
    
      37. It has few exceptions to its rules.
    
          hits since October 2000.
    

    ■_ ${@+"$@"}

    UNIX板やLinux板のシェル関連のスレで見るような話題が。

    
    UNIXシェルプログラミング ${@+"$@"} | OKWave
    UNIXシェルプログラミング ${@+"$@"}
    
    「入門UNIXシェルプログラミング」という書籍に以下のような記述がありました。
    どうも矛盾しているようで、理解できないのですが、シェルに詳しい方、解説をお願いできない
    でしょうか。よろしくお願い致します。
    
    以下の文章が、もし「"$@"は""に、"$*"はNULLに置き換わりま
    す。」なら理解できるんですが・・・
    
    誤植では、ないですよね…?
    
    (以下引用)--------------------------------------------------------
    $*をダブルクウォートで囲むと、1つの文字列になります。$@をダブルクォートで囲むと、それ
    ぞれ別々の文字列であると解釈されます。それならいつでも、「"$@"」を使えば混乱
    がなくていいじゃないか、と思われるかもしれません。ところがこれにはこれで落とし穴はある
    のです。
    
    位置パラメタに何の値もセットされていない場合、つまり、渡すべきパラメタが何もない状態の
    ときには、"$@"はヌルに、"$*"は""に置き換わります。ヌルの
    場合はパラメタとして処理しませんが、""は「何もないパラメタがある」として処理
    します。どちらを選択しなければならないかは、状況によって判断しなくてはなりません。一般
    的には、前節で説明した${variable+value}の形式を使うのが最適でしょう。
    
    ${@+"$@"}
    
    こう書くことで、位置パラメタに何もセットされていない場合には何もしない、という条件を作れます。
    
    
    ANo.4
    
    >「入門UNIXシェルプログラミング」
    
    最初に見る本としては、間違えましたね。奥付をみて、なるべく最近発行された本を見ましょう。
    
    また、プログラム言語や、フレームワークの本は、同じ種類の本を2、3冊見るようにしましょう。
    
    辞書みたいに、何年もかけて、第一人者が書くというものではないので、表現が微妙であったり、
    わかりにくかったり、説明不測の所があったり、この辺に突っ込みを入れるあなただと、本意を
    見失ってしまう事があります。
    
    この本の、ここで言いたいのは、業務用などプログラムするときの心構えを述べています。
    
    つまり、
    
    1.
    $* などは特殊な意味を持つが、その戻り値(参照値)は必ずしも固定されていません。
    
    と言う話と
    
    2.
    ユーザーが入力する値だったり、何かを取得して格納する変数は、初期化又は、何が入力されて
    いても、予期しておく。
    
    この2つを言いたかっただけです。NULLであろうがヌルであるがナルであろうが、””長さ0の
    文字列であろが、たいした問題ではありません。これらのために
    
    =========================
    ${変数名+初期値または設定値}
    
    と言う書式があります。
    =====================
    
    と言うのが本文です。これらはオンラインヘルプの man で
    
    > man sh
    > man csh
    
    とかすれば、ちゃんと説明されています。ちなみにその本はちょっと硬くて、実用性がないですね。
    
    よものであれば、リファレンスの項目がしっかりしているものを買いましょう。そうすると、上
    達したあとでも、役に立ちますし、今回の問題もちゃんと説明しています。
    
    ANo.2
    
    この記述は、パラメータ無しの時の "$@" の展開が昔と今では違っていることを踏ま
    えて無いので一部意味不明になってます。
    
    例えば、引数が、a "b c" d という3つの文字列のとき、"$1" は a, 
    "$2" は "b c", "$3" は d になります。
    
    "$@" は、a "b c" d の3つの文字列になり、"$*" は、"a 
    b c d" と1つの文字列になります。引用符で囲まず、単に $@ や $* と書くと、a b c d 
    という4つの文字列になります。
    
    で、引数の個数がゼロのとき、"$*" は "" (空文字列) という1つの文字
    列、つまり "$*" は引数の個数に関係なく常に1つの文字列になります。これに対し
    て、"$@" は「空」つまりゼロ個の文字列に展開されます。
    
    つまり、シェルスクリプトの引数をできるだけそのまま子供のコマンドに伝えるときには、
    "$@" を使えばいい訳です。これで、引数の個数がゼロ個であれ、たくさんであれ、
    引数が引用符で囲まれていても常に、親スクリプトの引数と同じ物、同じ個数が子コマンドに渡
    ります。
    
    ところが、昔の/bin/shでは、引数がゼロ個の時の "$@" は空でなく "" 
    という1つの空文字列に展開されるという仕様でした。このため、「できるだけそのまま子供の
    コマンドに伝える」という場合には、${@+"$@"} と書く必要がありました。現在のほ
    とんどのshでは、"$@" でOKです。もしかすると古い仕様のままのshがあるかもしれ
    ませんが。
    

    ■_ 本日の巡回から

    ■_ 早いとこまとめたいんですが

    エンジンがかかるのが遅い上に割り込み要因がたくさんあるので以下略

    んでまあ忘れずに書いておくとですね、 巻末の「参考文献」がきちんと書かれているだけでも、 参考リソースとかいう面妖な言葉を使って、しかも数がそれほどでもない上に 自著が複数含まれている類書よりはお勧めできると思うんですよ。ええ。

    あ、 Amazon.co.jp: 明快入門コンパイラ・インタプリタ開発 C処理系を作りながら学ぶ (林晴比古実用マスターシリーズ): 林 晴比古: 本 の話です。はい。 具体的にはこんな感じのリストです >参考文献

    参考文献
    
    コンパイラ 原理・技法・ツール I II サイエンス社 2003年
    
    コンパイラ エイホ、ウルマン 倍風館 1995年
    
    コンパイラ構成法 原田賢一 共立出版 2003年
    
    アルゴリズム+データ構造=プログラム N.Wirth 日本コンピュータ協会 1981年
    
    コンパイラ 中田育男 オーム社出版局 2003年
    
    コンパイラの仕組み 渡邊胆 朝倉書店 2005年
    
    コンパイラ 辻野嘉宏 昭晃堂 2004年
    
    コンパイラ 湯浅太一 昭晃堂 2004年
    
    やさしいコンパイラの作り方 中西正和、大野義夫 共立出版 1981年
    
    新言語作成の技法 大貫広幸 エム・アイ・エー、アスキー出版 1985年
    
    PASCAL K.Jensen,N.Wirth 倍風館 1983年
    
    プログラミング言語C B.W.カーニハン、D.M.リッチー  共立出版 1999年
    
    JISプログラム言語C 日本工業標準調査会審議、日本規格協会 1994年
    
    

    一番目はドラゴンブックの一つ前の版ですね。 二つ目のは緑の表紙で出ていた旧版です。 「やさしいコンパイラの作り方」というのは昨年同タイトルの本が 出版されていたような気がしますがまるっきりの別物です。 昭晃堂 の2004年の二冊はよくわかりません。 少なくともどちらかは持っているはずなんですが。

    2010年02月05日

    ■_

    ・例の本
    ようやく最寄の図書館に転送されてきたので借りることができました。 これ、カーニハン大先生の論文のほかにも興味深いのがそろってますねえ。

    第1部 プログラミング言語の比較
    ・プログラミング言語 C と Pascal の比較
    ・Pascal 対 C: 主観的比較
    ・Pascal と Ada の比較
    ・プログラミング言語の比較: Ada, Pascal, C
    
    第2部 プログラミング言語の評価
    ・プログラミング言語 Pascal の評価
    ・UNIX タイムシェアリング・システム: C
    ・プログラミング言語 Ada の初期段階の評価
    
    第3部 言語批評
    ・プログラミング言語 Pascal に対する批判
    ・プログラミング言語Pascal に対する批評の追加
    ・なぜ私はPascalが嫌いか
    ・言語 C における型の構文: 構文的な革新のために
    
    第4部 言語の比較・評価のための方法論
    ・プログラミング言語の比較のための方法論
    ・ソフトウェア工学のための言語比較
    ・いくつかのプログラミング言語処理系の批判的な比較
    ・プログラミング言語:要求項目と評価方法
    
    

    ■_ 本日の巡回から

    ■_ これは

    どこかで見たような動きをする関数

    
    C言語なら俺に聞け(入門編)Part 60
    167 デフォルトの名無しさん [sage] 2010/02/05(金) 14:36:24 ID: Be:
        ファイルじゃなくて
        メモリを
        freadやfgetsとかする方法って無いですか?
    
    168 デフォルトの名無しさん [sage] 2010/02/05(金) 14:43:05 ID: Be:
        /dev/kmemでもオープンしてみる? 
    
    169 デフォルトの名無しさん [sage] 2010/02/05(金) 14:44:05 ID: Be:
        イミフな質問だな
        こいつは何がやりたいんだろう 
    
    175 デフォルトの名無しさん [sage] 2010/02/05(金) 15:02:07 ID: Be:
        >>169
        今までパッケージしていなかったファイルを
        パッケージ化して一部取り出してメモリに格納して処理したい
        一時ファイルを作らずにやりたい
    
        で、ファイルでやっていた処理を
        メモリ版として使いたい
        なるべくソース書き換えたくない
        freadならなんとかなるけど
        fgets,fscanfとか書き換えるのめんどい
    
        fopenをなんとかしたらなりそうな気がするけど無理か 
    
    179 デフォルトの名無しさん [sage] 2010/02/05(金) 15:11:56 ID: Be:
        >>175
        FILE *tmpfile(void);
        で一時ファイルを作るのがいいと思う
    
        実際にファイルが作られるかどうかは実装依存だけど
        小さなものならメモリ上でうまくやってくれそうな気はする 
    
    180 デフォルトの名無しさん [sage] 2010/02/05(金) 15:15:04 ID: Be:
        stringstreamみたいなのがアレばいいのにね 
    
    181 デフォルトの名無しさん [sage] 2010/02/05(金) 15:16:28 ID: Be:
        tmpfileだとバイナリで
        fscanf等、文字列系の処理がうまくいかない気がする 
    
    182 デフォルトの名無しさん [sage] 2010/02/05(金) 15:24:35 ID: Be:
        memccpyとかscanfにするのではダメなのか 
    
    183 デフォルトの名無しさん [sage] 2010/02/05(金) 15:25:28 ID: Be:
        似たような質問が
    
        C言語の質問です。 mallocなどで確保した任意のメモリ領域をFILE構造体、またはファイ
        ルディスクリプタとして扱う方法はないでしょうか? OSに依存した方法でもかまわな..
          - 人力検索はてな
    
        http://q.hatena.ne.jp/1212571670 
    
    184 デフォルトの名無しさん [sage] 2010/02/05(金) 15:28:51 ID: Be:
        つ fmemopen 
    
    185 デフォルトの名無しさん [sage] 2010/02/05(金) 15:30:26 ID: Be:
        fopen( filename , "rt" )なのを
        fopen_b( data , size , "rt" )
        ってな感じに書き換えるだけで無いかなと
        directXで言うD3DXCreateTextureFromFile、D3DXCreateTextureFromFileInMemoryみたいな
    
        コード書き換えるか一時ファイル作ります
    
        ありがとうございました 
    
    186 デフォルトの名無しさん [sage] 2010/02/05(金) 15:32:06 ID: Be:
        >>184
        うわああ
        それです。
        ありがとうございます
        ありがとうございます 
    
    187 デフォルトの名無しさん [sage] 2010/02/05(金) 16:50:40 ID: Be:
        >>186
        うわああ
        なんどもありがとうございますといってくれて
        ありがとうございます
        ありがとうございます 
    
    188 デフォルトの名無しさん [sage] 2010/02/05(金) 19:08:31 ID: Be:
        fmemopen()てgcc限定? 
    
    189 デフォルトの名無しさん [sage] 2010/02/05(金) 20:24:08 ID: Be:
        gccのbuiltinでは無い。 
    
    190 デフォルトの名無しさん [sage] 2010/02/05(金) 20:54:25 ID: Be:
        今はまだglibc限定 
    
    

    ああ、やっぱり fmemopen だったか。

    ■_

    あーもう(以下略)

    2010年02月04日

    ■_

    びーまいびー♪

    ■_ 8バイトなんでまだまだ

    めもがき:2010年2月3日分 ○[Unicode] IVS
    
    件の記事で、1文字8バイトなにそれこわい!という話がだいぶ広まっとるようですな。
    
    (略)
    
    ということであって、UTF-8のMB_CUR_MAXはこれまで通り4バイト(RFC3629、ISO/IEC 10646ではまだ6バイト)
    であることには変わりないことに若干注意。
    
    そもそも Unicode正規化を考えたらCollationなんかで「ぱ」だって「は」「゜」に分解する必要もあったりするわけで
    そうすると、ひらがな1文字でUTF-32では8バイトになるケースだって昔から存在したわけで。
    これしきで驚いてる人はもっとUnicodeのヤバさを知るべきです。
    
    (以下略)
    
    

    これくらいで驚いていてはいけないそうですよ、兄さん(誰)。

    ■_ どう見えるか

    余裕があったら訳す。 にしても。

    What Pythonistas Think of Ruby | Free PeepCode Blog
    Matz Idolizes Larry Wall!
    
    There was an audible gasp from the audience when Gary posted a slide with this quote 
    from Matz:
    
        Ruby inherited the Perl philosophy of having more than one way to do the same 
        thing. I inherited that philosophy from Larry Wall, who is my hero actually.2
    
    I'm not sure if the shock was from hearing someone embrace TIMTOWTDI or from learning 
    that someone considers Larry Wall to be a hero.
    

    なぜこれが取り上げられるのかがよくわからん。

    ■_ Emacsは

    ちょっと様子見のネタ。

    
    Is emacs a useful tool for a CS student to learn? : programming
    
    I'm a CS major and currently enrolled in a C++ course. I've done plenty of Java 
    programming in the past along with assembly, some C and Python, but this is my first 
    swing at C++. I've heard about emacs before, but I'm not really too sure how its 
    useful and if its a necessary tool to learn.
    
    So I come to you proggit, is it worth it for me to learn emacs as I learn C++? If so, 
    is there a good way to get jumpstarted on learning it? And should I use emacs..xemacs?
    
    FYI: I run Ubuntu and all of my assignments/projects will be compiled with g++ on 
    debian machines
    

    すでにそこそこコメント数が伸びてます。

    ■_ 予告編

    FAQ ではなく FQA。

    
    C++ FQA Lite: Defective C++
    
    Defective C++
    
    Part of C++ FQA Lite
    
    This page summarizes the major defects of the C++ programming language (listing all 
    minor quirks would take eternity). To be fair, some of the items by themselves could 
    be design choices, not bugs. For example, a programming language doesn't have to 
    provide garbage collection. It's the combination of the things that makes them all 
    problematic. For example, the lack of garbage collection makes C++ exceptions and 
    operator overloading inherently defective. Therefore, the problems are not listed in 
    the order of "importance" (which is subjective anyway - different people are 
    hit the hardest by different problems). Instead, most defects are followed by one of 
    their complementary defects, so that when a defect causes a problem, the next defect 
    in the list makes it worse.
    
    このページは、C++ というプログラミング言語の主な短所をまとめたものです(些細な quirks 
    をすべてリストアップすることはとんでもなく時間が掛かります)。公平のため申し上げておき
    ますが、幾つかの事項は設計上の選択であってバグではありません。一例を挙げると、あるプロ
    グラミング言語はガーベジコレクションを提供していません。こういったことの組合わせがそれ
    らを全体を問題のあるものにしてしまうのです。たとえばガーベジコレクションの欠如は C++ 
    の例外処理と演算子のオーバーローディングを本質的に不完全なものとしてしまいました。した
    がって、ここにあるリストは“ことの重大さ”の順で並んでいるものではありません(重大さと
    いうのものは subjective なものであって、違う人が見れば別の問題が一番難しいものになるで
    しょう)。重大さの順ではなく、大部分の欠点にはそれに対する complementary な欠点が続いて
    います。そのためにある欠点が問題を引き起こしたときに、このリストで次にある欠点がそれを
    さらに悪化させるのです。
    
    
        * No compile time encapsulation (コンパイル時の encapsulation がない)
        * Outstandingly complicated grammar (とんでもなく複雑な構文)
        * No way to locate definitions (locate definitions の手段がない)
        * No run time encapsulation (実行時の encapsulation の欠如)
        * No binary implementation rules  (バイナリ実装規則の欠如)
        * No reflection  (リフレクションの欠如)
        * Very complicated type system  (複雑極まりない型システム)
        * Very complicated type-based binding rules   (型に基づくとても複雑な束縛ルール)
        * Defective operator overloading (不完全な演算子オーバーローディング)
        * Defective exceptions  (不完全な例外)
        * Duplicate facilities  (重複している機能)
        * No high-level built-in types  (高水準な組み込み型の欠如)
        * Manual memory management  (自動化されていないメモリ管理)
        * Defective metaprogramming facilities  (メタプログラミング機能の欠如)
        * Unhelpful standard library (不親切な標準ライブラリ)
        * Defective inlining  (インライン化の不足)
        * Implicitly called & generated functions (関数の暗黙の呼び出しや生成)
    
    * No compile time encapsulation (コンパイル時の encapsulation がない)
    

    ■_ xyzzy

    これは期待だ

    xyzzy Part16
    617 名無し~3.EXE [sage] 2010/02/04(木) 04:30:42 ID:hQevBJcj Be:
        ttp://tomiya.bne.jp/cgi-bin/upup/src/myg_l2984.png.html
        ようやくコンパイル通った。
        GCでxfreeが呼ばれると死ぬけど。先は長い。 
    
    618 名無し~3.EXE [sage] 2010/02/05(金) 00:38:09 ID:ndDpNGsh Be:
        おっー!
        すごいな。独自でユニコード対応したんだ。
    
    619 名無し~3.EXE [sage] 2010/02/05(金) 01:01:16 ID:KZSTCdJb Be:
        >>617
        ウムラウト入ってるときは
        ダイアログ出して置換出来きなくて困ってたので超期待! 
    

    ここでいってる Unicode対応ってのはUnicode(UTF-8やらUTF-16やら)のテキスト 編集が。と言う話ではなくて、ファイル名にSJIS 超えた範囲の文字を使った ファイルを扱うと言う話。

    ■_ 本日の巡回から

    2010年02月03日

    ■_

    ・ダルビッシュ
    昨日(月曜夕方発行)の東スポに載ってたんですが、ファイターズのダルビッシュ投手が 今シーズンは年間防御率 0点台を目指すとか何とか。 やったらやったでもうどうしようもないような気が。年俸とか。

    ・GA
    あ、なんたらエンジェルのほうでなく(笑) ゲームは予約したほうがいいのかなあ。あまり数が出ないような気がしないでもないし。

    ・書評
    す す ま ね ー

    書店員の情報交換スレ43 [
    292 マロン名無しさん [sage] 2010/02/03(水) 23:03:38 ID:??? Be:
        純潔のマリアの限定ってでかいぞ。
        覚悟しておけ。 
    
    293 マロン名無しさん [sage] 2010/02/03(水) 23:24:31 ID:??? Be:
        もやしの6巻と同じくらいみたいだな
        あんなの置く場所無いぞw 
    
    294 マロン名無しさん [sage] 2010/02/04(木) 00:02:33 ID:??? Be:
        オリゼーのぬいぐるみのときに懲りた
        客注分しか入れてない 
    

    いよいよか(笑) 結局予約しなかったなあ。今もあまり買う気はなかったりするんだけど (あの手のものは結構好きなんだけどね)。

    ■_ コメント欄は燃えているか

    炎上ではないんですが。

    OpenMPの実行時ライブラリと並列ループ(1/4):CodeZine
    
    なんにせよ
    > 間違ったプログラムから出された、間違った結果です。
    これには同意。なのでその後に続く考察も怪しいものです。
    なにしろパフォーマンス・メータが地面を這ってますからね、
    CPUに負荷かかってません。
    「高い処理効率を確認できます」って、なんも処理してないってば。
    
    
    しかし、理論値に対して、結果がかけ離れていますね。
    訂正や追記がないので、筆者はこの結果を疑問に思わないようですねぇ・・・
    
    下のコメントにもあるように、Sleepを負荷に見立ててる時点で実験結果の意味は薄いのですが・・・
    それ以前に、処理時間が変化しない・・・想定している動作と異なるプログラムだったことになりますね。
    間違ったプログラムから出された、間違った結果です。
    少なくとも、このプログラムから「パフォーマンスが向上」していると判断することはできません。
    
    
    > 結果として、CodeZineさんに迷惑をかけることになっています。
    
    「一事が万事:CodeZineの記事は総じてアテにならない」
    と評されるなら他のCodeZineライターにも不本意だし迷惑です。
    
    
    過去の記事も読ませて貰いましたが、明白な誤りを指摘されているにも関わらず、本文を訂正さ
    れていませんね。
    
    ご自分のブログならば、嘘があっても愛嬌ですが、準公の「CodeZine」で誤った記事を掲載し、
    放置するのはライターとして如何なものでしょうか。
    
    結果として、CodeZineさんに迷惑をかけることになっています。
    
    CodeZineさんにも疑問があります。記事の質は検討されないのでしょうか。情報発信メディアと
    しての風評にも影響しそうです。
    

    CodeZine はあれか。すぽすっぽ先生の「C++入門書」事件でも当事者だっけか。

    ■_ デベハトップ

    
    スレ立てるまでもない質問はここで@ム板 103匹目
    585 デフォルトの名無しさん [sage] 2010/02/02(火) 23:37:31 ID: Be:
        Visual C++ 2008 Express Editionです。
        Shift-JISのファイル名をUnicodeにmbstowcsで変換しようとすると、
        「スタートメニュー」が「ベタートメニュー」になったり、
        「デスクトップ」が「デベバトップ」になったりしてしまいます。
        どうすれば正常に変換できますか? 
    
    586 デフォルトの名無しさん [sage] 2010/02/02(火) 23:38:37 ID: Be:
        >>549
        MULをADDとSHLで置き換えたコードを書いたら最終的にMULに戻されたときには苦笑いだった。
        コンパイラ的にはソッチの方が速いって判断なのね・・・
    
        >>542>>543>>550>>553
        コードの出所の文化次第じゃねーのかそんなん?もしくは>>544の言うように、処理に合わせて連続するように臨機応変にするか。
        絶対的な正解はないと思うんだが。
    
        >>568
        バイナリ入手者がバイナリ提供者にソースを要求することができて、ソース譲渡は実費範囲のみで郵送、販売、ネット配布何でも良いってのが約束。
        wgetならwgetの公式提供元のリンク叩きつけるだけでいいよ。自分で配布なんてする必要は一切ない。
    
        >>576
        572へのおすすめだから一般的な話をしても意味ない気が…
        それにexe化ダルイだろJK 
    
    587 585 [sage] 2010/02/03(水) 00:47:20 ID: Be:
        setlocale(LC_ALL,"");
        となっていたのを、
        setlocale( LC_ALL, "Japanese_Japan.932" );
        にしましたが改善されませんでした。。
    
        デベバトップやベタートメニューで検索するとか意外性ソフトで同じような文字化けが起きるものがあるそうです。 
    
    588 デフォルトの名無しさん [sage] 2010/02/03(水) 01:39:49 ID: Be:
        >>587
        ユニコード変換とかロケール変換とか以前に、マルチバイト文字をマルチバイト文字として扱ってないのが問題。
        デスクトップはShift-JISで83 66、83 58、83 4E、83 67、83 62、83 76となるが、この各第二バイトを一文字だけで見るとf、X、N、g、b、vになっている。
        これを小文字へ変換するとf、x、n、g、b、vとなり当てはめると83 66、83 78、83 6E、83 67、83 62、83 76となり、これ即ち「デベハトップ」である。
        逆に大文字にすると83 46、83 58、83 4E、83 47、83 42、83 56、これ即ち「ェスクエィシ」である。
    
        どっかで小文字へ変換してるな貴様?
    
    
        ちゃんとマルチバイトを扱いたいなら、ロケールをセットした上でisleadbyteや_ismbblead(VS系専用)でマルチバイト文字の先行バイトであるかを判定して、先行バイトに続く文字では処理を行わないなどの例外を設けましょう。
        マルチバイト文字の第二バイトを単体で判定すると先行バイト判定される文字もあるので、先行バイトが来たらナニも言わず次の\0以外の文字を読み飛ばすとかの処理方法を使いましょう。
    
        海外製でよくひっかかるのは、海外製ソフトでマルチバイトを考慮せず大文字小文字変換をカマスから。
        同様に、マルチバイト文字の第二バイトで\が入るとパス区切り扱いされて泣くケースもある。
        与えられた文字列の最後の\を消すとかの処理でも、ちゃんとマルチバイトか判定しましょう。 
    
    589 デフォルトの名無しさん [sage] 2010/02/03(水) 01:59:58 ID: Be:
        ディレクトリ名の末尾に\が入るケース
        「c:\hoge\fuga\hage表」
        とかで死ねる
    
        海外製ソフトだと常に最上位bitを0にして7bitにしてしまうものもある 
    
    590 デフォルトの名無しさん [sage] 2010/02/03(水) 02:29:24 ID: Be:
        海外ネタだと、マルチバイト→Unicode変換を1バイトづつキャストするだけって素敵仕様の物もあるな。
    
        とある超有名ソフトウェアにこのバグが潜んでいるのを見つけたときは心底ビビったよ。
        その時からその会社のコードを信用していないんだが、案の定何度もセキュリティホールで騒ぎ起こしててなんともね… 
    
    591 デフォルトの名無しさん [sage] 2010/02/03(水) 09:20:11 ID: Be:
        マイクロソフトとかいう会社か? 
    
    592 デフォルトの名無しさん [sage] 2010/02/03(水) 09:30:44 ID: Be:
        VBを作成する際にGUIについて注意点とかまとめたサイトとかありませんか
        タブインデックスの設定などもっと知りたいです。よろしくお願いします。 
    
    593 デフォルトの名無しさん [sage] 2010/02/03(水) 10:58:50 ID: Be:
        VBを作るんですか?マイクロソフトにでも入らないと無理じゃない? 
    
    594 デフォルトの名無しさん [sage] 2010/02/03(水) 11:13:53 ID: Be:
        失礼しました
        「VBを作成する際に」→「VBでアプリケーションを作成する際に」
        です 
    
    595 デフォルトの名無しさん [sage] 2010/02/03(水) 11:50:51 ID: Be:
        どんなソフトのGUIかは分からんが、
        大衆が使いそうなら大衆が既に使っているエクセル辺りを参考にすれば良い
        パクリと言えばそうだが、無駄に使い勝手が変わるのはユーザーを無視しているとも言える
        ゲームならそれこそ有名ソフトをパクれば良い
        作っていくうちに色々コツがつかめて来るだろう 
    
    596 デフォルトの名無しさん [sage] 2010/02/03(水) 12:00:30 ID: Be:
        同じエクセルでもバージョン変えるときに使い方まで変えてしまうMSは馬鹿ですねわかります 
    
    597 デフォルトの名無しさん [sage] 2010/02/03(水) 12:04:14 ID: Be:
        >>588
        これは凄いエスパー。「デベハトップ」でピン!とくるの? 
    
    598 デフォルトの名無しさん [sage] 2010/02/03(水) 12:23:02 ID: Be:
        デベハトップでぐぐれば誰でも 
    
    599 デフォルトの名無しさん [sage] 2010/02/03(水) 12:27:34 ID: Be:
        >>597
        とりあえず「デベハトップ」をバイトコードにするのは常識
        それをASCIIで見るとどうなるかっていうのも
        2進エディタとかで見てるひとには常識だったりする 
    
    600 デフォルトの名無しさん [sage] 2010/02/03(水) 14:41:53 ID: Be:
        「バイトコード」とか妙な用語を俺定義して使わないように 
    
    601 デフォルトの名無しさん [sage] 2010/02/03(水) 14:51:21 ID: Be:
        バイトコードって中間言語の一種。
        16進ダンプとかとはまったく関係ない 
    
    602 デフォルトの名無しさん [sage] 2010/02/03(水) 14:57:08 ID: Be:
        2進エディタってテープに穴あけたりふさいだりするやつ? 
    
    603 デフォルトの名無しさん [sage] 2010/02/03(水) 15:00:04 ID: Be:
        それはキーパンチャーじゃね? 
    
    604 デフォルトの名無しさん [sage] 2010/02/03(水) 15:02:41 ID: Be:
        >>602
        それはスプライサ。
    
    605 デフォルトの名無しさん [sage] 2010/02/03(水) 17:35:46 ID: Be:
        >>600-601
        すまん
        うっかり手が滑った 
    
    606 デフォルトの名無しさん [sage] 2010/02/03(水) 18:50:24 ID: Be:
        >>591
        Adobeだ。
        極限定的な環境でUnicode変換用APIを呼ばずにそれをやらかすようになってた。
        そもそも変換が必要になった理由からして終わってた。 
    
    607 デフォルトの名無しさん [sage] 2010/02/03(水) 18:53:17 ID: Be:
        確かに、バイナリ(2進)エディタと言うけど、実際のところ16進(ヘキサデシマル)エディタだよな。 
    
    608 デフォルトの名無しさん [sage] 2010/02/03(水) 18:57:40 ID: Be:
        16進はバイナリでいいだろ 
    
    
    

    なるほど結構あるな>デベハトップ デベハトップ - Google 検索

    シェルスクリプト総合 その15
    839 名無しさん@お腹いっぱい。 [] 2010/01/26(火) 12:21:42 ID: Be:
        ●やりたいこと
        カレントディレクトリ以下の全ファイル(レギュラーファイル,かなり大量,何百万単位)を
        検索し,ファイル名,ファイルサイズ,MD5ハッシュ値を出力したい。
        1ファイルにつき1行。
    
        ※効率よくやりたいのでファイルの数ごとにstatやmd5プロセスを起動する,という
        ことは避けたい。
    
        ●やったこと
        ファイルサイズだけ,とかMD5だけなら下記の方法で満足な早さで出力が得られます。
        環境はMac OS Xです。
        find . -type f | xargs stat -f '%N,%z' > outputfile.txt
        find . -type f | xargs md5 $1 | sed -E 's/^MD5 \((.*)\) = (.*)/\1,\2/' > outputfile.txt
    
        上の二つを合わせたようなことをしたいのですが,うまい方法を教えて下さい。
    
    840 名無しさん@お腹いっぱい。 [] 2010/01/26(火) 12:24:01 ID: Be:
        補足
        各行が
        ファイル名,ファイルサイズ,MD5ハッシュ値
        という出力にしたいです。
    
    841 名無しさん@お腹いっぱい。 [] 2010/01/26(火) 12:27:06 ID: Be:
        コピペミスです。>>839の2つ目のfindは正しくは
        find . -type f | xargs md5 | sed -E 's/^MD5 \((.*)\) = (.*)/\1,\2/' > outputfile.txt
        でした。 
    
    842 名無しさん@お腹いっぱい。 [sage] 2010/01/26(火) 12:49:51 ID: Be:
        perlかpythonかrubyで書きなよ。 
    
    843 名無しさん@お腹いっぱい。 [sage] 2010/01/26(火) 12:52:31 ID: Be:
        ●解答
        joinすればいいだけ。
    
        ●補足
        箇条書での質問は失礼 
    
    844 名無しさん@お腹いっぱい。 [sage] 2010/01/26(火) 13:01:19 ID: Be:
        ●傍観者の感想
        ワロタ 
    
    888 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 11:54:30 ID: Be:
        >>839
        > find . -type f | xargs stat -f '%N,%z' > outputfile.txt
        > find . -type f | xargs md5 $1 | sed -E 's/^MD5 \((.*)\) = (.*)/\1,\2/' > outputfile.txt
    
        findは -print0でxrgsに渡し、xargsは -0で受け取るようにしましょう。
    
        > find . -type f -print0 | xargs -0 stat -f '%N,%z' > outputfile.txt
        > find . -type f | xargs -0 md5 | sed -E 's/^MD5 \((.*)\) = (.*)/\1,\2/' > outputfile.txt
    
        http://www.otsune.com/diary/2007/03/29/1.html 
    
    889 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 17:51:27 ID: Be:
        こんなのfind + perl のワンライナーでいいじゃん
        > find . -type f -print | perl -l0ne 'use Digest::MD5 qw(md5_hex);$s=-s $_;print $_ ." $s " . md5_hex($_) ."\n"' 
    
    890 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 18:10:27 ID: Be:
        >>889
        アフォか、ファイル名の md5 計算してどうする www 
    
    891 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 18:13:23 ID: Be:
        >>888
        日記だからある意味しょうがないのだが。そういう古臭いページなんとかならないもんかね。 
    
    892 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 18:22:57 ID: Be:
        >>890
        おー、いまperldocしたら 
        calculate the MD5 digest of this "message"
        ってかいてあったwwはずかしいwwwしぬかも 
    
    893 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 19:05:07 ID: Be:
        >>891
        どこがどう古臭いんだ? 
    
    894 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 19:22:17 ID: Be:
        今書くなら「xargs捨てろ。 -exec {} +使え」 
    
    895 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 19:22:36 ID: Be:
        >>894
        一緒じゃないの? 
    
    896 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 20:27:35 ID: Be:
        -exec だと正しく受け取れないファイルがある。
        -print0 |xargs -0のほうが安全 
    
    897 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 21:09:21 ID: Be:
        へー知らんかった 
    
    898 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 21:11:42 ID: Be:
        >>896
        原理的に有り得ないんだけど。 
    
    899 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 21:13:42 ID: Be:
        どっちだよ気になるだろ 
    
    900 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 21:37:46 ID: Be:
        -exec の + ターミネータ(;でなく)を知らないで答えていたりしてな。
    
    901 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 21:52:49 ID: Be:
        それにしても「正しく受け取れない」は原理的にない。 
    
    902 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 22:08:06 ID: Be:
        いや、あるから -0 オプションが後から追加されたんですが。 
    
    903 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 22:08:48 ID: Be:
        って、xargs じゃなくて find の方か。ならないや。ごめん。
    
    904 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 22:17:25 ID: Be:
        結局>>896は本当なのかどうなのか答えてくれ
        つまり実際に-exec +だと受けとれないファイルがあるのか
        それとも単に-exec ;と-exec +を混同してただけなのか
    
        それと>>894の-exec +のほうが良いという根拠は何だ?
        -print0 | xargs -0じゃいかんのか?
    
        このままじゃ気になって寝れやしない 
    
    905 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 22:42:34 ID: Be:
        >>904
        > それと>>894の-exec +のほうが良いという根拠は何だ?
        exec +がある環境ならxargsはレガシーコマンド。webで解説する必要は無い。
    
        そもそも、exec +が無い環境がレガシー。 xargsはジジイの胸の奥にしまっておいてくれ。 
    
    906 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 22:49:15 ID: Be:
        GNU findutilsにxargs付いてくるじゃない 
    
    907 名無しさん@お腹いっぱい。 [sage] 2010/01/28(木) 22:51:58 ID: Be:
        ジジイの懐古趣味 
    
    908 名無しさん@お腹いっぱい。 [sage] 2010/01/29(金) 01:55:18 ID: Be:
        xargs がいつobsolete になったの?
        なんか文書ある? 
    
    909 名無しさん@お腹いっぱい。 [sage] 2010/01/29(金) 12:12:24 ID: Be:
        -exec + のデメリット
        コマンドに渡すファイルの数を制御できない(xargs -n)
        並列実行できない(xargs -P)
    
        -exec + のメリット
        find でひっかかったファイルが存在しなければコマンドが実行されない
        (GNU xargs は入力がゼロでもなぜか1回は実行する; xargs -r で抑制可)
    
        つーか、
        ps ax | awk '/なんか条件/{print $1}' | xargs -r kill
        みたいに find とは無関係に使う場合も多いから、obsolete のはずがない。
    
    910 名無しさん@お腹いっぱい。 [sage] 2010/01/29(金) 16:58:01 ID: Be:
        findの-execはひとつひとつ実行するから遅いだろ。
        grep /dev/null というバッドノウハウもアレだけど。(-h使えって?) 
    
    911 名無しさん@お腹いっぱい。 [sage] 2010/01/29(金) 17:01:35 ID: Be:
        >>910
        find -exec + の 「+」の意味を理解していない方は発言を御遠慮ください 
    
    912 名無しさん@お腹いっぱい。 [sage] 2010/01/30(土) 09:34:03 ID: Be:
        >>910
        レガシーちゃんキター 
    
    915 名無しさん@お腹いっぱい。 [sage] 2010/01/30(土) 20:34:25 ID: Be:
        > -exec utility [argument ...] {} +
        > Same as -exec, except that ``{}'' is replaced with as many path-
        > names as possible for each invocation of utility. This behaviour
        > is similar to that of xargs(1).
    
        うおっ。-execに+なんて何時からあったんだ。 
    
    916 名無しさん@お腹いっぱい。 [sage] 2010/01/30(土) 20:41:41 ID: Be:
        ttp://www.gnu.org/software/findutils/manual/html_mono/find.html#Multiple-Files
    
        GNU findutils 4.2ぐらいからか 
    
    917 名無しさん@お腹いっぱい。 [sage] 2010/01/30(土) 21:09:21 ID: Be:
        -exec {} + テンプレに入ってるじゃねえかww 
    
    918 名無しさん@お腹いっぱい。 [sage] 2010/01/30(土) 22:00:29 ID: Be:
        ほんとだ。テンプレにあるな。
        >findは -exec command {} + を推奨。
        >他に -print0、xargsは -0オプションという方法もあるがSolaris非対応)
    
        まるで -exec + ならば solaris でも使えるように書いてあるが、
        実際は使えなかったような記憶が…
    
    919 名無しさん@お腹いっぱい。 [sage] 2010/01/31(日) 02:34:28 ID: Be:
        >>913
        つ http://wikis.sun.com/display/OpenSolaris/ZFSTimeSlider 
    
    920 名無しさん@お腹いっぱい。 [sage] 2010/01/31(日) 20:50:42 ID: Be:
        >>918
        http://docs.sun.com/app/docs/doc/819-1210/find-1?a=view 
    
    921 名無しさん@お腹いっぱい。 [sage] 2010/01/31(日) 21:09:07 ID: Be:
        >>920
        そのマニュアル、肝心なところを誤訳してるね。
        日本語訳マニュアルは信用してはいけない。 
    
    922 名無しさん@お腹いっぱい。 [sage] 2010/01/31(日) 21:19:36 ID: Be:
        sunでもあるんだな。日本誤訳マニュアル 
    
    

    んーいいなあ、日本語訳マニュアル。響きが。 -exec {} + は知らなかった。

    ■_ 例外が起きるか否か

    
    Gauche のハッシュテーブル Ruby のハッシュテーブル - siroccoの日記
    (略)
    
    Gauche のハッシュテーブルは Key が存在しなかった場合は例外を発生させます。
    
    gosh> (hash-table-get (hash-table 'equal? '(a . 1) '("b" . 2)) "c")
    *** ERROR: #<hash-table equal? 0x89ff348> doesn't have an entry for key "c"
    Stack Trace:
    
    Ruby は Key が存在しなくても例外は発生せず、nil を返します。
    
    irb(main):003:0> {1=>"a","1"=>"b"}[123]
    => nil
    
    Ruby は Key が存在しなくても例外は発生せず、nil を返します。Python は「まつもとゆきひ
    ろ コードの世界」には例外を発生させるとあったような。
    

    Python だと例外が出ますね。

    Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> d = {"foo": 1, "bar": 2}
    >>> d
    {'foo': 1, 'bar': 2}
    >>> d['foo']
    1
    >>> d['mogera']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'mogera'
    >>>
    

    このパターンで例外を起こさない言語は、多分 awk からの伝統引っ張ってるんだろうなあ とか。あ、あと言語仕様的に例外が入ってないパターンもあるかな。 例外が起きるほうがありがたいときもあるけど、 適当に無視してくれると楽できることもあると。

    ■_ そこでそれを出すか

    from OKWave

    
    計算の便利なプログラム言語 | OKWave
    
    計算の便利なプログラム言語
    エクセルだと1000桁の計算を表示させる事ができません
    そこでプログラムでエクセルみたいに計算させれば
    計算できるかもしれないと思ったのですが
    これはこれで無理なんですかね。。
    たとえば 7000C0から7000C7000までを(C=コンビネーション)
    自動で計算させるのに最適な方法はなんなのでしょうか。
    エクセルだと7000C200辺りで#NUM!で計算できなく
    なってしまいます。
    今やろうとしていることは、計算の桁も1000桁以上になり、
    計算回数は1億くらいになってしまいます
    これを行うために、計算に強いプログラム言語はあるのでしょうか。
    
    
    ANo.3
    
    整数だけの計算なら Pythonの長整数型(2.Xまで)/整数型(3.0から)
    rubyの整数はメモリが許す限り無限の桁をとります。
    
    > たとえば 7000C0から7000C7000までを(C=コンビネーション)
    > 自動で計算させるのに最適な方法はなんなのでしょうか。
    
    これだけの話しなら
    ・nCr=nC(n-r)を利用すれば求める数は半分
    ・nCr * (n-r)/(r+1) = nC(r+1)
    以上を利用すればnCnからnC0まで求めるのに必要な計算量はn/2回のかけ算とn/2回の割り算です。
    
    
    ANo.1
    
    akina_line
    
    こんにちは。
    
     数値計算に特化したプログラムとしては、マセマティカが有名だと思います。
      http://ja.wikipedia.org/wiki/Mathematica
      ただ、コンビネーションの計算が可能か、最大何桁まで可能かは知りません。
    

    Mathematica は(値段的に)ないわー。

    ■_ 本日の巡回から

    2010年02月02日

    ■_

    積読山の高さに絶望する日々。

    ■_ いやまあ

    粘着質だとは思うんですけどね(苦笑)。 C#(.NET)の decimal の続き。

    Decimal Structure
    
    Remarks
    
    The Decimal value type represents decimal numbers ranging from positive 
    79,228,162,514,264,337,593,543,950,335 to negative 
    79,228,162,514,264,337,593,543,950,335. The Decimal value type is appropriate for 
    financial calculations requiring large numbers of significant integral and fractional 
    digits and no round-off errors.
    
    A decimal number is a signed, fixed-point value consisting of an integral part and an 
    optional fractional part. The integral and fractional parts consist of a series of 
    digits that range from zero to nine (0 to 9), separated by a decimal point symbol.
    
    The binary representation of an instance of Decimal consists of a 1-bit sign, a 96-bit 
    integer number, and a scaling factor used to divide the 96-bit integer and specify 
    what portion of it is a decimal fraction. The scaling factor is implicitly the number 
    10, raised to an exponent ranging from 0 to 28.
    
    http://msdn.microsoft.com/en-us/library/system.decimal(VS.71).aspx
      
    Decimal Structure (System)
    
    A decimal number is a floating-point value that consists of a sign, a numeric value 
    where each digit in the value ranges from 0 to 9, and a scaling factor that indicates 
    the position of a floating decimal point that separates the integral and fractional 
    parts of the numeric value.
    
    The binary representation of a Decimal value consists of a 1-bit sign, a 96-bit 
    integer number, and a scaling factor used to divide the 96-bit integer and specify 
    what portion of it is a decimal fraction. The scaling factor is implicitly the number 
    10, raised to an exponent ranging from 0 to 28. Therefore, the binary representation 
    of a Decimal value is of the form, ((-2^96 to 2^96) / 10(0 to 28)), where -2^96-1 is 
    equal to MinValue, and 2^96-1 is equal to MaxValue.
    
    http://msdn.microsoft.com/en-us/library/system.decimal.aspx
      

    前者のほうに A decimal number is a signed, fixed-point value consisting of an integral part and an optional fractional part. とはありますが、 後者では A decimal number is a floating-point value that consists of a sign, a numeric value だし。 いずれにしても 96bit の整数部(仮数部)があって、scale factor を収めるところと 符号が別にあると。全体が128bitなんで、128 - 96 の32bitをどう使っているのか わかりませんが(符合は1ビットあればOK。scale foctor も±28あればいいし)、 まあそれはおいといて。

    ECMA-334: 11.1.7 The decimal type at C# Online.NET (CSharp-Online.NET)
    http://en.csharp-online.net/ECMA-334:_11.1.7_The_decimal_type
    
    ECMA-334: 11.1.7 The decimal type
    
    11.1.7 The decimal type
    
    The decimal type is a 128-bit data type suitable for financial and monetary 
    calculations. The decimal type can represent values including those in the range 1 × 
    10^-28 through 1 × 10^28 with at least 28 significant digits.
    
    The finite set of values of type decimal are of the form (-1)s × c × 10-e, where the 
    sign s is 0 or 1, the coefficient c is given by 0 ≦ c < Cmax, and the scale e is 
    such that Emin ≦ e ≦ Emax, where Cmax is at least 1 × 1028, Emin ≦ 0, and Emax ≧ 
    28. The decimal type does not necessarily support signed zeros, infinities, or NaN's.
    
    A decimal is represented as an integer scaled by a power of ten. For decimals with an 
    absolute value less than 1.0m, the value is exact to at least the 28th decimal place.
    For decimals with an absolute value greater than or equal to 1.0m, the value is exact 
    to at least 28 digits. Contrary to the float and double data types, decimal fractional 
    numbers such as 0.1 can be represented exactly in the decimal representation. In the 
    float and double representations, such numbers often have non-terminating binary 
    expansions, making those representations more prone to round-off errors.
    
    The result of an operation on values of type decimal is that which would result from 
    calculating an exact result (preserving scale, as defined for each operator) and then 
    rounding to fit the representation. Results are rounded to the nearest representable 
    value, and, when a result is equally close to two representable values, to the value 
    that has an even number in the least significant digit position (this is known as “
    banker’s rounding”). That is, results are exact to at least the 28th decimal place. 
    Note that rounding may produce a zero value from a non-zero value.
    
    If a decimal arithmetic operation produces a result whose magnitude is too large for 
    the decimal format, a System.OverflowException is thrown.
    
    The decimal type has greater precision but may have a smaller range than the 
    floating-point types. Thus, conversions from the floating-point types to decimal might 
    produce overflow exceptions, and conversions from decimal to the floating-point types 
    might cause loss of precision or overflow exceptions. For these reasons, no implicit 
    conversions exist between the floating-point types and decimal, and without explicit 
    casts, a compile-time error occurs when floating-point and decimal operands are 
    directly mixed in the same expression. 
    
    

    この辺の説明を読む限り、「固定小数点」てことはないと思うんですけどねえ。 仮に「固定小数点」だとすると、scale factorが0のときにも小数部分が存在しているとか していないといけないような気がするし、結局のところやっていることは ケチ表現とかがないだけで通常のよくある浮動小数点数(IEEE754とか)と変わってない んじゃないでしょうか。 「小数点を固定して」というのが具体的にどういうことをいいたかったのか わからん…

    んで、scale factor の基数 (base) が10であることから、たとえば 十進の 0.1 は 1 × 10^-1 となる。ここで 0.1 を二進数に変換するようなことをしないので float や double のような誤差がでないと。

    ■_ SQL Love?

    コンパイラ・スクリプトエンジン」相談室14 
    352 デフォルトの名無しさん [sage] 2010/01/31(日) 22:09:25 ID: Be:
        関数型言語をラムダ算法を元に解説するのはもう古いの?
        真っ先に出てくると思ったのに。 
    
    353 デフォルトの名無しさん [sage] 2010/02/01(月) 03:45:35 ID: Be:
        理論背景って研究者にしか意味無いからな… 
    
    354 デフォルトの名無しさん [sage] 2010/02/01(月) 13:01:04 ID: Be:
        でもそういう基礎理論があれば関数型は動作を類推できるじゃないか
        コンパイラの設計法にも関わる事だと思うけどな
        そういうのを知らないとRubyみたいに仕様が破綻することになる 
    
    355 デフォルトの名無しさん [sage] 2010/02/01(月) 13:06:45 ID: Be:
        >>352
        破壊的リスト操作をラムダ算法で解説できるんですかあなたは? 
    
    356 デフォルトの名無しさん [sage] 2010/02/02(火) 11:59:29 ID: Be:
        >>352
        C#はラムダ式があるから関数型言語だ、ということにしたくないんだろうな。
        無名関数はPerlにもある。
        もう「値を返すサブルーチン」と同じくらい当たり前になってしまった。 
    
    357 デフォルトの名無しさん [sage] 2010/02/02(火) 12:17:13 ID: Be:
        ラムダがありゃ関数型言語、という新説が登場しますた 
    
    358 デフォルトの名無しさん [sage] 2010/02/02(火) 13:26:55 ID: Be:
        文法のlambdaとラムダ計算は別物だよね 
    
    359 デフォルトの名無しさん [sage] 2010/02/02(火) 13:42:28 ID: Be:
        >>358
        それはlambdaのない言語が言い訳するときのセリフ 
    
    360 デフォルトの名無しさん [sage] 2010/02/02(火) 17:10:19 ID: Be:
        大事なのはクロージャ 
    
    361 デフォルトの名無しさん [sage] 2010/02/02(火) 22:19:21 ID: Be:
        Objective-Cの勝利。 
    
    362 デフォルトの名無しさん [sage] 2010/02/02(火) 23:29:26 ID: Be:
        >>352
        ほとんどの言語はチューリング完全
        チューリング完全ということはチューリングマシンと同じ計算能力を持つ
        チューリングマシンとラムダ計算は等価
        よってほとんどの言語は関数型である
        なんてことになって不都合とか 
    
    363 デフォルトの名無しさん [sage] 2010/02/02(火) 23:31:47 ID: Be:
        SQLいいよSQL 
    

    ん。363 はもしかして @bleis とかいう人では。

    ■_ How To Write Unmaintainable Code

    How To Write Unmaintainable Code の命名編最後。 でもまだまだあるの。

          Hungarian Notation (ハンガリアン記法)
          Hungarian Notation is the tactical nuclear weapon of source code obfuscation
          techniques; use it! Due to the sheer volume of source code contaminated by this idiom 
          nothing can kill a maintenance engineer faster than a well planned Hungarian Notation 
          attack. The following tips will help you corrupt the original intent of Hungarian 
          Notation:
    
          ハンガリアン記法はソースコード難読化のテクニックのための戦術核兵器 (tactical nuclear 
          weapon) です。使いましょう! このイディオムに汚染された (contaminated) ソースコードの 
          sheer volume (正味のボリューム?) は良く計画された Hugarian Notation 攻撃よりも速くメ
          ンテナンスエンジニアを kill できるものではありません。以下に挙げる tips は 元々の 
          Hungarian Notation の意図を腐らせるのを手助けします:
    
                Insist on using "c" for const in C++ and other languages that 
                directly enforce the const-ness of a variable.
    
                C++ や変数の const-ness を直接強制するその他の言語で const を表すための "c" 
                を使うことに執着しましょう
    
                Seek out and use Hungarian warts that have meaning in languages other than 
                your current language. For example insist on the PowerBuilder "l_" and 
                "a_ " {local and argument} scoping prefixes and always use the VB-esque 
                style of having a Hungarian wart for every control type when coding to C++. Try to 
                stay ignorant of the fact that megs of plainly visible MFC source code does not use 
                Hungarian warts for control types.
    
                あなたが現在使っている言語 (your current language) 以外の言語で意味を持つ
                Hungarian warts を捜し出して使いましょう。たとえば PowerBuilder の "l_" や
                "a_ " という {local や argument} のスコーピング prefix に執着したり、
                C++ でコーディングする際にすべてのコントロールの型に対して VB-escque 形式の
                Hungarian wart を常に使うといったことです。megs of plainly visible な MFCの
                ソースコードがコントロールの型に対しては Hungarian warts を使っていないという
                事実は知らないふりをし続けるように努力しましょう。
    
                Always violate the Hungarian principle that the most commonly used variables
                should carry the least extra information around with them. Achieve this end 
                through the techniques outlined above and by insisting that each class type
                have a custom wart prefix. Never allow anyone to remind you that no wart tells
                you that something is a class. The importance of this rule cannot be overstated
                if you fail to adhere to its principles the source code may become flooded with
                shorter variable names that have a higher vowel/consonant ratio. In the worst
                case scenario this can lead to a full collapse of obfuscation and the spontaneous
                reappearance of English Notation in code!
    
                最も良く使われる変数は自身に関係する最低限の extra information だけを carry 
                すべきであるという Hugarian principle を 常に violate しましょう。
                through the techniques outlined above や各々のクラスの型が custom wart prefix
                を持つことにこだわることで achieve this end しましょう。決して誰にも何かがクラ
                スだということを示す wart がないということをあなたに remind させてはいけません。
                この規則の重要なのは、ソースコードが higher vowel/consonant ratio な短い変数名
                で溢れかえってあなたが原則 (principles) を adhere するのに失敗したときに
                overstate できないということです。
                In the worst case scenario this can lead to a full collapse of obfuscation and
                the spontaneous reappearance of English Notation in code!
    
    # spontaneous 自発的に、進んで自ら、
    # reappearace 再出現
    
    
                Flagrantly violate the Hungarian-esque concept that function parameters 
                and other high visibility symbols must be given meaningful names, but that
                Hungarian type warts all by themselves make excellent temporary variable
                names.
    
                関数パラメータやその他の high visibility なシンボルは意味のある名前を与えられな
                ければならないという Hungarian-esque concept を Flagrantly に破りますが、
                Hungarian type warts all by themselves は一時変数の名前を excellent なものにします。
    
                Insist on carrying outright orthogonal information in your Hungarian warts. 
                Consider this real world example "a_crszkvc30LastNameCol". It took a team of 
                maintenance engineers nearly 3 days to figure out that this whopper variable name 
                described a const, reference, function argument that was holding information from a 
                database column of type Varchar[30] named "LastName" which was part of the 
                table's primary key. When properly combined with the principle that "all 
                variables should be public" this technique has the power to render thousands of 
                lines of source code obsolete instantly!
    
                あなたの Hungarian warts で orthoogonal information を carrying outright する
                ことに固執してください。実際にあった例から "a_crszkvc30LastNameCol" と
                いうのを挙げてみます。この whopper な変数名がその変数について、定数で、リファレ
                ンスで、“LastName” という名前がついていて型が Varchar[30] の、テーブルの 
                primary key の一部であったデータベースのカラムについての情報を保持している関数の
                引数であるということを describe しているのを突きとめるのにメンテナンスエンジニアの
                チームが三日近く拘束されました。“すべての変数は public にすべきである”という原則
                と適切に組み合わせたときにこのテクニックは何千行ものソースコードを即座に render してし
                まう力を持っているのです!
    
                Use to your advantage the principle that the human brain can only hold 7 pieces of
                information concurrently. For example code written to the above standard has the
                following properties:
    
                人間の頭脳はたった 7 pieces の情報しか concurently には保持できないという principle 
                をあなたの advantage として使いましょう。たとえば上記の標準で書かれたコードは以下の
                ような属性を持っています:
    
                    o a single assignment statement carries 14 pieces of type and name information.
    
                      単一代入文 (single assingment statement) は 14 pieces の型や名前の情報を
                      carries している
    
                    o a single function call that passes three parameters and assigns a result
                      carries 29 pieces of type and name information.
    
                      三つの引数を渡してその結果を代入する関数呼び出しは、型や名前の情報を
                      29 pieces carries している
    
                    o Seek to improve this excellent, but far too concise, standard. Impress
                      management and coworkers by recommending a 5 letter day of the week prefix
                      to help isolate code written on 'Monam' and 'FriPM'.
    
    
                    o It is easy to overwhelm the short term memory with even a moderately complex
                      nesting structure, especially when the maintenance programmer can't see the 
                      start and end of each block on screen simultaneously.
    
                      moderately な複雑にネストした構造体によってさえ 短期記憶 (short term memory) を
                      overwhelm (圧倒する) してしまうことは簡単です。特にメンテナンスプログラマーが
                      各ブロックの開始部と終端部をスクリーンで一度に見ることができない場合には。
    
    
          Hungarian Notation Revisited (ハンガリアン記法再び)
          One followon trick in the Hungarian notation is "change the type of a variable but
          leave the variable name unchanged". This is almost invariably done in windows apps
          with the migration from Win16 :- WndProc(HWND hW, WORD wMsg, WORD wParam, LONG lParam) to
          Win32 WndProc(HWND hW, UINT wMsg, WPARAM wParam, LPARAM lParam) where the w values hint
          that they are words, but they really refer to longs. The real value of this approach
          comes clear with the Win64 migration, when the parameters will be 64 bits wide, but the
          old "w" and "l" prefixes will remain forever.
    
          ハンガリアン記法における followon trick の一つが "change the type of a variable but
          leave the variable name unchanged" (変数の型を変更するけれども名前はそのままにしてお
          く) というものです。この手法は Win16 の
    
               WndProc(HWND hW, WORD wMsg, WORD wParam, LONG lParam)
    
          から Win32 の
    
               WndProc(HWND hW, UINT wMsg, WPARAM wParam, LPARAM lParam)
    
          へ移行する際の Windows 用アプリケーションでほとんど例外なく使われました。w というのはその
          値がワード (16bit長) であることを示唆していますが実際にはロング (32bit長)なのです。Win64
          へ移行するときにこのアプローチで実際の値がどうなるかは明らかですが、パラメーターが 64ビッ
          ト長になるときがやってきても古いプリフィックスの "w" や "l" は永遠に残り
          つづけるでしょう。
    
          Reduce, Reuse, Recycle
          If you have to define a structure to hold data for callbacks, always call the 
          structure PRIVDATA. Every module can define it's own PRIVDATA. In VC++, this has the 
          advantage of confusing the debugger so that if you have a PRIVDATA variable and try to 
          expand it in the watch window, it doesn't know which PRIVDATA you mean, so it just 
          picks one.
    
          もしコールバックのためのデータを保持する構造体を定義する必要があるのなら、常に PRIVDATA
          構造体を呼び出します。すべてのモジュールはそれ専用の PRIVDATAを定義できます。VC++ では
          これはデバッガーを混乱させるというアドバンテージがあります。そのため PRIVDATA 変数をあ
          なたが使っていればそれをウオッチウィンドウで展開することを試みるでしょうが、
          it doesn't know which PRIVDATA you mean, so it just picks one.
    
          Obscure film references
          Use constant names like LancelotsFavouriteColour instead of blue and assign it hex
          value of $0204FB. The color looks identical to pure blue on the screen, and a 
          maintenance programmer would have to work out 0204FB (or use some graphic tool) to 
          know what it looks like. Only someone intimately familiar with Monty Python and the 
          Holy Grail would know that Lancelot's favorite color was blue. If a maintenance 
          programmer can't quote entire Monty Python movies from memory, he or she has no 
          business being a programmer. 
    
          定数名として blue のようなものではなく LancelotsFavouriteColour のようなものを使い、
          さらにそれに十六進値の $0204FB を代入します。その色はスクリーン上では pure blue と
          同じように見えますから、メンテナンスプログラマーは0404FB がどういった色なのかを(な
          んらかのグラフィックツールを使うとかして)確かめなければなりません。Monty Python and
          the Holy Grail に intimately に慣れ親しんでいる人物だけが Lancelot の好きな色
          (favorite color) が blue であったことを知っています。もしメンテナンスプログラマーが
          自分自身の記憶から Monty Python の映画を完全に quote することができないのなら
          he or she has no business being a programmer。
      

    ■_ 本日の巡回から

    2010年02月01日

    ■_

    ・タイコンデロガ
    アメリカ海軍の割と古い部類の空母には、 独立戦争とか南北戦争に関連した名前がつけられていることが多いのですが (サラトガ、ヨークタウン、レキシントンなどなど)、 これもそうだったとは知らなかった(苦笑) あ、昔は確かに(エセックス級の)空母の名前でしたが、 今はイージス巡洋艦に使われてます>タイコンデロガ

    ・宮城谷昌光
    読売新聞朝刊の新聞小説で新連載が始まったのですが、 登場人物に劉秀とか見えたから後漢成立頃のお話なんですかねえ。 いや楽しみだ。

    ■_ いつもの

    …とはちょっと違うか。

    [bug #14472] grep is slow in multibyte locales
    Subject: 	[bug #14472] grep is slow in multibyte locales
    Date: 	Fri, 29 Jan 2010 17:41:44 +0000
    
    Follow-up Comment #7, bug #14472 (project grep):
    
    When running in a multibyte locale dfaexec calls mbrtowc much too often. Note
    how the calls sum up to more then two thirds of the total run time. The input
    was a ~4000 line file.
    
    
    

    基本的にはいつものように、マルチバイト文字を使う locale だと grep の速度がとんでもなく遅くなるんじゃあという話ですが、 dfaexec という関数で mbrtowc を呼びすぎじゃないのかということを指摘していますね。 まあ基本的には、文字数分だけはやらないといけないんですが 必要以上に呼び出しているきらいはありますね。確かに。

    ■_

    黒ニャー本やら買いに行ったときに見かけて気にはなっているんですが 値段もいいのでちょっと思い切りが。 モジュール化の終焉 - 新刊・近刊:selfup

    モジュール化の終焉 - 新刊・近刊:selfup
    
    モジュール化(modularity)という概念はカーリス・Y・ボールドウィン氏とキム・B・クラーク
    氏が2000年に唱えて以降,IT産業を分析するうえで有効なツールとして有名になった。現在のパ
    ソコンやインターネット上のサービスなど,IT産業の製品やサービスはたいてい,小さな単位で
    ある「モジュール」の組み合わせで成り立っていると考えられる。
    
     しかし,米グーグルや米アップルなど,モジュール化との流れとは逆行しているようにも見え
    る事例が増えている。本書は,こうした現象を「統合化」と呼ぶ。そして,モジュール化の時代
    は終わり,統合化の時代が到来したとの仮説を立て,その検証を試みている。
    
    (略)
    
    

    誰か読んだ人いらっしゃいませんでしょうか。 会長とか。

    ■_ reference とは

    stackoverflow から。海の向こうでも同じような話題で盛り上がるんですねえ。

    
    Origin of term "reference" as in "pass-by-reference" - Stack Overflow
    
    Java/C# language lawyers like to say that their language passes references by value. 
    This would mean that a "reference" is an object-pointer which is copied when 
    calling a function.
    
    Java や C# の言語弁護士 (language lawyers) は好んでそれらの言語が「参照を値によって渡し
    ている (passes references by value) 」という言い方をします。ここでいう「参照」("reference")
    とは関数を呼び出すときにコピーされるオブジェクトポインター (object-poiter) のことです。
    
    
    Meanwhile, in C++ (and also in a more dynamic form in Perl and PHP) a reference is an 
    alias to some other name (or run-time value in the dynamic case).
    
    その一方で、C++ (や、Perl や PHP でのさらに動的な form)では参照とは何かに対する別名
    (もしくは dynamic case における実行時の値)です。
    
    I'm interested in the etymology here. What were early uses of the term "reference"?
    Lets go for pre-Java, but if you know of pre-C++ uses, that would also interest me.
    
    # etymology 語源学
    
    (I'm aware that vocabulary changes, etc, but I'm just interested in the history).
    
    
    There is an early usage of the term "call by reference" in the paper 
    "Semantic Models of Parameter Passing" by Richard E Fairley, March 1973.
    
    1973年3月の Richard E Fairley による論文に
    "call by reference" の初期の使用が認められます。
    
     
    In the early days, the terminology was inconsistent. For example, the Fortran 66 
    specification uses the phrases "association by name" and "association 
    by value". We would now call these "call by reference" and "call 
    by value". By contrast, Algol 60 specification (1962) used the terms "call 
    by name" and "call by value".
    
    early days には terminology は一貫したものではありませんでした。
    たとえば Fortran 66 の specification では "association by name"
    や "association by value" というフレーズを使っていました。
    現在ではわたしたちはこれらを
    "call by reference" や "call by value".
    と呼んでいます。
    これとは対照的に、1962年の Algol 60 specification では
    "call by name" と "call by value"
    という用語を使っていました。
    
    EDIT: To those who want to label the pioneers who specified Fortran 66 as confused for 
    using the phrase "association by name", consider this:
    
       1. The Fortran 66 was the first attempt to specify a language with (what we now call)
          call by reference.
    
          Fortran 66 は最初に(わたしたちが現在そう呼んでいるところの) 参照による呼出し
          (call by reference。参照渡し) を言語として規定しようとしたものです。
    
    
       2. It was only the second attempt to specify a language with subroutines that supported
          parameter passing.
    
          パラメーター渡し (parameter passing) をサポートするサブルーチンを持つ言語を規定することは
          second attempt にすぎませんでした。
    
    
       3. Fortran 66's "association by name" can be viewed as a restricted 
          (degenerate) form of Algol 60's "call by name". The restriction being that 
          in Fortran, the name had to be a simple variable or array name, where in Algol 60 it 
          could be any expression.
    
          Fortran 66の "association by name" は制限された (もしくは degenerate された)
          Algol 60 の  "call by name" (名前による呼び出し) であると見なすことができます。
          Fortran において制限されていたのは、Algol 60 においては任意の式を許していたのに対して、
          (Fotran では) 単純変数や配列の名前でなければならなかったという点です。
    
       4. It was not clear at the time (1966) that Algol 60's "call by name" was 
          destined to be abandoned as a bad idea. Indeed, when I studied Algol 60 as an 
          undergraduate in 1977, I don't recall the lecturer presenting "call by name" 
          as a bad idea. (It was presented as difficult to understand ... but that's a different 
          thing.)
    
    Algol 60の "call by name" が悪いアイデアであったとして
    destined to be abandoned となることは 1966 年というその時点では明確ではありませんでした。
    Indeed,
    when I studied Algol 60 as an undergraduate in 1977,
    19977年に undergraduate として わたしが Algol 60 を学んだときに
    
    I don't recall the lecturer presenting "call by name" as a bad idea.
    (It was presented as difficult to understand ... but that's a different thing.)
    
    
    
    I think the term you should use for historical searches is "call-by-reference" and not
    "pass-by-reference." For example, Wikipedia redirects "Pass-by-reference" to
    "Evaluation Strategy", which lists call-by-reference.
    
    あなたが historical searches のために使うべき用語は"pass-by-reference." ではなくて
    "call-by-reference"だと思います。たとえば Wikipedia は "Pass-by-reference"を
    call-by-reference をリストに含めている "Evaluation Strategy" へリダイレクトしています。
    
    Using "call-by-reference" as a search term in Google Books finds a snippet from "The Main
    Features of CPL" from The Computer Journal, August 1963; 6: 134 - 143 (British Computer
    Society)
    
    Google Books で検索語として "call-by-reference" を使うと
    British Computer Society による The Computer Journal, August 1963; 6: 134 - 143 の
    "The Main Features of CPL" に sinppet を見つけられます。
    
        Three modes of parameter call are possible; call by value (which is equivalent to the
        ALGOL call by value), call by substitution (equivalent to ALGOL call by name), and 
        call by reference. In the latter case, the LH value of the actual parameter is handed 
        over; this corresponds to the "call by simple name" suggested by Strachey 
        and Wilkes (1961). Note the correspondence to the three kinds of initialization...
    
        (ALGOL の call by value と等価な) call by value、(ALGOL の call by name と同じ) call by
        substitution、そして call by reference の三種類の parameter call が利用可能です。
        後者の case での実パラメータの LH value は is handed over;
        これは Strachey and Wilkes (1961) によって suggested されている "call by simple name"
        に対応します。
        Note the correspondence to the three kinds of initialization...
    
    
    This latter "call by name" is likely the same terminology as was used in the 
    Algol 60 specification, which Stephen C earlier pointed out in this thread.
    
    後の方にある "call by name"
    は Algol 60 の specification で使われたものと同一の terminology で、
    このスレッドの最初の方で Stephen C が指摘したものです。
    
    (I think "Strachey and Wilkes" is from CACM 1961 but I don't have access to 
    any source text to verify.)
    
    (わたしは "Strachey and Wilkes" は 1961年の CACM からだと思うのですが
    それを裏付けるためのソースにアクセスする手段をもっていません)
    
    The use of the term 'reference' was and is inconsistent.
    
    “参照”という用語の使われ方に一貫性がありませんでしたし、今もありません。
    
        * In some instances, it is a tangible entity, like the Simula/Delphi/Java/C# object
          references. You can compare them (with null and with each other) and pass them 
          as parameters (by value or by reference).
    
          In some instances,
          Simula/Delphi/Java/C# のオブジェクトリファレンス (object references.)
          のような目に見える実体 (tangible entity) です。あなたはそれらを(null や
          ほかのオブジェクトに対して)比較することもできるし、(by value もしくは
          by reference で)パラメータとして渡すことも可能です。
    
        * Most languages support reference as a mode of parameter passing, in a totally 
          opaque way.
    
          大部分の言語ではパラメータの渡し方のモードとして参照をサポートしています
          in a totally opaque way.
    
        * C++ is the only language (that I know off) that extends this opaque model and 
          lets you have reference fields and variables (int& r = i;).
    
          C++ はこの opaque モデルを拡張して
          lets you have reference fields and variables (int& r = i;)
          させる (わたしの知る限り) 唯一の言語です
    
    For one thing, this means that C++ references are very different from C# references.
    
    For one thing,
    C++ の参照と C# の参照とは非常に異なったものであることを意味しています。
    
    I think we are missing some jargon here to distinguish between these two different 
    forms of 'reference'.
    
    わたしはこれら二つの形式の “参照”(reference) を区別するための
    なんらかの jargon を失ってしまっているのではないかと思います。
    
    Also see SO: History of public/private/protected.
    
    
    Note that, in the '60s (yeah, into the '70s), "reference" meant using the 
    name of something. This agrees with the usage of the older philosophical and 
    linguistic terms "referent" and "reference". From Fortran 77:
    
    1960年代 (yeah, into the '70s) においては"reference" は何かの名前を使うという意味
    であったということに注意してください。これは古い philosophical な使い方や
    linguistic terms の "referent" と "reference"
    の使い方と合致します。
    Fortran 77 から:
    
        2.12 Reference
    
        A variable, array element, or substring reference is the appearance of a variable, 
        array element, or substring name, respectively, in a statement in a context requiring 
        the value of that entity to be used during the execution of the executable program. 
        When a reference to an entity is executed, its current value is available. In this 
        standard, the act of defining an entity is not considered a reference to that entity.
    
    変数の参照、配列要素の参照、部分文字列の参照といったものは
    それぞれの対応するものの名前として変数として appearance します
    in a statement in a context requiring the value of that entity
    value  of that entity の値を要求するコンテキストにある文の
    
    to be used during the execution of the executable program. 
    
    ある entity に対する参照が実行されたときには、その current value が利用可能です。
    この標準では、the act of defining an entity はそういった entity に対する参照を考慮しません。
    
        A procedure reference is the appearance of a procedure name in a statement in a context
        that requires the actions specified by the procedure to be executed during the execution
        of the executable program. When a procedure reference is executed, the procedure must
        be available.
    
    A procedure reference
    is the appearance of a procedure name
    ある手続きの参照は手続きの名前として  appearance します
    in a statement in a context 
    that requires the actions specified
    指定されたアクションを要求するコンテキストにある文
    
    by the procedure to be executed during the execution of the executable program.
    
    ある手続きの参照が実行されたとき、
    その手続きは avaiable でなければなりません。
    
    

    ■_ なんか変?

    私の勘違いと言うことはないと思うんですが… もし「おめーがまちがってんだよボケ」ということでしたらごめんなさい。

    
    第 4 回 型について知ろう | 連載! とことん C#
    
    (略)
    
    3. 1 セントはどこに消えた?
    
    以下のプログラムは、一千兆ドルを持っている大金持ちの口座に、1 セントを入金した例です。
    ところが、1 セントを入金したのに、その 1 セントは消えてしまいました。なぜでしょう? あ
    まりに少額なので無視されたのでしょうか?
    
    using System;
    
    class Program
    {
        static void Main(string[] args)
        {
            double account = 100000000000000;
            account += 0.01;
            Console.WriteLine("{0}", account);
        }
    }
    
    実行結果:
    
    100000000000000
    
    実は、double 型は計算結果が狂う可能性があり、プログラマの中にはできれば避けたいと考え
    ている方も多いでしょう。float 型も表現できるビット数が少ないだけで同様です。では、なぜ 
    double/float 型は計算結果が狂いやすいのでしょうか?
    
    その理由は 2 つあります。
    
        * 小数点を左右に移動させて巨大数や極小数も扱えるため、実際の桁数より大きな数値、小
          さな数値も扱えてしまう
        * 内部は 2 進数だが出力は 10 進数なので、見た目は割り切れても実際は割り切れない数
          が出てしまう
    
    先ほどの「消えた 1 セント」の結果は、主に 1 つ目の理由によります。確かに、double 型は
    一千兆という巨大数を扱えますが、それは小数点を移動して得られた数字であり、全ての桁数を
    表現できるわけではありません。それゆえに、大きい方の桁が優先されて小さい桁は消失します。
    つまり、1 セントは表現できずに消失します。これが、「浮動小数点演算」と呼ばれる方法です。
    
    (略)
    
    4. 小数点を固定せよ
    
    1 セントが消えてしまう問題を解消する最も簡単な方法は、double 型ではなく decimal 型を使
    うことです。
    
    using System;
    
    class Program
    {
        static void Main(string[] args)
        {
            decimal account = 100000000000000;
            account += 0.01m;
            Console.WriteLine("{0}", account);
        }
    }
    
    実行結果:
    
    100000000000000.01
    
    このように、1 セントが消えてしまうことがありません。このような結果が出る理由は以下の通
    りです。
    
        * 小数点を固定して左右に動かさない
        * 有効な桁数が多い
        * 内部で 2 進数に変換する表現が違う (表現できる桁数内なら誤差はほとんど出ない)
    
    そのため、特に小数の絡むお金の計算は doube/float を避け、整数計算に持ち込むか、decimal 
    型で計算する場合がよくあります。
    
    

    これなんですけど、double で 0.1 足しても結果に反映されないと言うのは 有効桁数をはみ出てしまう (1e15 と 1e-2 を桁ぞろえしたときに正しく表現できない) からというのは納得なんですけど、 decimal では「小数点が固定されているから」というのはわかりません。 たとえばIBMのメインフレームにあったような四倍精度浮動小数点数とかなら 小数点固定でなくても問題ないような気がします。

    
    decimal (C#)
    C# 言語リファレンス
    decimal (C# リファレンス)
    
    decimal キーワードは、128 ビットのデータ型を示します。decimal 型は、浮動小数点型よりも
    有効桁数が多く、範囲が狭いので、財務や金融の計算に適しています。decimal 型の概算の範囲
    と有効桁数は、次のとおりです。
    
    型 	   おおよその範囲 	有効桁数 
    
    decimal  ±1.0 × 10−28 to ±7.9 × 1028 有効桁数 28 ~ 29
    
    

    具体的なフォーマットはわかりませんけど、有効桁数が28から29桁となっていることが ポイントなのであって、小数点が固定かどうかは関係ないんじゃないでしょうか (にしても「有効桁数が多く、範囲が狭いので、財務や金融の計算に適しています」 って文章がなんか変な感じが。範囲が狭いけれども有効桁数が多いので~じゃないのかなあ)。 あと、decimal って名前から類推して、基数が2ではない可能性がありますよね。 「内部で2進数に変換する表現が違う」というのも何を云わんとしているのか にんともかんとも。

    ■_ 本日の巡回から


    一つ前へ 2010年1月(下旬)
    一つ後へ 2010年2月(上旬)

    ホームへ


    Copyright (C) 2010 KIMURA Koichi (木村浩一)
    この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

    メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp