c++ - 为什么很多窗口管理器不支持面向对象?

标签 c++ c operating-system window-managers

注意:我做了一个简短的搜索,结果很少,唯一真正相关的结果是 this one , 所以我认为以前没有人完整地问过这个问题。

我最近一直在研究操作系统开发,我发现大多数(如果不是全部)没有完全面向对象的窗口应用程序界面,包括 Windows。当然,除了字节码解释语言,例如 C#(或一般的 CLI)和 Java,这是一个明显的异常(exception)。 (澄清一下,我的意思是他们倾向于通过函数而不是通过创建类来创建窗口)。

我可以理解为简单起见而创建的较小的管理器,例如 tinywm , 但更大的窗口管理器,如 MetaCity , Fluxbox , 和 Openbox往往仍然不是来自对象,而是来自函数——尽管有些是用 C++ 编写的,而不是纯 C(至少,据我所知)。

这可能是个幼稚的问题,但为什么要这样做呢? 我知道为不支持面向对象的语言实现非面向对象的 ABI 很重要,但为什么它不能支持的语言提供更高级别的 Hook 支持面向对象?

对于程序员来说,拥有这样的钩子(Hook)最终会不会更容易一些,因为这样可以更轻松地开发软件?考虑到硬件的进步,与开发变得更加容易所带来的好处相比,性能损失会不会很小?

这件事困扰了我一段时间,我希望有人能给出答案。

PS:如果我的理解有根本错误的地方,请随时纠正我。

最佳答案

这不仅仅是开窗。就通过对象调用的方法而言,没有像 myObject->method()myObject.method() 这样的操作系统具有面向对象的 API。我们现在使用的 API 具有 1980 年代早期设计的窗口 API(例如 Windows,X Window System 等)。需要考虑语言和 ABI 问题。我能想到的唯一异常(exception)是 OS/2 的独立于语言的 OO 东西,叫做 System Object Model .

从形式上讲,method(object, ...)object.method(...)object->method( ...),只是语法上的区别。

关于c++ - 为什么很多窗口管理器不支持面向对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851894/

相关文章:

c++ - 什么是顶级 const 限定符?

c++ - 无法从 QLineEdit 检索文本值

c - 查找数组中的最大值

c++ - c 向我的编辑器添加自动建议

c - 指针的危险

c - Nice() 库调用还是系统调用?

c++ - 当解引用运算符 (*) 被重载时,*this 的使用会受到影响吗?

c++ - BOOST ASIO - 异步套接字

linux - 如果汇编程序中没有退出系统调用会怎样?

linux-kernel - 远程 gdb 调试不会在断点处停止