函数式编程语言(functional programming language):编程
一、什么是函数式编程语言?并发
函数式编程语言(functional programming language)或称函数程序设计,又称泛函编程,是一种编程典范,它将计算机运算视为数学上的函数计算,而且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。编程语言
函数式编程语言的特征:模块化
(1)以“函数”为首,如同命令式语言中的“变量”,函数能够赋值给其余变量,能够做为其余函数的参数,或者做为其余函数的返回值。函数式编程
(2)不修改变量的值函数
(3)只有表达式,没有语句。此处的语句指的是没有返回值得某些操做。post
(4)引用透明(Referential transparency),函数的运行不依赖与外部变量或“状态”,简单的说就是,同一个输入(参数),老是会产生同一个输出(返回值),这与数学函数的特征很一致。命令式语言由于全局变量等的存在,就没法作到这一点。单元测试
(5)对比命令式语言,递归形式的循环。测试
二、函数式编程语言有哪些?spa
纯函数式编程语言:
强静态类型:Concurrent Clean、Haskkell、Miranda
弱类型:Lazy K
非纯函数式编程语言:
强静态类型:F#、ML、OCaml、Scala
强动态类型:Erlang、LISP、LOGOScheme、Clojure、Mathematica、R
强弱型:Unlambda
其余函数编程语言:
APL、XSLT
三、函数式编程语言为何会流行?
1. 代码简洁,开发快速。函数式编程大量使用函数,减小了代码的重复,所以程序比较短,开发速度较快。
2. 接近天然语言,易于理解。函数式编程的自由度很高,能够写出很接近天然语言的代码。
3. 更方便的代码管理。函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果一定相同。所以,每个函数均可以被看作独立单元,颇有利于进行单元测试(unit testing)和除错(debugging),以及模块化组合。
4. 易于"并发编程"。函数式编程不须要考虑"死锁"(deadlock),由于它不修改变量,因此根本不存在"锁"线程的问题。没必要担忧一个线程的数据,被另外一个线程修改,因此能够很放心地把工做分摊到多个线程,部署"并发编程"(concurrency)。
5. 代码的热升级。函数式编程没有反作用,只要保证接口不变,内部实现是外部无关的。因此,能够在运行状态下直接升级代码,不须要重启,也不须要停机。