Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Porque Usar C# Y No C++

Iniciado por , 23 de Diciembre de 2004, 02:16:27 PM

« anterior - próximo »

raistlin

 Quizas todo se trate de marketing y saberse vender. Si no, ¿porque se usa el cutre lua teniendo python? ¿porque c# y no java? ¿porque directx y no opengl?
Intento que los novatos entiendan como funciona el mundo.

ethernet

Cita de: "raistlin"Quizas todo se trate de marketing y saberse vender. Si no, ¿porque se usa el cutre lua teniendo python? ¿porque c# y no java? ¿porque directx y no opengl?
1.- facilidad de embeber.
2.- actualmente es java y no C#, pero vamos, la compatibilidad binario pone la balanza del lado de C#. Java es el cáncer de la empresa española y ahí está, algo tendrá.
3.- directx en windows tiene un framework que no tiene opengl.  

Kaneda

 Bueno, existe un documento en ppt donde Tom Miller comparo el rendimiento del Managed Directx (usando c#) con el de c++ , y los resultados fueron muy optimos, quizas habria que echarle un vistazo a eso para estar seguro de cuanto mas rapido es c++ que c#

Otra cosilla :
Citar¿porque c# y no java? ¿porque directx y no opengl?

Es logico que las tecnologia de Microsoft siempre seran mejores funcionando en un windows no? ;-)
Ademas Directx es muy superior en cuestion de shaders y archivos fx a opengl (por algo a triunfado todo este tiempo)

Yo tambien defiendo la productividad, antes que la velocidad , y parece ser que las compañias de software tambien lo hacen , Y si no mirar la estrategia de microsoft con XNA , la idea principal es hacer de puente entre juegos de videoconsola y juegos de PC
Ademas, productividad no es solo hacer muchas cosas en poco tiempo, Tambien significa corregir muchos de los bugs mas importantantes que habia antes y que hacia muy complicados los proyectos, ahora entre el recolector de basura , el dinamismo de los tipos, los tipos seguros, incluso el codigo seguro.... hacen que todo vaya mejor

Y ademas, joder, si el nucleo del motor es directx, que es lo que realmente debe ejecutarse rapido, y el 60 o 70 % de la ejecucion del motor son los shaders, que se ejecutan directamente en el hardware, ¿ de que nos preocupamos? Estoy seguro que este motor que se basa totalmente en hardware, es mas rapido que otros motores hechos en c++ que calculan todos los procesos por software ( sombras, luces, particulas, animacion...)

 
CitarEstoy seguro que este motor que se basa totalmente en hardware, es mas rapido que otros motores hechos en c++ que calculan todos los procesos por software ( sombras, luces, particulas, animacion...)

De acuerdo.

Pogacha

 No entiendo como sigue esta discucion :(

 Hola Vicente :).

Mi opinion respecto a algunas cosas:
 
Dissasembler: Es verdad que desensamblar en .net es mas comodo que en c++ (no se el caso de java). Esto es debido a dos razones, la primera es que todo en .net es mas comodo que en c++, la segunda es debido a la reflexion. Para poder hacer todas las acrobacias que permite la reflexion es necesario que el nombre de los tipos, metodos, propiedades... y conserven su nombre y firma en los ensamblados. Creo que es un precio que merece la pena pagar. Una vez dentro del método, en el código puro y duro, el disasembler se lo inventa más o menos igual.

Templates y Genericos: La implementación de los genéricos o templates en los 3 lenguajes es muy representativa a como están evolucionando.
  En Java los genéricos 'no existen', son puro humo. Parece que estas escribiendo codigo genérico pero en realidad hay variables object por debajo, los cast que no aparecen están ahi, el boxing y el unboxing tambien. Esto hace que sean mas lentos. La reflexion no funciona con genéricos porque son humo.
  En c++, los templates son macros, no se compilan sino cuando los estás instanciando a alguna clase. no se pueden crear en tiempo de ejecucion, y c++ no tiene reflexion. Los errores de compilacion que da c++ en un template son.... un poema.
  La implementación de los genéricos en c# es completa, son eficientes, tienen un soporte del intelisense completo, admiten reflexion, funcionan con tipos por valor de manera real, tienen seguridad de tipos real. Y pueden hacer todo esto porque microsoft puede hace grandes cambios de rumbo porque controla todo el proceso.

Structs 'peligrosos'.  En c++ no hay tipos por valor o tipos por referencia, sino variables por valor o variables por referencia (la diferencia entre un struct y un class en c++ es pequeña). Yo prefiero la manera de c#, porque es quien crea el tipo quien define como ha de ser usado, por valor o por referencia.


Hace un tiempo hice pruebas de rendimiento entre c# y c++, y como dijo un amigo escéptico: no se si c++ es mas rapido pero desde luego juegan en la misma división.

Hice tres test todos con carga a cpu y memoria que es donde se pegan los lenguajes.
- Swap de un millon de ints: Identicos en Release, C++ unas 10 veces mas lento en debug
- Operaciones aritméticas: Identicos
- Swap de un millon de structs (unos 32 bytes tenia): C++ fue ligeramente más rapido, entre un 5% y un 15%. Aún así microsoft desaconseja hacer structs tan grandes.








 

Vicente

 Anda Olmo, veo q al final has posteado en Stratos ;) A ver si te registras ;) Un saludo!

Vicente

TheAzazel

 
Citar- Swap de un millon de structs (unos 32 bytes tenia): C++ fue ligeramente más rapido, entre un 5% y un 15%. Aún así microsoft desaconseja hacer structs tan grandes.

No entiendo eso... un struct de 32bytes grande?... el total de ellos(1millon) grande?

zupervaca

 
Cita de: "TheAzazel"
Citar- Swap de un millon de structs (unos 32 bytes tenia): C++ fue ligeramente más rapido, entre un 5% y un 15%. Aún así microsoft desaconseja hacer structs tan grandes.

No entiendo eso... un struct de 32bytes grande?... el total de ellos(1millon) grande?
El motivo es que una estructura en c-sharp se comporta como una variable, es decir, si igualas una estructura a otra se esta copiando una sobre la otra con lo que estarías copiando 32 bytes (como un memcpy), en cambio en las clases se copiara la dirección de memoria donde esta la clase ya que en realidad una variable de una clase realmente es un puntero.

PD: Me imagino que Mocosoft lo dirá por esto.

Editado: La ventaja de que las estructuras sean así en c-sharp es que puedes hacer que una clase contenga una estructura con todos los datos que deban ser copiadas al tener un constructor copia por ejemplo, esto entre otras cosas, el inconveniente esta claro, hay que tener cuidado de saber que se esta manejando ya que al pasar a una función una estructura la pasamos mediante copia y no dirección, para pasar la estructura mediante referencia hay que poner "ref" delante.

ZüNdFoLGe

 
CitarYo tb soy programador, pero pienso q a lahora de seleccionar un motor gráfico es verdaderamente impotante la respuesta que ese motor , es decir, la rapidez de ejecución y que no consuma mucha maquina, es decir que no riquiera un PV por todo esto creo que el c# va ir a pedales y va a requerir mucha maquina q por ejem. si se hace en C++.

...
CitarEstoy haciendo cosas con la libreria SDL.

por dios  :ph34r:  

zupervaca

 ¿De quien son los quotes? (rules)  

Gezequiel

 Del primer post de todos, el que abrio la discucion...

Todavia me sorprendo cuando 2 o 3 veces por mes este post resucita de las cenizas para seguir expandiendose, es como un mounstruo!! :ph34r:  (twist)  

Vicente

 Ya ves, que tema mas controvertido ;) Un saludo!

Vicente






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.