类型安全VS静态类型?(Type Safe vs Static Typing?)

2019-08-02 14:56发布

如果语言是类型安全是否意味着人们可以自然而然地认为它的静态类型的,因为你会在编译时检查类型?

Answer 1:

C,例如,是静态类型,而不是类型安全的,而Haskell是静态类型和类型安全的。 大多数(全部?)动态类型语言是类型安全的,因为它们在运行时检查类型,以确保他们正确的事情的手段。 此外,这些语言假设,因为你选择了承担,包括运行时类型信息的性能损失,你会希望尽可能有效地使用这些信息,所以一般不允许解释的内存块的错误类型。

动态类型语言具有类型安全的附加措施,这是强制 。 例如,如果您输入[] + []在JavaScript中,它会看到,操作数+是数组,不能直接添加,等会他们都转换为字符串,给人的结果"" (空字符串) 。

有些语言,如JavaScript中,通常会迫使其他的事情串,而PHP例如将迫使串数字来比较它们 。

编辑:类型安全是指没有被允许解释的存储器保持A型的东西为B型的东西作为类型不安全的一个例子的块,C ++有reinterpret_cast运营商 ,这意味着“转换什么别的即使它不“T道理这样做。” 例如,

float a = 6.2;
int b = reinterpret_cast<int>(a);
//b now contains some form of garbage

对于类型安全的一个更完整的解释,看到这个答案 。



Answer 2:

我会毫不犹豫地调用动态类型语言类型安全的,但是它严格的在运行时检查类型,因为运行时可能来不及做有关错误的东西!

你可以理直气壮地称这种语言的强类型的,但我不会把它类型安全。

在编译时捕获错误让你有机会来解决它?

对于一个类型安全的语言的一个很好的例子,看看SPARK。

火花,索引关阵列的端部是一个类型的错误(每个阵列具有用于它的索引的新类型,你有一个值,该值是不兼容的与该类型)

你通常会证明,甚至有编译程序之前没有这样的错误...



文章来源: Type Safe vs Static Typing?