什么是类型安全?

9
我最近参加了一次Brainbench考试,获得了高分,但有几个问题对我来说很难。也许是因为英语不是我的母语...其中一个问题是:

以下哪项描述了类型安全?

  1. 用于确保CLR中引用和值类型安全的编程结构
  2. 通过禁止非托管访问来防止内存泄漏
  3. CLR特有的功能,提供确保类型不能访问其它AppDomain中的内存的保证
  4. 通过使用强名称密钥来保护程序集及其类型的机制
  5. 处理分配对象始终以兼容方式访问的概念

我认为是1或5,但它们听起来都很奇怪 :(

你认为呢?


1
我之前参加过微软考试,有几个问题 根本 不太合理。 - Dead account
1
你理解英语有困难可能更多是因为整个英语语言被滥用/改变得太多了。很多单词可以有至少5个不同的意思(不包括技术术语),而由多个单词组成的单词很容易与构成它的单个单词毫无关系。我读过一系列书中有两句话,第一句是“为什么你坚持用别的东西来称呼某个东西”,第二句是“交流已经够难了,为什么要让一个单词有多种含义呢?” - Bryan
7个回答

10

实际上,我认为是选择方案五,因为类型安全与安全性无关。


1
你们两个应该自己解决 :) - Alan
2
我认为我同意,但是话说得不好。我不确定在英语中是否有一种更间接的方式来描述类型安全,比如“分配的对象总是以兼容的方式访问”。 - Joel Mueller

7
类型安全是一种语言特性,旨在实现[Robin Milner][1]关于ML编程的著名口号:“良好类型化的程序不会出错。”
这个口号需要一些解释才能被正确理解,但基本上意味着程序不会因为运行时类型错误而失败,即当应用于构造函数或函数的参数具有不兼容类型值时。
考虑一种语言,它允许整数、整数函数作为一等值、函数抽象和部分函数应用,并将通常的整数算术运算符定义为二元函数。类型安全的属性是编译器强制执行的,以确保加法运算符的两个参数都是表达式,可以简化为整数,而不是函数。如果程序是良好类型化的,则编译器可以为其生成可执行对象。否则,它会标记编程错误并中止。

1
如果我必须参加那个测试,我会选择第五个选项。 - james woodyatt
我看不出这如何回答问题。问题并非“定义类型安全”,而是“这些晦涩的迂回说法中哪个最不正确”。 - Code Abominator

4
根据下面提供的msdn链接, http://msdn.microsoft.com/en-us/library/hbzz1a9a.aspx 类型安全的代码只能访问其被授权访问的内存位置。(在本讨论中,类型安全特指内存类型安全,并且不应与更广泛的类型安全混淆。)例如,类型安全的代码不能从另一个对象的私有字段中读取值。 它只以明确定义的、允许的方式访问类型。

1
选项5 处理保证分配的对象始终以兼容的方式访问的概念
类型安全处理确保当您创建Foo时,不能将其视为Bar。如果您不知道它是什么类型(或没有保证),则编写的代码可能无法按预期工作。

1

类型安全的编程语言会在编译时确保您不会在一个类型上调用不兼容的方法,例如在 int 类型上调用 length() 方法。非类型安全的编程语言则会在运行时解决这个问题。因此,选择第五个。


2
这并不完全正确。类型安全与类型是静态还是动态无关。例如,C语言是一种静态类型的语言,允许并且经常需要使用不安全类型(强制转换),而Smalltalk是一种动态类型且类型安全的语言。 - Tyler McHenry

1

正如其他人所说,选择5...

总的来说 - 对于.NET,请查看通用类型系统(CTS),它可以实现跨语言和类型安全性。

请查看: http://en.wikipedia.org/wiki/Type_safety ...


0

这是选项#5。类型安全是一种保证,而不是具体的东西。.NET代码可能是类型安全的...比如在一个程序集使用不安全代码执行非托管调用(PInvoke)的情况下。在JIT期间,会执行一个过程来验证正在被JIT编译的类型是否确实是类型安全的。我不知道这个过程的任何细节,但如果一个JIT编译的类型通过了,那么它就被认为是可验证的类型安全。


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