为什么功能语言?

我在这里看到很多关于函数式语言和东西的讨论。 你为什么要用“传统”语言来使用它? 他们做得更好些什么? 他们更糟糕的是什么? 什么是理想的功能编程应用程序?


函数式语言使用与命令式和面向对象语言不同的范式。 他们使用无副作用的函数作为语言的基本构建块。 这使许多事情成为可能,并使许多事情变得更加困难(或者在大多数情况下与人们习惯的不同)。

函数式编程的最大优点之一是执行无副作用函数的顺序并不重要。 例如,在Erlang中,这用于以非常透明的方式启用并发。 由于函数式语言中的函数与数学函数非常相似,因此很容易将这些函数翻译成函数式语言。 在某些情况下,这可以使代码更具可读性。

传统上,功能编程的一大缺点是缺乏副作用。 在没有IO的情况下编写有用的软件是非常困难的,但IO很难在功能上没有副作用的情况下实现。 所以大多数人从来没有比单一输入计算单个输出更多的功能编程。 在F#或Scala等现代混合范式语言中,这更容易。

许多现代语言都具有功能性编程语言的元素。 C#3.0有很多功能性的编程功能,您也可以在Python中进行函数式编程。 我认为功能性编程流行的原因主要是由于两个原因:并发在正常编程中遇到了一个实际问题,因为我们越来越多的多处理器计算机; 并且语言越来越易于​​访问。


我认为关于编程“追赶”的功能方法没有任何问题,因为它已经使用了40年(作为编程风格)。 每当一个OO程序员写出赞成不可变对象的干净代码时,该代码就借用了功能概念。

然而,强制实用功能风格的语言近来获得了大量的虚拟墨迹,并且这些语言在未来是否会占主导地位,这是一个悬而未决的问题。 我自己的怀疑是像Scala或OCaml这样的混合型多范型语言可能会像纯粹的OO语言(Smalltalk,Beta等)影响主流编程一样,在“纯粹”功能语言上占据主导地位,但还没有结束作为最广泛使用的符号。

最后,我无法抗拒地指出,您对FP的评论与我多年前程序程序员听到的言论高度平行:

  • (神话,恕我直言)“普通”程序员不理解它。
  • 它没有被广泛教导。
  • 任何可以用它编写的程序都可以用现有技术以另一种方式编写。
  • 就像图形用户界面和“作为业务模型的代码”是帮助面向对象得到更广泛认可的概念一样,我相信更多地使用不可变性和更简单(大规模)的并行性将有助于更多程序员看到功能方法提供的好处。 但是,尽管我们在过去50年左右学到了构成整个数字计算机编程历史的知识,但我认为我们还有很多东西需要学习。 二十年后,程序员会惊讶于我们当前使用的工具的原始性质,包括现在流行的OO和FP语言。


    对我来说,主要的优势在于其固有的并行性,尤其是当我们正在从更多的MHz转向越来越多的内核时。

    我不认为它会成为下一个编程范例,并完全取代OO类型的方法,但我认为我们会认为我们需要用功能性语言编写我们的一些代码,否则我们的通用语言将会成长为包含更多功能性结构。

    链接地址: http://www.djcxy.com/p/22919.html

    上一篇: Why functional languages?

    下一篇: OOP vs Functional Programming vs Procedural