什么是类型安全?

343

"类型安全"是什么意思?


https://en.wikipedia.org/wiki/Type_safety - Basil Bourque
13个回答

2

类型安全是指只访问被授权访问的内存位置,并且以明确定义、允许的方式进行访问的代码。 类型安全的代码不能对该对象无效的对象执行操作。C#和VB.NET语言编译器总是生成类型安全的代码,在JIT编译期间验证其类型安全性。


你是指内存安全吗? - golopot

1

类型安全意味着可以分配给程序变量的值集必须符合明确定义和可测试的标准。类型安全变量会导致更强大的程序,因为操作变量的算法可以信任该变量仅采用一组明确定义的值之一。保持这种信任可以确保数据和程序的完整性和质量。

对于许多变量,可以分配给变量的值集在编写程序时定义。例如,名为“颜色”的变量可能被允许采用“红色”、“绿色”或“蓝色”的值,而不是其他任何值。对于其他变量,这些标准可能会在运行时更改。例如,名为“颜色”的变量只能采用关系数据库中“颜色”表中的“名称”列中的值,其中“红色”、“绿色”和“蓝色”是“颜色”表中“名称”的三个值,但计算机程序的其他部分可以在程序运行时添加到该列表中,变量可以在将新值添加到颜色表后采用新值。

许多类型安全的编程语言通过坚持为变量严格定义类型并仅允许将变量分配给相同“类型”的值来产生“类型安全”的错觉。这种方法存在一些问题。例如,程序可能有一个名为“yearOfBirth”的变量,它是一个人出生的年份,并且很容易将其类型转换为短整数。然而,它不是一个短整数。今年,它是一个小于2009且大于-10000的数字。但是,随着程序运行,这个集合每年增加1。将其设置为“short int”是不足够的。需要使此变量类型安全的是运行时验证函数,以确保该数字始终大于-10000且小于下一个日历年。没有编译器可以强制执行这样的标准,因为这些标准始终是问题域的唯一特征。

使用动态类型(或鸭子类型、显式类型)的编程语言,如Perl、Python、Ruby、SQLite和Lua,没有类型变量的概念。这迫使程序员为每个变量编写运行时验证例程,以确保它是正确的,否则就要承受未经解释的运行时异常的后果。根据我的经验,在静态类型的编程语言,如C、C++、Java和C#中的程序员往往会被安排认为静态定义类型就足以获得类型安全的好处。对于许多有用的计算机程序来说,这并不是真的,而且很难预测它是否适用于任何特定的计算机程序。

长话短说...你想要类型安全吗?如果是这样,那么编写运行时函数以确保当变量被赋值时,它符合明确定义的标准。缺点是对于大多数计算机程序来说,这使得域分析变得非常困难,因为您必须明确定义每个程序变量的标准。


3
Python变量是有类型的(实际上是_强类型的_)。例如尝试执行以下操作:"str" + 1,你将会收到一个错误。然而,这些类型检查是在运行时进行的,而不是在编译时进行的。 - mipadi

0

类型安全

在现代C++中,类型安全非常重要。类型安全意味着您正确使用类型,从而避免不安全的转换和联合。在C++中,每个对象都根据其类型使用,并且需要在使用之前初始化。

安全初始化:{}

编译器保护类型转换期间不会丢失信息。例如,
int a{7}; 初始化是OK的
int b{7.5} 编译器显示错误,因为存在信息丢失。

不安全的初始化:=或()

编译器在类型转换期间不保护信息丢失。
int a = 7 初始化是OK的
int a = 7.5 初始化是OK的,但信息会丢失。实际值将变为7.0
int c(7) 初始化是OK的
int c(7.5) 初始化是OK的,但信息会丢失。实际值将变为7.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接