c# - 是否有一种语言同时允许静态和动态类型?

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

<分区>

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 中建议可选类型.

关于c# - 是否有一种语言同时允许静态和动态类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399960/

相关文章:

function - 声明一个返回具有特定签名的函数的 Julia 函数

kotlin - Kotlin 语言是如何用 Kotlin 编写的?

c# - RAD 编程语言编写一个 windows 应用程序来显示文本、播放音频文件和显示弹出气球

c# - 使用 .net remoting 调用本地 "remote"?

c# - 在 C# 中一般创建对象

c - 在 C 中动态创建一个 TYPE 数组

typescript - 在 Typescript 中递归泛型?

programming-languages - 低,中,高级语言有什么区别?

c# - 从 Web 服务返回 XML 数据

c# - 在 C# 中解析 JSON