Подтвердить что ты не робот

Почему была создана система GObject?

Введение

Хорошо, поэтому после версии 0.60 GTK + дизайнеры поняли, что для будущего развития и прогресса весь инструментарий необходимо переписать, чтобы быть объектно-ориентированным.

Теперь, так как C не поддерживает OOP, чтобы обеспечить объектно-ориентированную ориентацию и в наследство heiriearchies, они создали GObject System. Теперь создание системы GObject должно иметь требуемое время разработки, больше зависимостей, больше проблем, но они должны были создать его для обеспечения возможностей ориентации объектов на язык программирования C. Но в то время было еще одно решение, обеспечивающее именно это, С++!

Вопрос

Почему разработчики GTK + просто не использовали С++?

Объяснение

Я имею в виду, зачем тратить время на создание целой библиотеки вместо использования проверенного временем решения, принятого множеством проектов? Не поймите меня неправильно, я не пытаюсь превратить этот пост в C vs С++ (у меня было достаточно того, что на форумах, спасибо). Я просто хочу знать причины и проблемы, которые заставили дизайнеров GTK + принять решение, которое они сделали.

4b9b3361

Ответ 1

Я не могу напрямую ответить на вопрос, по крайней мере, до GTK. Этот ответ лежит на разработчиках GTK +, поэтому вам нужно будет их выследить и спросить. Но что касается того, почему нужно добавить объектно-ориентированную систему к C, вместо использования С++ существует множество причин. Три, о которых я сразу подумал бы, - это

  • Сложность языка: в то время как C - довольно простой язык, С++ ошеломляюще сложна, с поддержкой большинства (не всех) материалов C, а также удобств, таких как ссылки, а также объектно-ориентированные функции и сложный язык шаблонов. И вы видели новую систему ценностей: lvalues, rvalues, glvalues, prvalues ​​и xvalues ​​- да? О чем я мог бы поговорить. Учитывая время, С++ становится управляемым, но он все еще перегружается, просто желая некоторых объектно-ориентированных функций в C.

  • Управление: если дизайнеры отправились с С++, они бы застряли в философии С++. Например, множественное наследование спорной идеей, и по уважительной причине. По дизайну система GObject построена только для поддержки одиночного наследования, что может значительно упростить иерархии наследования. Если дизайнеры отправились с С++, не было бы способа ограничить пользователей единой системой наследования. Множественное наследование - всего лишь пример - я уверен, что есть много других мест, в которых система GObject отличается от идеологии С++.

  • Взаимодействие: это, вероятно, большой. Хотя есть несколько языков, с которыми С++ взаимодействует чисто, факт в том, что С++ просто не так хорош в interop. Однако взаимодействие с C почти считается само собой разумеющимся. C часто описывается как языковой язык языков программирования, поскольку он является стандартом де-факто для взаимодействия. Проектируя API C, дизайнеры GObject открыли дверь для разработки GTK + на любом количестве языков.

Ответ 2

GObjects должен быть независимым от языка. Он имеет динамическую типизацию, и вам следует сравнить ее с системой времени выполнения, такой как COM,.NET или CORBA, а не с конкретными языками. Если вы переходите на языки, то функции больше на Objective-C, чем на стороне С++.

Ответ 3

Система типа GObject делает то, что вы не можете сделать на С++. Во-первых, он позволяет создавать новые классы во время выполнения и делает это не зависящим от языка - вы можете определить новый класс в Python во время выполнения, а затем манипулировать экземплярами этого класса внутри функции, написанной на C, которая не нужно даже знать, что Python когда-либо был вовлечен.

Ответ 4

От wiki, связанного с вопросом:

История (из Википедии)

GTK + был первоначально разработан и использован в программе манипулирования изображениями GNU (GIMP) в качестве замены инструментария Motif; в какой-то момент Питер Маттис разочаровался в Motif и начал писать собственный инструментарий GUI, называемый инструментарием GIMP, и успешно заменил Motif выпуском GIMP 0.60. [3] Наконец GTK был повторно -писано для объектно-ориентированного и было переименовано в GTK+. Это было сначала использовано в выпуске GIMP 0.99.


Это должно сказать вам, что object-oriented paradigm не был первостепенным критерием выбора языка для GTK (который отличается от GTK +), и эта функция была добавлена ​​гораздо позже.