即使有人确切地争论它,功能性编程仍在不断吸引开发人员。以及三种最受欢迎的功能语言 - Clojure,F#和Scala-都可以进行改进。
Scala创始人马丁·奥德斯基(Martin Odersky)说:“功能编程对某些开发人员具有核心吸引力:“该细分市场中的程序员(例如功能编程),因为它使代码更清晰,结构化更好,并且可以防止许多类别的错误。”但是有人认为功能编程会导致效率较低的软件。
Microsoft的.NET计划经理,F#的发言人David Stephens说,功能编程还需要以新的方式考虑编程。抽象可能是一个问题:“当您使代码更加抽象时,当您远离操纵位并明确循环时,可能需要更多时间来理解这些抽象。”
什么是功能性语言?
用最基本的角度,功能编程是关于将计算视为数学功能。除了从一开始就以功能为功能的语言外,爪哇通过增加对Lambda表达式的支持,C#已变得更加功能。
但是功能编程的精确定义可能很难固定。这Clojurefun博客引用了它认为不正确的几个定义,包括将功能编程定义为具有更高级功能或支持lambdas的语言的功能样式。它说正确的定义是一种强调函数和不变数据的语言。
+也在网络世界上足球竞猜app软件编程世界:您需要知道的12种技术+
但是,其他人说,Clojure博客的首选定义不一定正确。Scala的Odersky说:“作者选择了一个,它偶然适合Clojure - 难怪,这是一个Clojure博客。”“我的解释与他的解释很近,但不一样。”
奥德斯基说,功能是一块代码,可将输入映射到输出,除此之外没有其他效果。“这是我们在这里使用的功能的数学定义。有时这些功能称为'Pure',将它们与C中的功能区分开。”Odersky说,一种功能性语言的重点是用纯函数编程,使其容易且强大地这样做。
他指出,功能编程可以与其他范式结合使用。“例如,功能与面向对象的功能非常好。从这个意义上讲,Scala是一种功能性语言。我同意,只有lambdas不能使语言发挥作用;这是必要的,但不够。”
Clojure开发人员Rich Hickey也是Systems Developer认知的CTO,他同意Clojure博客的主要论点。他说:“这篇文章正确地指出,一流或高阶功能并不是功能编程的全部内容。功能编程是使编程更像数学。”也就是说,Hickey说,功能编程仍然有一系列定义。
微软的斯蒂芬斯(Stephens)看到功能能力仅超过语言。他说:“世界上最受欢迎的功能编程语言是Excel。”一个简单的Excel工作表可能具有其中的列,例如A1 x2。
他说,微软的语言集成查询(LINQ)技术也提供了功能编程。“现在几乎每种编程语言都采用功能语言的功能。”
斯蒂芬斯(Stephens)认为不可变的数据对功能编程至关重要。他指出,并发 - 同时在数据上运行的多个线程的程序也受益于不变的数据。“我们将[F#]称为功能优先的语言,因为它来自其他语言的遗产。”他说,它还支持面向对象的编程,并使用C#和Visual Basic运行。
Clojure的Hickey认为,采用功能语言是对开发人员面临的压力增加的回应,这些日子不得不遇到更大的问题。希基说:“这样做,他们必须降低程序的偶然复杂性。现在,普遍存在的状态和副作用是程序中复杂性和错误的主要来源。”“虽然可以减少用非功能性语言编写的程序中的状态数量,但使用一种使功能性编程惯用性和默认设置的语言变得更加容易,更快。”
三种顶级功能语言的下一步
Scala创始人Odersky说,这位13岁的Scala是数据科学的主要语言。在JVM上的支持,估计有40万至500,000名用户。在短期呼叫中,计划对Java 8进行优化,其中最新标准Java升级的字节码指令将使Scala能够生成更有效的代码。
从长远来看,Scala将获得一个清理型系统,更安全的宏和更多平台支持,并提供更多的平台支持LLVM编译器后端正在考虑。计划进一步改进以提高Scala.js,用于将Scala汇编为JavaScript。
Hickey说,这位九岁的Clojure也基于JVM,已用于金融,零售,软件和娱乐活动。“它已应用于不同的应用领域,例如交易处理和分析,大数据,网络操作,预测分析,搜索,安全和消费者产品。”
这位11岁的F#由Don Syme的Microsoft Research创立,并由F#Foundation监督。它用于广泛的应用程序,并在Linux,OS X,Android,iOS,Windows和浏览器上运行。“我们现在正在努力的是使它起作用使用.NET核心,“史蒂芬斯说,“ .NET框架的开源,跨平台模块化版本。字符串插值,使编写字符串更易于编写。
这个故事,“功能语言:它们是什么,他们要去的地方”最初是由Infoworld 。