代码之家  ›  专栏  ›  技术社区  ›  dkretz

比较静态类型代码和动态类型代码-成本和收益

  •  0
  • dkretz  · 技术社区  · 17 年前

    无论其优点是什么,Adobe的Actionscript 3都为探索类型化语言与非类型化语言的区别提供了一个独特的机会,因为它几乎是javascript的一个严格超集,具有严格类型声明、声明式转换等的所有语法优势/开销。

    这使得比较两种方式编写的相同代码成为可能,同时分解出基本的语言语法。

    这让我想知道,是否有任何定量证据表明,在错误率、编程效率和代码量方面,强类型的真正好处,特别是在编译期间的错误检查方面;还是我们的观点完全基于猜测和猜测?还有其他语言可以同时使用吗(不包括老式的VB——无论哪种方式都不是一种受人尊敬的语言。)

    我花了大量时间学习这两种语言,但还没有最终决定我更喜欢哪种方式,而且我不想增加轶事证据——我在寻找客观的信息。

    6 回复  |  直到 17 年前
        1
  •  1
  •   Charlie Martin    17 年前

    这是编程领域的一场伟大的宗教战争,也许只有真正的编辑EMACS和邪恶的撒旦六世之间的冲突才能超越这场战争。

    然而,在这些情况下经常被忽略的是,静态类型的语言通常具有转义图案填充(如类型转换),而显然是动态的语言可以使用类型推理来推断显然是动态的表达式的类型,并将其视为静态类型。

        2
  •  1
  •   Felipe Lima    17 年前

    在我看来,像C#这样的强类型语言可以在编译时识别许多被忽略的错误,这些错误不会被松散类型的语言捕获,因此会在以后导致运行时错误。 我不认为这仅仅是一种推测,因为严格的编译可以预测在运行时可能导致错误的问题。这可能会消除大多数在实现过程中忽略的编码错误,但是编译器很容易找到并修复这些错误。

        3
  •  1
  •   sapientpants    17 年前

    静态类型的价值对我来说似乎非常有限,如果你像我一样相信,你不能说某个软件是真的,除非你有一个测试证明它是真的。如果您接受并实践了这一点,那么无论是在编译时还是在测试时识别bug,这在很大程度上都是无关紧要的。

    另一方面,静态类型只有在您不编写测试时才真正帮助您。如果是这样,静态输入可能不足以确保软件的正常运行。

        4
  •  0
  •   puppydogpoo puppydogpoo    17 年前

    OP和felipecsl对于在谈论打字规则时使用的术语感到困惑。

    静态类型表示在编译时检查类型(无论编译时在语言中是什么意思)。 例如,强类型意味着您不能将指针转换为整数。 弱类型与强类型相反。

    据我所知,没有“严格的打字”。

    现在让其他人来回答实际问题;-)

        5
  •  0
  •   Oliver Watkins    13 年前

        6
  •  -1
  •   sosly    15 年前

    统计类型语言。将其变量和表达式作为固定类型,由程序员明确说明或由程序员推断。编译器正在使用此。信息,这里的类型检查将在编译时执行。虽然动态类型的lang的值是固定的,但变量和xxpressions并不是固定的。由于计算操作数时,它可能返回不同的值,因此在计算操作数之后,即在计算之后但在运行时执行操作之前,会执行类型检查