强弱型别(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).