【发布时间】:2010-05-25 23:42:11
【问题描述】:
我听到了很多关于函数式语言的信息,以及它们如何很好地扩展,因为函数周围没有状态;因此该函数可以大规模并行化。
但是,这对我来说意义不大,因为几乎所有现实世界的实用程序都需要/有状态来处理。我还发现有趣的是,大多数主要的缩放库,即 MapReduce,通常都是用 C 或 C++ 等命令式语言编写的。
我想听听我所听到的这种炒作来自功能阵营的消息。
【问题讨论】:
-
我敢肯定,缩放库不是用 C/C++ 编写的,因为它非常适合这个问题……而不是可以编写性能更高的代码。
-
@spender:我同意它有点重复。但是,该问题的所有答案基本上都说“嗯,这是因为在函数式程序中你没有可变状态。”这个问题是在问“你如何协调不变性与现实世界问题的建模,这通常需要至少一些可变状态”(好吧,这个问题中没有明确说明,但我认为这就是它所暗示的方式是措辞;我很可能是错的)。我认为其他问题的任何答案都不能令人满意地回答这部分。
-
我可能疯了,但我的理解是在函数式语言中做“错误的事情”更难,所以期望如果人们用函数式语言编码,代码会神奇地是线程安全的。我的看法是,想要全球(或其他广泛可用的)状态的人会不惜一切代价获得它,而不管语言如何。即使在 C++ 中以函数式风格进行编码也是完全可能的。问题不在于语言(或者“工具”),而在于程序员(“用户”)。
-
多核 != 多线程。它们是两种不同的东西。多线程仍然适用于单核处理器。
-
@Cletus:是的,但与程序员的预期没有区别。而且我指的是一般意义上的多个并发执行线程,而不是特定的硬件配置。
标签: multithreading functional-programming