其中一种无副作用的引用透明函数式编程的承诺是这种代码可以被广泛优化。引用维基百科的话:
“在许多情况下,数据的不可变性可以通过允许编译器做出在命令式语言中不安全的假设,从而提高内联扩展的机会,从而提高执行效率。”
我想看到的是函数式语言编译器通过生成更好的优化代码而优于命令式编译器的示例。
编辑:我试图给出一个具体的场景,但显然这不是一个好主意。因此,我将尝试以不同的方式解释它。
程序员将思想(算法)转化为机器可以理解的语言。同时,翻译的最重要方面之一也是人类可以理解生成的代码。不幸的是,在许多情况下存在权衡:简洁易读的代码会受到慢速性能的影响,并且需要手动优化。这很容易出错,耗时,使代码难以阅读(甚至完全无法阅读)。
函数式语言的基础,如不变性和引用透明度,使编译器能够执行广泛的优化,可以取代代码的手动优化,并使程序员从中获得自由。我正在寻找思路(算法)及其实现的例子,以满足以下条件:
我对此的兴趣不仅仅是理论上的。我想使用这些例子(除其他外)来激发学生对函数式编程的兴趣。
起初,我对评论中提出的一些例子不满意。但经过再次考虑,我收回了我的反对意见,那些是好的例子。请随意扩展它们到完整的答案,以便人们可以评论和投票支持它们。
“在许多情况下,数据的不可变性可以通过允许编译器做出在命令式语言中不安全的假设,从而提高内联扩展的机会,从而提高执行效率。”
我想看到的是函数式语言编译器通过生成更好的优化代码而优于命令式编译器的示例。
编辑:我试图给出一个具体的场景,但显然这不是一个好主意。因此,我将尝试以不同的方式解释它。
程序员将思想(算法)转化为机器可以理解的语言。同时,翻译的最重要方面之一也是人类可以理解生成的代码。不幸的是,在许多情况下存在权衡:简洁易读的代码会受到慢速性能的影响,并且需要手动优化。这很容易出错,耗时,使代码难以阅读(甚至完全无法阅读)。
函数式语言的基础,如不变性和引用透明度,使编译器能够执行广泛的优化,可以取代代码的手动优化,并使程序员从中获得自由。我正在寻找思路(算法)及其实现的例子,以满足以下条件:
- (函数式)实现与原始思路接近且易于理解,
- 它被语言的编译器广泛优化了,
- 在命令式语言中,如果没有减少简洁性和可读性的手动优化,很难(或不可能)编写出类似有效的代码。
我对此的兴趣不仅仅是理论上的。我想使用这些例子(除其他外)来激发学生对函数式编程的兴趣。
起初,我对评论中提出的一些例子不满意。但经过再次考虑,我收回了我的反对意见,那些是好的例子。请随意扩展它们到完整的答案,以便人们可以评论和投票支持它们。
这类示例最有可能是并行化的代码,可以利用多个CPU核心。通常在函数式语言中,这可以很容易地完成,而不会牺牲代码的简单性(比如在Haskell中添加par
或pseq
即可)。我也对其他非并行化的示例感兴趣。
min = head.sort
- josejuan