更新:这个问题是我在2012年10月15日发表的博客的主题。感谢您提出的伟大问题!
语言“弱类型化”的真正含义是什么?
它的意思是“这种语言使用的类型系统令人讨厌”。相比之下,“强类型”语言是一种具有令人愉悦的类型系统的语言。
这些术语本质上是没有意义的,您应该避免使用它们。维基百科列出了“强类型”的
十一种不同含义 ,其中几种是矛盾的。这表明在涉及术语“强类型”或“弱类型”的任何对话中,造成混乱的可能性很高。
您真正可以肯定地说的是,正在讨论的“强类型”语言在类型系统上有一些其他限制,无论是在运行时还是编译时,都缺乏在讨论中的“弱类型”语言。没有进一步的上下文就无法确定该限制是什么。
不应使用“强类型”和“弱类型”,而应详细描述您所指的类型安全。例如,C# 在大多数情况下 是 静态类型的 语言, 类型安全的 语言和
内存安全的 语言 __。
C#允许违反所有三种形式的“强”键入。强制转换运算符违反了静态类型;它对编译器说:“我比您更了解此表达式的运行时类型”。如果开发人员错误,则运行时将抛出异常以保护类型安全。如果开发人员希望破坏类型安全性或内存安全性,则可以通过制作“不安全”块来关闭类型安全性系统来做到这一点。在不安全的块中,您可以使用指针魔术将int视为浮点型(违反类型安全性)或写入您不拥有的内存。(破坏内存安全。)
C#施加了在编译时和运行时都进行检查的类型限制,因此与进行较少的编译时检查或较少的运行时检查的语言相比,C#使其成为“强类型化”语言。C#还允许您在特殊情况下绕这些限制进行最终运行,与不允许您进行此类最终运行的语言相比,它是一种“弱类型”语言。
到底是什么 很难说。这取决于说话者的观点及其对各种语言功能的态度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)