value-based なプログラミング言語で const-ness 云々いうためには,まず one-phase construction を何らかの形で確立しておかないと二進も三進もいかない希ガス.
2010-04-13 01:21:06@SubaruG 物理的なconst性というのは、コンストラクタ終了後はbitレベルの不変性が保たれる、という意味でしょうか。でも、「bitレベルの不変性」というのも、マルチスレッド環境ではメモリバリアがないと保証できないんですよね。
2010-04-13 01:21:34@yamasa そこまで細かいことは言ってませんよ。要するに、今の const 性の場合は、マルチスレッドでの読み書きの安全性とは対応してないじゃないですか、 mutable があるせいで。それをどうにかして欲しい、と。ロックフリーとかはどちらにせよユーザが頑張らないと無理ですが
2010-04-13 01:26:47「一箇所からの書き込み」あるいは「複数ヶ所からの読み取り」のどちらかのみが行われる限り安全に動作する、って何だっけ。
2010-04-13 01:30:38これか。SGI STL のスレッド安全性。 http://www.sgi.com/tech/stl/thread_safety.html http://hamigaki.sourceforge.jp/doc/html/design-policy.html
2010-04-13 01:32:05SGIと聞いて!RT @SubaruG: これか。SGI STL のスレッド安全性。 http://bit.ly/a62aCh http://bit.ly/aMlUOK
2010-04-13 01:33:50このレベルでのスレッド安全性があれば十分なんだけど、それすら現行の const では mutable のせいで自動化できない。でも論理的 const 性は非常に大事だから、じゃあ別の const 性、というか readonly 性をもたせられたら嬉しいよね、的な。
2010-04-13 01:34:14@SubaruG つまり、mutableとかconst_castとかでこっそり内部状態を変化させられることのない、強い意味のconstが欲しいということですね。マルチスレッドは関係なしに。
2010-04-13 01:35:23スレッドの概念のない C++ に持ち込もうとしたのが、そもそもの誤りだったのよ。。 QT @syuu1228: SGIと聞いて!RT @SubaruG: これか。SGI STL のスレッド安全性。 http://bit.ly/a62aCh http://bit.ly/aMlUOK
2010-04-13 01:37:13@SubaruG でも、そのような「強い意味のconst」があっても、マルチスレッドでは別途メモリバリアやロックが必要なので、あまり状況は変わらないように思えます。
2010-04-13 01:40:27ちなみに僕のライブラリ設計方針は、 mutable を使う場合はポリシークラスとしてマルチスレッド対応を行なうようにする、それ以外は物理的 const 性と論理的 const 性は一致させる、という方針。
2010-04-13 01:41:23@yamasa ロックをライブラリ側で厳密に書けるメリットは大きいと思うんですよね。 const T に対するロックは複数から読み取れて、的な。
2010-04-13 01:42:53@SubaruG 目的は十分に理解するんですが,これを達成するには @yamasa さんが指摘されている (と思われる) 状況 (メモリバリアを必要とし,ゼロオーバーヘッド原則と齟齬を起こす文脈) はやはりあるんじゃないでしょうか.やや限定された文脈でのこととは思いますが.
2010-04-13 01:43:05そもそも const をマルチスレッドに使おうなんて考え方がおかしいのかも。その都度手で対応すればいいじゃん? どうせマルチスレッド対応はデザインの根幹部分なんだし。
2010-04-13 01:47:28@SubaruG あと,これを目標とする以上, one-phase construction をどのようにして達成するかを並行して議論することが絶対に必要なんじゃないでしょうか.個人的には const-ness 云々を脇に置いておいてこちらを先に深く議論しても良いくらいに思います
2010-04-13 01:47:39. @Cryolite @SubaruG 欲しいとおっしゃっている「強いconst性」というのは、Javaのfinalフィールドに非常に近いと思うんですよ。で、そのJavaでの実現方法がこちらになります。 http://j.mp/9AQKbn
2010-04-13 01:52:33@yamasa 一応自分も Java の final field を想定解として念頭に置いていたんですが,これに関しては完全にど素人なので,こういう資料を refer してもらえて凄いありがたいです.
2010-04-13 01:57:06const メソッドと同様に、「このメソッドでは内部状態を(物理的に)一切書き換えない」と宣言して、仮に書き換えてしまった場合は未定義動作、的な感じにするしかないですにゃー。
2010-04-13 01:58:30what ではなく how である以上、完璧に機械的に決めて欲しいけど、流石にゼロオーバーヘッドでそれをやるのは無理ゲー。
2010-04-13 02:00:10