8

编程可以从冯诺依曼风格中解放出来吗?为什么纯函数式语言至今无法流行起来?

 3 years ago
source link: https://www.jdon.com/56676
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
编程可以从冯诺依曼风格中解放出来吗?为什么纯函数式语言至今无法流行起来?

编程可以从冯诺依曼风格中解放出来吗?使用一种函数式风格及程序代数替代它?为什么纯函数式编程无法成为主流?为什么纯函数式语言无法真正解决实际问题?CS大学里那些书呆子的梦想式白日梦还是终有一天会实现?

冯诺依曼风格是一种语句与表达式的编程风格,而函数式编程风格是建立在使用组合形式创建程序的基础上。

这和哲学观有关了,也许宇宙是基于状态的,而不是基于函数的。

  • 编程语言是为了代表现实,并根据您的意愿操作它:面向对象和过程编程都使用函数来操作状态。
  • 而在纯函数式语言中,您使用函数和未命名的变量来呈现状态。

问题是当你相互调用程序时,你总是用状态而不是函数来进行调用。从 API 到存储数据,因为它允许非常不同的系统在没有相同内部结构的情况下相互理解。

基于 java web 的 api/program 和在手机中运行的 swift/objective-c 程序可以很容易地通过状态相互通信,并且它们不必知道彼此的内部状态.

如果使用函数式风格:您业可以像保存状态一样保存函数,并传递它们到其他系统,但接受传递的另一方必须知道如何运行它,并且拥有相同类型的硬件才能运行它。

纯函数式编程可能是数学家的白日梦,理论上那些 CS 书呆子试图将数学/代数方程硬塞进默认的编程范式类型,但对于实际的计算机科学问题,冯诺依曼风格(语句和表达式)已经赢了,因为它是最实用的!

唯一能真正成功的替代冯诺依曼状态类型语言的实际上是 SQL 及其衍生物,它是一种声明式编程语言。您可以传递 SQL 查询,它们将被各种系统理解。但是,最终它们都作用于数据表中的某种状态/数据。

当然,一些函数式概念,如 map/reduce,在主流语言中已经流行起来,因为它们在某些上下文场景中很有用,但纯函数式语言却没有。

在现实世界中,一切都受时间和可变状态支配。如果你使用函数式,您就无法回避技术堆栈中某处的阻抗不匹配。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK