<分区>
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,
visit the help center 指导。
关闭 10 年前 。
SO 上有很多关于静态类型与动态类型的问题,但我还没有发现很多关于同时具有这两种类型的语言的问题。让我解释一下。
似乎动态类型语言在快速原型(prototype)制作方面具有优势,例如Python 或 Perl,而静态类型语言(如 C++、OCaml)允许进行更多的编译时检查和优化。
我想知道是否有一种语言可以同时允许:
首先,使用动态类型、通用(即接受任何类型)打印函数快速制作原型(prototype),以便于调试和 REPL,并适应不断变化的设计选择
然后,更改一些内容并将代码编译到库中,使用静态类型进行更多安全测试和最佳性能。例如,允许静态类型化的更改可能是:声明变量(但不是注释所有内容,这要归功于类型推断)、添加编译器开关、使用特定函数而不是通用函数等。
在 C# 中默认是静态类型,但你可以这样写:
dynamic fooVar = new FooClass();
在这种情况下,fooVar
是动态类型的。
OCaml 似乎带有 http://www.lexifi.com/blog/runtime-types 也提供类似的东西。
关于哪种语言最好,请不要主观建议,只有客观特征!
当然。这叫做“渐进打字”,我认为它是时髦的。
“渐进打字”的表亲是“可选打字”。在这两种情况下,有和没有静态类型的代码共存。但是,在“可选类型”中,语言的语义完全与静态类型无关,而在“渐进类型”中,语义可能会考虑静态类型(如果它们可用)。
从类(class)“Integrating Static and Dynamic Typing ”的页面,我读到他们学习
The design of recent languages that integrate static and dynamic
typing, including Typed Racket (formerly Typed Scheme), C# 4.0,
Diamondback Ruby, Haskell, Sage, and Thorn
您可以将 Dart 添加到列表中,它在立场文件 Pluggable, Optional Type Systems 中建议可选类型.