¿Qué es genie?

Hola Mundo!!!

Este es un blog utilitario para aquellos que quieren echar un vistazo al lenguaje de programación GENIE: Un dialecto de VALA que se compila con el mismo compilador: VALAC.



¿Qué es VALA?
Es un nuevo lenguaje de programación parecido a C#, que compila su código en C puro y después a máquina creando un ejecutable. Vala está creado por nuestros amigos de Gnome y está especialmente recomendado para aquellos que usan sus librerías: GTK. En cuanto a los programadores de juegos, decir que es posible usar la librería SDL.

¿Qué es GENIE?
Parece que es como el hemano menor de VALA. Un dialecto de VALA bastante Pythónico que compila en C. Rápido y sencillo aunque con muy poca documentación en Ingles y menos aún en castellano. Supuestamente las posibilidades de VALA y GENIE son exactamente iguales.

Videoconferencia de Genie en Ingles...

Los resultados de ejecución son expectaculares. La conversión a C es de pata negra, convirtiendo a estos dos hermanos una herramienta muy competente frente a python y C#. Yo me centraré en GENIE puesto que de C, C++ o c# no se mucho y se me hace muy pesado tener que aprenderlos.



No soy ningún experto, todo lo contrario. Pero visto lo visto, creo que compartir lo poco que sé en Castellano puede ser una lanza para facilitar que otros programadores puedan ver y analizar esta vanguardia en programación.

10 comentarios:

  1. En realidad es raro que un lenguaje con tantas ventajas sea tan poco popular, supongo que tiene que ser por la falta de documentación, por ejemplo para hacer la figura de mandelbrot coloreada con la librería SDL el código en Genie me salio en solo 16 lineas cortas, bastante entendibles y de rápida ejecución, en otros lenguajes este código es mucho mas largo y según el tipo de lenguaje es también mas lento, no se si en proyectos de gran envergadura tendrá desventajas pero tengo entendido que la interfaz de Ubuntu Unity está escrita en Vala y esto es grande, en teoría debería poder reescribirse en Genie

    ResponderEliminar
  2. Hola Reneco:
    Yo creo que llegan en un momento en el que la comunidad está centrada en la web y las posibilidades que ésta contiene. De hecho Gnome ha cambiado de nuevo la política y ha propuesto a Javascript como lenguaje principal de desarrollo. Tanto para web como para escritorio. Yo sin embargo pienso que las herramientas de escritorio y libres son importantes puesto que en modo web todo va más lento, y el codigo y su ejecución para mejorar su desarrollo no es tan accesible para los programadores, es decir la colaboración se dificulta. Sin embargo, el usuario cada vez tiende más aceptar que su PC sea un terminal tonto de los años 60 corriendo programas que no existen en su ordenador. Espero que Gnome no pierda el rumbo y no abandone estas dos joyas que nos han dejado.
    Un saludo.

    ResponderEliminar
  3. uses
        SDL
    init
        var
            w=3.0 e=Event() c=0 i=0 j=0 r=Rect()
        s:unowned Screen=Screen.set_video_mode (600,600,32,0)
        x,y,t:double
        for i=0 to s.w do for j=0 to s.h
            x=y=c=0
            while c++<254 and x*x+y*y<4
                t=x*x-y*y+w/s.w*i-2
                y=2*x*y-w/s.h*j+1.5
                x=t
            s.fill(r={i,j,1,1},c*4196353)
        s.flip()
        while e.wait(out e)>0 and e.type!=12 do continue

    ResponderEliminar
    Respuestas
    1. Ese es el código para dibujar un fractal de Mandelbrot, el dibujo sale en un cuadro de 600X600, todos los códigos que he visto son mucho mas complicados que este, en linux hay que tener instalado los paquetes libsdl1.2-dev y valac, se compila con "valac --pkg sdl mandel.gs" suponiendo que el nombre del archivo es "mandel.gs", hay que recordar que los espacios iniciales son muy importante en Genie, en este caso los espacios iniciales hay que reemplazarlos por la tecla "tab" o si se quiere poner como primera linea [indent=4] que significa que son 4 espacios con la tecla space para reemplazar cada tab. Este tipo de código es muy sencillo y además de linux lo probé en windows XP pero es un poco complicado instalar la librería SDL

      Eliminar
  4. Aupa:
    He probado tu Mandelbrot y funciona perfectamente (a pesar del warning). Raudo y veloz.
    Para compilar para windows es bastante sencillo compilarlo desde linux y luego copiar las dll de SDL en la misma carpeta.
    Compilar desde linux para windows


    ResponderEliminar
  5. Hola reneco:
    ¿Has compobado el diferencial de velocidad con otros lenguajes de programación?
    ¿Usas Genie para crear software?

    ResponderEliminar
  6. Lo del warning es por la versión de vala, con la versión 0.16 no me da ninguna advertencia en linux mint, hace poco instale ubuntu 13.04 y viene con vala 0.18, con esa versión da warning pero vasta con cambiar en la ultima linea lo que dice e.wait(out e)>0 por Event.wait(out e)>0 pero con los ejemplos de GTK2 aunque funcionan todos dan warning,creo que la gente de Gnome está presionando para pasarse a GTK3.
     En cuanto a la velocidad de los lenguajes de propósito general de los que he probado son free pascal, c, c++ y luego Genie pero la diferencia es poca y depende del tipo de código que usemos, por ejemplo la sumatoria de 1/i (1+1/2+1/3+1/4+...) me da una ventaja de alrededor de 20% en favor de free Pascal pero calcular el promedio de números aleatorios puede haber una diferencia de solo un 5%, me acuerdo de haber hecho estas pruebas hace unos 3 años y ahí Genie era superior Pascal pero por poco, en términos prácticos esa diferencia de velocidad no se nota pero si la facilidad de hacer código en Genie

    ResponderEliminar
  7. [indent=4]
    uses
        SDL
    init
        var
            w=3.0 e=Event() c=0 i=0 j=0 r=Rect() k=0.0 kx=k ky=k
        s:unowned Screen=Screen.set_video_mode (600,600,32,0)
        x,y,t:double
        while 1>0
            for i=0 to s.w do for j=0 to s.h
                x=y=c=0
                while c++<254 and x*x+y*y<4
                    t=x*x-y*y+w/s.w*i-2
                    y=2*x*y-w/s.h*j+1.5+ky
                    x=t+kx
                s.fill(r={i,j,1,1},c*4196353)
            s.flip()
            while Event.wait(out e)>0 & e.button.type!=5 & e.type!=12 do continue
            if e.button.type==5
                k=e.button.button==1 ? 0.7:1.4
                kx=kx+w*(0.5+k*e.button.x/s.w-k)
                ky=ky-w*(0.5+k*e.button.y/s.h-k)
                w=w*k
                if e.button.button==2
                    w=3;kx=ky=0
            if e.type==12 do break

    ResponderEliminar
  8. Este es un fractal de Mandelbrot con zoom, hay que hacer click en la imagen, botón izquierdo=zoom+ botón derecho=zoom- y el botón central del mouse restaura a valores iniciales, se compila con valac --pkg sdl nombre.gs, hacer este tipo de programa en otros lenguajes es un lío tremendo. Yo no soy desarrollador pero es entretenido programar cosas sencillas y mas si es en Genie, aquí se ocupan los eventos del mouse e.button.type==5 siendo e un Event (evento), Genie conserva algunas cosas practicas de c como el operador ternario ? (condicion ? a : b), ahorra lineas de codigo, además se puede ocupar el "and" asi como "&"

    ResponderEliminar
  9. Muy Ilustrativo Reneco.

    Yo ahora mismo me estaba peleando con los videos o animaiciones en SDL+ Genie. Como viene en el blog, me dedico a hacer software educativo. Necesito hacer animaciones o videos y lo acabo de conseguir facilmente aunque con un metodo no muy convencional, grabo un video, saco todos los frames con ffmpeg y después con un script de gimp meto todas las imagenes en un gran gif. Cargo la imagen pero la muestro frame a frame. El audio va a parte. Esto es lo más facil para echar para adelante.
    La otra opcion es usar una libreria smpeg. Pero todavía no me he puesto, ademas para lo que yo necesito puede ir tirando.

    Por cierto, Rene... sabes que Cairo y valac compilan para Android? Notición!!!
    Mira aquí: http://valajournal.blogspot.com.es/
    El artifice es Tarnyko, según comenta puede que en breves tengamos un port SDL+Genie para android.

    ResponderEliminar