Google
 

lunes, septiembre 04, 2006

¿Porqué C++?

¿Porqué C++ es el lenguaje estrella a la hora de desarrollar juegos? Es anticuado, es a muy bajo nivel, carece de características avanzadas como funciones anónimas, su sistema de macros no pasa de ser un reemplazar texto pero aún así es el lenguaje estrella.

En el resto de aplicaciones comerciales, si excluimos los juegos, el papel de C++ ha ido cayendo en pro de lenguajes de la familia .Net o Java. Pero en el mundo de los juegos C++ sigue siendo imposible de vencer.

Mi opinión personal es que no es porque sea el lenguaje idoneo para desarrollar juegos o que sea el más rápido (excluyendo ensamblador). Es simplemente que para la mayoría de desarrolladores de videojuegos es el lenguaje con el que está más familiarizado y para que el que existen la mayoría de librerias (DirectX, OpenGL, Ogre, etc...).

Los desarrolladores se dan cuenta de esto e intentan evitar C++ cada vez más. Por ejemplo ya no se crea la lógica del juego directamente en C++, se suele incluir un lenguaje script para ello pues son conscientes de que C++ se queda corto. E incluso las herramientas como editores de niveles usan cada vez más C#.

No quiero decir ni mucho menos que C++ sea malo pero que a lo mejor, tal vez, deberíamos ser más conscientes a la hora de elegir el lenguaje de programación.

4 comentarios:

Anónimo dijo...

Desde luego, una gran parte de culpa la tiene el hecho de que prácticamente toda la base de código existente (librerías y demás) está programada en C o C++.

Personalmente, no pienso que C++ sea un lenguaje anticuado, ni mucho menos. Y características heredadas de C como las macros pueden ser muy útiles en ocasiones (y a quien no le guste, siempre tiene alternativas puras de C++). No cambiaría C++ por Java o C# ni borracho, hablando en plata. Si acaso, Lisp.

Victor M. dijo...

En Lisp es bastante divertido programar pero en un proyecto grande si le das a otro programador tu codigo en Lisp para que canvie alguna cosa un poco importante se va cagar en tus muertos XD.

Las macros de C/C++ son una autentica patata y parecen que solo esten hechas para salir del paso. Camlp4 si que son unas macros como dios manda (http://martin.jambon.free.fr/extend-ocaml-syntax.html).

Tampoco he dicho que C/C++ este anticuado si no que hay lenguajes nuevos bastante interesantes que podrian ir mejor para segun que tipo de juegos que no C++.

Y en cuanto a C# solo hay que ver la maravilla del Jad Engine (antiguo Haddd). Es una gozada programar con el.

Anónimo dijo...

Depende de que se habla y en la situación en la que se use. C++ se usa en los juegos AAA y herramientas porque da la mejor relación entre performance y mantenimiento en este momento. No hay duda que hacer todo en ASM seria más rápido pero el mantenimiento del código escrito en ASM es muy complicado. En cambio C++ te da muy buena performance y en un lenguaje de alto nivel (que es un lenguaje de alto nivel a pesar que existen lenguajes a un nivel más alto). El problema es cuando hay gente que hace cosas que no requieren tanta performance pero usa C++ plano para realizar sus proyectos. En ese caso no se justifica y se podría usar managed C++, C#, Java o lo que sea. En las empresas desarrolladoras grandes los motores y juegos en si se hacen en C++ pero muchas de las herramientas se están realizando en managed C++ o C#.

Con respecto al scripting en los juegos, esa no es la razón por la que se utiliza scripting en vez de C++ en los casos que conozco o en los que he trabajado como contratista. La idea de usar scripting es evitar el costo de compilar y correr de nuevo, tener un lenguaje de scripting hace a tu juego mas modificable, con un menor costo de tiempo entre que implementas algo y lo tenes corriendo. C++ definitivamente es mucho mas poderoso a nivel lenguaje que cualquiera de los lenguajes de scripting que ves comúnmente en los juegos (LUA, etc.) pero las ganancias de productividad al usar scripting sobrepasan las ganancias en poder y performance en usar C++.

El error en general es pensar que hay un lenguaje que es “la solución”. La solución es diferente según el problema, y un programador bueno sabe eso y elige las mejores herramientas para cada problema. Yo personalmente a mi motor lo hago en C++ y la mayoría de las herramientas en managed C++ (porque me permite tener funciones managed y unmanaged).

PD: Nunca usaría (((((LISP))))) en todo caso usaría Haskell :P

Anónimo dijo...

C++ tiene "antiguedad" en el negocio de los videojuegos, eso hace que la bibliografia, sdk, api, librerias sueltas, tutoriales, foros, etc se encuentre mas comunmente orientado a este.

Personalmente se c++, java, estoy en camino de c# y creo que cada uno tiene lo suyo, no me gusta de java por ejemplo que no se pueda sobrecargar operadores y que la herencia multiple sea "herejia", que es un karma en librerias matematicas, no me gusta c++ porque hay que ser "cuidadoso" al programarlo y de c# estoy en camino del "pero".

Cada uno lo suyo, nunca he creido en los "evangelistas" del codigo vengan de donde vengan.