大卫·惠勒的格言中“间接水平”是什么意思?

时间:2013-08-01 20:07:12

标签: computer-science indirection

我在一本书中读过这句话:

  

计算机科学中没有任何问题无法使用其他级别的间接解决。

有人可以解释一下吗? “间接水平”是什么意思?

根据我的理解,间接是使用值的指针而不是值本身的奇特名称。请为我澄清一下。

3 个答案:

答案 0 :(得分:31)

“间接”在最广泛的意义上使用了一些使用其他东西的东西。

因此,您的示例使用值而不是值的指针,在一个级别上符合此定义。指针是东西,值是其他东西。

通常这是范围更大的东西:

  • 使用网站以图形方式显示基于XML的服务生成的数据。在这里,网站是一个东西,隐藏在它背后的是数据,这是其他东西。
  • 使用操作系统访问显示屏。这是两层,至少是间接的。操作系统使用屏幕驱动程序。一件事用其他东西。然后屏幕驱动程序直接与屏幕硬件对话,导致它在这里和那里产生微小的光点。驱动程序是下一个使用其他硬件的东西。
  • 一个API处理高级别的事情并且API在较低级别处理相同的事情并不罕见。同样,在低级API之上添加了一个间接级别,我们称之为新的,改进的API。

最后一个例子或许可以解释这一切的“原因”。

当我们使用某些东西时,我们掌握它并学习如何将其抽象到更高的抽象层次,因此需要一个新的间接层,我们可以通过将一些工作卸载到新的API来更快地解决更大的问题。

答案 1 :(得分:6)

间接的潜在巨大优势之一是减少了耦合。这是另一种说法应该适当划分的方式。这通常有助于长期测试,可维护性和灵活性。

例如,如果您的应用程序需要读取一些持久化数据,而不是在整个应用程序中分散读取它的位置(以及如何)的具体知识,则将其隔离(将数据读取放入方法中)然后让应用程序的所有其他部分调用该方法来获取数据,而不是应用程序的每个部分都必须自己处理这些细节。

答案 2 :(得分:0)

好问题!我实际上在我的数据库课程中遇到了这个术语 level of indirection。本课程的幻灯片甚至没有提供任何关于“间接”或如何使用它的信息,但它向学生提出了这样一个问题: ... suppose the file is unordered by the non-key field DEPTNUMBER and we want to construct a secondary index on DEPTNUMBER with one level of indirection that stores record pointers.

你提到的理解让我明白了微妙的事情: From what I understood, indirection is a fancy name for using a pointer of a value instead of the value itself. enter image description here

这里我在问题中附上一张图片来说明。所谓的level of indirection不过是一些包含pointers的内存块,是indexesdata之间的桥梁。所以在这里,不是为数据文件中的每条记录设置一个索引,而是使用由 pointers 组成的附加层,使索引文件和间接层(记录指针块)之间的索引稀疏。 我对此的理解是,它通过为 unordered 数据文件提供稀疏(非密集)索引和密集索引,在内存使用和查找速度之间提供了很好的权衡。

不幸的是,我无法在互联网上找到对术语 level of indirection 关于它的数据库实施的很好解释,而我学校的幻灯片只是垃圾(它甚至没有掩盖它,但他们提出问题)。

如果您有好的来源或者我在这里弄错了什么,请发表评论。我真的很感激!