Warm tip: This article is reproduced from serverfault.com, please click

computer science-静态类型的语言和动态类型的语言有什么区别?

(computer science - What is the difference between statically typed and dynamically typed languages?)

发布于 2009-10-04 22:36:10

我听到很多新的编程语言是动态类型的,但是当我们说一种语言是动态类型还是静态类型时,这实际上意味着什么呢?

Questioner
Rachel
Viewed
0
17.5k 2019-01-08 07:04:03

静态类型语言

如果在编译时知道变量的类型,则将使用静态类型的语言。对于某些语言,这意味着你作为程序员必须指定每个变量的类型(例如:Java,C,C ++);其他语言提供某种形式的类型推断,即类型系统推断变量类型的能力(例如:OCaml,Haskell,Scala,Kotlin)

这里的主要优点是编译器可以完成所有类型的检查,因此在很早的阶段就捕获了许多琐碎的错误。

示例:C,C ++,Java,Rust,Go,Scala

动态类型语言

如果一种语言与运行时值关联,而不是命名为变量/字段/等,则该语言是动态类型的。这意味着作为程序员,你可以更快地编写代码,因为你不必每次都指定类型(除非使用带有类型推断的静态类型语言)。

示例:Perl,Ruby,Python,PHP,JavaScript

大多数脚本语言都具有此功能,因为仍然没有编译器执行静态类型检查,但是你可能会发现自己正在寻找由于解释器错误解释变量类型而导致的错误。幸运的是,脚本通常很小,因此错误没有太多隐藏的地方。

大多数动态类型化语言的确允许你提供类型信息,但并不要求提供此类信息。目前正在开发的一种语言Rascal采用了一种混合方法,该方法允许在函数内进行动态键入,但对函数签名强制执行静态键入。