是否有允许静态和动态类型的语言?

jro*_*uie 8 c# ocaml types programming-languages dynamic-languages

关于静态与动态类型的SO有很多问题,但我没有找到很多关于同时具有这两种语言的语言.让我解释.

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

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

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

dynamic fooVar = new FooClass();
Run Code Online (Sandbox Code Playgroud)

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

似乎OCaml与http://www.lexifi.com/blog/runtime-types也提供类似的东西.

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

ewe*_*nli 6

当然.它被称为"渐进式打字",我认为它是时髦的.

"逐渐打字"的表亲是"可选打字".在这两种情况下,包含和不包含静态类型的代码共存.但是,在"可选类型"中,语言的语义完全与静态类型无关,而在"渐进式键入"中,语义可能会考虑静态类型(如果可用).

从" 集成静态和动态打字 " 课程的页面,我看到他们学​​习

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

您可以将Dart添加到列表中,该列表提供可选类型,如位置文件Pluggable,Optional Type Systems中所示.