Tu opinion me parece interesante, coherente y bien pensada.
Pero dejame apuntarte que no estupido dejar la cuestion del tamaño y velocidad a segundo plano a favor de la extensibilidad, mantenimiento y rehutilización. Por poner un ejemplo, no me importa perder un segundo en el inicio cargando plugins, teniendo en cuenta que en los ordenadores de mañana ese segundo desaparecera pero los plugins (es decir, su arquitectura) seguira ahi. Un ejemplo más claro es la arquitectura de componentes, un tanto pesado pero impresionante.
Esta claro que todo lo que puedes hacer en C++ puedes hacerlo en C, Pascal, Python o lo que quieras, ya que son lenguajes completos. Pero C++ creo que da un balance optimo entre velocidad y abstracción. Tambien es cierto que C++ es un lenguaje complejo, pero puedes evitar esa complicación con un diseño adecuado (como el de KDE, donde todo encaja en su sitio y las cosas salen solas.
por
pobrecito hablador
el Jueves, 29 Enero de 2004, 14:53h
(#259704)
Tus argumentos parten de una buena base (la programación orientadas a objetos es un concepto, no una implementación), están bien planteados, adecuadamente expuestos ... y sin embargo creo que te equivocas. ¿Motivos? No voy a entrar en una guerra de lenguajes o paradigmas pero te diré algo que he aprendido en mi larga o corta carrera profesional: la elección de los lenguajes a utilizar en un proyecto de cualquier tamaño está más condicionada por la inercia y los conocimientos aplicables que por una elección "en frio" sopesando alternativas. Es más, jamás he visto ésto último y sí muchas elecciones por motivos "religiosos". No te diré que no puedes trabajar con paradigmas de objetos en C o Cobol o Basic pq no es verdad, pero lo que no comparto es que no se pueda trabajar mucho mejor con un lenguaje diseñado para ello como C++, Python o Java. ¿Pérdida de velocidad? Teniendo en cuenta que el código extra para aplicar el paradigma de objetos que no genere el compilador lo tienes que implementar tú te aseguro que ninguna. En resumen, si hay que elegir C, Cobol, Fortran etc por motivos personales o empresariales, perfecto. Pero no los enmascaremos. Un saludo
C, C++, eficiencia, GTK+, ... pues usa D [digitalmars.com].
Hay versiones Linux y Windows, tiene un foro muy activo, el front-end es libre y se está portando para funcionar con GCC (aunque el compilador de Walter deja al gcc por los suelos).
Es un lenguaje en el que ya he escrito un par de programillas, y no le veo ninguna desventaja: sería como tener todo lo de C, C++, Java y Python en un lenguaje ...
por
pobrecito hablador
el Jueves, 29 Enero de 2004, 17:36h
(#259815)
No sé de dónde se saca la gente que el C++ es menos eficiente que el C. Bueno, sí lo sé, de las pésimas implementaciones en C++ que se suelen hacer y de que es un buen pretexto para no estudiar C++.
Si no usas la STL y otras basuras y sabes lo que haces, el C++ puede ser MAS eficiente (o igual, pero nunca menos) en velocidad y gasto de memoria que el C, para algoritmos complejos equivalentes y con las mismas salvaguardias.
¿Cómo lo sé? Hace 20 años que programo profesionalmente y tengo mucha experiencia con el ensamblador, ya que antiguamente era casi el único lenguaje que utilizaba. De vez en cuando examino el código que generan los compiladores para ver cómo traducen algunas partes críticas de mi trabajo o el de mi equipo, y ahí es dónde lo veo.
NOTA: He llamado basura a la STL porque así me parecen las implementaciones que he visto. Tal vez se puedan mejorar, pero, además, la especificación usual de la STL me parece un mal ejemplo de diseño, aunque contiene unas pocas buenas ideas.
Mucha gente compara C y C++ como si fueran el mismo tipo de lenguaje, cuando en mi opinión pertenecen a paradigmas de programación totalmente distintos.
C es un lenguaje totalmente imperativo, basado en las órdenes o algoritmos que utilizas; estas órdenes se apoyan o usan ciertas estructuras de datos que pueden ser incluso objetos, pero el centro del programa, el principal método de desarrollo, el corazón del programa sigue siendo el algoritmo. C++ es, sin embargo, un lenguaje orientado a objetos, donde la parte principal del programa, el verdadero enfoque que realiza el programador no es lo que el programa tiene que hacer, sino las estructuras que utilizan; estas estructruas (los objetos) se apoyan en órdenes y algoritmos, pero la base aquí son las estructuras de datos.
Por tanto, al pertenecer a distintos paradigmas, son útiles para uno determinado tipo de tareas. Por ejemplo, si quieres programar un driver no tiene mucho sentido utilizar clases y cosas por el estilo, pero para un programa de alto nivel como OpenOffice.org [openoffice.org] la orientación a objetos se hace tremendamente útil.
Es cierto que ambos pueden hacer lo mismo, de hecho, todo lenguaje capaz de implementar la Máquina de Turing (bendito Alan Turing [turing.org.uk]) tiene plena capacidad para hacer todo lo computable. Por poner un ejemplo, un lenguaje de tipo declarativo que implemente la Máquina de Turing, como ProLog [inria.fr], también es capaz de hacer lo mismo que C y C++, pero estaremos de acuerdo que no tiene mucho sentido programar KDE usando ProLog...
Si, pobrecito hablador, Gtk+ simula un sistema de objetos, y para ello ha de aportar cierta infraestructura, pero que la parte de interfaz gráfica necesite esa infraestructura (bastante minimalista), no significa que el conjunto de la aplicación se vea supeditado.
-- Mi hogar es tan grande como mi mente pueda imaginar
Si, pobrecito hablador, utilicé Gtk+ 1.2, y es realmente eficiente en consumo de memoria y en velocidad de ejecución.
Actualmente me encuentro portando la herramienta a Gtk2, ¿seguro que Qt 3.2 es mucho más eficiente que la serie de Gtk 2?. Agradecería algún comentario aclaratorio al respecto.
-- Mi hogar es tan grande como mi mente pueda imaginar
En C++ como el compilador entiende el sistema de objetos puede realizar optimizaciones que mejoran el rendimiento (por ejemplo resolver llamadas a metodos virtuales en tiempo de compilado) mientras que en Gtk todo se hace en tiempo de ejecucion.
Otro beneficio importante es que como los objetos se pueden crear en la pila no hay que andar reservando y liberando memoria para todo como es el caso de Gtk, que es un incordio.
Otra cosa es si hablamos de la STL o del uso de plantillas en general, que si no se tiene cuidado pueden hacer que los tamaños de los ejecutables crezcan sin control.
Si habeis leido el libro de Stroustrup ("The C++ Programming Language") vereis que cuidado tiene el tio en no hacer ninguna concesion a la perdida de eficiencia en los programas en beneficio de otras caracteristicas si no es absolutamente necesario.
Otra cosa es lo que luego cada programador ya haga por su cuenta y la atencion que le dedique a cuestiones como la eficiencia, el consumo de memoria, etc., y sobre todo con las prestaciones de los ordenadores de hoy en dia porque la mayoria de las veces no compensa ya preocuparse de esos temas.
Resumiendo, que en C++ se pueden hacer programas tan eficientes como en C, pero no es obligatorio ;-)
Re:C++ vs C
(Puntos:2)( http://barrapunto.com/ )
Tu opinion me parece interesante, coherente y bien pensada.
Pero dejame apuntarte que no estupido dejar la cuestion del tamaño y velocidad a segundo plano a favor de la extensibilidad, mantenimiento y rehutilización. Por poner un ejemplo, no me importa perder un segundo en el inicio cargando plugins, teniendo en cuenta que en los ordenadores de mañana ese segundo desaparecera pero los plugins (es decir, su arquitectura) seguira ahi. Un ejemplo más claro es la arquitectura de componentes, un tanto pesado pero impresionante.
Esta claro que todo lo que puedes hacer en C++ puedes hacerlo en C, Pascal, Python o lo que quieras, ya que son lenguajes completos. Pero C++ creo que da un balance optimo entre velocidad y abstracción. Tambien es cierto que C++ es un lenguaje complejo, pero puedes evitar esa complicación con un diseño adecuado (como el de KDE, donde todo encaja en su sitio y las cosas salen solas.
La uniformidad no es necesaria para la unidad
En bici tambien se puede dar la vuelta al mundo :)
(Puntos:2, Inspirado)No te diré que no puedes trabajar con paradigmas de objetos en C o Cobol o Basic pq no es verdad, pero lo que no comparto es que no se pueda trabajar mucho mejor con un lenguaje diseñado para ello como C++, Python o Java.
¿Pérdida de velocidad? Teniendo en cuenta que el código extra para aplicar el paradigma de objetos que no genere el compilador lo tienes que implementar tú te aseguro que ninguna.
En resumen, si hay que elegir C, Cobol, Fortran etc por motivos personales o empresariales, perfecto. Pero no los enmascaremos. Un saludo
Re:C++ vs C
(Puntos:2)( http://barrapunto.com/ )
C, C++, eficiencia, GTK+, ... pues usa D [digitalmars.com].
Hay versiones Linux y Windows, tiene un foro muy activo, el front-end es libre y se está portando para funcionar con GCC (aunque el compilador de Walter deja al gcc por los suelos).
Es un lenguaje en el que ya he escrito un par de programillas, y no le veo ninguna desventaja: sería como tener todo lo de C, C++, Java y Python en un lenguaje ...
Saludos
The Cat Ate My Source Code
Leyendas
(Puntos:1, Interesante)Si no usas la STL y otras basuras y sabes lo que haces, el C++ puede ser MAS eficiente (o igual, pero nunca menos) en velocidad y gasto de memoria que el C, para algoritmos complejos equivalentes y con las mismas salvaguardias.
¿Cómo lo sé? Hace 20 años que programo profesionalmente y tengo mucha experiencia con el ensamblador, ya que antiguamente era casi el único lenguaje que utilizaba. De vez en cuando examino el código que generan los compiladores para ver cómo traducen algunas partes críticas de mi trabajo o el de mi equipo, y ahí es dónde lo veo.
NOTA: He llamado basura a la STL porque así me parecen las implementaciones que he visto. Tal vez se puedan mejorar, pero, además, la especificación usual de la STL me parece un mal ejemplo de diseño, aunque contiene unas pocas buenas ideas.
Re: diferentes paradigmas
(Puntos:3, Informativo)( http://www.gatogordo.es/ | Última bitácora: Sábado, 29 Mayo de 2004, 03:47h )
C es un lenguaje totalmente imperativo, basado en las órdenes o algoritmos que utilizas; estas órdenes se apoyan o usan ciertas estructuras de datos que pueden ser incluso objetos, pero el centro del programa, el principal método de desarrollo, el corazón del programa sigue siendo el algoritmo. C++ es, sin embargo, un lenguaje orientado a objetos, donde la parte principal del programa, el verdadero enfoque que realiza el programador no es lo que el programa tiene que hacer, sino las estructuras que utilizan; estas estructruas (los objetos) se apoyan en órdenes y algoritmos, pero la base aquí son las estructuras de datos.
Por tanto, al pertenecer a distintos paradigmas, son útiles para uno determinado tipo de tareas. Por ejemplo, si quieres programar un driver no tiene mucho sentido utilizar clases y cosas por el estilo, pero para un programa de alto nivel como OpenOffice.org [openoffice.org] la orientación a objetos se hace tremendamente útil.
Es cierto que ambos pueden hacer lo mismo, de hecho, todo lenguaje capaz de implementar la Máquina de Turing (bendito Alan Turing [turing.org.uk]) tiene plena capacidad para hacer todo lo computable. Por poner un ejemplo, un lenguaje de tipo declarativo que implemente la Máquina de Turing, como ProLog [inria.fr], también es capaz de hacer lo mismo que C y C++, pero estaremos de acuerdo que no tiene mucho sentido programar KDE usando ProLog...
El Gato Gordo [gatogordo.es]
Por supuesto, pero no en toda la aplicación
(Puntos:1)Si, pobrecito hablador, Gtk+ simula un sistema de objetos, y para ello ha de aportar cierta infraestructura, pero que la parte de interfaz gráfica necesite esa infraestructura (bastante minimalista), no significa que el conjunto de la aplicación se vea supeditado.
Mi hogar es tan grande como mi mente pueda imaginar
Si, utilicé inicialmente Gtk 1.2
(Puntos:1)Si, pobrecito hablador, utilicé Gtk+ 1.2, y es realmente eficiente en consumo de memoria y en velocidad de ejecución.
Actualmente me encuentro portando la herramienta a Gtk2, ¿seguro que Qt 3.2 es mucho más eficiente que la serie de Gtk 2?. Agradecería algún comentario aclaratorio al respecto.
Mi hogar es tan grande como mi mente pueda imaginar
Re:C++ vs C/Gtk
(Puntos:3, Interesante)( file:/etc/passwd | Última bitácora: Martes, 20 Octubre de 2009, 21:17h )
En realidad es incluso peor!
En C++ como el compilador entiende el sistema de objetos puede realizar optimizaciones que mejoran el rendimiento (por ejemplo resolver llamadas a metodos virtuales en tiempo de compilado) mientras que en Gtk todo se hace en tiempo de ejecucion.
Otro beneficio importante es que como los objetos se pueden crear en la pila no hay que andar reservando y liberando memoria para todo como es el caso de Gtk, que es un incordio.
Otra cosa es si hablamos de la STL o del uso de plantillas en general, que si no se tiene cuidado pueden hacer que los tamaños de los ejecutables crezcan sin control.
Si habeis leido el libro de Stroustrup ("The C++ Programming Language") vereis que cuidado tiene el tio en no hacer ninguna concesion a la perdida de eficiencia en los programas en beneficio de otras caracteristicas si no es absolutamente necesario.
Otra cosa es lo que luego cada programador ya haga por su cuenta y la atencion que le dedique a cuestiones como la eficiencia, el consumo de memoria, etc., y sobre todo con las prestaciones de los ordenadores de hoy en dia porque la mayoria de las veces no compensa ya preocuparse de esos temas.
Resumiendo, que en C++ se pueden hacer programas tan eficientes como en C, pero no es obligatorio ;-)