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