强弱类型

强弱类型(Strong and weak typing)表示在计算机科学以及程序设计中,经常把编程语言类型系统分为强类型(英语:strongly typed)和弱类型(英语:weakly typed (loosely typed))两种。这两个术语并没有非常明确的定义,但主要用以描述编程语言对于混入不同资料类型的值进行运算时的处理方式。强类型的语言遇到函数引数类型和实际调用类型不符合的情况经常会直接出错或者编译失败;而弱类型的语言常常会实行隐式转换,或者产生难以意料的结果。这对术语在短短的电脑历史中,早已含括了更多的意义,而且时常很难知道写的人究竟要表达哪个意思。

解释

编程语言专家 Benjamin C. Pierce,《Types and Programming Languages》和《Advanced Topics in Types and Programming Languages》的作者,曾说:

“我花了几个星期…试着弄清楚“强类型”、“静态类型”、“安全”等术语,但我发现这异常的困难…这些术语的用法不尽相同,所以也就近乎无用。”[1]

大致而言,“强类型”隐含着编程语言对容许混合情况出现加上了严格的限制,以避免代码以无效的资料使用方式编译或执行。例如,整数除法运算不可用于字符串;链表上的运算步骤不可用于数字。然而,这些限制的本质和效力是极易改变的。

强类型在文献中的含义

已经被写作者认定为“强类型”的一些要素包括:

  • 静态类型不同于动态类型。在静态类型系统中,类型是与变量相连系的名称(通常是在声明时),而不是值(通常是在初始化时)。类型也可借由编译器来推断。
  • 通过语言定义,对类型约束违规的编译时间检查的托管要求。就是说,编译器确保操作只发生在对这个运算有效的操作数上。
  • 类型安全;就是说,拒绝(在要么编译时间要么执行时间)尝试忽视资料类型的操作或函数调用。在更严格的设置下,通过证明进行性和藏存性来证明关于形式语言的类型安全
  • 禁止类型转换。某个类型的值,不论是不是以显式或隐式的方式,都不可转换为另一个类型。
  • 但是某些作者,把“强类型语言”称呼保留给省略隐式类型转换(就是说编译器为了利益编程者而插入的转换)的语言。对于这些作者,编程语言是强类型的,如果类型必须通过通常叫做“强制”的显式符号来转换。
  • 无法规避类型系统。某些语言允许程序员获取值的表示法之下的东西(即位模式),这有可能规避类型系统。
  • 有复合类型的复杂而细致的类型系统。
  • 资料对象中固定且不变的类型。给定资料对象的类型在这个对象的生命期内不改变。例如,类实例不可以改变它们的类。
  • 在执行程序之前,强类型就保证了执行时期的程序行为,其以静态分析或其它的机制提供。

编程语言中的含义变异

参阅

  • 资料类型,更详尽的类型问题

参考文献

  1. ^ 「強型別」指的是什麼. [2007-03-30]. (原始内容存档于2007-03-23).