介绍
好的,所以在GTK+的0.60版本之后,设计师们意识到为了未来的发展和进步,整个工具包需要重写为面向对象的。
现在,由于C语言不支持面向对象编程,为了提供面向对象和继承层次结构,他们创建了GObject系统。现在,创建GObject系统肯定需要开发时间、更多依赖和更多问题,但他们必须创建它以为C编程语言提供面向对象的能力。但是当时还有另一种解决方案,可以完全做到这一点,那就是C++!
问题
为什么GTK+的开发人员不使用C++呢?
好的,所以在GTK+的0.60版本之后,设计师们意识到为了未来的发展和进步,整个工具包需要重写为面向对象的。
现在,由于C语言不支持面向对象编程,为了提供面向对象和继承层次结构,他们创建了GObject系统。现在,创建GObject系统肯定需要开发时间、更多依赖和更多问题,但他们必须创建它以为C编程语言提供面向对象的能力。但是当时还有另一种解决方案,可以完全做到这一点,那就是C++!
为什么GTK+的开发人员不使用C++呢?
我不能直接回答这个问题,至少就GTK而言是这样的。这个答案应该由GTK+开发人员来提供,所以你需要去找他们问。但是关于为什么要给C语言添加面向对象系统,而不是使用C ++,有很多原因。我能想到的三个原因是:
语言复杂性:虽然C是一种相当简单的语言,但C++则非常复杂,它支持大多数(不是全部)C的东西,以及引用等便利功能,并具有面向对象的特性和复杂的模板语言。你看过新的值系统吗:lvalues、rvalues、glvalues、prvalues和xvalues - 呃?还有很多我可以谈论的内容。在时间充裕的情况下,C++变得可管理,但如果只想在C中使用一些面向对象的特性,那么它仍然是过度设计。
控制:如果设计者采用了C++,他们将被困在C++哲学中。例如,多重继承是一个有争议的想法,有充分的理由。通过设计,GObject系统仅支持单一继承,这可以大大简化继承层次结构。如果设计者采用了C++,没有办法限制用户只使用单一继承系统。多重继承只是一个例子,我相信在GObject系统与C++意识形态不同的地方还有很多其他地方。
互操作性:这可能是一个重要的原因。尽管有一些语言可以与C++清晰地互操作,但事实上,C++的互操作性并不是很好。然而,与C的互操作几乎是理所当然的。 C通常被描述为编程语言的世界语,因为它形成了互操作的事实标准。通过设计一个C API,GObject的设计者为在任何数量的语言中开发GTK+打开了大门。
GObjects旨在独立于语言。它具有动态类型,您应该将其与类似于COM、.NET或CORBA的运行时系统进行比较,而不是与特定语言进行比较。如果你要涉及语言,那么这些特性更接近于Objective-C而不是C++。
GObject 类型系统具有 C++ 无法实现的功能。其中一个是允许在运行时创建新类,并以一种与语言无关的方式进行操作。您可以在 Python 中定义一个新类,然后在 C 函数中操作该类的实例,而该函数不需要知道 Python 是否参与其中。
GTK +最初是在GNU图像处理程序(GIMP)中设计和使用,用作Motif工具包的替代品。 在某个时候,Peter Mattis对Motif感到不满,并开始编写自己的GUI工具包,称为GIMP工具包,并且在GIMP的0.60版本中成功地替换了Motif。[3]最后,GTK被重新编写为面向对象,并更名为GTK +。 这是在GIMP的0.99版中首次使用的。
这应该告诉您,“面向对象范例”并不是选择GTK(与GTK +不同)语言的一项重要标准,并且该特性是在较晚时才添加的。
restrict
)在C++中不存在。 - Ken Wayne VanderLinde