Jiacheng

aha

野比大雄

编程语言的类型

Jiacheng / 2019-03-31


编程语言从不同维度有不同的划分:

动态类型语言与静态类型语言

首先,这里类型指编程语言中的数据类型,包括语言中的原始数据类型(整形,浮点型,字符串等),也包括在基本类型之上定义的数据类型,比如数组,类以及用户自定义的数据类型。数据类型限定数据的取值范围,运算法则,保证程序运行安全。用户自定义的数据结构可以提高程序抽象性。

而针对数据类型的检查,如果是在运行时期(run-time),则称之为动态类型语言,如果是在编译期(compile-time),则称之为静态类型语言。

这样就导致,常见动态类型语言都不需要显式地声明变量(explicit declaration),而静态类型语言则一般需要显式地变量声明^[也有些静态类型语言不需要,如ML、Haskell之类的函数式语言,编译器可以通过上下文进行类型推断(type inference),C# 3.0 与 Java 10 之后都有引入局部变量类型推断]。

动态类型语言优点:动态类型使元程序设计更为强大,且更易于使用,代码简明灵活、易于重用,适合泛型编程和快速原型开发。

静态类型语言优点:运行之前的类型检查可以增强代码可靠性,使编译器有可能进行优化处理从而提高运行效率,节省运行期的类型检查所占用的时间和空间,类型声明也可为程序起附加性帮助文档的作用。

弱类型语言与强类型语言

语言类型的强弱与语言是动态语言还是静态语言无关,强弱主要表现为语言对类型的约束强度,

强类型的关键在于禁止错误类型的参数继续运算,比如 haskell 的 int 就不能变成 double 。而弱类型则指一个语言可以隐式的转换类型(或直接转型),比如 C 语言中 int 可以被隐式转换为 double。

某些语言虽然也允许出现弱类型的特性以方便使用,但也会保留强类型语言的类型检查和保护,比如 C# 与 Java

类型安全语言与类型不安全语言

类型检查可以避免类型错误(type error),杜绝因类型问题而产生的错误。如果一个类型系统能完全做到这一点,它就被称为类型安全的。一般地,强类型语言被认为是类型安全语言,而若类型语言被认为是类型不安全语言。

另外,关于动态语言与静态语言的划分,和动态类型语言与静态类型的划分是两个概念。动态语言是能在运行时改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。相比而言,静态语言虽然也可能实现同样的效果,但既不方便也不自然^[一些设计模式(如装饰模式、职责链模式、状态模式、访问者模式等)就是为了赋予静态语言一定的动态特征。]。如果说动态类型语言的动态体现在类型上,那么动态语言的动态则体现在结构和功能上。大部分动态语言都使用动态类型,但也有些不是。C、C++ 等语言则不属于动态语言。

Reference

冒号课堂:数据类型

维基百科:类型系统

维基百科:动态语言