为什么没有功能性编程呢?

我已经阅读了关于声明性/函数式编程(语言)的一些文本,尝试了Haskell以及自己写的一个。 从我所看到的,函数式编程与古典命令式风格相比有几个优点:

  • 无状态程序; 无副作用
  • 并发; 对于不断上升的多核技术,发挥极佳的作用
  • 程序通常较短,在某些情况下更易于阅读
  • 生产力提高(例如:Erlang)

  • 命令式编程是一个非常古老的范式(据我所知),可能不适合21世纪

  • 为什么使用功能语言编写程序的公司仍然如此“罕见”?

    为什么在研究函数式编程的优点时,我们是否还在使用命令式编程语言?

    可能现在为时过早,但今天呢?


    因为所有这些优点也是不利的。

    无状态程序; 无副作用

    真实世界的程序都是关于副作用和变异的。 当用户按下按钮时,这是因为他们想要发生某些事情。 当他们键入某些东西时,他们希望该状态取代原来的状态。 当Jane Smith在会计学结婚并将她的名字改为Jane Jones时,支持打印她的薪水的业务流程的数据库最好是处理这种变化。 当你向外星人发射机枪时,大多数人不会将其视为具有较少生命值的新外星人的构造。 他们将这种模型视为现有外星人属性的变种。

    当编程语言概念从根本上针对正在建模的域进行工作时,很难证明使用该语言是合理的。

    并发; 对于不断上升的多核技术,发挥极佳的作用

    问题只是被推动。 使用不可变的数据结构,您可能会使用过时的数据,从而具有廉价的线程安全性。 使用可变数据结构,您可以获得始终处理新数据的好处,但必须编写复杂的逻辑来保持数据的一致性。 这不像其中的一个显然比另一个好。

    程序通常较短,在某些情况下更易于阅读

    除了它们更长,更难阅读的情况之外。 学习如何阅读用功能风格编写的程序是一项困难的技能; 人们似乎更愿意将程序设想为一系列应遵循的步骤,如配方,而不是一系列要进行的计算。

    生产力提高(例如:Erlang)

    生产力必须提高很多,以证明雇用知道如何以功能方式编程的程序员的巨大开销。

    请记住,你不想丢掉一个工作系统; 大多数程序员不是从头开始构建新系统,而是维护现有的系统,其中大部分都是用非功能语言构建的。 想象一下,试图为股东辩护。 你为什么要废弃现有的工作薪资系统,以数百万美元的成本建立一个新的工作系统? “由于功能性编程非常棒”,不太可能让股东感到高兴。

    命令式编程是一个非常古老的范例(据我所知),可能不适合21世纪

    函数式编程也很古老。 我不明白这个概念的年龄是如何相关的。

    不要误解我的意思。 我喜欢函数式编程,因为我想帮助将函数式编程的概念引入到C#中,所以我加入了这个团队,我认为用不变的风格编程是未来的方式。 但是,功能风格的编程需要花费巨大的成本,不能简单地被消除。 朝着更实用的方式转变将在几十年内缓慢而渐进地发生。 这就是它将会变成更实用的风格,而不是大规模地接受Haskell的纯洁和美丽以及放弃C ++。

    我为编译生成编译器,并且我们绝对拥抱下一代编译器工具的功能风格。 这是因为函数式编程从根本上来说是我们面临的各种问题的良好匹配。 我们的问题都是关于获取原始信息 - 字符串和元数据 - 并将它们转换为不同的字符串和元数据。 在发生突变的情况下,就像某人在IDE中键入内容一样,问题空间固有地适用于功能性技术,例如逐渐重建仅改变树的部分。 许多领域没有这些很好的属性,使它们显然适用于功能性风格。


    程序设计大师:与主要编程语言的创建者交谈

    [哈斯克尔]

    你为什么认为没有功能性编程语言已经进入主流?

    约翰休斯:糟糕的营销! 我不是指宣传; 我们有很多。 我的意思是仔细选择一个目标市场利基来支配,然后坚定地努力使功能编程成为迄今为止解决该利基最有效的方法。 在80年代的快乐日子里,我们认为函数式编程对所有事情都是有益的,但称新技术“对所有事物都有好处”与将其称为“特别无所事事”相同。 品牌应该是什么? 这是John Launchbury在ICFP邀请的演讲中非常清楚地描述的一个问题。 当他们的品牌是“功能语言软件”时,伽罗瓦连接几乎没有受到影响,但自从专注于“高保证软件”以来,它们已经不断发展壮大。

    许多人不知道技术创新是如何发生的,并且期望更好的技术将自己独占主导地位(“更好的捕鼠器”效应),但世界却不是这样。


    股票的答案是,无论是将要或应该取代其他的 - 它们是有多个不同的利弊,不同的工具,这些工具的方法有优势会根据项目和喜欢的可用人才库等“软”问题上存在分歧。

    我认为,当多功能编程被选择超过其他风格时,由于多核的并发性增长将会增加(全球开发项目集)的百分比。

    我认为今天很少见,因为今天的大多数专业人才库最适合使用命令式和面向对象技术。 例如,我不止一次选择了Java作为商业项目的语言,因为它足够好,没有争议,而且我知道我永远不会耗尽可以编程(足够好)的人。

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

    上一篇: Why hasn't functional programming taken over yet?

    下一篇: In Functional Programming, what is a functor?