【问题标题】:Definition of statically typed and dynamically types静态类型和动态类型的定义
【发布时间】:2012-07-11 22:08:36
【问题描述】:

这两个定义哪一个是正确的?

  • 静态类型 - 在编译时检查类型匹配(因此只能应用于编译语言)
  • 动态类型 - 在运行时检查类型匹配,或者根本不检查。 (该术语可用于编译或解释语言)

  • 静态类型 - 类型被分配给变量,所以我会说 'x 是 int' 类型
  • 动态类型 - 类型被分配给值(如果有的话),所以我会说 'x 持有一个 int'

根据这个定义,静态或动态类型与编译或解释语言无关。

哪一个是正确的,还是两个都不完全正确?

【问题讨论】:

    标签: static-typing dynamic-typing


    【解决方案1】:

    查看静态这个词的一个有用的方法是:静态属性是那些在所有可能的输入上为程序的所有可能执行而持有的属性。然后,您可以查看任何给定的语言或类型系统,并考虑它可以验证哪些静态属性,例如:

    • JavaScript:没有段错误/内存错误

    • Java/C#/F#:如果已编译的程序和变量的类型为 T,则该变量仅保存该类型的值 - 在所有执行中。但是,遗憾的是,引用类型也承认 null 作为一个值 - billion dollar mistake

    • ML 没有null,使上述保证更强

    • Haskell 可以验证有关副作用的语句,例如“此程序不会在标准输出上打印任何内容”之类的属性

    • Coq 还验证终止 - “此程序在所有输入上终止”

    您想验证多少,这取决于口味和手头的问题。所有的魔法(验证)都是有代价的。

    如果您以前从未见过 ML,请尝试一下。至少花 5 分钟关注 Yaron Minsky 的talk。它可以改变你作为程序员的生活。

    【讨论】:

      【解决方案2】:

      哪个是正确的,或者哪个都不完全正确?

      第一对定义更接近,但并不完全正确。

      静态类型 - 在编译时检查类型匹配(因此只能应用于编译语言)

      这很棘手。我认为如果一种语言被解释但在执行开始之前进行了类型检查,那么它仍然是静态类型的。 OCaml REPL 几乎就是一个例子,除了它在技术上将源代码编译(和类型检查)成自己的字节码,然后解释字节码。

      动态类型 - 在运行时检查类型匹配,或者根本不检查。

      而是:

      动态类型 - 类型检查在运行时完成。

      无类型 - 未进行类型检查。

      静态类型 - 类型被分配给变量,所以我会说“x 是 int 类型”。

      动态类型 - 类型被分配给值(如果有的话),所以我会说'x 持有一个 int'

      变量无关紧要。尽管您只能在许多静态类型语言的源代码中的变量和函数定义中显式地看到类型,但所有子表达式也具有静态类型。例如,"foo" + 3 通常是静态类型错误,因为您无法将字符串添加到 int 但不涉及变量。

      【讨论】:

        【解决方案3】:

        我喜欢后一种定义。考虑在 Java 或 C++ 等面向对象语言中从基类转换为派生类时的类型检查,这符合第二个定义而不是第一个定义。它是一种带有(可选)动态类型检查的编译语言。

        【讨论】:

        • 这个动态检查如何?并且这两个定义都允许编译语言被动态类型化。
        • @baruch 从基类转换为派生类会导致运行时类型检查。也就是说,根据定义,动态类型。
        【解决方案4】:

        在我看来,第二个定义更好,假设您不是在寻找关于事情为什么或如何运作的解释。

        最好还是这么说

        • 静态类型为变量提供无法更改的显式类型
        • 动态类型为变量提供可以更改的隐式类型

        【讨论】:

        • 我不确定“显式”。使用类型推断,程序员不会显式地为变量指定类型。
        • 我没有使用过具有类型推断功能的语言,对此我一无所知。
        猜你喜欢
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 2012-02-05
        • 2016-12-24
        相关资源
        最近更新 更多