2009-11-17 7 views
7

Me preguntaba por qué, a diferencia de Scala, F # o Haskell, el .NET Framework básico (como disponible en C# o VB) parece tener muy poco soporte nativo para patrones de concurrencia de mayor nivel .abstracciones de subprocesamiento/concurrencia de alto nivel para .NET

Hay mecanismos básicos disponibles - cerraduras, monitores, el grupo de subprocesos - pero ¿qué pasa

  • las variables sincronizadas (MVar)
  • canales síncronos
  • canales asincrónicos (consulta o Haskell)
  • Actors/message passing (Erlang-Style)
  • Futuros
  • cálculos paralelos/lista Funciones
  • cálculo asíncrono Composable través de LINQ (como F # 's async {})

o incluso memoria transaccional (STM for Haskell)

E incluso toma en consideración de ParallelFX, esta lista sólo está parcialmente cubierto .

¿Existen razones más profundas contra la provisión de tales funcionalidades (y en lugar de querer que la gente se meta con IAsyncResult) o se planea integrarlas en el futuro?

+0

Hay una gran cantidad de superposición funcional en su lista. No creo que incluso quiera todo eso en un ambiente. –

+0

Por un lado, a diferencia de sus ejemplos de idiomas.NET framework fue diseñado con solo el paradigma orientado a objetos en mente, Scala es multi-paradigma, F # y Haskell son funcionales – SpaceghostAli

+4

@SpaceghostAli - ¿Cómo se puede decir que .NET está diseñado solo para el paradigma orientado a objetos, seguido inmediatamente diciendo que F # (un lenguaje que se ejecuta en él) es funcional? Además, ¿te estás olvidando de cosas como Linq, que está diseñado únicamente para permitir la programación funcional? –

Respuesta

6

Hay investigaciones activas y en curso sobre las mejores y más efectivas abstracciones que pueden usarse para habilitar software concurrente sin dominar las minucias b/c la mayoría de los desarrolladores no tienen el tiempo o la inclinación para desarrollar sus habilidades a ese nivel.

Dado esto, el BCL tiene una barrera bastante alta para la entrada de nuevos conceptos, pero eso no significa que no estén sucediendo. Más recientemente, en .Net 4, se introducirá el Task Parallel Library. Las versiones anteriores del TPL en realidad included a Future<T> type que ha sido suplantado por newerabstractions.

También hay investigaciones activas en el campo de los canales/etc. a través del lenguaje de investigación Axum.

Obviamente no soy parte del equipo y no trabajo para Microsoft, pero tengo entendido que hay un deseo de innovar en esta área más allá de lo que ya está ampliamente disponible.

+0

El TPL es para paralelismo, no concurrencia. –

+0

Eso es correcto. Axum fue la investigación de concurrencia, y los conceptos ganadores de eso ahora (obviamente) están siendo incorporados en .Net 4.5. –

2

Estoy de acuerdo con Greg D, hay muchas "cosas" por venir. MS con el nuevo framework .Net4 y su proyecto Axum. El problema que veo con todos estos enfoques es que se vuelven extremadamente complicados y que las habilidades, el conocimiento y la experiencia en las áreas de computación distribuida/paralela/distribuida son bastante "limitadas". No escribo eso para ofender a nadie, pero reconozco que las universidades y los educadores en general deben prestar más atención a estos temas. Pero, lo que creo y espero es que la conciencia principal que crea MS con la implementación de muchas de estas ideas, Axum, CCR & DSS, Biblioteca de Agentes Asincrónicos, etc. y la tendencia/necesidad general hacia el sistema informático multi-core/cloud, que verá más pronto :)

+0

Ahora que puede ver y tocar los trozos de Axum que lo están convirtiendo en la corriente principal, ¿todavía cree que son extremadamente complicados (presumiblemente más complicado que trabajar con los primitivos que los habilitan)? –

Cuestiones relacionadas