¿Existe un conjunto de atributos cuasi estándar para anotar la seguridad del hilo, la inmutabilidad, etc.?

8

Excepto por una publicación de blog aquí y allá, que describe los atributos personalizados que alguien creó, pero que no parecen obtener ninguna tracción, como una que describe cómo imponer la inmutabilidad , otra sobre Documenting Thread Safety , que modela los atributos después de las anotaciones de JCIP . ¿Algún estándar emergente? ¿Algo que MS pueda estar planeando para el futuro?

Esto es algo que debería ser estándar, si hay alguna posibilidad de interoperabilidad entre bibliotecas de manera concurrente. Tanto para fines de documentación como para alimentar herramientas de prueba estáticas / dinámicas.

Si MS no está haciendo nada en esa dirección, podría hacerlo en CodePlex, pero tampoco pude encontrar nada allí.

<opinion> La concurrencia y la seguridad de los subprocesos son realmente difíciles en los lenguajes imperativos y de objetos como C # y Java, deberíamos tratar de domarlo, hasta que con suerte cambiemos a lenguajes más apropiados. </opinion>

Eugene Beresovsky
fuente
1
Vote para pasar a los programadores por cómo abrió esto terminó

Respuestas:

3

El problema con la inmutabilidad y la seguridad del hilo es que no son conceptos en blanco y negro, pero hay una serie de posibles garantías al respecto. Reducir eso a atributos simples puede ser difícil. OMI un simple ThreadSafey Immutableatributo no es suficiente. Aún trabajando en un conjunto de atributos que capturen al menos la semántica más importante me suena prometedor.

Por ejemplo, tome un AddRangemétodo. Puede ser lo suficientemente seguro como para nunca corromper el estado de la colección subyacente, pero puede no ser atómico. Una implementación común con estas propiedades podría ser simplemente llamar a un Addmétodo atómico para cada elemento.

En el lado de la inmutabilidad también tenemos diferentes aspectos:

  • Ofreciendo solo accesos de solo lectura o realmente nunca cambiando
  • Profundidad de inmutabilidad, es decir, también son inmutables los subobjetos
  • Inmutabilidad física versus lógica. Por ejemplo, la inicialización diferida no cambia el estado visible, sino que cambia el estado interno.

Una anotación es que este contexto ya existe: Purepara los métodos libres de efectos secundarios.

CodesInChaos
fuente
Estoy de acuerdo en que no es simple. Pero creo que debería hacerse. Es muy difícil hacer un software complejo sin él, especialmente integrando múltiples bibliotecas. Gracias por señalar Pure ( msdn.microsoft.com/en-us/library/… ), eso es un comienzo y, por lo tanto, aceptaré su respuesta, ya que parece ser lo mejor que podemos obtener en este momento, en términos de 'cuasi-estándar' de al menos algo.
0

No creo que haya un conjunto de estándares (incluso cuasi) en este momento. Los proyectos aislados hacen algo de esto a su manera. En una publicación de hilo , hablan sobre la inmutabilidad a través de contratos de código e incluso se cuecen directamente en el sistema de tipos. He visto incluso menos sobre la seguridad de los hilos.

Equipo
fuente
Si cada proyecto implementa su propio sistema, es difícil integrar diferentes bibliotecas y construir o usar herramientas de análisis estático / dinámico para verificar las cosas.