【发布时间】:2010-12-17 14:06:23
【问题描述】:
我只是想知道为什么与 Scala、F# 或 Haskell 不同,基本的 .NET 框架(在 C# 或 VB 中可用)似乎对更高级别的并发模式几乎没有原生支持。
有可用的基本机制——锁、监视器、线程池——但是呢
- 同步变量 (
MVar) - 同步频道
- 异步通道(参见 Go 或 Haskell)
- 参与者/消息传递 (Erlang-Style)
- 期货
- 并行计算/列表函数
- 通过 Linq 进行可组合的异步计算(如 F# 的
async {})
甚至是软件事务内存 (STM for Haskell)
即使考虑到 ParallelFX,这个列表也只是部分覆盖。
是否有某些更深层次的理由反对提供此类功能(而是希望人们搞乱IAsyncResult's),还是计划在未来集成?
【问题讨论】:
-
您的列表中有大量的功能重叠。我认为我什至不想在一个环境中实现所有这些。
-
一方面,与您的示例语言不同,.NET 框架在设计时只考虑了面向对象的范式,Scala 是多范式,F# 和 Haskell 是函数式
-
@SpaceghostAli - 你怎么能说 .NET 只是为面向对象的范例而设计的,然后马上说 F#(一种在其上运行的语言)是功能性的?另外,您是否忘记了像 Linq 这样专门为允许函数式编程而设计的东西?
-
@Greg Beech - 如果您听 Anders 谈论为 .Net 设计诸如 Linq 之类的东西所面临的挑战,您就会明白我怎么说。 F# 团队还在几个 C9 视频中讨论了类似的挑战
-
@SpaceghostAli:如果 .NET 在设计时只考虑 OOP,它就不会有尾调用、闭包和泛型。
标签: .net concurrency functional-programming