Videojuegos y sus 1001 lenguajes de programación

Aunque el titulo de este articulo suene a broma, que lo es :), no deja de ser algo bastante real y es que, hoy en dia la invasión de cientos de lenguajes de programación es obvia, todas las empresas se lanzan a hacer sus propios lenguajes de scripts extendiendo la funcionalidad de sus librerías.

TIOBE, en su web, hace un indice de popularidad basado en “on the world-wide availability of skilled engineers, courses and third party vendors” que no es poco. En esta web se ve como Ruby es la que despunta más y tiene la entrada más fuerte en los 20 lenguajes de programación más usados y conocidos! ( no os suena a la radio? : ), otros lenguajes con Lenguaje D y ABAP.

En esta otra web podemos ver, basado en otra forma para calcular el indice de popularidad, como C sigue partiendole la cara a otros lenguajes en proyectos nuevos y como C# aumenta sus espectativas.

Mi favorito seguirá siendo MOO, pero el que se programa moo, moooo, moooooo, mo.

Por otra parte existen los Lenguajes de Script que no dejan de salir por todos lados, es agobiante y absurdo. Python y Lua, este último basado en el binding del 1º, se crearon como necesidad para los programadores de extender la funcionalidad sin tener que compilar y linkar código. Y dices tu… que bien mola. Si mola, solo que hay 400 como estos 2, para diferentes cosas, como NSIS para hacer instaladores que tiene un manual más tocho que Lua, o hace poco QScript, para la librería QT, que bonito!! puedo hacer formularios en tiempo real… no te jod…

Yo estoy cansadisimo de lenguajes de programación que extienden la absurdez de los lenguajes a los que intentan cumplimentar y no me meto con Python o Lua, sino con los enanos que hay por todas partes.

Actualmente, y gracias a dios lenguajes como D o C# extienden su funcionalidad a script y linkan y compilan ddl/dll en tiempo de ejecución sin ningún problema. Y es que, esa es una buena feature de un lenguaje de programación. Sin duda C# hoy en dia es muy conocido y la gente va probando sus virtudes, pero yo personalmente que quedo con D que es una evolución brutal de C/C++ al estilo de las mismas, depurado y limpio, pulcro! moderno de bajo-medio nivel y con todas las features de un lenguaje de medio-alto nivel como C#. Brillante. Llevo siguiendolo desde hace ya casi 2 años y recientemente he podido comprobar IDEs decentes y como el proyecto ddt ( plugin de eclipse para programar en lenguaje D, como el de C/C++ ) o Poseidon ya son bastante funcionles.

En lenguaje D, se puede extender perfectamente de las librerias y dlls ya compiladas de C/C++ con 0 problemas, el propio lenguaje extiende su funcionalidad a una compilación externa y en tiempo de ejecución, hay ports de SWT ( DWT ) yo que se, cuando madure un poco, por mucho que quiera microsoft meternos con calzador C#, que está genial, el al código gestionado le van a dar por saco. Toma lenguaje de programación en condiciones gestado desde hace más años que C#. Podeis encontrar caracteristicas del lenguaje y el compilador aquí. Debería quitarle el polvo al libro que empecé sobre D…

Pues bien hoy en dia en el desarrollo de videojuegos se usan normalmente, Python o Lua con gran aceptación para desarrollar el flujo del juego, a veces hay motores de videojuegos que estan volcados al sistema de script. Una manera moderada de hacer esto y conservar la claridad mental al respecto es hacer el lenguaje de script una herramienta util para el desarrollo que tenga una parcela bien definida y sepamos para que va a servir. Si haces que el lenguaje de script pueda hacer cosas del tipo, game.getPlayer(“prompt”).setVelocity(10000), el desastre se huele al volcar toda la funcionalidad de OOP de C++ a un lenguaje de script. La gente dice, bueno se encriptan los ficheros, se protegen!! tal… eso no se puede dejar para una versión release y luego a parte del coste de implementación encima el coste para proteger esos datos como ya se hace hoy en dia con las texturas o los shaders!

Si se utilizase lenguajes de programación con su propia extensión o likado en tiempo de ejecución tendriamos toda la funcionalidad con 0 coste de implementación y adaptación del lenguaje de script y su posterior protección. Otro ejemplo deprotección es el motor de Battlefield y juegos que en definitiva se juegan por red, pero que la información de script está comprimida o protegida de alguna manera. Necesitan hacer comprobaciones para saber que todos los usuarios tienen los mismos datos. Y dios te libre si son un buen puñado de MB con lo que costaría leer y compararlo con el servidor.

Con un lenguaje como D tienes toda la flexibilidad del código sin preocuparte por exportar funciones y el coste de implementación el debugeo de Lua ( que es un follón ) etc… etc… luego solo tienes que ir compilando/grabando tus progresos y al final de todo tienes una ddl ( libreria dinamica ) limpia, pulcra, impoluta y perfecta! :). Al contrario que con C# que hace esto mismo, solo que las dll compiladas con .net necesitan ser protegidas, una porqueria ¬¬. Es más prueba a renombrar una dll de .Net a .exe y ejecutalo 😀 OOP total.

Fuente:The Prompt

13 responses to “Videojuegos y sus 1001 lenguajes de programación”

  1. Isilion says :

    Pr0mpt says:

    Mi favorito seguirá siendo MOO, pero el que se programa moo, moooo, moooooo, mo ( no es coña, es que no encuentro la web de registro de lenguajes por ningun lado ).

    Rayos… pensaba que era broma, pero resulta que sí que existe un lenguaje de programación para vacas:

    http://www.bigzaphod.org/cow/

  2. Isilion says :

    ¡Y uno para orangutanes! XD

    http://www.dangermouse.net/esoteric/ook.html

    Si compilas esto, tendrás el clásico “Hola Mundo”.

    Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
    Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
    Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
    Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
    Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
    Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
    Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
    Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
    Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
    Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
    Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
    Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
    Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
    Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
    Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
    Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
    Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
    Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
    Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
    Ook. Ook. Ook. Ook. Ook! Ook.

  3. la que no encuentra su sitio says :

    A mi me gusta más el Malbolge, sobre todo por el origen del nombre, que da una idea de cómo es 😛

    “El nombre procede del Malebolge (el octavo círculo del infierno de Dante)”

    http://www.lscheffer.com/malbolge.shtml
    Aquí el “Hola mundo”:
    (==

  4. la que no encuentra su sitio says :

    Vaya! Se ha cortado el comentario de antes, no le debe haber gustado el “hola mundo” 😦

    Si te gusta la programación esotérica, por aquí tienes unos cuantos ejemplos, aunque programar algo con esto debe ser un infierno como mínimo 😛
    http://www.formauri.es/personal/pgimeno/compurec/LenguajesEsotericos.php

    También hay quien ha conseguido auténticas virguerías con javascript, pero son sólo curiosidades.

    Yo empiezo ahora a pelearme con la programación orientada a la sorpresa, así que ya veremos 😛

  5. Gyakoo says :

    Pues a ver que nos trae Microsoft, en las próximas versiones del .net framework. Llevan tiempo investigando nuevos lenguajes y extensiones a éstos.
    http://research.microsoft.com/research/ppt/
    Me parece muy interesante el próximo C Omega.

    Saludos.

  6. norkstyle says :

    aceptamos Cubase como herramienta de programación???… el coñazo de editar cada nota una a una es como programar! :), solo que en vez de escuchar el click clack cluck de las teclas, escuchas dulces notas! :D… porque carajo no inventa nadie un lenguaje de programación basado en notas musicales?!?!, el día que lo saquen os hago 6 juegos 😀

    malos, pero 6! 😀

  7. chaky says :

    Hola Mundo en LMN++ (Lenguaje Musical by Norky mas mas) (lenguaje musical orientado a acordes)

    codigo fuente (Hola Mundo)

  8. Isilion says :

    Bueno, Norky, parece que lo que más se acerca es esto:

    http://www.nosuch.com/plum/cgi/showlist.cgi?sort=name&concise=yes

  9. chupachota says :

    pr0mpt, no termino de entender del todo cual es tu problema con los lenguajes de script (sin acritud ehn? :-P).

    ¿Que hay muchos? nadie te obliga a aprenderlos todos, es mas, a estas alturas de la película dudo que te cueste mucho trabajo aprender una nueva sintaxis.

    ¿El mero hecho de que existen y se aplican en el mundo de los videojuegos? joé, no me esperaba esto de tí. Piensa un momento en el trabajo que haces día a día… ahora piensa que no tuvieses a tu disposición un lenguaje de script para hacerlo… todo a base de C++, recompilaciones, etc. Vamos, que a estas alturas estarías ingresado en una institución psiquiatrica. Creo que las ventajas compesan (y con creces) la complejidad adicional de incluir controles o sistemas anti-chetos (esto va mas referido al articulo sobre la piratería que a este).

    Otra cosa… sobre QSA (Qt Script for Applications), ¡eso no me lo dices en la calle! es broma, es broma. Al tema, yo no lo veo tan anécdotico y chorra como dejas caer en el artículo. Cualquiera que trabaje o haya trabajado en aplicaciones de gestión agredecerá, con casi total probabilidad, la existencia de métodos de creación de formularios en tiempo real (yo mismo estoy pensando seriamente utilizarlo para una de mis paranoias que se me han ocurrido).

    Bueno, lo dejo que me estoy enrollando 🙂

  10. pr0mpt says :

    Buen post.

    Quiero decir, que no tengo ningún problema con los lenguajes de script, es más, me ayudan mucho en mi trabajo diario. En este articulo trato de comentar un alza en diferentes lenguajes y trato de analizar de forma personal y desde un punto de vista tecnologico, la absurdez de los lenguajes de script, por parte de los creadores de lenaguajes tan usados hoy en dia como C/C++. En este caso, C es un lenguaje antiguo y no tenia esta necesidad y su extensión C++, es algo digamos antigua tambien, aunque exista un ISO del año 99.

    Como analizo en el articulo, los lenguajes de programación “actuales” como C/C++ usados en los videojuegos requieren de una extensión flexible para que los developers desarrollen rápidamente y el motor sea flexible, quizas, para varios proyectos o mods de un videojuego. Esto en si, provoca varios problemas al empaquetar un videojuego, hay que ofuscar parte del producto para proteger que alguien pueda cambiar su comportamiento.

    En otras ocasiones, cuando se extiende al juego Online, es necesario asegurar que todos los participantes tienen los mismos archivos para que alguien no tenga ningún tipo de ventaja. Esto provoca, siempre una espera mayor que la carga de recursos. Estarás conmigo en que es, una m…

    Luego quiero ensalzar el uso de lenguajes de programación que palian estos errores, como D o C#. Desde un lenguaje de Script, como Lua se pueden cargar dlls, pero, que me dices si Lua tuviera una opción en la que, una vez precompilado todos los scripts, con este precompilado se construyera una dll para la configuración de proyecto final. Se acabarian muchisimos problemas. Lo más interesante de esto sería la limpieza y funcionamiento del producto final y que por consiguiente, de cara al usuario evita ciertas incomodidades como una larga espera comparando datos antes de jugar.

    Hago una reflexión; por un lado está el tiempo de desarrollo, que se acorta enormemente utilizando un lenguaje de script y una implementación que permita esa recarga de los mismos al vuelo, esto último es muy importante. Y por otro lado la carga por comprobación que sufre el usuario final, infinitamente mayor a la que los developers invierten en el desarrollo del juego. 2, 3 o 4 años desarrollando un juego que va a vivir de media entre 5 y 10 años si es bueno, multiplicado por el numero de usuarios.

    Yo creo, que la utilización de un lenguaje de Script para C/C++, que es quien tiene el problema hoy en dia en el desarrollo de videojuegos es una lacra que pasa factura en el usuario final por ahorrar mucho tiempo a las empresas que necesitan sacar productos rápidamente al mercado.

    Yo no se tu, pero estoy deseando que nuevos lenguajes de programación maduren de una vez tanto como desarrollador como usuario ¿ No crees ?

  11. chupachota says :

    Buena respuesta…

    pero no me convences.

    En primer lugar, dudo mucho que la sobrecarga de realizar las comprobaciones de los scripts de un juego suponga un trastorno para un usuario. ¿De cuantos Mb de scripts estamos hablando? ¿de 2? ¿de 10?, en cualquier caso el tiempo de calculo de un checksum, hashcode o lo que sea sobre ese volumen de datos debería ser prácticamente despreciable en un ordenador de hoy en día. Otra cosa es que también se realicen comprobaciones sobre texturas, modelos, etc. Aqui si podemos tener un retraso considerable, pero no hay DLL que nos salve.

    En segundo lugar, hablas de que si tenemos una DLL nos ahorramos tener que realizar las comprobaciones. ¡Craso error! un paseo por cualquier página de cracks nos permite ver que no es imposible modificar el comportamiento de un archivo con codigo nativo (exe o DLL) para que haga lo que no debe. Para hacer esto, mejor hacemos que nuestro juego o motor trabaje con algún tipo de byte-code definido por nosotros mismos. Con el mismo trabajo de realizar un interprete de script se puede realizar algún tipo de compilación básica intermedia. Vamos a seguir teniendo el mismo problema, pero por lo menos hacemos que la gente que quiera modificar el comportamiento original tenga que descifrar el byte-code ;).

    Como reflexión final: dices que estás deseando de que los lenguajes de programación maduren, pero yo me digo: ¿no deberían ser los usuarios los que madurasen? ¿Que beneficio sacan los cheaters trucando un juego para, por ejemplo, conseguir la máxima puntuación? Obviamente, la superación personal no es uno de los motivos.

  12. Isilion says :

    ¿no deberían ser los usuarios los que madurasen? ¿Que beneficio sacan los cheaters trucando un juego para, por ejemplo, conseguir la máxima puntuación? Obviamente, la superación personal no es uno de los motivos.

    Obviamente no lo es, y aún así debemos permitirlo.

    ¿No es lícito que a unos les guste el fútbol y a otros el falseado pressing catch de la WWF? Todos disfrutan por igual, incluso sabiendo que el espectáculo ha sido preparado de antemano. Después de todo, ¿qué diferencia hay entre eso y una obra de teatro, un libro o una película? El resultado ha sido preparado de antemano también, pero nadie se queja de eso.

    También hay gente que disfruta explorando los juegos hasta su máxima expresión. Si disfrutamos de la mecánica de un juego en particular, podríamos querer jugar más y más en modo “DestroyerGod”, sólamente para disfrutar de las excelentes animaciones o la tremenda jugabilidad. Es una faceta más de exploración, simplemente.

    En este contexto, decir que un cheater truca un juego “para conseguir la máxima puntuación” es simplificar en extremo las cosas.

  13. pr0mpt says :

    Exactamente en Battlefield 2 son 855 megas de .zip que deben estar inalterados… debe tardar como 30 segundos por ahi. En cualquier caso es lo mismo, si alguien se lo propone puede crackear lo que sea, solo se pueden poner trabas.

    Referente a que los lenguajes de programación maduren, me refiero a LOS NUEVOS que ya existen y dan soluciones geniales para la extensión del lenguaje. No obstante tienes toda la razón en opinar sobre la madurez de los usuarios.

    Si Isilion es simplificar diciendo que es para maxima puntuación, pero no vamos a exaltar las virtudes de esta gente… que meren todo nuestro respeto y analisis psicriatico.

    Saludos! a dormir!!