为什么纯函数式语言至今无法流行起来?
编程可以从冯诺依曼风格中解放出来吗?使用一种函数式风格及程序代数替代它?为什么纯函数式编程无法成为主流?为什么纯函数式语言无法真正解决实际问题?象牙塔大学CS里那些书呆子的梦想式白日梦还是终有一天会实现?
冯诺依曼风格是一种语句与表达式的编程风格,而函数式编程风格是建立在使用组合形式创建程序的基础上。
这和哲学观有关了,也许宇宙是基于状态的,而不是基于函数的。
编程语言是为了代表现实,并根据您的意愿操作它:面向对象和过程编程都使用函数来操作状态。
而在纯函数式语言中,您使用函数和未命名的变量来呈现状态。
问题是当你相互调用程序时,你总是用状态而不是函数来进行调用。从 API 到存储数据,因为它允许非常不同的系统在没有相同内部结构的情况下相互理解。
基于 java web 的 api/program 和在手机中运行的 swift/objective-c 程序可以很容易地通过状态相互通信,并且它们不必知道彼此的内部状态.
如果使用函数式风格:您业可以像保存状态一样保存函数,并传递它们到其他系统,但接受传递的另一方必须知道如何运行它,并且拥有相同类型的硬件才能运行它。
纯函数式编程可能是数学家的白日梦,理论上那些 CS 书呆子试图将数学/代数方程硬塞进默认的编程范式类型,但对于实际的计算机科学问题,冯诺依曼风格(语句和表达式)已经赢了,因为它是最实用的!
唯一能真正成功的替代冯诺依曼状态类型语言的实际上是 SQL 及其衍生物,它是一种声明式编程语言。您可以传递 SQL 查询,它们将被各种系统理解。但是,最终它们都作用于数据表中的某种状态/数据。
当然,一些函数式概念,如 map/reduce,在主流语言中已经流行起来,因为它们在某些上下文场景中很有用,但纯函数式语言却没有。
在现实世界中,一切都受时间和可变状态支配。如果你使用函数式,您就无法回避技术堆栈中某处的阻抗不匹配。