CodeProjectとかPlanetSourceCodeとかでは沢山のソースを
公開されてますが、これらのレベルってどうなんでしょう?
業務レベルには程遠いんでしょうか?
また、業務レベルのソースとはどういうソースなんでしょうか。
大変恐縮ではありますが、わたくし 「ろ」 キーが
>>2を頂戴いたしました。
┌───┐
>>1へ たまには押してください。
│_ ¦│
>>3へ 「¥」は「¥」キーではなく、わたくしを押してください。
│ │
>>4へ 「_」は「アンダースコア」といいます。名前を覚えておいてくださいね。
│\ ろ.│
>>5へ 「\」は「逆スラッシュ」で、「/」は左隣にあります。
└───┘
>>6へ 「ろ」は「呂」が変化したとされています。
>>7へ 特に何もありません。
>>8へ ここまで読んでくださってありがとうございます。
4 :
デフォルトの名無しさん:03/08/03 17:02
>>2 _
押してみた。使いやすいな、アンダースコア
>>2 \
ん?逆スラッシュじゃねーじゃん。なんつって。
6 :
デフォルトの名無しさん:03/08/03 17:18
炉
「あ」は「亜」だよ
10 :
GET!DVD:03/08/03 17:22
13 :
デフォルトの名無しさん:03/08/03 17:35
>業務レベルには程遠いんでしょうか?
遠いものが多い。近いのはユ~ザインタフェ~スの見栄えとか。
業務レベルのソ~スコ~ド:
条件1:バカでも読めるソ~スコ~ド。
頭のいい人にしか読めないソ~スは業務では必要ありません。
条件2:えら~処理が完璧。
あらゆる可能性を考慮。
まぁ、アメリカ人はだねぇ、
コンセプト・基本設計まではいいんだが実装が最悪ね。バグばっかり。
そもそも、バグは出て当たり前って奴ら考えてるからね。
Windowsを見れば分かるでしょ。バグ多くて、重たくって。
14 :
デフォルトの名無しさん:03/08/03 17:38
16 :
デフォルトの名無しさん:03/08/03 17:42
Linuxのコードを参考にしれ
Linuxのコードはきれいとは思えない
Apacheは綺麗だよん♪(^-^*)
20 :
デフォルトの名無しさん:03/08/03 18:02
あ~、漏れも興味あるかも。
実際、職業プログラマの人からネット上のいろんなソースを見て、
この辺はやっぱ違うなぁ、とか、へぼいなぁ、とかって思う部分ってどんな部分なんスか?
誰かなんか語ってくれ~
う~ん、業務プログラマでもネットでソース公開してる人でも、
うまい人はうまい。下手な人は下手。
神のごとくうまい人もいれば、目も当てられない人もいる。
業務もネットもはっきりいうとレベルは変わらない。
漏れがうまいと思った人はネットでしか見かけなかったが。
なんだ、業務のレベルってたいしたことないんだな。
ネット上のソースコードの方が凄いのか。
>>25 少なくともお前が日本語が下手ということは分かった。
カゴメソースを参照してくれ
仕事でやってるやつと、趣味でやってるやつも大して変わらんよな
実際、酷いソース見たことあるし
雑誌とかで勉強している人のほうがいいコード書く場合が多い
でも、趣味でやってるやつは局所的に詳しいけどその他全般に関する知識乏しい
その辺がプロとアマの違い
むしろ業務用の方が周りを見ない分レベルは低い。
フリーのソースっていうと C と C++ と Java でほとんど全てなワケだが、
この中でバカでも出来るのは Java だけなわけで、仕事がある割合も
Java がほとんどなわけで、君たちは本当に C や C++ の業務のコードを見たことあるのか?
あと
>>13 > アメリカ人はだねぇ、(禿しく中略)バグは出て当たり前って奴ら考えてるからね。
バグは出て当たり前です。出ないように努力するのも当たり前だけど。
後は出たバグを叩くのみです。
>>32 まぁ、GNUだけ見ればそうなんでしょうね。
BSDもそんな感じでしょ
(⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
37 :
デフォルトの名無しさん:03/08/17 00:51
>バグは出て当たり前です。出ないように努力するのも当たり前だけど。
>後は出たバグを叩くのみです。
テスト仕様書と報告書まで出てるヤツは少ないからなぁ...
うまく動作する事をルーチンパスにプログラムするのと、うまく動かない事をルーチンパスにするのじゃやっぱクオリティに出てくるね。コストも変わるけど。
MSのテスト技法に「すべての行にブレイクポイントを設定して、通ったところはポイントを解除して、ポイントが0になるまでデバッグする」ってのがあるけど、さすがに真似できない。コスト的にね。
38 :
デフォルトの名無しさん:03/08/17 02:33
むしろ、設計書やテスト仕様書のフォーマットが知りたい。
PMもSEもいつもこのへんでぐちゃぐちゃしてる。
39 :
デフォルトの名無しさん:03/08/17 04:53
多人数でごちゃごちゃいじったソースは駄目。
一人よがりのソースはピンからキリまで。
あぼーん
んなもん出来上がったソフトの差を見りゃ歴然
業務のほうが30くらいレベル低い
はいはい。極少数のフリーソフトとそこらへんにある業務のソフトを比べてもしょうがありませんよ。
ピンキリ
44 :
デフォルトの名無しさん:03/08/17 08:58
>>37 違う状態で通るような場合はどうするの?
またブレークポイント置くの?
例えば、おまえらが普段使ってるコンパイラ。
フリーで実用に耐えられるのはgccぐらいだろう。
46 :
デフォルトの名無しさん:03/08/17 09:11
47 :
デフォルトの名無しさん:03/08/17 09:21
>>45 gccは実用に耐えられる代物ではありません^^;
じゃ、Linuxは実用に耐えられないOSだな(w
昔、あるメーカのコンパイラが変なので文句言ったら
「全ての面でgccのほうが上です」
と答えられたという話があったな。
某王国だな。
王は余計だった
業務用は仕様書から作るから見易い。
ただし、試運転で疲れてくると、ソースだけを直して
仕様書を直さない事がままあるので、始末が悪い。
フリー:自分が欲しいもの
業務用:他人が欲しいもの
好きこそ物の上手なれ、な面は多分にある。
フリー:自分が使えれば十分なもの
業務用:他人が使えなきゃ十分じゃないもの
フリーだとドキュメントが貧弱だったり、
ユーザインタフェースがしょぼかったり、
バグがあっても自分にとって問題が無かったら
放置されたりする。
GNUツールやBSDはソースを弄れるひとが使うもので、
なんも分ってないのが使っても大したメリットを得られるわけではない。
57 :
デフォルトの名無しさん:03/08/17 13:52
>違う状態で通るような場合はどうするの?
それは問題ない。状態は関係なくその場所を通った事に意味がある。
>設計書やテスト仕様書のフォーマットが知りたい。
知らない香具師が多いが、IEEEに仕様書のテンプレートすばりその物があるよ。
すんげぇ参考になる。
書籍でこの手の仕様書の作り方系を探っても、汎用機時代からの遺産なのであまり参考にならない場合が多い。
追加
>違う状態で通るような場合はどうするの?
それは問題ない。状態は関係なくその場所を通った事に意味がある。
アプリに対して、すべてのコードが実行されるパターンを用意してテストするって事。
>>54 確かにそうだが、ソースのクオリティに関しては
好きこそ物の上手なれ、な面は多分にあると思う
仕事のソースは、実現できればよい思考なのであまり、
ソースのレベルが高いとはいえない
>>57 >知らない香具師が多いが、IEEEに仕様書のテンプレートすばりその物があるよ。
>すんげぇ参考になる。
>書籍でこの手の仕様書の作り方系を探っても、汎用機時代からの遺産なのであまり参考にならない場合が多い。
それってタダじゃないんですよね。ちょっと探ったんですがStoreのとこにしかないような・・・
>>60 根気よく探せば、どこかに落ちてるよ。ちなみに全部英語だけどね。
外部仕様書ならIEEE1362、内部仕様書ならIEEE830、検査仕様書は忘れた。
古いヤツと新しいヤツが有るので注意。
>>59 たしかにそうかもしれないが、
プログラムってのはソースがすべてじゃない。
趣味でプログラム(特にソースのクオリティが高いとされるもの)を
作っている奴はソースにしか眼中に無いので
使い勝手が悪かったりヘルプが貧弱だったする。
>>62 たしかに、言ってることは正しい
ただ、スレ違いだということが言いたいだけ
>使い勝手やヘルプ
世の中にはそういうキーワードの存在しない世界もある。
たとえばFAでは、客がフローチャート付きの仕様書を書いてきて、
しかもソースが読めたりする。
インターフェイスはDCS。ただし、マスターテーブル多数。
楽といえば楽。苦しいといえば苦しい。
実にスレ違いでした。
とりあえずネット上で良いコードを見ることは希なわけだが。
あれで業務用と大して変わらないのか…。
一番酷かったところのソースコードを自分なりに書き直してみたことがあるが、
なんか500行から120行くらいまで圧縮できたぞ。
よくそんなコードを晒せたなと褒めてやりたかった。
まぁエラートラップにはC++の例外処理使ったからその分も結構あるだろうけど。
68 :
デフォルトの名無しさん:03/09/30 17:30
>>67 自分のしか残ってないな~。
PNG作るライブラリあるだろ?
あのオープンソースのやつ。
オレ英語読めねえから、関数解説してるサイト探してたら、
例のソースが出てきた。
一応探してみるわ。
69 :
デフォルトの名無しさん:03/09/30 18:02
libpng?違うか…。
参考になりそうなので、おらも期待
if( pointer != NULL )をif( pointer )にしたとか、そういう話じゃないよね?
>>69 いやlibpng。
>>67 素で参考にならんよ。
下記のことを行うことができる人はあれは、誰でも同程度のコードに出来ると思われ。
1,同じような処理を一纏めにする知恵があり、それを実行する努力ができる。
2,switch文を乱用しない。
3,エラー処理はC++の例外処理を使う。
4,ZeroMemroy等、標準で用意されているマクロ、関数をちゃんと使う。
5,DIBを猫○ロのようなアフォな扱い方をしない。
6,256色DIBに関しては、ヒープメモリに読み込んだカラーテーブルを、
わざわざ配列にコピーするという荒行をしない。
というか、こんなことも出来ない香具師が果たしてこの板にいるか?
で、それはほかに持っていってもそのままコンパイルが通るシロモノなのかい?
趣味グラマだが。
好きこそ物の・・・なので初版のソースはやたらきれいなんだが
一通り書き終わったコードには興味がないので
再版を重ねるごとに激しく読みにくくなってく。
73 :
デフォルトの名無しさん:03/09/30 22:01
Linux界隈ではプログラム実行時の引数の解析に
getopt とかいうライブラリ?がよく使われるんだけど,
あれってどうなの?(;´Д`)使いやすい?
漏れが馴れてないだけなのかな。。。
業務用ってーと、会社で会計に使ってるのとか顧客管理に使ってるのとか。
UIは悪くないけど、あれって仕事で使うものだから
ユーザーが覚えようとしてくれるのがでかいんじゃないのかねぇ。
GNUのソフトとかは業務で使ったことがないからわからないけど
そこまで差があるようには思えないけどなぁ。
>>70 ZeroMemory って標準か?
っつか、C/C++ の標準ライブラリに ZeroMemory なんてないよね。
>>71 Win32API使ってるから無理ですな。
さらにデフォルトでRGBをリトルエンディアン用に変換するから無理。
一番はオレに移植生を考えたコードが書けないから無理。
Window以外の環境なんてMS-DOSくらいしか知らん(´Д`)
話は変わるが、Cの移植生が高いっていうのは嘘らしい。
「移植生が保障できるように意識してプログラムを組まないと移植生はない」 by宮坂○人
だとさ。アセンブラで組んでた時代に移植生が高いと有名になった名残だそうだ。
ちなみに、趣味でやってる素人のオレは移植生なんて考えたことがない。
どうせWindows用以外のプログラム書かんし書けんし。
UnicodeとNULL、NUL、\0、0の違いに気を付けてることくらい。
>>78 標準ライブラリを使ってる限り、移植性はほぼ100%だよ。
機種依存機能を使えば移植性がなくなるのは、どの言語でも同じ。
79 :
デフォルトの名無しさん:03/09/30 22:32
連続投稿スマソ。
>>75-76 ZeroMemoryはdefineディレクティブですぞ。
↓こんな感じ
memset((Destination),0,(Length))
要はmemsetだからCRTに含まれると思うのだが、
マクロ化すると除外されるのかな?
>>78 いや、ポインタ演算とかも意識して書かないとだめじゃないかな。
CodeProjectの場合はあくまでサンプルでしょ。
その記事のテーマになってる部分しかフォローしてない。
82 :
デフォルトの名無しさん:03/09/30 22:46
union{
int a;
struct{
char b[4];
}
};
これで bを参照すると、エンディアンの関係で失敗するよ。
83 :
デフォルトの名無しさん:03/09/30 22:46
union{
int a;
char b[4];
};
すまん、structいらん。
なにやってるんだろうなぁ俺。疲れているな。
機種依存機能にはCPUアーキテクチャも入る(ということにしてくれ)。
>>79 memsetは標準だが、
ZeroMemoryという定義の書かれた非標準のヘッダファイルなどを
必要とするということは標準とは言えない。
ZeroMemoryがmemsetしか使っていないマクロであるかどうかってのは
実装の詳細であって、利用者からは関係ないし。
そもそも
> 4,ZeroMemroy等、標準で用意されているマクロ、関数をちゃんと使う。
ZeroMemoryなんて置き換える必要のないモノを置き換えるな。無駄だ。
そんなものを挙げる時点で低脳が窺い知れる。
>>81 スマン、CodeProjectって素なんだか知らない。
アマなんでゆるしとくれ。
ちなみに、オレが頭悪いこと自他共に認めてるぞw。
んで、どうせだから宮坂○人氏の供述を簡単に書いとく。
「OSのAPIやCPUに依存する記述を除いても移植生が保障されるわけではない。
同じマシンで同じOSを使っても、コンパイラを変更するだけで動かなくなるソースも存在する」
移植生の壁となるものに、には、int型やポインタのサイズ、メモリ保護や資源保護の有無、
アーキテクスチャの違い、式の評価順序、エンディアン、アラインメントなどを上げている。
>>86 memset 使えっつーのは同意だが、元が自前で for ループ回したり、構造体の各要素を
ちまちま 0 に設定しているのだとしたら、ZeroMemory() 使うだけでも「元よりマシ」だとは
思うぞ。
っつか移植性なんて、移植性が必要なところでのみ考慮すればいいと思うんだが。
画像表示や GUI での入出力が絡むと、それを完全に移植性を保った形で書くのは
かなり手間が掛かる。
プログラムの構造として MVC の分離はするにせよ、Model 内部で画像を保持する
部分の型なんかは、汎用にすると効率悪すぎだし。(全部 char[] 配列とかにすれば
汎用的だが、Win32 ならメモリハンドルとかにした方が幸せなわけで)
シフトや除算も処理系依存
型変換(主にダウンするキャスト)モナー
規格自体のそういうトコが非常になげやりにできてるので
移植性100%のソースを書くのはなかなか難しい
実際問題、実用的なプログラムはOSにも強く依存してるわけで・・・。
91 :
デフォルトの名無しさん:03/09/30 23:32
>>84 そういやwindows.hは標準でもなんでもないなw。
正確にはwinbaceだけど。
とりあえずもっともな意見。
>>85 >ZeroMemoryなんて置き換える必要のないモノを置き換えるな。無駄だ。
構造体やクラスを0で埋めるの楽だよ?
windosプログラム組んでると、デフォルト動作を行わせるために
0で埋めとかんといけない場合が多いから。
行数減らせるし、コンストラクタで使うと便利な上に、
オレはmensetを0以外で使用したことがないw。
オレには必要な物だけど、まぁ人好きずきだからね…
>>88 >構造体の各要素をちまちま 0 に設定しているのだとしたら
ご名答。あれじゃ無駄に行数が…
しかしまぁ、自分の発言でよう墓穴掘るなオレはw。
92 :
デフォルトの名無しさん:03/09/30 23:34
>んで、どうせだから宮坂○人氏の供述を簡単に書いとく。
げげ、、、宮坂○人氏って、printfデバッグの記事をかくのが好きな人ですか?
ローテクも大事とかじゃなくて、ローテクしか書けないんじゃっていつも思う。
>>93 うん、それw。
今月のCマガでも似たようなこと言ってたw
std::fill
bzero
>>88 > っつか移植性なんて、移植性が必要なところでのみ考慮すればいいと思うんだが。
> 画像表示や GUI での入出力が絡むと、それを完全に移植性を保った形で書くのは
> かなり手間が掛かる。
libpngは「画像表示や GUI での入出力」とは関係ない。
あくまでもPNG形式の画像データを扱うためのライブラリ。
>>1 PlanetSourceCodeはたまに世話になってますが、これっていわゆる「フリー」とは
違うでしょ?ソフトウェアで「フリー」といえばGNUをさすと思うんだが、、
それはそれとして、PlanetSourceCodeなんかのクォリティーはそれほど高くないが、現場で
実際に書かれているコードはもっとひどいと思う。
>>91 >>ZeroMemoryなんて置き換える必要のないモノを置き換えるな。無駄だ。
>構造体やクラスを0で埋めるの楽だよ?
>>88も言ってるが「memset使え」。
第2引数に0しか入れなかろうと文字数もタイピングのしやすさもmemsetの方が使いやすい。
その上こんなマクロは知らない人間も多い。
どう考えてもZeroMemoryを選ぶ理由がねぇ。コーディング規約で求められてでもしない限りはな。
>>100 >どう考えてもZeroMemoryを選ぶ理由がねぇ。
なにをしたいのか目的が明確になるってのが理由。
コモンコントロールを扱うときに
用意されてるマクロを使う人とSendMessageを使う人がいるようなもん。
バカみたいに文字数が多くなるけど何にどんなことをさせたいのかが一目でわかる。
長くなるからSendMessageが良いって人もいるのが当然。
だから好みの問題。まぁこんなん宗教論争だから納得せんでいいですよ。
ただ人に持論を押しつけるのはどうかと…。
そんなわけでオレはこの議論から降ります。
これじゃ単なる板汚しだからね。
板違いの元凶って元はオレの発言ですね…
住人の皆様すいませんでした。
元の話題に戻して下さい。
名無しで「オレ」と言われても誰が誰やら。
>>66 が元凶で、
>>68-70-77-79-87-91-92-94-103
という過程を経て、現在は
>>104な低脳。
バカは大変だな、匿名であることをすぐ忘れる。
まぁどうでもいいが俺はZeroMemoryは一生使わないだろうな。
libpngって linux のライブラリかなんか?
つーか、linux のソースってひどいよな
考え方は参考になるが、ソースは参考にならん
漏れが今まで綺麗だなと思ったのは藤原博文氏のソースだな。
あれは参考になる。漏れの師匠。
あと昔、GDS2kとかいうGUIのGCCの開発環境作った人もうまかったな。
たしかあるむさんて人。
ページが閉鎖されて今はソース見れないけど
他は今の所いない。
>>ZeroMemoryなんて置き換える必要のないモノを置き換えるな。無駄だ。
>構造体やクラスを0で埋めるの楽だよ?
構造体はともかくとして、クラスを0で埋めるのにmemsetって・・・。
>>110 libpngは基本的にどこでもコンパイル出来るような形で配布されてる。
俺はVC用のやつコンパイルしてWindowsで使ってるし
素朴な疑問なんですけど、memsetやZeroMemoryでクラスを
0で埋めたら、vtblが大変なことになりません?
115 :
デフォルトの名無しさん:03/10/03 00:16
>>114 漏れは今セキュリティ系の仕事が多いんだが、ゼロクリアが要求されるのがデフォルト。
当然クラスインスタンスも、new演算子やdelete演算子を独自定義して、ZeroMemoryしてる。
んでゼロクリアは、memsetは使わず、ZeroMemoryをもっぱら使ってる。
memset(&hoge, O, sizeof(hoge));
ZeroMemory(&hoge, sizeof(hoge));
の二者択一なら、引数が1個少ない分、後者を選ぶなあ。
まあ、宗教論争に立ち入る気はないけど。
>>115 なるほど、new/delete定義しなおせば問題無いですね。
てっきり、p=new A;ZeroMemory(p,sizeof(A));みたいなのやるだろ?
って言ってるのだと思ってました。
話題そらしてごめんね。
ZeroMemoryって結局はmemsetだったような。
>>113 そ、それおいらへのレスっすか?
>>115 漏れ的にはどっちも指定範囲のメモリを0埋めしてるだけだからどっち使ってもいいんだけど、
ZeroMemoryを使うことの欠点は、環境によって使えなくなることなんだよね。
環境がunixだったりすると使えないし、Windowsでもコンパイラがlccとかbccだったりとか
mingwだったりとかそんな理由で使えなくなるし。
mingwはZeroMemoryあったか確か・・・。
>>118 115でゼロとオーを打ち間違えているのに気づいてもらえるとうれしい。
よーするにケースバイケースなんだよね。
移植性考えたコード書くんならとーぜんmemset使うべきだけど、
そもそも移植性のあるコード書くつーのは相当の労力と注意力が必要なわけで、
そのつもりもないのに流儀を排除つーのも徒労に過ぎる。
ところでみんな、SecureZeroMemoryって知ってる? スレ違いか…
ZeroMemoryが知名度低いってのはありえん。
DirectXのヘルプで多様されてるし、検索をかければ
ほかのマクロに引けをとらんくらい使われてる。
>>86はgoogleっていうものの存在を知らんのか?
知名度が低いのはお前の頭の中だけだろ(藁
それ以前に、マクロは処理の明示化に使われるのは当然のこと。
そんな理由も思いつかない
>>86は
>>104より低脳。
発言から見ても単なる自己中な僻み厨房だろ
すまん、多様→多用
>>122 >>86が批判理由に
>その上こんなマクロは知らない人間も多い
とか言ってるが、何か?
>>120 厨房を相手にするな、また荒れる。
厨房にエサを与えない。
125 :
デフォルトの名無しさん:03/10/03 13:33
ZeroMemoryは使えない処理系がある。
memsetにはそれが無い。
だからmemsetを使うべし Q.E.D.
なんかWindowsでしか書けない痛いヒキコモリがいるみたいだなこのスレ
移植性を考えなくても標準関数でできることは標準関数でやるべきだと思う。
Linuxでもbzeroのマニュアルにmemsetを使用すべきだと書かれている。
128 :
デフォルトの名無しさん:03/10/03 14:42
Google
日本語のページからbzeroを検索しました。 約8,870件
日本語のページからZeroMemoryを検索しました。 約1,620件
おいみんな、bzeroはZeroMemoryより有名だぜ!
なに?Windowsでは使えねぇ?defineしろやクソボケ
構造体を0で埋めるのは機種依存
元の話題だけど、もともと機種依存にすると困るような公共性の高いものを
機種依存に書き換えて「こんなにソースが短くなりました」とやられても仕方ないので
PNGのソースはレベルが低いわけではなかったってことだな
>>129 参考までにどの機種だとmemset(s, 0, sizeof s)で駄目なのか教えてください。
memset(&s, 0, sizeof s)の間違い。
~ を
0 わ
シフト押しながら0を押しても~が、
入力されないのなんでなの?
>132
そんなもんIBMに聞けよ
つーか、libpngの文脈でZeroMemoryを持ち出すほうがどうかしてる。
まぁどっちも強引だな…
数人が意固地になってるだけだろうけど
誤解を招く表記があったことをお詫びします。
まとめると、libpngの使い方を説明したサイトのソースを自分なりに書き換えたということです。
低脳は英語が読めんのです。オレも例のソースもWindowsを対象としたものです。
>4,ZeroMemroy等、標準で用意されているマクロ、関数をちゃんと使う。
この発言に関しては、ZeroMemory(memset)だけを対象とした訳ではなく、
自分で処理を書かなくても用意されている関数(CRT,API等)を使う、ということです。
例に挙げたマクロも問題でしたね。記述は違っても同じことをやっている以上、
どちらが良いかという議論に発展することを予測すべきでした。
そんなわけで、オレが全て悪いと思って、
「調子づいた厨房が戯れ言ってるなぁ」と今までの発言は聞き流して下さい。
これ以上争われるとオレの心臓が持たない…
>>107さん、ドモです。
まぁ卑屈は謙虚という名の仮面を被せた日本人の心w。
問題を起こしたんですから、仕方ないかとw
長文失礼
>>134 まあ、
>>109も俺なわけだが。
汎用的に組むことと、ヘタクソとは全く別次元だと思う。
俺の参考にならんといったコードは具体的にはlinuxの su と passwd コマンド。
"/etc/shadow" などハードコーディングしてたり、マクロばっかりだったり、似たような記述ばっかりだったり、
ソースとしてはあまりうまいとはいえなかった。
>>140 小心者だなぁ、そんな卑屈になるなよ。一昔前の俺みたいだ(w
memsetをZeroMemoryに書き変えたり、機種依存コードを使用しただけで500行が120行になるまい。
単純に君のソースのまとめ方や実装方法がうまかっただけだろう。
そしてlibpngがうん(ry
>>138 140で説明してるからはっきりしたけど、66->70の流れでは
libpngを改造したとしか読めなかったがなぁ。
まーいいや。
>>142 事を荒立てといて言うのも何だけど、
関係ない人にまで議論させて場の雰囲気が悪くなったから、
オレ一人が引いて場が収まるならその方が良いと思った。
夢板では結構世話になっとるし、
フツーに生活したいだけだからね~オレは
>>145 つか、2ちゃんのしかもム板じゃ、いつもこんな雰囲気だろ
ここっていつも罵声の嵐だし、煽り愛の場なんだから
>>146 そうか?
んじゃ自分の発言が問題になったのが初めてだから
いつもとは違う雰囲気を感じただけかな?
主観と客観って全然違うな~
私は66さんの気持ちが痛いほどよく分かる屑人間(ノД`)
同志!!
150 :
デフォルトの名無しさん:03/10/07 20:36
構造体の初期化に
struct foo hoge = {0};
っていうのはC言語の規格として保証されているんだっけ?
スマンコ
せっかくだから、どういう点が保証されていないのかもうちっと詳しくおせーてくり。
逆に下手でもいいんだ、って勇気付けられた俺がいる!!
藻前ら、ありがとう!!!
>>152 ISO/IEC 9899:1999 の Initialization の項に、
assure あるいは guarantee といった単語は出てこない。
そこを調べりゃよかったのか。
構造体のinitializerが足りない場合は、
>the remainder of the aggregate shall be
>initialized implicitly the same as objects that have static storage duration.
ってことで、残りのメンバは0に初期化されるわけか。
memsetやZeroMemoryよりもやっぱこっちで十分だな。
>>115 > memset(&hoge, O, sizeof(hoge));
> ZeroMemory(&hoge, sizeof(hoge));
こんなコードを無意味にいれている C/C++ プログラムは、Javaよりも遅いです!
必要なところにだけ入れましょう! 念のためなんて入れていると極端に遅くなります(データの大きさが大きくなると)
そっか、Javaはnewするときにゼロクリアされてなかったのか
まぁポインタ扱う以上、ゼロクリアは無意味どころか、
ある意味最重要のような気がするがな。
てかバイトコードの変換を考えると、似たような処理をする場合
CがJAVAより遅くなるって難しくねぇか?(´Д`)
Cのおかしな仕様の殆どは実行効率を高めるための制約だし。
>>159 >>158に禿同な漏れも現実を知らんことになるな。
どのように現実を知らないか詳細希望。
フツーに興味がある。
初回起動時にバイトコードを
ネイティブコードに変換したモンを保存しておき、
次回から変換済みの方で実行する手法による
反論はいらん。んなことができん環境もあるからな。
>>156 > 念のためなんて入れていると極端に遅くなります(データの大きさが大きくなると)
その後その巨大な構造体のメンバを埋めていくのにはすさまじい時間がかかりそうだな。
ゼロクリアにかかる時間が誤差に見えてくるぜ。
>>161 ネイティブに変換したところでゼロクリアしてる事実が無くなるわけじゃないから問題ないだろ。
mallocの実装によっては、呼び出し時は単に仮想メモリページ群を予約しておくだけで、
実際にアクセスされたときになって初めて物理ページを割り当てるようなのがあるのかも。
漏れも(Winの)PAGE_GUARDの仕組み利用して、そういうの自前で作ったことある。
この場合、ゼロクリアすると、せっかくの親切設計が台無しになる。
まあ、そんな実装での話なぞ誰もしていないと思うが。w
>>163 それを利用して過去のアプリのデータの残骸を吸い出す攻撃があるので
最近はセキュア指向で、そういう場合もゼロクリアが基本。
>>164 へーそうなんだ、ググッてみます。サンクスコ。
>>119で話題振ったのに気づいてもらえなくて悲しかったんだが、w
セキュアな情報のクリアには、ZeroMemory()ではなくSecureZeroMemory()を使いましょう。
Use this function instead of ZeroMemory when you want to ensure that your
data will be overwritten promptly, as the compiler can optimize a call to
ZeroMemory by removing it entirely. A call to SecureZeroMemory will not be
optimized.
スレタイに沿ってオープンソースの世界を眺めてみると、例えばOpenSSLだと単に0で埋めるんではなく、
OPENSSL_cleanse()ちゅうのを用意して、中では結構複雑な処理してる。
This can be used to solve two issues: 1) the removal of calls to memset()
by highly optimizing compilers, and 2) cleansing with other values than 0,
since those can be read through on certain media, for example a swap space
on disk.
最近あまり見ないけど、0.0 のビットパターンがオール 0 じゃない
マシンってのもあるよね。
>>169 コレに書いてあることは?
安全策でつかいおわった後の領域を memset クリアしても、
コンパイラの最適化によって、memsetクリアのコードは無効になるってこと?
しかもクリアするようにするには、なんか最適化はずすようにしないといかんの?
めんどいね。まあ、そのコード書かないからどうでもいいけど
アプリケーション内部はプログラマ自身が守るとして、
GUIの入力ウィジェットとかは、パスワードタイブの入力の場合
きちんと作業バッファをゼロクリアしてるのかな?
>>171 memsetでクリアした領域はそのあと使ってないから、
そんな所を触るのは無駄と判断してそのコードは生成しないと。
関数の呼出をはしょっちゃうのは、最適化しすぎな気もするけどねえ。
>>173 memsetみたいなプリミティブかつ標準提供な関数ぐらいだろうけどね・・。
MSのコンパイラは結構前から memsetとかは intrinsic,
埋め込み展開対象だから、そのへんが原因なのかな。
そういう意味では、std::fillなんかもまんまインライン展開だから最適化で消えるか。
藻前らSecureZeroMemory を使いなっつぁい!
なぁ、
>>115で言ってるnew/deleteのオーバーロードってどうやるの?
newの中にヒープ関数とZeroMemory()書くだけ?
178 :
デフォルトの名無しさん:03/10/25 04:00
おぺれーたーぬー
Cが移植性が高いと言われたのは、アセンブラと比べた場合
その頃のCに対する認識は高級アセンブラ
どうでもいいんだが…