什么使编程语言有资格被称为动态语言?我应该使用动态编程语言来解决什么类型的问题?静态编程语言和动态编程语言之间的主要区别是什么?
发布于 2011-02-09 05:22:24
我不认为这里有非黑即白的东西--在动态和静态之间有一个完整的光谱。
让我们为光谱的每一边举两个极端的例子,看看这会把我们带到哪里。
Haskell在静态方向上是一个极端。
所以对于静态语言,我通常认为:需要相当长的编译时分析,类型系统将防止我犯愚蠢的错误,但也会阻止我做一些实际上有效的事情,如果我想在运行时对程序进行任何操作,这将是一种痛苦,因为程序的运行时表示(即其编译形式)与实际语言本身不同。此外,如果我没有预见到这一点,那么在以后修改这些东西可能会很痛苦。
Clojure在动态方向上是一个极端。
对于动态语言,我通常认为:很短的编译步骤(基本上只是阅读语法),如此快速和渐进的开发,实际上它允许我做的事情没有限制,但不会阻止我犯愚蠢的错误。
正如其他帖子所指出的那样,其他语言试图采取更多的中间立场--例如,像F#和C#这样的静态语言通过一个单独的API提供反射功能,当然也可以通过使用像F#的REPL这样的聪明工具来提供增量开发。动态语言有时提供可选的类型(如球拍、Strongtalk),而且通常,似乎有更高级的测试框架来弥补编译时缺乏任何健全检查的不足。此外,类型提示虽然在编译时不会被检查,但对于生成更有效的代码是有用的提示(例如Clojure)。
如果您正在寻找解决给定问题的正确工具,那么这肯定是您可以查看的维度之一-但它本身不太可能强制做出决定。考虑一下你正在考虑的语言的其他属性--是函数式的,还是面向对象的,还是逻辑的,或者……语言?对于我需要的东西,它有没有一个好的框架?我是否需要稳定性和二进制向后兼容性,或者我可以忍受编译器中的一些波动?我需要广泛的工具吗?等等。
发布于 2011-02-06 20:02:20
动态语言在运行时执行许多任务,而静态语言在编译时执行这些任务。
有问题的任务通常是一个或多个:类型系统、方法分派和代码生成。
这也很好地回答了关于它们使用的问题。
发布于 2011-02-06 20:02:13
在使用中有不同定义的lot,但一个可能的差异是:
有些语言很难归类为静态类型或动态类型。例如,C#传统上被认为是一种静态类型的语言,但是C# 4.0引入了一个名为dynamic的静态类型,它在某些方面更像动态类型而不是静态类型。
https://stackoverflow.com/questions/4913105
复制相似问题