为什么要创建GObject系统?

时间:2012-03-17 05:10:50

标签: c++ c gtk gobject

简介

好的,所以在GTK+版本0.60之后,设计人员意识到,对于未来的开发和进步,整个工具包需要被重写为面向对象。

现在,由于C不支持OOP,为了提供面向对象和继承heiriearchies,他们创建了GObject System。现在创建GObject系统必须具有所需的开发时间,更多依赖性,更多问题,但他们必须创建它以向 C 编程语言提供面向对象的功能。但那时,有另一种解决方案提供完全 C ++

问题

为什么GTK +的开发人员只使用C ++?

解释

我的意思是,为什么浪费时间创建整个库而不是使用许多项目采用的经过时间考验的解决方案?不要误会我的意思,我不是想把这篇文章变成C vs C ++的东西(我在论坛上已经有足够的了,谢谢你)。我只想知道让他们做出决定的原因和问题

4 个答案:

答案 0 :(得分:24)

我不能直接回答这个问题,至少就GTK而言。答案取决于GTK +开发人员,所以你必须追捕他们并问他们。但至于为什么人们想要向C添加面向对象的系统,而不是使用C ++,有很多原因。我立即想到的三个是

  1. 语言复杂性:虽然C是一种非常简单的语言,但C ++令人难以置信的复杂,支持大多数(不是全部)C的东西,以及引用等便利,以及面向对象的功能和复杂的模板语言。你有没有看到新的价值体系:左值,右值,glvalues,prvalues和xvalues - 是吧?还有更多我可以谈论的内容。在给定时间的情况下,C ++变得易于管理,但仅仅想要在C中使用一些面向对象的功能仍然是过度的。

  2. 控制:如果设计人员使用C ++,他们就会被C ++哲学所困扰。例如,多重继承是一个有争议的想法,并且有充分的理由。按照设计,GObject系统构建为仅支持单继承,这可以大大简化继承层次结构。如果设计人员使用C ++,则无法将用户限制为单个继承系统。多重继承只是一个例子 - 我确信GObject系统还有许多与C ++意识形态不同的地方。

  3. 互操作性:这可能是一个很大的问题。尽管有几种语言可以与C ++完全互操作,但事实上C ++在互操作方面并不是那么出色。但是,与C的互操作性几乎被认为是理所当然的。 C通常被描述为编程语言的通用语言,因为它构成了互操作的事实标准。通过设计C API,GObject设计人员以任意数量的语言打开了GTK +开发的大门。

答案 1 :(得分:14)

GObjects旨在与语言无关。它具有动态类型,您应该与COM,.NET或CORBA等运行时系统进行比较,而不是与特定语言进行比较。 如果你进入语言,那么Objective-C的功能比C ++更多。

答案 2 :(得分:12)

GObject类型系统可以完成C ++中无法完成的任务。首先,它允许在运行时创建新类,并以与语言无关的方式执行此操作 - 您可以在运行时在Python中定义新类,然后在用C编写的函数中操作该类的实例,甚至不必意识到Python曾经参与其中。

答案 3 :(得分:6)

问题中链接的wiki

历史(来自维基百科

  

GTK +最初设计并用于GNU图像处理程序(GIMP),作为Motif工具包的替代品;在某些时候,Peter Mattis对Motif不再抱有幻想,并开始编写自己的GUI工具包,称为GIMP工具包,已经成功地用0.60版本的GIMP取代了Motif。 [3]最后GTK re - 写为面向对象,并重命名为GTK +。这是在GIMP的0.99版本中首次使用


这应该告诉你object-oriented paradigm不是选择GTK语言的最重要标准(与GTK +不同),并且该功能在很晚之后添加。