En la empresa vamos a iniciar nuestro primer proyecto de software. Se trata de una apliacación web, orientada a proporcionar soporte económico a pequeños proyectos de software libre y redes sociales.

Una de las tareas previas de las que nos tenemos que ocupar es decidir que herramientas e lenguajes de programación vamos a usar… y no es para nada una cuestion trivial.

Podría parecer que hoy en dia las respuestas se encuentran enmarcadas dentro de Java o PHP… pero si uno se asoma a mirar un poco mas, la cosa no resulta tan evidente.

Uno de los requisitos para nuestro software es que debe requerir el mínimo de recursos del sistema en el que se ejecute. Uno de los problemas de los usuarios objetivos de la aplicación es conseguir hostings en internet con suficiente potencia pero asequibles, así que no tendría sentido proporcionar una herramienta que a su vez consumiese una cantidad de recursos considerables.

En este sentido lo ideal es emplear lenguajes compiladas, que nos dan un ejecutable que no necesita de entornos de ejecución, maquinas virtuales, interpretes y similares. El precio a pagar es una mayor dificultad en el desarrollo y en la depuración y mejora posterior del programa. Esto también puede ser un problema de cara a la aceptación de la aplicación por parte de los usuarios. En parte estos problemas poderían verse atenuados si existiese o se desarroyase unha framework o librerios que simplificasen las tareas de mejora posterior (¿librerias HTML para C?, seguro que ya hay algo de ese tipo).

Por otra parte sería necesario comprobar si realmente esto mejoraría el rendimiento en comparación con lenguajes interpretados como PHP o Ruby. Es de esperar que sí. Considerablemente. Lo que no tengo tan claro es si se reducirá la cantidad de recursos necesarios en el servidor.

Existe la opción intermedia de los pseudo compilados tipo Java, Flash y los lenguajes con soporte en .NET (Mono), que supuestamente deberían ofrecer rendimiento superiro al de los lenguajes interpretados, ofreciendo cierta facilidad en el la escritura de la aplicación gracias a las librerías incorporadas. El rendimiento de estas aplicaciones es internedio, pero tengo una gran duda respecto a los recursos que consumen.

Entre todo este tremendo follón, despues de descartes evidentes (no aceptaremos Flash como animal de compañía), aparece unha posibilidad curiosa: Python. Es un lenguaje interpretado, con gran cantidad de frameworks y librerías y que acepta fácilmente añadidosrealizados en C o el propio Python. Esto nos pone facil el tema de la escritura de la aplicación. Pero no solo eso, sino que ademas tenemos compiladores paraMono - Phyton Mono que nos permitirían aumentar el rendimiento de la aplicación despues de haberla escrito de forma interpretada. Esto pinta bien… pero ¿podemos estrujar un poco más a la serpiente? ¿tenemos un compilador para Python a binario ejecutable?.

No me sorprendería. Vamos a verlo.

P.S. Dado el caracter dinámico de las variables en Python, resulta improbable que se llegue a realizar un compilador completo y eficiente para Python. Una alternatiba similar es Psycho.

Se trada de un “just-in-time (JIT) compiler” que hace una interpretación múltiple de las diferentes rutinas del programa, creando una compilación para las diferentes posibilidades de tipos de datos, de forma que se empleará la forma óptima compilada para cada circunstancia. Todo esto se consigue sin sobrecargar el código fuente de la aplicación.
Según la información ofrecida en el proyecto, se puede alcanzar una mejora en el rendimiento de entre 2 y 100 veces más, siendo un ratio tipico el de 4 veces mejor rendimiento.

Pero todo esto tiene un precio, el espacio de memoria requerido por la aplicación se incrementa desmesurablemente, lo que lo hace inadecuado para los objetivos de nuestro proyecto.

One Response to “Mono, python y otros bichos”

  1. Ola sígote desde hai un tempo.
    Eu uso python para facer cousiñas. Con py2exe podes xerar un exe do teu proxecto.
    Tamén hai unha lista moi boa: python-es arroba aditel punto org

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>