【发布时间】:2011-06-15 18:48:21
【问题描述】:
我正在寻找一种比命令式更快的函数式算法(或这种算法的参数)。
我喜欢函数式代码,因为它比命令式挂件更具有表现力且更易于阅读。但我也知道这种表现力会消耗运行时开销。并不总是由于尾递归之类的技术 - 但它们通常更慢。
在编程时,我不考虑功能代码的运行时成本,因为现在 PC 速度非常快,而且开发时间比运行时更昂贵。此外,对我来说,可读性比性能更重要。不过我的程序足够快,所以我很少需要以命令式的方式解决问题。
有些算法在实践中应该以命令式风格(如排序算法)实现,否则在大多数情况下它们太慢或需要大量内存。 相比之下,由于像用函数式语言编写的解析器这样的模式匹配整个程序的技术,可能比用命令式语言编写的程序快得多,因为编译器可以优化代码。
但是有没有在函数式风格上更快的算法,或者是否有可能设置这种算法的参数?
【问题讨论】:
-
“功能性”或“命令性”算法是什么意思?采取任何命令式,对其执行 SSA 转换,将基本块转换为一组相互递归的函数,您将获得具有相同性能配置文件的相同算法的纯函数版本。反向翻译就更简单了。
-
我认为这就是所有函数式编程炒作的原因。如果这个问题没有肯定的答案,那就证实了我的怀疑,它只是一种时尚:-)
-
@phkahler - 函数式算法更容易推理,就像 C 语言比汇编语言更容易推理一样。因此,尽管原则上编译后的 C 永远不会比汇编更快,但 C 并不是“只是一种时尚”。
-
您正在设置错误的二分法。算法不分为“功能性”和“命令性”。
-
“开发时间”NOT“比运行时间贵”。如果仅仅是因为对于任何体面的程序,代码将花费比编写/维护更多的时间数量级。特别是。如果您考虑到大量用户(其中任何数量的时间可能比您的时间更有价值)。
标签: algorithm scala functional-programming imperative-programming