Artículo acerca del lanzamiento de Gambas 2.0 RC1

Después de casi dos años de desarrollo, me siento feliz de anunciar la primera candidata a versión estable de Gambas 2.

Hacemos este anuncio ahora con la esperanza de atraer a más testeadores usuarios para que lo utilicen durante el ciclo de pruebas, a fin de ayudarnos a encontrar errores que podrían haber sido pasados por alto.

Introducción

El nuevo logo de Gambas 2
Gambas es un lenguaje orientado a objetos con gran número de capacidades y un entorno de desarrollo basado en un intérprete de BASIC. Se encuentra publicado bajo licencia GNU General Public Licence.

Su arquitectura está ampliamente inspirada por Java: un ejecutable Gambas es un archivo de clases compiladas y archivos con datos que se ejecuta a través de un interprete creado al efecto.

Gambas se compone de:
  • Un compilador.

  • Un intérprete.

  • Un archivador.

  • Un intérprete de scripts.

  • Un entorno de desarrollo.

  • Muchos componentes que extienden su funcionalidad.

El compilador es un programa rápido y pequeño escrito en C:
  • Compila cerca de 128000 líneas de código útil por segundo en mi propio Athlon 2000. Tal velocidad permite un proceso rápido de desarrollo en el ciclo código/compilación/pruebas.

  • No realiza prácticamente ninguna optimización en este momento, dejando dicho trabajo al intérprete para su realización durante la ejecución del programa.

  • Gestiona y compila traducciones de cadenas empleando las herramientas de GNU gettext.

El intérprete es también un pequeño ejecutable escrito en C, de menos de 180Kb:
  • Proporciona todas las características nativas del lenguaje, dando acceso indirecto prácticamente a todas las herramientas del estandar POSIX contenidas en glibc.

  • Carga clases por demanda, optimizando el bytecode la primera vez que es ejecutado.

  • El enlace entre clases se realiza también en tiempo de ejecución, y lo más tarde posible. Así, incluso ejecutables de gran tamaño se inician rápidamente.

Finalmente, el archivador es un programa que crea un ejecutable Gambas a partir de la carpeta de un proyecto Gambas.

Tenga en cuenta que un ejecutable Gambas no es más que un archivo no comprimido creado a partir de un proyecto. Puede incluir cualquier tipo de archivo, no solamente código bytecode compilado, e intérnamente el intérprete accede a dicho archivo como si fuera un sistema de archivos.

El lenguaje Gambas

Las características principales del lenguaje BASIC de Gambas son:
  • Cerca de 250 palabras clave y funciones nativas para gestionar prácticamente cualquier cosa: aritmética, cadenas, errores, entrada-salida, archivos, fechas...

  • Gestión completa de errores.

  • Control total de procesos, con gestión de pseudo-terminal.

  • Soporte completo para recibir eventos de descriptores de archivo de entrada/salida.

  • Soporte de lazo de eventos con temporizadores.

  • Soporte nativo de cadenas en formato UTF-8.

  • Soporte completo de internacionalización y traducciones.

  • Capacidad de hacer llamadas a funciones externas alojadas en librerías de enlace dinámico.

Pero Gambas es también un lenguaje totalmente orientado a objetos, con:
  • Objetos y clases.

  • Propiedades, métodos, constantes y eventos.

  • Símbolos públicos y privados.

  • Gestión de métodos virtuales.

  • Herencia simple.

  • Constructores y destructores.

  • Gestión de matrices, enumeradores, objetos ordenables.

La herencia en Gambas es un mecanismo totalmente dinámico, y permite:
  • Crear versiones más especializadas de cualquier clase existente.

  • Reimplementar clases y extenderlas.

  • Reimplementar algunos métodos o propiedades de una clase.

Cualquier clase puede ser heredada, reimplementada o sobrecargada, incluso aquellas nativas creadas en C/C++.

Por último, una clase nativa denominada Observer permite interceptar cualquier evento generado por un objeto.

Un lenguaje extensible

El intérprete básico de Gambas es un programa de consola. El resto de características son provistas mediante componentes, que son grupos de clases escritas en C/C++, o directamente en Gambas.

Dichos componentes proporcionan, entre otras cosas:
  • Acceso a muchos sistemas de bases de datos: MySQL, PostgreSQL, SQLite, Firebird, ODBC.

  • Programación de interfaces gráficas de usuario basadas en QT o GTK+.

  • Programación de red, con gestión de procolos de aplicación: HTTP, FTP, SMTP, DNS.

  • Programación SDL.

  • Programación OpenGL.

  • Programación XML.

  • Programación CGI con gestión de sesiones.

Observe que todas esas características se cubren con sólo 351 clases y 4197 símbolos (a día de hoy). Es una cantidad muy pequeña de conceptos a aprender cuando se compara con otros lenguajes. Aún más, tratamos de hacer los nombres de los símbolos lo más coherentes posibles. Todo ello hace a Gambas relativamente fácil de aprender.

Los componentes escritos en C/C++ se almacenan en librerías dinámicas, y los componentes escritos en Gambas son simplemente proyectos Gambas como cualquier otro.

El intérprete los carga al inicio, o cuando se necesitan, durante la ejecución del programa.

Desarrollar un componente en C/C++ es similar hasta cierto punto a desarrollar un driver para el kernel Linux:
  • El código fuente de un componente se encuentra dentro del árbol principal del código fuente de Gambas.

  • Los componentes y el intérprete se comunican a través de una API.

  • Se ejecutan dentro del entorno del intérprete, por lo que no pueden hacer todo lo que quieran.

La documentación acerca de escritura de componentes aún no está finalizada, pero en la lista de desarrollo se puede obtener toda la ayuda que se necesite.

Un lenguaje para crear scripts

Recientemente, Gambas ha sido ampliado con soporte para ejecutar scripts. Esta característica es posible gracias al scripter, un pequeño ejecutable escrito en Gambas que permite ejecutar código Gambas desde cualquier archivo de texto.

He aquí un pequeño ejemplo de script:
#!/usr/bin/env gbs2

' Este script devuelve la memoria realmente utilizada por el sistema, así como el caché y swap en uso.

FUNCTION GetUsedMemory() AS Integer

  DIM sRes AS String
  DIM aRes AS String[]
  DIM cVal AS NEW Collection
  DIM sVal AS String

  EXEC ["cat", "/proc/meminfo"] TO sRes

  FOR EACH sVal IN Split(sRes, "\n", "", TRUE)
    aRes = Split(sVal, " ", "", TRUE)
    cVal[Left$(aRes[0], -1)] = CInt(aRes[1])
  NEXT

  RETURN cVal!MemTotal - cVal!MemFree - cVal!Buffers - cVal!Cached + cVal!SwapTotal - cVal!SwapFree - cVal!SwapCached

END

PRINT Subst("Memoria en uso: &1 bytes", GetUsedMemory())

Independencia en bases de datos, interfaz de usuario y escritorio

Los componentes de Gambas no son solo bindings. Tratan de abstraer la librerías subyacentes en las que están basados, de forma que se gane en coherencia y simplicidad.

En consecuencia, con Gambas, puede escribir programas que sean:
  • Independientes del sistema de bases de datos empleado: cada base de datos es accedida a través de la misma API.

  • Independientes del toolkit gráfico: los componentes QT y GTK+ tienen la misma interfaz.

Por ejemplo, Gambas dispone de un gestor de bases de datos que:
  • Permite editar y gestionar cualquier base de datos, siempre que exista un componente para ella.

  • Utiliza el toolkit QT cuando se ejecuta en KDE, y el toolkit GTK+ cuando se ejecuta sobre Gnome o XFCE.

El gestor de bases de datos sobre KDE El gestor de bases de datos sobre XFCE

Más aún, hemos intentado proveer también independencia del escritorio:
  • Se usan temas de iconos acordes con el escritorio en ejecución (KDE, Gnome o XFCE).

  • El componente gb.desktop, basado en los scripts de shell del proyecto Portland

El entorno de desarrollo

Gambas dispone de un IDE rico en gran número de características, que está también escrito en Gambas.

Puede con él crear formularios, insertar controles arrastrándolos con el ratón, editar su código, y hacer todas las tareas habituales en en otros entornos para desarrollo rápido de aplicaciones.

El IDE en modo de diseño El IDE en modo de depuración

El entorno de desarrollo de Gambas dispone de estas características:
  • Resaltado de texto de código escrito en Gambas, HTML y CSS.

  • Autocompletado automático.

  • Editor de formularios.

  • Depurador integrado.

  • Editor de iconos.

  • Traductor de cadenas.

El editor de código fuente El editor de iconos El diálogo de traducciones

  • Soporte de Subversion SVN.

  • Gestor de bases de datos.

  • Documentación on-line proveniente del wiki de documentación.

  • Muchos programas de ejemplo.

Las tres primeras pestañas del diálogo de propiedades de un proyecto

Más aún, permite crear paquetes de instalación para muchas distribuciones, y paquetes tar.gz de instalación basados en las herramientas GNU autotools.

El soporte de distribuciones GNU/Linux es el siguiente:
  • Debian.

  • Fedora.

  • Mandriva.

  • SuSE.

  • Slackware.

  • Ubuntu.

Los paquetes creados por el IDE sólo funcionan si la distribución de destino empaqueta Gambas correctamente, de acuerdo con lo especificado en la página del wiki How To Package Gambas. Por desgracia, no es el caso de todas las distribuciones, en este momento...

Finalmente, incluso aunque el entorno de desarrollo está muy ligado al lenguaje Gambas, puedes usarlo si quieres para otras tareas.

Advertencia

Para que nadie proteste pensando que este documento es sólo publicidad :-), hemos de mencionar que aún existen algunos inconvenientes en Gambas.

Los principales son:
  • Gambas es una aplicación de 32 bits, no se ejecuta de forma nativa en sistemas de 64 bits.

  • Algunas características que aún no existen en el lenguaje: declaración de enumeraciones, soporte de estructuras.

  • El componente GTK+ aún no está finalizado, por lo cual la independencia de toolkit no es total.

Con suerte, el objetivo es resolver estos problemas en la próxima versión.

El futuro

...no se puede predecir, especialmente el de Gambas.

Gracias a un script de Perl que emplea los módulos Positronic::Variables y Quantum::Superposition, podemos adivinar que la siguiente versión vendrá acompañada de:
  • Soporte de 64 bits.

  • Soporte de DBus.

  • La unión del gestor de bases de datos con el entorno de desarrollo.

  • Un editor de reportes en el IDE.

  • Soporte de QT4 y Cairo.

  • Soporte para KDE4.

  • Un componente gb.desktop mejorado.

  • Generación de documentos OpenOffice.

Gambas es software libre. De forma contraria al software propietario, lo prometido puede que no llegue a tiempo, o que no llegue en absoluto :-)

Descarga de Gambas y otros enlaces

Puede descargar Gambas desde http://gambas.sourceforge.net/download.html.

Algunos enlaces con información adicional acerca de Gambas: Puede enviar problemas y errores tanto a las listas de correo como a la herramienta de seguimiento de errores en http://gambasrad.org.

¡Esperamos que disfruten de Gambas tanto como nosotros! :-)

Benoît Minisini

"Cuando te encuentras haciendo algo, tienes en contra de tí a todo el que está haciendo lo mismo, a todos los que están haciendo lo contrario, y a la mayoría de la gente que no hace nada." - Confucio.

Versión en Castellano: Daniel Campos Fernández.

Documento original en Inglés: /wiki/wiki/doc/release?en