我正在查看编译器课程的讲义,其中一张幻灯片说:
强类型语言保证接受的程序是类型安全的
但是,我在其他地方找不到任何证据。
例如,维基百科将 c++ 列为强类型语言,但也将 c 列为类型不安全的语言。
那么有什么关系呢?幻灯片是错的,还是我错过了什么?
我正在查看编译器课程的讲义,其中一张幻灯片说:
强类型语言保证接受的程序是类型安全的
但是,我在其他地方找不到任何证据。
例如,维基百科将 c++ 列为强类型语言,但也将 c 列为类型不安全的语言。
那么有什么关系呢?幻灯片是错的,还是我错过了什么?
“强类型”不是一个定义非常明确的概念。最好将其解释为更准确的内存安全的同义词(即,程序永远不会通过未定义的行为破坏自己的内存)。
在类型论中,从不使用术语“强类型”。相反,有人谈到健全的类型系统。此外,任何不健全的打字规则通常根本不被认为是适当的类型系统。
在非正式用法中,“强类型”也适用于“动态类型”语言,从理论角度来看,这更没有意义。在类型论的术语中,这些语言甚至没有类型。
很久以前,Luca Cardelli 通过区分两个独立的维度引入了更连贯的语言安全分类:类型化/非类型化和安全/不安全。汇编是无类型且不安全的,C 是有类型但不安全的,JavaScript 是无类型但安全的,Java 或 ML 是有类型且安全的。参见例如http://www.lucacardelli.name/Papers/TypeSystems.pdf