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

时间:2012-11-15 14:49:23

标签: c# types programming-languages ocaml dynamic-languages

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

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

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

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

dynamic fooVar = new FooClass();

在这种情况下fooVar是动态输入的。

似乎带有http://www.lexifi.com/blog/runtime-types的OCaml也提供了这样的东西。

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

1 个答案:

答案 0 :(得分:6)

不确定。它被称为“渐进式打字”,我认为它是时髦的。

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

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

  

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

您可以将Dart添加到列表中,该列表建议使用位置文件Pluggable, Optional Type Systems中的可选输入。