Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Es C# tan rapido como C++

Estas en el tema de Es C# tan rapido como C++ en el foro de C/C++ en Foros del Web. Quiero hacer una aplicacion de dibujo, y nesesito que la aplicacion soporte operaciones pesadas, que lenguage es mejor. En caso de que C++ sea mas ...
  #1 (permalink)  
Antiguo 19/03/2015, 14:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 137
Antigüedad: 14 años, 1 mes
Puntos: 0
Es C# tan rapido como C++

Quiero hacer una aplicacion de dibujo, y nesesito que la aplicacion soporte operaciones pesadas, que lenguage es mejor.

En caso de que C++ sea mas rapido:
Si uso Visual Studio con C++ como quedaria?

tengo entendido q con VS se genera un codigo que no es directamente codigo maquin, con otros compiladores si genero codigo maquina? (o almenos de mas bajo nivel)?
  #2 (permalink)  
Antiguo 19/03/2015, 15:10
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Es C# tan rapido como C++

Mas o menos como funciona C++ y C# a groso modo:

C++ -> Código ensamblador -> Código maquina.

C# -> Código Intermedio -> Código maquina.

Que si cual es mas rápido, depende de lo que vayas a hacer y de como lo vayas a hacer.

Ahora en cuanto a tiempo de desarrollo, es mas fácil/rápido desarrollar en un lenguaje de mas alto nivel que en uno de bajo nivel, obviamente el precio que pagas casi siempre es el rendimiento.
  #3 (permalink)  
Antiguo 19/03/2015, 17:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 137
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Es C# tan rapido como C++

Si ambos son codigo intermedio porque uno es mas rapido que el otro?

otra duda C# tiene garbage collector?
  #4 (permalink)  
Antiguo 19/03/2015, 17:49
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Es C# tan rapido como C++

Cita:
Iniciado por Alfonso1 Ver Mensaje
Si ambos son codigo intermedio porque uno es mas rapido que el otro?
Por la madures y optimizaciones del compilador (en tiempo de compilación), el garbage collector (en tiempo de ejecución).

Cita:
Iniciado por Alfonso1 Ver Mensaje
otra duda C# tiene garbage collector?
Si
  #5 (permalink)  
Antiguo 19/03/2015, 18:47
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Es C# tan rapido como C++

Un programa C++ compilado y linkado es código máquina. No hay nada "intermedio".

"Compilar" un programa C++ es una forma muy simplificada de llamar a varios procesos concatenados que terminan en un programa que puede ejecutar el procesador directamente, no hay nada que se parezca a código intermedio en C++.

En "tiempo de compilación" -> El texto que uno escribe (código C++) se procesa y puede generarse código assembler que se "ensambla" y termina en código máquina (archivo objeto), o se salta la generación de assembler y genera el archivo objeto directamente (depende del compilador). Después el linker va a enlazar ese archivo objeto con otros objetos formando un archivo directamente ejecutable por el procesador. Viendo el principio y fin del proceso, la transformación es
Texto -> ejecutable. Sin intermediarios.
  #6 (permalink)  
Antiguo 20/03/2015, 00:26
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Es C# tan rapido como C++

Cita:
Iniciado por lareto Ver Mensaje
Un programa C++ compilado y linkado es código máquina. No hay nada "intermedio".
En el caso de C#, si bien el ejecutable es una suerte de código intermedio, el código se va compilando bajo demanda. La ventaja que tiene este sistema es que se puede generar código optimizado según el procesador concreto que estés usando, cosa que con C++ no puedes hacer.

Otro punto en contra que tiene C++ es que al dar tanta libertad al programador, al final se acaban originando auténticos desastres:

* Paso de objetos grandes por valor
* Uso ineficiente de reservas / liberaciones de memoria
* Lagunas de memoria

Sin embargo, en el caso de C#, al no darte acceso directo a la memoria, te permite crear programas mucho más limpios.

Si bien es cierto que en programas más o menos pequeños es relativamente sencillo hacer aplicaciones en C++ más rápidas que en C#, en aplicaciones grandes estos márgenes se diluyen hasta casi desaparecer... incluso te puedes encontrar arquitecturas C# más rápidas que su homólogo en C++... cosas del diseño.
  #7 (permalink)  
Antiguo 20/03/2015, 01:53
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Es C# tan rapido como C++

Cita:
Otro punto en contra que tiene C++ es que al dar tanta libertad al programador, al final se acaban originando auténticos desastres:

* Paso de objetos grandes por valor
* Uso ineficiente de reservas / liberaciones de memoria
* Lagunas de memoria
¿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?

¿Puedes sostener con hechos tus afirmaciones o es por decir no más?
  #8 (permalink)  
Antiguo 20/03/2015, 02:34
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Es C# tan rapido como C++

Cita:
Iniciado por lareto Ver Mensaje
¿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 Ver Mensaje
¿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.
  #9 (permalink)  
Antiguo 20/03/2015, 04:46
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Es C# tan rapido como C++

Malos programadores han hecho mal muchas cosas, y seguramente lo seguirán haciendo, pero eso habla mal de quienes los eligen, no del lenguaje con el que chapucean.

El C++ permite hacer muchas cosas mal a los malos programadores, pero también permite hacer otras bien a los otros. Hay quienes no comparten tus opiniones, y no les ha ido mal.

Google, Oracle, MySQL, Adobe, AT&T, Amazon, OS X, GCC, Visual Studio, Office, OpenOffice, Autodesk, Facebook ...
  #10 (permalink)  
Antiguo 20/03/2015, 04:52
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: Es C# tan rapido como C++

No tengo capacidad ni ganas para entrar en estos enredos....así que lo hago

Ya en serio, era para comentar dos cosas.
Recuerdo que una vez vi una lista de fallos cometidos por programadores digamos "famosos". Estaba hecha en buen plan y solamente para decirnos que todo el mundo puede en cualquier momento cometer errores de principiante. En concreto recuerdo una pifia de John Carmack que creo que iba precisamente de olvidarse de liberar memoria.

Y también recuerdo un blog en el que se analizaba el código en ensamblador de unas pocas líneas de C++ que incluían entre otras cosas esto:

Código C++:
Ver original
  1. for (int i=0;i<100;i++)//un bucle sin nada mas

El resultado es que el compilador directamente ignoraba esta sentencia. Es un ejemplo de un trabajo de optimización que hacen por ti. De la misma forma que los lenguajes modernos hacen muchas tareas por nosotros.

Lo que sí es verdad es que C/C++ te obliga a saber dónde estas poniendo las zarpas, so pena de que el programa cause un estropicio. Así que obliga a profundizar en los conceptos de memoria y demás, ofreciendo más control.

Yo pienso que a veces es como saber obtener la raíz cuadrada de un número. Hay que saber hacerla a mano, porque hay que saber en qué consiste y como se secuencia la obtención de la misma, pero dudo que nadie con una calculadora a mano se pare a coger el lápiz y el papel.

Conclusión: como dice Spiderman, "Un gran poder conlleva una gran responsabilidad"
__________________
Mi calculadora en Qt
  #11 (permalink)  
Antiguo 20/03/2015, 05:42
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Es C# tan rapido como C++

Cita:
Iniciado por lareto Ver Mensaje
Malos programadores han hecho mal muchas cosas, y seguramente lo seguirán haciendo, pero eso habla mal de quienes los eligen, no del lenguaje con el que chapucean.
Si y no. Normalmente cuando se lleva un proyecto a cabo, se suelen ajustar las horas al máximo... si se apura demasiado se corre el riesgo de tener que pisar demasiado el acelerador. Con un lenguaje que deja toda la responsabilidad en el programador, la necesidad de correr mucho da lugar a una mayor cantidad de errores. Y eso no depende de lo bueno o malo que seas programando.

Cita:
Iniciado por lareto Ver Mensaje
El C++ permite hacer muchas cosas mal a los malos programadores, pero también permite hacer otras bien a los otros.
Todo lo que puedas hacer con C++ lo puedes hacer con prácticamente cualquier otro lenguaje de programación.

Cita:
Iniciado por lareto Ver Mensaje
Hay quienes no comparten tus opiniones, y no les ha ido mal.
También hay empresas que usan .NET y tampoco les va mal... y hay otras que no usan ni lo uno ni lo otro y también les va bastante bien (bancos por ejemplo, que poco a poco van migrando a Java)

Y en lo referente a tu lista, un par de matices:

* Google: Dependiendo de a quien consultes tienes phyton, perl y C++
* GCC: Compilador de C/C++, es como si te hablo del compilador de .NET... casualmente está escrito en .NET.
* Visual Studio: Las últimas versiones están programadas en .NET
* Facebook: en principio se basó en PHP, después, por rendimiento, utilizaron HHVM, una especie de PHP compilado.

Y ojo, que no es que defienda .NET a muerte, de hecho, como he dicho, a mi ahora mismo es C++ lo que me da de comer, aparte que comparto la opinión de que C++ tiene muchos puntos fuertes. Simplemente considero un error aferrarse a la idea de que C++ es lo mejor del mundo mundial y lo demás es una mierda.

A lo largo de la historia más o menos reciente se han producido ya bastantes casos de colectivos que han reaccionado igual y no les ha ido nada bien:

* Gremio de "tornillos": Antes de la llegada de William Sellers, los tornillos se hacían de forma artesanal, lo que los hacía incompatibles entre sí... Con la llegada de un nuevo sistema (la estandarización) se decía que el nuevo sistema no podía sino dar problemas...

* Lord Kelvin (sí sí, el de la temperatura): "La radio no tiene futuro, los rayos X resultarán una farsa y las máquinas más pesadas que el aire no pueden volar de ningún modo." Ahí lo dejo.

* Nokia: se aferró a la idea de que symbian era lo mejor y no necesitaba un sucesor. Cuando quiso reaccionar ya era un muerto viviente

* Kodak: otros que pensaron que la fotografía digital no tendría éxito porque, claro, la fotografía analógica tiene una calidad insuperable.

* Western Union Telegraph Company: Estos dijeron, con palabras no tan bonitas, que el teléfono era una mierda sin futuro.

* Ford: Este hombre tan carismático dejó caer en desgracia su emblemático Ford T al rechazar todas y cada una de las propuestas de mejora que le hacían sus empleados... era su creación, su tesoro... si ya había alcanzado la excelencia, ¿por qué cambiarlo? Chevrolet fué el encargado de enseñarle lo equivocado que estaba.

Y seguro que hay mil ejemplos más por ahí... yo, sinceramente, no me caso con nadie. Prefiero sopesar de la forma más objetiva posible cual es la mejor solución para cada problema.
  #12 (permalink)  
Antiguo 20/03/2015, 05:43
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Es C# tan rapido como C++

Yo creo que este tipo de comparaciones no llevan a ningún lado si se hacen de forma genérica. Para dar una respuesta que lleve a algún lado hay que saber para que lo quieres. Es para programar un dispositivo empotrado? Es para una aplicación de escritorio? Una web? Un servicio de servidor?

Creo que actualmente, excepto en ambientes muy muy concretos, no te va a ir de que una instrucción use unos "ciclos de reloj" más en un lenguaje que en otro. Al final suele ser más una cuestión de "cuanto vas a tardar en tenerlo productivo" que no "cuantos ciclos puede tardar la aplicación en hacer 'x'", por lo que te has de mover en lenguajes que estén orientados a las tareas a realizar y en los que más cómodo te sientas.
__________________
Aviso: No se resuelven dudas por MP!
  #13 (permalink)  
Antiguo 20/03/2015, 08:12
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Es C# tan rapido como C++

Cita:
Conclusión: como dice Spiderman, "Un gran poder conlleva una gran responsabilidad"
Eso lo dijo su tio XDDD
  #14 (permalink)  
Antiguo 20/03/2015, 09:04
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: Es C# tan rapido como C++

Cita:
Iniciado por vangodp Ver Mensaje
Eso lo dijo su tio XDDD
Tengo que aprender más C++
__________________
Mi calculadora en Qt
  #15 (permalink)  
Antiguo 20/03/2015, 12:36
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Es C# tan rapido como C++

https://www.youtube.com/watch?v=xF0-LGoXtaw

Etiquetas: rapido
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:14.