为什么我们不能/不能将OOP概念应用于内核编程?

时间:2014-02-13 10:23:30

标签: oop kernel

有很多关于为什么OOP是正确的或者它在哪里工作的问题等等,所以这是其中之一,但是我从内核的角度来问它,为什么它不用作例子。

内核主要用C语言编写。它几乎不使用OOP。关于OOP的一般共识是,它是编程中的最佳范例(主要由许多新成员),但内核尽管是最具挑战性的编程领域之一 - 但不使用OOPS。

所以我想知道OOP的工作原理是什么,以及为什么它不能用于像内核这样的东西?我试图在某些情况下获得工程方面的原因。你可以说GUI编程可能会从OOP中受益 - 我理解的原因是你要创建一个以上特定事物的案例而你可能会操纵它们 - 因此具有相同行为的不同状态是有道理的。

在更高的层面上,OOP可以被视为一种自然选择的优秀案例与仅仅过度设计的情况相比如何呢?我很乐意得到关于这个问题的指示,因为这已经在很多地方讨论过了。

PS:我正在寻找工程方面。我明白这个问题非常广泛。任何有用的指针都会很好。

一些相关问题:I can't create a clear picture of implementing OOP concepts, though I understand most of the OOP concepts. Why?

3 个答案:

答案 0 :(得分:3)

在OOP成为头条新闻之前,大多数Unix内核都在为各种子系统使用类似v-table的调用。例如,查看VFS层如何处理不同的文件系统类型。

答案 1 :(得分:1)

OOP针对程序员进行了优化 - 易于使用和调试。

内核应该针对速度和内存进行优化 - 达到OOP永远不会达到的水平。

因此,我们可以在OOP中进行低级编程,但这是糟糕的低级编程。

答案 2 :(得分:1)

有面向对象的内核。事实上,至少有两个用C#编写的内核(这些项目被称为奇点和宇宙)。

虽然从技术上来说它不是性能问题,因为你可以编写非常快速和高效的面向对象的代码,但通常需要花费更多的精力在面向对象的语言中编写高效的代码(即,oop语言通常会使它非常容易编写效率不高的代码。更重要的是,oop的各种功能通常对内核编程没有多大帮助,因为你必须编写非常低级的代码,这些代码可以摆弄位或专门使用寄存器。

这与人们不用其他高级语言编写操作系统的原因相同...... oop与否。 C只是编写内核的一种非常有效的语言。如果没有C,有人可能会发明它只是为了内核开发。

编辑:

经常选择C的另一个原因是C具有非常基本的功能调度系统。不同的OOP语言实现类和虚拟,而不是以不同的方式,因此它们需要“绑定”来定义如何调用这些对象和方法。 C没有任何这个,并且有一个非常基本的函数调度方法。 OO内核意味着用其他语言编写的代码必须用同一种语言编写,或者创建复杂的绑定以使其成为接口。

例如,如果您在C中编写代码,并且想要在C#内核中调用内核函数,那么现在必须模拟C#来进行调用......反之则更容易。