当使用强类型语言编码时,静态检查是否比动态代码分析提供任何独特的优势?
When coding in a strongly typed language does static checking offer any unique benefits over dynamic code analysis?
当使用一种被认为是强类型的语言时,静态代码分析是否提供了动态代码分析无法提供的任何东西?
要回答您的问题,是,一种进行静态检查的强类型语言具有优势。
为什么?
举个例子,考虑一种进行静态类型检查的编程语言(一种像 OCaml 这样的函数式语言)与一种像 Python 这样进行动态类型检查的语言。
静态类型检查允许类型安全在代码在运行时执行之前。而动态类型检查仅在 运行时 期间检查类型安全。
这意味着如果你没有在进行static类型检查的语言中使用正确的类型,它会被捕获在编译时,根本不会执行。它会在代码 运行 之前捕获所有这些类型错误。如果它没有遇到任何问题,它才会执行。
另一方面,在动态类型语言中,即使有未解决的类型错误,它也会编译和执行,并且在执行过程中,如果遇到类型它无法解决的错误,它将抛出异常并退出。
在小程序上,这些看起来差别不大,但如果你从大范围考虑,如果你的程序需要很长时间来计算某些东西,并且在动态类型语言上,只会捕获接近执行结束时出错,你只是浪费了很多时间和资源,对吧? (至少这是一个帮助我理解它提供了动态代码分析所没有的好处的例子)
如果您想知道,Java 是一种强类型语言。 SO Q&A on whether C is strongly typed or not
strong/weak 类型语言和 static/dynamic 语言之间存在细微差别。 strong/weak 类型指的是 一种语言对其类型的严格程度。而当 static/dynamic 是 时 它是必需的。 (编译时或运行时)
Source
希望这能回答您的问题!
一些参考:
(是的,维基百科不是参考,但它为 IMO 提供了这种情况的最佳示例)
当使用一种被认为是强类型的语言时,静态代码分析是否提供了动态代码分析无法提供的任何东西?
要回答您的问题,是,一种进行静态检查的强类型语言具有优势。
为什么?
举个例子,考虑一种进行静态类型检查的编程语言(一种像 OCaml 这样的函数式语言)与一种像 Python 这样进行动态类型检查的语言。
静态类型检查允许类型安全在代码在运行时执行之前。而动态类型检查仅在 运行时 期间检查类型安全。
这意味着如果你没有在进行static类型检查的语言中使用正确的类型,它会被捕获在编译时,根本不会执行。它会在代码 运行 之前捕获所有这些类型错误。如果它没有遇到任何问题,它才会执行。
另一方面,在动态类型语言中,即使有未解决的类型错误,它也会编译和执行,并且在执行过程中,如果遇到类型它无法解决的错误,它将抛出异常并退出。
在小程序上,这些看起来差别不大,但如果你从大范围考虑,如果你的程序需要很长时间来计算某些东西,并且在动态类型语言上,只会捕获接近执行结束时出错,你只是浪费了很多时间和资源,对吧? (至少这是一个帮助我理解它提供了动态代码分析所没有的好处的例子)
如果您想知道,Java 是一种强类型语言。 SO Q&A on whether C is strongly typed or not
strong/weak 类型语言和 static/dynamic 语言之间存在细微差别。 strong/weak 类型指的是 一种语言对其类型的严格程度。而当 static/dynamic 是 时 它是必需的。 (编译时或运行时) Source
希望这能回答您的问题!
一些参考: (是的,维基百科不是参考,但它为 IMO 提供了这种情况的最佳示例)