Compilador Harbour

Su objetivo inicial fue soportar todas las sentencias y extensiones de la versión más popular del compilador, Clipper 5.2.

La licencia open source de Harbour[1]​ es similar a la GNU General Public License, con la excepción del soporte de aplicaciones propietarias, por lo que las aplicaciones propietarias pueden ser creadas y distribuidas con Harbour.

El proyecto fue iniciado por Antonio Linares, creador de la biblioteca FiveWin, y fue rápidamente secundado por otras figuras del desarrollo en Clipper.

Varias de las casas que desarrollan bibliotecas para Clipper respaldaron el proyecto, soportándolo en sus productos.

A medida que el mismo compilador está disponible para todos los sistemas operativos anteriores, no hay necesidad de recodificación para producir productos idénticos para diferentes plataformas, excepto cuando se utilizan las características dependientes del sistema operativo.

En Linux y Windows Mobile, el código fuente Clipper puede ser compilado con Harbour, con muy poca adaptación.

La mayoría del software escrito originalmente para funcionar con Xbase++, Flagship, FoxPro, xHarbour y otros dialectos pueden ser compilados con Harbour con algunas adaptaciones.

En 2010 se han hecho muchos esfuerzos para hacer la transición de otros dialectos xBase más fácil.

En cambio en el modo Gráfico, se utiliza el paradigma por eventos y la ejecución no necesariamente sigue con la próxima directiva de programación.

Es muy importante tener en cuenta esto, porque el código fuente debe ser modificado según el tipo de interfaz que se elija.

La aplicación HBIDE incluida en la distribución oficial y en el repositorio SVN es una muestra del potencial de HBQt.

Harbour como cada lenguaje xBase es in-sensible a mayúsculas y, opcionalmente, puede aceptar palabras clave escritas con solo los cuatro primeros caracteres.

Un escalar tiene un valor único, como una cadena, número o referencia a cualquier otro tipo.

Las matrices son listas ordenadas de escalares o tipos complejos, con un índice por número, comenzando por el 1.

Las variables independientes mantendrán su valor durante el tiempo que un bloque de código (Codeblock) hace referencia a ellos aún exista.

Estos valores serán compartidos con cualquier otro bloque de código que puede tener acceso a esas mismas variables.

o: La estructura BEGIN SEQUENCE permite un aborto ordenado de cualquier secuencia, incluso cuando se utilizan procedimientos y funciones anidadas.

Esto significa que un procedimiento/función llamado, puede emitir una sentencia BREAK, o una expresión Break(), para forzar el retorno de cualquier procedimiento/función anidadas, todo el camino de regreso a la primera estructura externa BEGIN SEQUENCE, incluso después de su respectiva declaración END, o a una cláusula RECOVER si está presente.

Alternativamente las declaraciones TRY [CATCH] [FINALLY] están disponibles en la biblioteca xHB trabajando como el constructor SEQUENCE.

Procedimientos y Funciones en Harbour puede ser especificadas con la palabra clave PROCEDURE, o FUNCTION.

Los parámetros que se pasan a una procedure/function aparecen en la subrutina como variables locales, y puede aceptar cualquier tipo, incluyendo las referencias.

Los desarrolladores de Harbour han tratado de documentar todo el comportamiento oculto en el lenguaje Clipper y testeado código compilado con Harbour con el mismo código compilado con Clipper para mantener la compatibilidad.

Una comparación detallada entre las extensiones aplicadas en Harbour y xHarbour se puede encontrar en el repositorio SVN del proyecto en SourceForge.

Código Harbour en HBIDE.
HBIDE look.