¿Por Qué Se Creó el Sistema GObject? [cerrado]


La Introducción

Bien, así que después de la versión 0.60 de GTK+, los diseñadores se dieron cuenta de que para el desarrollo y progreso futuro, todo el kit de herramientas debía reescribirse para estar orientado a objetos.

Ahora, como C no soporta OOP, para proporcionar orientación a objetos y en heiriearchies de herencia, crearon el Sistema GObject. Ahora crear el Sistema GObject debe haber requerido tiempo de desarrollo, más dependencias, más problemas, pero tuvieron que crearlo para proporcione capacidades de orientación de objetos al Lenguaje de programación C. Pero en ese momento, había otra solución que proporcionaba exactamente que, C++!

La pregunta

¿Por qué los desarrolladores de GTK+ no solo usaron C++?

La Explicación

Quiero decir, ¿por qué perder el tiempo creando una biblioteca completa en lugar de usar una solución probada por el tiempo adoptada por muchos proyectos? No me malinterpretes, no estoy tratando de convertir este post en un C vs C++ cosa (he tenido suficiente de eso en los foros, gracias). Solo quiero saber las razones y problemas que hicieron que los diseñadores de GTK+ tomaran la decisión que tomaron.

Author: ApprenticeHacker, 2012-03-17

4 answers

No puedo responder directamente a la pregunta, al menos en lo que respecta a GTK. Esa respuesta está en los desarrolladores de GTK+, por lo que tendrás que cazarlos y preguntarles. Pero en cuanto a por qué uno querría agregar un sistema orientado a objetos a C, en lugar de usar C++, hay muchas razones. Los tres en los que inmediatamente pensaría son

  1. Complejidad del lenguaje: Mientras que C es un lenguaje bastante simple, C++ es increíblemente complicado, con soporte para la mayoría (no todas) las cosas de C, así como comodidades como referencias, también características orientadas a objetos y un lenguaje de plantillas complejo. Has visto el nuevo sistema de valores: lvalues, rvalues, glvalues, prvalues y xvalues - ¿eh? Hay mucho más de lo que podría hablar. Con el tiempo, C++ se vuelve manejable, pero sigue siendo excesivo solo por querer algunas características orientadas a objetos en C.

  2. Control: Si los diseñadores optaran por C++, se quedarían con la filosofía de C++. Por ejemplo, la herencia múltiple es un idea controvertida, y por una buena razón. Por diseño, el sistema GObject está construido para admitir solo una herencia, lo que puede simplificar drásticamente las jerarquías de herencia. Si los diseñadores optaran por C++, no habría forma de limitar a los usuarios a un solo sistema de herencia. La herencia múltiple es solo un ejemplo, estoy seguro de que hay muchos otros lugares en los que el sistema GObject difiere de la ideología de C++.

  3. Interoperabilidad: Este es probablemente uno grande. Aunque hay algunos lenguajes con los que C++ interactúa limpiamente, el hecho es que C++ no es tan bueno en interop. Sin embargo, la interoperabilidad con C se da casi por sentada. C es a menudo descrito como la lingua franca de los lenguajes de programación, ya que forma el estándar de facto para interop. Al diseñar una API de C, los diseñadores de GObject abrieron la puerta al desarrollo de GTK+ en cualquier número de idiomas.

 22
Author: Ken Wayne VanderLinde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-17 05:49:37

GObjects pretende ser independiente del lenguaje. Tiene escritura dinámica, y debe compararse con un sistema de tiempo de ejecución como COM,. NET o CORBA, en lugar de con lenguajes específicos. Si entras en lenguajes, entonces las características están más en el lado de Objective-C que en el lado de C++.

 14
Author: Matthias,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-17 05:49:37

El sistema de tipo GObject hace cosas que no se pueden hacer en C++. Por un lado, permite la creación de nuevas clases en tiempo de ejecución, y lo hace de una manera que es independiente del lenguaje: puede definir una nueva clase en Python en tiempo de ejecución, luego manipular instancias de esa clase dentro de una función escrita en C, que ni siquiera necesita saber que Python estuvo alguna vez involucrado.

 12
Author: gcbenison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-17 05:51:05

Del wiki vinculado a la pregunta:

Historia (De Wikipedia)

GTK+ fue originalmente diseñado y utilizado en el Programa de Manipulación de Imágenes de GNU (GIMP) como un reemplazo del kit de herramientas de Motif; en algún momento Peter Mattis se desencantó con Motif y comenzó a escribir su propio kit de herramientas de GUI llamado GIMP toolkit y había reemplazado con éxito Motif por la versión 0.60 de GIMP. [3] Finalmente GTK fue reescrito para ser objeto orientado y fue renombrado GTK+. Esto fue usado por primera vez en la versión 0.99 de GIMP.


Esto debería indicarle que object-oriented paradigm no era un criterio primordial para la elección del idioma para GTK (que es diferente de GTK+) y esa característica se agregó mucho más tarde.

 6
Author: user1055604,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-18 10:26:42