静态打字的优点?

时间:2012-09-12 12:43:13

标签: java c++ objective-c static-typing

我并不是说静态打字是最好的,只是想知道它真正具有什么优势。我以为他们是:

  • 更快的代码
  • 提前发现一些错误

看看我自己的用法(在Java中),我主要是为编译器工作。当它捕获类型错误时,它通常只是类型中的错误,而不是代码错误 - 事实上,我不记得它曾经捕获过一个真正的错误(尽管它可能有)。

有时,我已经通过代码来收紧类型 - 例如,可能有一组类实现了某些接口I,因此可以保存任何这些类的字段的类型为I.但是这样可能过于宽泛:有时也有一些字段只能容纳这些类的子集,因此可以通过创建一个新的接口J来收紧类型系统,只能通过类的子集实现,并且这些字段的类型为J虽然这更“正确”,但令人难以置信的是乏味,如果发生变化,则非常脆弱。

所以,我认为更快的代码是主流编译语言(Java,C#,C,C ++,objective-C)中静态类型的主要好处,而类型安全性远远超过第二 - 尽管还有一些类型的利基-safety非常有用,例如用于集成电路验证的ml语言。我也听说静态类型在数据库中很重要。

但我认为还有另外一个优点:

  • 文档

您可以查看方法并了解有效参数的文档。对于自动生成的文档,参数类型被超链接到可用的接口和实现。我不认为这是一个杀手优势,但它是一个真正的优势。

显然,python和ruby等在没有静态类型的情况下表现很好。我只是想知道它的优点是什么 - 你怎么看?你有什么经历?

2 个答案:

答案 0 :(得分:2)

Java静态类型系统是一种过时的,过时的静态类型方法,已有近40年的历史。现代静态类型允许代码应满足的丰富的不变量规范,机器能够为这些不变量提供证明。 Haskell,Agda和ADA等语言说明了如何使用类型以相对较低的成本进行严格的软件验证(与测试相比)。

因此,除了为编译器提供更多信息的明显好处之外,导致代码比没有静态类型的代码更快,事实上现代类型系统是计算机辅助软件验证的重要工具。如果您使用的唯一类型系统是Java,那么您将看不到的东西。

答案 1 :(得分:0)

通过使用静态类型,您可以指示变量中应该包含哪种类型的数据。对于非静态,您必须在执行处理之前检查数据类型。例如,您可能期望一个整数过去您的方法,但没有什么可以阻止某人传入一个字符串。这让自己开启了痛苦的世界恕我直言。