静态类型化 vs 动态类型化的语言

一般来说, 在静态类型化语言中, 变量在其生存期内绑定到特定类型。 它的类型不能更改, 它只能引用与类型兼容的实例和操作。 使用了类似 c/c ++ 等语言的方案:

  1. int a = 0;
  2. a = "hello"; // not allowed

在动态类型中, 类型绑定到值, 而不是变量。 因此,一个变量可以引用一个类型的值,然后被重新分配到一个不相关类型的值。 Javascript/PHP 是一个动态类型语言的例子:

  1. var a = 0;
  2. a = "hello"; // allowed

尽管动态语言具有生产率优势,但它可能不是所有应用程序的最佳选择,尤其是对于非常大的代码库和高性能应用程序。

优化动态语言(如PHP) 的性能比优化静态语言(如c) 更具有挑战性。在静态语言中,优化器可以利用附加在变量本身上的类型信息来做出决策。 在动态语言中, 优化器可用的此类线索较少, 因此优化选择更加困难。

虽然最近在动态语言优化方面取得的进展很有希望 (如 jit 编译), 但它们落后于静态语言的最新发展。 因此, 如果您需要非常高性能, 静态语言可能是更安全的选择。

静态语言的另一个小好处是编译器执行的额外检查。 编译器找不到逻辑错误, 这些错误的重要性要大得多, 但编译器可以提前找到仅在运行时动态语言中才能找到的错误。

Zephir 是静态和动态类型化的, 允许您在可能的情况下利用这两种方法。