9

SO上有很多关于静态和动态类型的问题,但我没有发现很多关于两者兼有的语言。让我解释。

似乎动态类型语言在快速原型设计方面具有优势,例如 Python 或 Perl,而静态类型语言(如 C++、OCaml)允许更多的编译时检查和优化。我想知道是否有一种语言可以同时允许两者:

  • 首先,使用动态类型、通用(即接受任何类型)打印功能进行快速原型设计,以便于调试和 REPL,并适应不断变化的设计选择
  • 然后,更改一些内容并将代码编译到库中,使用静态类型进行更多安全测试和最佳性能。例如,允许静态类型的更改可能是:声明变量(但不是注释所有内容,这要归功于类型推断)、添加编译器开关、使用特定函数而不是通用函数等。

在 C# 中,默认为静态类型,但您可以编写:

dynamic fooVar = new FooClass();

在这种情况下fooVar是动态类型的。

似乎带有http://www.lexifi.com/blog/runtime-types的 OCaml也提供了类似的功能。

请不要主观建议哪种语言最好,只有客观特征!

4

1 回答 1

7

当然。它被称为“渐进式打字”,我认为它很时髦。

“渐进式打字”的一个表亲是“可选打字”。在这两种情况下,带有和不带有静态类型的代码共存。然而,在“可选类型”中,语言的语义与静态类型完全无关,而在“渐进类型”中,语义可能会考虑静态类型,如果它们可用的话。

从课程“ Integrating Static and Dynamic Typing ”的页面,我读到他们学习

集成静态和动态类型的最新语言的设计,包括 Typed Racket(以前的 Typed Scheme)、C# 4.0、Diamondback Ruby、Haskell、Sage 和 Thorn

您可以将 Dart 添加到列表中,该列表建议可选类型,如立场文件Pluggable, Optional Type Systems中所示。

于 2012-11-16T10:07:54.300 回答