12 language-agnostic programming-languages terminology
如果一种语言是类型安全的,那么这意味着可以自动假设它是静态类型的,因为你必须在编译时检查类型吗?
Dan*_*Dan 12
例如,C是静态类型而不是类型安全的,而Haskell是静态类型和类型安全的.大多数(全部?)动态类型语言都是类型安全的,因为它们具有在运行时检查类型的方法,以确保它们是正确的.此外,这些语言假设因为您选择了包含运行时类型信息的性能损失,您可能希望尽可能有效地使用该信息,因此通常不允许将一块内存解释为错误类型.
动态类型语言还有一种额外的类型安全措施,即强制措施.例如,如果你键入[] + []
javascript,它将看到操作数+
是数组而不能直接添加,因此将它们都转换为字符串,给出""
(空字符串)的结果.
有些语言,比如javascript,通常会将其他东西强制转换为字符串,而PHP则会将字符串强制转换为数字以进行比较.
编辑:类型安全意味着不允许将存储类型A的内存块解释为类型B的类型.作为类型不安全的示例,C++具有reinterpret_cast
运算符,这意味着"将任何内容转换为任何其他东西,即使它没有"这样做是有道理的." 例如,
float a = 6.2;
int b = reinterpret_cast<int>(a);
//b now contains some form of garbage
Run Code Online (Sandbox Code Playgroud)
有关类型安全的更完整说明,请参阅此答案.