Cita:
Iniciado por lareto ¿Crees que libertad y corrección son antagónicas?
¿Crees que ese programador al que le has dado tanta libertad, que mira lo que ha hecho con ella, hará un mejor papel con menos libertad y otro lenguaje?
¿De dónde has sacado esa conclusión de que programas pequeños y sencillos pueden ser más rápidos en C++ que en C#, mientras que los grandes ya no? ¿Te refieres a cuando los hace tu programador libertino, o es una ley universal que tú te sabes?
No es que crea, es que he comprobado que cada persona es diferente. Tu puedes tener un nivel inmejorable de programación, pero eso no quiere decir que el resto del grupo comparta tus cualidades.
Yo aún sigo viendo código tal que "func( const bool& )" o "func( std::vector<class> )"... o usar "new" para crear una instancia de una clase que se usa a nivel interno en una función... este tipo de detalles te hacen perder ciclos de reloj... o resulta que en una parte del código se han usado "shared pointers" y ahora hay que enlazar ese código con una librería que usa punteros crudos (o al revés)... la interfaz que hay que poner en medio para que el chiringuito siga funcionando no suele ser compatible con la velocidad y la seguridad al mismo tiempo... con menos margen de libertad estas cosas te las ahorras y el código es más eficiente.
También hay que lidiar con las lagunas de memoria... puedes optar por usar shared pointers... pero entonces tu código no va a ser muy diferente del que vas a programar usando C#... solo que C# tiene una librería que le da mil millones de vueltas en cuanto a funcionalidades con respecto a la que te encuentras con C++.
C++ soporta herencia múltiple, lo cual también es un foco de problemas si, por ejemplo, olvidas poner el destructor virtual, o se crea una herencia en rombo, o no se configuran correctamente los constructores... este tipo de cosas complican en demasía el mantenimiento de las aplicaciones en C++... en C# únicamente puedes crear herencia múltiple si usas "interfaces", que no son más que clases virtuales puras de C++, es decir, no se hereda código.
Los templates, en C++ son complicados de entender (motivo por el cual o no se estudian o se ven de pasada en muchas universidades y cursos de programación). La forma en la que se compilan los templates hace que, en bastantes ocasiones, pierdas un tiempo valioso con errores cuya descripción no ayuda lo más mínimo. Si bien es cierto que un template bien diseñado puede proporcionar muchísimas ventajas al código... la gente capaz de mantener ese código la vas a encontrar a cuentagotas.
C++, en resumen, no se ha diseñado para programr aplicaciones de ambito general. Es un lenguaje diseñado para programar cores y pequeños núcleos de código. Es muy potente y versátil, cierto, pero es a costa de delegar una grán cantidad de responsabilidades en el programador. Lenguajes con C# o Java aparecieron precisamente para agilizar el proceso de programación, para liberar de ciertas responsabilidades al programador.
Y todo esto lo hablo desde la posición en que C++ me da actualmente de comer. Es un lenguaje que me gusta bastante, pero creo que hay que ser realistas. Buena parte de los cambios que han introducido con C++11 y C++14 no hacen sino intentar acercar C++ a la forma de programar en Java y .NET (lambdas, auto, ... ) ... Un lenguaje no puede ser bueno para todo, al igual que no hay una herramienta que sirva para cualquier necesidad (ni tan siquiera las navajas suizas)
Cita:
Iniciado por lareto ¿Puedes sostener con hechos tus afirmaciones o es por decir no más?
No se a que viene tanta agresividad.
Siempre que se inicia un tema comparando lenguajes aparecen hostilidades, como si tuviesemos la necesidad de defender nuestra postura a muerte... o como si nuestra postura fuese la única válida.
Yo hablo desde mi experiencia. En los últimos 15 años he programado en C, C++, C#, Java, Visual Basic, Pascal, ensamblador, PHP, Perl y no se si me dejo alguno más. He pasado de trabajar solo como freelance a pertenecer a un grupo de más de 70 personas. He participado en proyectos basados en sistemas embebidos con 10 MB de RAM y en entornos CAD con consumos de memoria superiores a los 2GB. Mi código ha sido el responsable de que un convoy del metro, en medio de una inspeción automatizada, no acabase en plaza castilla sin control.
¿Crees que C++ es el mejor lenguaje del mundo y que no tiene rival? perfecto, pero es tu opinión, no pretendas obligar a los demás a pensar así.
¿Es C++ es el mejor lenguaje del mundo? Pues depende de lo que se quiera hacer y de los requisitos de tiempo y dinero. Lo mismo si usas Java o .NET el proyecto cumple igualmente los requisitos y reduces los costes a la mitad... o lo mismo no, como he dicho, depende.
¿Mi opinión es universal? Por supuesto que no. Simplemente expongo mi experiencia y luego cada uno que saque sus conclusiones.
Pero bueno, volviendo a lo de probar mis comentarios yo te podría hacer la misma pregunta... entonces, seguramente, podrías tirar por algúno de los muchos benchmarks que hay por la red comparando ambos lenguajes y, efectivamente, dicen que C++ es más rápido que C#... han descubierto la rueda!!! Esos benchmarks hacen pruebas unitarias: std::vector frente a List, velocidad de tratamiento con tipos básicos, ... son operaciones puras y son casos que nunca te vas a encontrar en un entorno real. Ahora monta un sistema completo... cuanto más complejo mejor... y ahora lanza test de rendimiento, test de fugas de memoria, compara los tiempos de desarrollo y el número de incidencias... una vez hecho eso saca tus conclusiones.
Por cierto, ya puestos en plan obsesivo con el rendimiento, vamos a programar mejor en ensamblador, que ese si que le da mil vueltas a C++, no? O bueno, no es necesario ser tan agresivos, con programar en C ya podemos obtener mejor rendimiento que con C++. ¿Por qué usar entonces C++? Si es por rendimiento puro hay alternativas mejores, si es por desarrollar más rápido y con menos incidencias, también tenemos alternativas.
C++ no es más que una opción de las centenares que tenemos a nuestra disposición, no es más que eso. Es muy bueno para unas cosas a cambio de ser muy malo para otras.
Dicho esto creo que queda claro que no hay una verdad absoluta, luego ni yo puedo demostrar que C# es mejor que C++... tampoco lo he intentado, ni tu puedes demostrar que estoy equivocado.
Un saludo.