ひきこもりプログラマ

C++のこととか。

効率

2006-04-29 | More Effective C++
場所
77ページ11行目
多くのプログラムは,気の毒なほど遅いペースと膨れ上がった足跡を,悪い設計とずさんなプログラミングのせいだと責めたてる。
あまりにも多くのプログラムにおいて,その速度が気の毒なほど遅く,占有資源が膨れ上がってしまった理由は,他でもなくひどい設計とずさんなプログラミングのせいである。
原文
too many programs can blame their sorry pace and bloated footprint on nothing more than bad design and slipshod programming.

場所
78ページ2行目
多くの隠された誤りを犯すのは簡単だが,そうと認識するのは難しく,あまりに多くのオブジェクトをつくり破壊している。
非常にたちの悪い誤りというのは,犯すのは簡単だが,そうと認識するのは難しい。それはすなわちオブジェクトの作りすぎと壊しすぎである。
原文
The most insidious mistake is both simple to make and hard to recognize: creating and destroying too many objects/

項目15: 例外処理のコストを理解する

2006-04-29 | More Effective C++
場所
74ページ25行目
例外とリンクしているライブラリーはどうなるのか。
オブジェクトファイルとリンクするライブラリについてはどうなるのか。
原文
what about the libraries they're linked with?

場所
75ページ7行目
合計のコードサイズは5%から10%ほど増加すると予想され,tryブロックを用いれば,
tryブロックを用いれば,合計のコードサイズは5%から10%ほど増加すると予想され,
原文
expect your overall code size to increase by 5-10% and your runtime to go up by a similar amount if you use try blocks

場所
75ページ13行目
例外処理が一般にもたらすコストは
例外仕様が一般にもたらすコストは
原文
so an exception specification generally incurs

場所
75ページ22行目
オーダーにして3倍ほど
3桁は
原文
three orders of magnitude

場所
75ページ29行目
例外が発生したときには,何倍ものオーダーで速度が落ちる
例外が多量に発生したときには,何桁も速度が落ちる
原文
it may run orders of magnitude slower if lots of exceptions are thrown

項目14: 例外仕様を賢く用いる

2006-04-22 | More Effective C++
場所
69ページ7行目
文書的な補助としても,
文書化の役にも立つし,
原文
as a documentation aid

場所
69ページ12行目
アクティブスタックフレームの中の局所変数は破壊される
アクティブスタックフレームの中の局所変数は破壊されない
原文
Local variables in active stack frames are not destroyed

場所
69ページ18行目
言語の標準が(警告することもなく)拒否するものは,
言語の標準によって,拒否できないと定められている(警告を表示するのはかまわない)ものもある。それは
原文
what the language standard prohibits them from rejecting (though they may issue a warning)

場所
69ページ20行目
関数f1の宣言について考えよう。[追加]
[このような関数はいかなる種類の例外を投げてもよい。]
原文
Such a function may throw any kind of exception

場所
70ページ7行目
いくつかの型とオーバーロードされている
型によってはオーバーロードされている

原文
has been overloaded for some types

場所
71ページ5行目
このようなtypedefにすれば†[注釈追加]
† [悲しいかな,これは不可能である。少なくともポータビリティを考えると。多くのコンパイラがこのページに示したコードを受け入れるが,標準化委員会はどういうわけか「例外仕様をtypedefに含めてはならない」と宣言した。理由はわからない。ポータビリティを保った解決法が必要なら――こんなことを書きたくはないが――CallBackPtrをマクロにしなければならない。やれやれ。
原文
† Alas, it can't, at least not portably. Though many compilers accept the code shown on this page, the standardization committee has inexplicably decreed that “an exception specification shall not appear in a typedef.” I don't know why. If you need a portable solution, you must — it hurts me to write this — make CallBackPtr a macro, sigh.

場所
72ページ14行目
違反した例外仕様がUnexpectedExceptionを含むとして,
例外仕様に違反しても,その仕様にUnexpectedExceptionが含まれてさえいれば,
原文
Provided the exception specification that was violated includes UnexpectedException

場所
72ページ18行目
別の方法として,(中略)事実に依っている
別の方法は,(中略)事実に頼るというやりかたである
原文
Another way (...) is to rely onthe fact that (...)

場所
73ページ5行目
準備をしたとき
準備をしたとしても,
原文
even when a higher-level caller is prepared to

場所
73ページ26行目
扱わなくても済むようにできるし,どのようにすればよいかもわかっている。
捕捉できないようにしてしまう。たとえその例外をどう扱えばいいかわかっていても,である。
原文
they can prevent high-level exception handlers from dealing with unexpected exceptions, even when they know how to.

項目13: 参照で例外を捕まえる

2006-04-15 | More Effective C++
場所
66ページ4行目
大域的な静的オブジェクトは
大域的な,または静的なオブジェクトは
原文
Global and static objects

場所
66ページ21行目
せいぜい,問題を回避するしかない。
そうしたことは避けるのが一番である。
原文
You're best off ducking it.

場所
68ページ12行目
Validation_errorの関数は,例外の中でそれらを再定義したときに起動される。[追加]
Validation_errorの関数も,exceptionの関数を再定義しているのであれば呼び出される。[もちろん,例外を捕捉した側で例外オブジェクトを変更する必要がないのであれば,単なる参照ではなくconstへの参照でcatchすることになるだろう。]
原文
functions in Validation_error are invoked if they redefine those in exception. Of course, if there is no need to modify the exception object in the handler, you'd catch not just by reference, but by reference to const.

項目12: 例外の発生のさせ方と引数引渡し・仮想関数呼び出しとの違いを理解する

2006-04-08 | More Effective C++
場所
60ページ11行目
例外オブジェクトのこの強制的なコピーは† [注釈追加]
† [実際のところ,コンパイラの作者は「強制的なコピー」に関しては多少の自由が与えられている。特定の状況下においてはこれをせずともよいのである。返り値の最適化(項目20を参照)もこれと同様の自由度を基盤としている。]
原文
Compiler writers are actually allowed a slight bits of leeway regarding the “mandatory” nature of the copying; it can be eliminated under certain circumstances. Similar leeway provides the foundation for the return value optimization (see Item 29).

場所
60ページ16行目
静的型に対応したクラスの中の1つである
静的型に対応したクラスのコピーコンストラクタである。
原文
This copy constrctor is the one in the class corresponding to the object's static type

場所
60ページ21行目
rwが静的型であるということである。
rwの静的な型だけである。
原文
all they care about is rw's static type

場所
62ページ24行目
オブジェクトが呼出し側,あるいは,例外発生側から引数側あるいはcatch節へと移される方法は一方向であって,この点が実引数の引渡しと例外の伝搬との違いである。
オブジェクトが関数呼び出し元から仮引数に移される仕組みとthrow節からcatch節に移されるしくみの違いが,引数の引渡しと例外の伝播との違いのうちのひとつである。
原文
The way in which objects are moved from call or throw sites to parameters or catch clauses is one way in which argument passing differs from exception propagation.

場所
63ページ14行目
いずれにもいつものように適用される。[追加]
[(しかし,項目13で説明するように,値やポインタ渡しは一般的によくないやり方である)]
原文
(though Item 13 explains why catching values or pointers is generally a bad idea)

場所
64ページ4行目
ここで,派生クラス型の例外をその基底クラスの1つのcatch節で処理することが可能になる。その派生クラスに対するcatch節に,同じtryブロックが対応している場合でも可能である。
したがって,(publicに)派生したクラス型の例外がその基底クラス型のどれかに対応するcatch節で処理されてしまう,ということが起こりうるのである――その派生クラスに対応したcatch節が同じtryブロックに関連付けられていたとしても!
原文
Hence, it is possible for an exception of a (publicly) derived class type to be handled by a catch clause for one of its base class types — even when a catch clause for the derived class is associated with the same try block!

場所
64ページ12行目
コンパイラは警告を発する([中略]C++では不当であるからである)。
コンパイラは警告を発するかもしれない([中略]C++ではかつては不当であったからである)。
原文
Compilers may warn (中略) used to be illegal

場所
64ページ13行目
最も良い動作のコースは,プリエンプティブ(preemptive),
もっとも良い方針は,予防的になること,
原文
your best course of action is preemptive

場所
65ページ4行目
オブジェクトはまったくコピーされない
オブジェクトをコピーする必要はまったくない
原文
need not be copied at all

項目11: デストラクターから出る例外を抑える

2006-04-01 | More Effective C++
場所
58ページ3行目
例外をlogDestructionから発生させないようにして,
logDestructionから発生した例外が,
原文
prevent the exception thrown by logDestruction from


場所
58ページ9行目
(例外が発生した地点では止まらない)
(例外が投げられた時点で止まってしまう)
原文
(It will stop at the point where the exception is thrown.)

場所
58ページ11行目
セッションの生成がデータベースのやりとりで始まり,やりとりでセッションが終了する例を
セッションを生成するとデータベースのトランザクションが開始され,セッションを停止するとトランザクションが終了する場合を
原文
where the creation of a session starts a database transaction and the termination of a session ends that transaction