Functional programming 函数式编程中的可伸缩性
我听说用函数式语言编写的程序可以更好地扩展。这是真的吗?如果是的话,那么与非函数式语言有什么区别导致了这种情况?考虑到这不是最佳的,我有疑问 当然,这并不全是好事。C 快速排序使用了一种非常巧妙的方法 霍尔发明的技术 它将数组排序到位;就是, 无需使用任何额外存储。作为一个 结果,它运行得很快,而且速度很快 少量内存。相反, Haskell程序分配了相当多的资源 在幕后有很多额外的记忆, 并且运行速度比C慢 节目Functional programming 函数式编程中的可伸缩性,functional-programming,Functional Programming,我听说用函数式语言编写的程序可以更好地扩展。这是真的吗?如果是的话,那么与非函数式语言有什么区别导致了这种情况?考虑到这不是最佳的,我有疑问 当然,这并不全是好事。C 快速排序使用了一种非常巧妙的方法 霍尔发明的技术 它将数组排序到位;就是, 无需使用任何额外存储。作为一个 结果,它运行得很快,而且速度很快 少量内存。相反, Haskell程序分配了相当多的资源 在幕后有很多额外的记忆, 并且运行速度比C慢 节目 这些巧妙的技术通常决定了应用程序的伸缩性 无论你从谁那里听到这句话,他都很可能是指
这些巧妙的技术通常决定了应用程序的伸缩性 无论你从谁那里听到这句话,他都很可能是指“不允许副作用提供了参考透明度,这使得验证、优化和程序更容易,并且更容易编写自动化工具来执行这些任务。” 换句话说,函数程序往往没有副作用(修改全局状态),因此并行运行函数程序的多个实例应该产生相同的输出。例如,考虑之间的差异。
int a;
void increment_a() {
a++;
}
及
第二种方法没有副作用,并且可以并行运行,前提是您可以对代码进行结构化,以便提供所有必要的输入。编程语言的选择对程序的伸缩性没有影响。这是程序设计的一个功能。一个设计良好的C程序可以很好地扩展(假设这是一个设计目标),而设计糟糕的Erlang可以非常糟糕地扩展 如果这是真的,我认为可能有三个因素在起作用:
我认为您的最后一句话有点短视:您可以尝试使用许多巧妙的技巧使您的应用程序具有良好的可扩展性,但如果底层架构的可扩展性不好,那么即使是巧妙的技巧也只不过是创可贴。(顺便说一句,我没有投反对票)我想这篇文章是个笑话;这篇讲述故事的文章读起来像洋葱。(我还没有投反对票,但我仍然有可能)。@stakx:我开始回答这些问题,但后来我突然想到,既然OP是在问函数式编程语言,他可能在谈论算法可伸缩性,而不是系统可伸缩性@是的,yeg的帖子是个笑话,但它太棒了!那么什么是参考透明度呢?编辑我的答案以供评论。Wikipedia说“一种属性,在不影响程序的情况下,表达式可以被它的值替换。”@jamesj:如果你有
y=x
,那么y
可以替换程序中的任何地方(反之亦然)。这在命令式语言中通常是不正确的,因为在执行过程中可以更改x
的值。函数式语言倾向于阻止这类事情,而一些(如Haskell和Clean)强烈限制了可以更改数据的上下文。这种编码方式的另一个症状是,您的函数始终是确定性的,可以在上游缓存,从而产生巨大的效果。
int increment(int a) {
return a+1;
}