将静态类型代码与动态类型代码进行比较 - 成本和收益

时间:2009-01-07 03:11:28

标签: statistics strong-typing error-detection

无论它的优点是什么,Adobe的Actionscript 3提供了探索类型化和非类型化语言后果的独特机会,因为它几乎是javascript的严格超集,具有严格类型声明的所有语法优点/开销,声明性铸造等。

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

这让我想知道是否有任何关于强类型的真正好处的定量证据,特别是在编译期间的错误检查方面,错误率,编程生产率和代码量;或者我们的观点完全基于猜测和推测?有没有其他语言可以双向使用(不包括老式的VB - 不管是一种备受推崇的语言。)

我花了很多时间使用这两种语言,但没有最终确定我喜欢哪种方式,而且我宁愿不添加轶事证据 - 我正在寻找客观信息。

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是编程中最伟大的宗教战争之一,也许仅仅是因为真正的编辑EMACS与撒旦邪恶的产生之间的冲突。

基本上,如果用动态语言编写的程序是正确的,那么它可以转换为静态类型的语言并且仍然是正确的,反之亦然。真正静态类型的langfuage的优点是可以在编译时以静态类型语言识别在运行时以动态语言显示的错误。

在这些情况下经常被忽略的是,静态类型语言通常具有逃避口号(如类型转换),显然动态语言可以使用类型推断来推断,并将静态类型视为动态表达式的类型

在幕后,真正重要的是程序员。如果程序员认为程序正确,那么它将是静态或动态语言。我不知道有任何好的实验证据表明其中任何一个在实践中更有效率或更容易出错。

答案 2 :(得分:1)

静态打字的价值对我来说似乎非常有限,如果你像我一样相信你不能说一件软件的事情是真的,除非你有一个测试证明是这样的。如果你接受并实践它,那么在编译时或测试时是否识别出错误就无关紧要了。

此时,我宁愿更简洁地使用两种语言,根据我的经验,这些语言是动态语言。

另一方面,静态打字只有在你没有编写测试时才能真正帮助你。如果是这种情况,静态类型可能不足以确保软件的正常运行。

答案 3 :(得分:0)

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

静态类型表示在编译期间检查类型(无论编译时间在语言中是什么意思)。 动态类型表示在执行表达式/语句时检查类型。 强类型意味着您不能将指针颠覆(强制转换)为整数。 弱打字与强打字相反。

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

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

答案 4 :(得分:0)

弱打字需要更多维护时间。随着程序变得越来越复杂,由于没有编译器来解决明显的问题,因此会出现更多问题。不建议用于大型复杂项目。我是根据经验说的。

答案 5 :(得分:-1)

统计数据。将它们的变量和xpressions作为固定类型,由程序员明确说明或者用。编译器。使用它。信息,类型检查将在编译时进行。虽然动态类型的lang的值是固定的,但是变量和xxpressions是不固定的。由于计算操作数的时候,它很可能返回不同的值,然后在计算操作数后执行类型检查。在计算之后但在运行时执行操作之前