Gai*_*ter 40 static programming-languages dynamic
什么使编程语言被称为动态语言?我应该使用动态编程语言来解决哪些问题?静态编程语言和动态编程语言之间的主要区别是什么?
Kur*_*out 30
我不认为这里有黑色和白色 - 动态和静态之间存在着完整的光谱.
让我们为频谱的每一侧采用两个极端的例子,看看它带给我们的地方.
Haskell是静态方向的极端.
因此,对于静态语言,我通常认为:需要相当冗长的编译时分析,类型系统将阻止我犯下愚蠢的错误,但也会阻止我做一些实际上有效的事情,如果我想在运行时对程序进行任何操作,它会有点痛苦,因为程序的运行时表示(即它的编译形式)与实际语言本身不同.如果我没有预见到,稍后修改一些东西可能会很痛苦.
Clojure是动态方向的极端.
对于动态语言,我通常认为:简短的编译步骤(基本上只是阅读语法),快速和渐进式开发,几乎没有限制它允许我做什么,但不会阻止我犯愚蠢的错误.
正如其他帖子所指出的那样,其他语言试图采取更多的中间立场 - 例如F#和C#等静态语言通过单独的API提供反射功能,当然也可以通过使用F#的REPL等聪明的工具来提供增量开发.动态语言有时提供可选的类型(如Racket,Strongtalk),并且通常看起来有更先进的测试框架来抵消编译时缺乏任何健全性检查.同时键入提示,虽然未在编译时检查,但是有用的提示可以生成更高效的代码(例如Clojure).
如果您正在寻找针对特定问题的正确工具,那么这肯定是您可以看到的维度之一 - 但本身不可能以任何方式强制做出决定.考虑一下您正在考虑的语言的其他属性 - 它是功能性的还是OO或逻辑或......语言?它对我需要的东西有一个很好的框架吗?我是否需要稳定性和二进制向后兼容性,或者我可以在编译器中使用一些流失?我需要大量的工具吗?等等.
使用中有许多不同的定义,但一个可能的区别是:
某些语言很难分类为静态或动态类型.例如,C#传统上被认为是静态类型语言,但C#4.0引入了一种静态类型dynamic,在某种程度上表现得更像动态类型而不是静态类型.
| 归档时间: |
|
| 查看次数: |
16222 次 |
| 最近记录: |