动态语言和函数式语言有什么区别?

7 functional-programming dynamic-languages

我经常发现开发人员一起使用术语功能语言和动态语言,并想知道为什么它们总是被放在一起.它们之间有什么区别?语言既可以动态又有功能吗?他们互相补充吗?为什么我们还需要它们呢?我是一个C#程序员,还没有理解这整个动态/功能的东西(C#将在第4版中有一些动态功能.它还能运行吗?这里发生了什么?).

谢谢,亚伯拉罕

xto*_*ofl 8

动态类型是一种类型系统,与"功能"正交,这是一种编程范式.

动态"语言"实际上是动态类型的.这意味着您没有对变量类型进行编译时检查.

函数式语言为lambda演算提供了大量支持 - 匿名函数.

,做动态类型,一种语言的例子,并支持匿名函数:JavaScript的.Ruby也有一些功能样式支持.还有其他人.


Gis*_*shu 8

把它放在一个简单(但不准确)的答案中

  • 动态语言类型(类的名称)与其克星静态类型语言相比不那么重要的语言.变量可以在任何给定的时间点分配给它的不同类型的对象.方法调用在运行时解析.这意味着你失去了静态类型(编译器警告)的好处,但简单的方法变得通用 - sort(list)适用于字符串列表以及整数列表.例如Ruby et.所有
  • 功能语言重视不变性.程序是根据越来越大的功能(通常是自下而上)编写的.对象状态和可变性的概念是不受欢迎的.在这种情况下,一个函数自给自足的(根据维基百科这个术语是纯粹的):产生输出所需的一切都在于它所接收的输入.它也不会产生任何副作用(除非它明确提到它)并返回给定输入的一致输出.这可以产生优雅的代码(参见:流畅的接口),其中输入数据通过diff函数流水线化以产生最终输出,例如LISP et.all

然而,语言越来越混乱,语言越来越好......你可以拥有一种既可以是一种语言,也可以两种语言都不是.
例如,主要是静态C#在3.0中拾取lambda表达式并引入4.0的动态功能