一、什么是函数式语言?
函数式语言一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言。函数式语言主要成分是原始函数、定义函数和函数型。这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组)作为单一值处理;可以把函数作为参数,其结果也可为函数,这种定义的函数称为高阶函数,程序就是函数,程序作用在结构型数据上,产生结构型结果,从根本上改变了冯·诺伊曼式语言的“逐词”工作方式。
A:函数式语言的有两大指导理念。(源自作者:iamsonormal2333
链接:https://www.jianshu.com/p/3a4219838ce0)第一个理念:函数是头等值。
函数是值,值可以被随意地提供给变量或函数等等,如果将函数当作值,就意味着函数可以被当成参数被提供给其他函数,也可以在函数中当作返回值,甚至可以在函数中定义函数。
而头等这个概念则是意味着函数的使用是不受限制的。不妨把Scala中的函数与C/C++的函数指针做比较。虽然函数指针也可以被赋值给变量,也可以被当作参数传递给其他函数,但是函数指针只能指向全局函数,也不能定义匿名函数字面量等等。故函数指针不能被看作函数式编程。
第二个理念是函数英国把输入值映射成输出值,而不是就地修改程序。
二、函数式语言的种类
函数式语言有OCaml, Lisp、Haskell、Clean、F#、Meta Language三、为什么函数式语言会流行起来?
函数式语言具有并行、单元测试、没有额外作用、不修改状态、引用透明、代码部署热等特点。 由于代码简单,加快了开发的速度;由于函数式语言的并行特点,程序员在编程过程中无需修改代码程序就可并发执行,且运行期间程序不会产生死锁;函数式编程语言的代码十分简单,加快了开发的速度。并且由于在使用函数式编程语言时,程序员会大量使用到函数,从而减少了重复的代码,因而程序比较短。其次,函数式编程语言更加接近我们使用的自然语言,程序员在学习和使用它的时候更加快捷容易。函数式编程语言的自由度很高,十分接近自然语言写出的代码。另外,函数式编程语言的代码管理更加方便。函数式编程不会对外部产生依赖,也不会修改外界的状态。程序员只需把指定的参数给函数,相同的参数其返回的结果必定是相同的。最后,函数式编程语言的代码支持代码热升级。函数式编程的优势主要针对两点:
1. 不可变性(immutability)
2. 并行操作性(parallelism)
这两个概念其实与编程范式或编程语言无关。比如,Java也有不可变对象,只是需要通过自己编写实现方法来实现;而并行编程,近日在上频频露脸的就以为一大亮点。对于函数式编程在这两个方面的优势,我们有现成的论据可以引用。先看看这篇(这篇文章来自《》一书,而这本书的联合作者之一就是Scala创始人)。文中有这样的一句话:“不可变数据结构是函数式语言的一块基石。”而这篇《》一文中,则十分详细的描述了函数式语言天生的并行操作性:“函数式语言已经在简化并行开发中证明了它的作用, 这得益于它既不用共享内存,也不会产生副作用(side effect)的函数。”可以说,函数式编程在这两个方面上的优势是毫无疑问的。
事实上,这两个优势是同进同退的,因为良好的不可变性的使用才能确保不会成为并行操作时性能的瓶颈。而这个优势的重要性,前面的答案中已经很明显的给出来了:如今的CPU在增高频率上已经遇到了瓶颈,多核CPU成为趋势,因此能够充分发挥多核性能的应用程序将越来越重要。