スレッドの安全性、不変性などに注釈を付ける準標準の属性セットはありますか?


8

誰かが作成したカスタム属性を説明しているブログ投稿を除いて、それは何の牽引力も得ていないようです- 不変性強制する方法を説明するもの、スレッドセーフティのドキュメント化、JCIPアノテーション後の属性のモデル化など-があります出現している標準はありますか?MSが将来のために計画している可能性のあるものはありますか?

ライブラリ間の同時実行性の相互運用性の可能性がある場合、これは標準的なものです。文書化の目的と、静的/動的なテストツールにフィードするための両方。

MSがその方向で何も実行していない場合、CodePlexで実行できますが、そこでも何も見つかりませんでした。

<opinion> C#やJavaのような命令型およびオブジェクト言語では、並行性とスレッドセーフティは本当に難しいので、うまくいけば、より適切な言語に切り替えるまで、それを飼いならしてみる必要があります。</ opinion>


1
どのようにオープンに終わったかについて、プログラマーに移動するための投票はこれです

回答:


3

不変性とスレッドの安全性の両方に伴う問題は、それらが白黒の概念ではないことですが、その点に関してはいくつかの可能な保証があります。それを単純な属性に減らすのは難しいかもしれません。IMOは単純ThreadSafeImmutable属性だけでは十分ではありません。それでも、少なくとも最も重要なセマンティクスをとらえた属性のセットを作成することは、私に有望に思えます。

たとえば、AddRangeメソッドを取る。基になるコレクションの状態を決して壊さないほどスレッドセーフである可能性がありますが、アトミックではない可能性があります。これらのプロパティを持つ一般的な実装はAdd、各要素のアトミックメソッドを呼び出すだけです。

不変性の側面には、さまざまな側面もあります。

  • 読み取り専用のアクセサのみを提供するか、まったく変更しない
  • 不変性の深さ、つまりサブオブジェクトも不変
  • 物理と論理の不変性。たとえば、遅延初期化は可視状態を変更しませんが、内部状態を変更します。

1つの注釈は、このコンテキストがすでに存在するPureことです。副作用のないメソッドの場合。


簡単ではないことに同意します。しかし、私はそれが行われるべきだと思います。特に複数のライブラリを統合することなく、それなしで複雑なソフトウェアを実行することは困難です。ピュア(msdn.microsoft.com/en-us/library/…)を指摘していただきありがとうございます。これは始まりであり、現在、私たちが得ることができる最善の方法であると思われるため、私はあなたの答えを受け入れます。少なくともSOMEthingの「準標準」。

0

現在、標準のセット(準さえも)があるとは思いません。分離されたプロジェクトは、これのいくつかを独自の方法で行います。私はスレッドポストで、コードコントラクトを介して不変性について話し、型システムに直接焼き付けています。スレッドセーフティについては、これまであまり見ていません。


すべてのプロジェクトが独自のシステムを実装する場合、さまざまなライブラリを統合し、静的/動的分析ツールを構築または使用して物事を検証することは困難です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.