Polls

Cuantas horas programas al día?
 
Inicio arrow Tutoriales arrow Lo + Nuevo
Lo + Nuevo
Guía de lenguajes de Script para prototipado rápido PDF Print E-mail
Written by Javier Loureiro   
Sunday, 17 December 2006

Guía de lenguajes de Script para prototipado rápido

por José Manuel Villar

Los lenguajes de script son cada vez más usados hoy en día en la programación de gráficos, ya que permiten realizar cómodamente un efecto o probar una idea sin complicaciones. Esta guía es un breve resumen de las principales alternativas disponibles actualmente, sin pretender mostrarlas todas ni profundizar en exceso. Desde clásicos como el Logo hasta el reciente Io, es un mundo con una gran variedad de opciones.

La información de este documento está dirigida principalmente a los programadores de Windows que deseen usar software libre y/o multiplataforma, aunque se pueda aplicar también a Linux y otros sistemas en la mayor parte de los casos. En cualquier caso, a pesar de su simplicidad, existe controversia sobre si estos lenguajes son o no apropiados para principiantes.


Introducción

Existen una infinidad de métodos para ensuciar la pantalla de un PC, pero muy pocos que sean realmente multiplataforma. Una solución muy común en los últimos años para la creación de gráficos en tiempo real es la unión de las librerías SDL y OpenGL , de tal modo que esta guía se centra en su mayor parte en esa combinación.

Los comentarios acerca de la velocidad de ejecución que aparecen en cada apartado proceden de la interpretación de Win32 Language Shootout. Esta web muestra el tiempo empleado después de realizar diferentes tests, por lo que los resultados deben analizarse estudiando los casos puntuales. Como ayuda, existen herramientas ( normalmente profilers internos o externos) que pueden ayudar al analisis. Puntos importantes son el tiempo empleado en las llamadas a métodos y la instanciación de objetos, ya que son dos de las tareas más frecuentemente realizadas en cualquier script.

Logo

Sería imposible hacer una relación de "lenguajes orientados a gráficos" sin hacer mención a la adaptación que Wally Feurzeig y Seymour Papert hicieron del Lisp, allá por 1968.

Su simplicidad hizo que fuera muy usado en la enseñanza, por lo que gozó de una gran popularidad en los años 80. A pesar de la imagen con la que generalmente se asocia, tiene relación con la robótica y la inteligencia artificial. Existen unas 130 implementaciones, incluyendo una del MIT y varias con las instrucciones en castellano. La programación en Logo se basa en dirigir un puntero, habitualmente con forma de tortuga, con el que se trazan figuras en base a fundamentos matemáticos. Es un lenguaje funcional y limitadamente procedural, que varía mucho según las distribuciones.

Un pequeño programa ( las instrucciones se corresponden a una interpretación particular ):

to spoke
params [x y]
repeat :x [fd :y left 360/:x]
end
to demo
while (1=1) [
home
penup
back 70
pendown
cs
paint
setpencolor 242 0 0
repeat 20 [ spoke 3 45 left 18]
fd 140
setpencolor 0 255 0
repeat 20 [ spoke 3 45 left 18]
pause 4000
]
end
demo

La tortuga en acción.

 

En la wikipedia existen varias páginas con abundante información sobre el mundo del Logo. En ellas se incluyen también los enlaces a las distribuciones más populares:

 

Perl

Es difícil decir algo nuevo de Perl, ya que es el lenguage de script por excelencia del mundo Linux. Su creador, Larry Wall, lo diseñó basándose en C con características de alto nivel que encontraba útiles en varios shells de UNIX. Y ése es el camino que siguieron los demás: cada nueva creación es una evolución de uno o varios conceptos anteriores.
Por desgracia, las versiones para de Perl para Windows no son demasiado prácticas ni, sobre todo, rápidas. Posee módulos para OpenGL y SDL, aunque no se actualizan a menudo.


Ejemplo de función Perl con código OpenGL:

sub setShape { # takes viewAngle, aspect, nearDist, farDist
    my $self = shift;
    my ($viewAngle, $aspect, $nearDist, $farDist) = @_;
    $self->{viewAngle} = $viewAngle;
    $self->{aspect} = $aspect;
    $self->{nearDist} = $nearDist;
    $self->{farDist} = $farDist;
    
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective($viewAngle, $aspect, $nearDist, $farDist);
}

Versiones más completas de Perl para Windows, así como de otros lenguajes, pueden encontrarse en la página de Activestate. Al ser un proyecto comercial, no todos sus productos son de código abierto.

Python

Este lenguaje nació como substituto/alternativa a Perl a principios de los 90, intentando mejorar algunos aspectos. Su rasgo más distintivo a simple vista es su sintaxis indentada, que lo convierte en un lenguage ya diferente a primera vista. Tiene una gran cantidad de módulos (GUIS, redes, encriptación) que suelen actualizarse constantemente, por lo que es utilizado como "navaja suiza" para usos variados. Se ejecuta razonablemente rápido y posee una y un instalador Windows bastante completo.

Guido Van Rossum, su creador, lo define como "interpretado, interactivo, orientado a objetos y extensible". Incluye constructiones y métodos, incluida programación funcional, avanzados que permiten ahorrar muchas lineas de codigo. Está en continua evolución, lo que en ocasiones va en contra de la compatibilidad entre versiones.


Después de hacer la instalación básica, los módulos gráficos a instalar son estos:

PIL. Python Image Library. Librería de imágenes de Python: carga y manipula los formatos de imagen más habituales. Es necesaria para algunos paquetes.

Pygame. Instala la archiconocida librería SDL y algunas dependencias adicionales.

 

Numeric. Añade funcionalidades con arrays, más rápidos, y limitados, que las listas, tuplas, etc. que ofrece la distribución básica. Permite realizar operaciones y efectos gráficos a "velocidad de C". Es dependencia de algunos ejemplos.
PyOpenGL. Paquete OpenGL. Soporta extensiones recientes (NV, ATI). Opcionalmente se pueden instalar paquetes que amplian su funcionalidad, los cuales estan explicados aqui.
WXPython. Las WXWindows también pueden usarse con OpenGL en Python. Además incluyen módulos interesantes como PyCrust o PyAlacarte, que pueden ser usados para manipular el código en ejecución. El entorno GUI por excelencia de Python es TK, incluido en la distribución base y que también admite OpenGL, aunque también existen paquetes de FLTK y FOX e incluso para las MFC, aunque éste no sea multiplataforma.


Una función extraída de un ejemplo Pygame:

 

Python es usado como lenguaje de script por Paint Shop Pro, Blender, Gimp, OpenOffice y una gran cantidad de aplicaciones. Incluso cuenta con generosos "donantes" que patrocinan el desarrollo de código y paquetes. Suele estar incluído en casi todas las distribuciones Linux.

Ruby

Creado por un estudiante japonés llamado Matz al que no le gustaban los lenguajes que existían a mediados de los 90, Ruby se basa en una jerarquía (árbol) de objetos en su ejecución y en el princípio de "mínima sorpresa" que asegura algo así como "todo debe ser como se espera que sea" en su diseño. No tiene la velocidad ni la sintaxis de Python. Por contra, posee un modelo de objetos más avanzado y lógico basado en el principio de "todo debe ocurrir como uno espera que ocurra". Por esta razón, todo elemento en Ruby es un objeto y todos descienden de "object", formando un árbol de objetos.

La documentación original está en japonés, aunque las traducciones al inglés son bastante frecuentes y no suele haber problemas en ese aspecto. Aparece habitualmente en cualquier distribución Linux.
Los paquetes gráficos, así como de otros tipos, pueden descargarse en este repositorio. Y para corroborar su popularidad existen cientos de páginas con documentación, tutoriales y código para Ruby: RubyCentral, Ruby-doc, Rubyforge ...


Ej:

def init
$listName = GL.GenLists(1);
GL.NewList($listName, GL::COMPILE);
GL.Color(1.0, 0.0, 0.0); # /* current color red */
GL.Begin(GL::TRIANGLES);
GL.Vertex(0.0, 0.0);
GL.Vertex(1.0, 0.0);
GL.Vertex(0.0, 1.0);
GL.End();
GL.Translate(1.5, 0.0, 0.0); # /* move position */
GL.EndList();
GL.ShadeModel(GL::FLAT);
end

def drawLine
GL.Begin(GL::LINES);
GL.Vertex(0.0, 0.5);
GL.Vertex(15.0, 0.5);
GL.End();
end

 

 Lua

Concebido por el Grupo de Tecnologia em Computação Gráfica - Tecgraf de la Universidade Católica do Rio de Janeiro y usado mayormente como lenguaje de script empotrado (embedded), es posible usar un binding (enlace con un librería) a SDL y OpenGL. No tiene un modelo de objetos propio (clases), sino una estructura muy flexible denominada 'tabla', equivalente a un prototipo. Hay gran cantidad de paquetes y distribuciones modificadas.
Entre sus proyectos destacan Doris, el cual incluye 'bindings' a OpenGL e incluye un visor que permite ejecutar scripts Lua con llamadas a OpenGL. Además, existe un proyecto para una distribución completa ( al estilo de Python y Ruby ) llamado LuaCheia, que incluye el módulo SDL y probablemente en el futuro un módulo OGL.


Ej:

 

 Io

Io es un lenguaje reciente (2002), creado por un programador experto en GUIs, Steve Dekorte, quien diseñó un lenguaje que adaptado a sus necesidades. Es innovador y posee características adaptadas a la programación gráfica ( prototipos, actores, mensajes... ). Incluye un "bridge" a OpenGL y debido a su arquitectura, es uno de los más rápidos basados en el estándar ISO C.

Se puede descargar un "snapshot" diario en su página web, y la documentación disponible así como el número de webs dedicadas ha aumentado considerablemente en los últimos meses.

 

Otras posibilidades

- Pike. Es el más rapido de todos, al estar escrito en gran parte en código nativo. Su sintaxis emula a la de C, sin aportar muchas novedades. Incluye el módulo SDL nativo, aunque la versión Win32 tiene limitaciones con respecto a la de Linux.

- Basic4gl. Como su propio nombre indica: Basic para OpenGL. Permite generar ejecutables Windows completos.

- Lush. Lisp para gráficos (Linux). Programación funcional, poco apta para prototipado rápido pero interesante para experimentar.

 

Conclusión:

En este cuadro se resumen las caracteristicas mas importantes:

Lenguaje

Plataforma

Tipo de lenguaje

Extensiones gráficas

(E)jecutado/(I)nterpretado/e(M)potrado(embedded)

Velocidad (Relativa)

Basic4gl

Win32

Procedural

OpenGL

E, I

n/t

Io

*

OO** (Prototipos)

OpenGL

I,M

media
Logo

*

Procedural, Funcional

***

***

***
Lua

*

OO** (Prototipos)

OpenGL básico, SDL

I,M media
Lush

Linux(Unix)

Funcional puro

SDL, OpenGL

I n/t
Perl

*

OO**, Procedural 

OpenGl básico, SDL

I n/t
Pike

*

Procedural

SDL (Linux)

I rápida
Python

*

OO**, Procedural, elementos funcionales

OpenGL, SDL

I,E,M ( usando el módulo adicional py2exe) media
Ruby

*

OO** puro

OpenGl, SDL

I,M lenta

* : Win32, Linux

OO**: Orientado a Objetos.

***: Dependiente de la distribución.

n/t: No testado

La elección de un lenguaje o herramienta en particular depende de muchos factores: tipo de programacion (funcional, orientada a objetos, prototipos, ... ), actualizaciones, extensiones, tipo de API. Los dos grandes lenguajes de script "todo-terreno" en estos momentos son Python y Ruby. La elección de uno de ellos en particular puede llegar a ser una cuestión personal: alt.comp.lang.* está repleto de comentarios referidos a las "language wars". Hasta hace poco era Python el que llevaba una clara ventaja con Pygame, pero en los últimos meses se han consolidado alternativas como Basic4gl, Lua o Io.


Por último, conviene tener en cuenta que:

- Entre los motores 3D que cuentan con bindings o ataduras a varios lenguajes predefinidos, en lugar de usar un motor de scripts propio, destacan Irrlicht Engine y Crystal Space.

- Existe una nueva generación de lenguajes que se ejecutan sobre una máquina virtual Java y que simplifican la programación para esta plataforma como Groovy, Nice o Jython.

- Existen multitud de "sistemas de script" (librerías, "mini-lenguajes") que permiten incrustar/empotrar (embed) código en una aplicación fácilmente, además de los que figuran en el cuadro superior: AngelScript, TinyScheme...

- Es posible utilizar un navegador con Javascript ( o VBScript ) para realizar efectos gráficos... Dan Steinman Web .

Para cualquier comentario, sugerencia o corrección... usad los foros y el buscador de CODEPIXEL.

Last Updated ( Sunday, 17 December 2006 )
 
<< Start < Prev 1 2 Next > End >>

Results 7 - 10 of 10

Lista de Correo

visita la lista de correo de codepixel. Es una lista abierta, asi que podrás subscribirte y preguntar tus dudas de programación, compartir tus opiniones, aportar ideas, y formar parte de la comunidad codepixelera.