O Harbour é um compilador moderno e rápido de software livre para a linguagem xBase (a linguagem que é implementada pelo compilador Clipper).

O Harbour é um compilador multiplataforma e sabe-se que compila e executa em todas elas sem alterações em seu código ou banco de dados.

A principal diferença do Harbour para outros compiladores dBase é que ele é um software livre. Mas o Harbour é focado em prover às comunidades Clipper e xBase um compilador moderno e portável, possuindo extensões que o tornam um dos mais modernos e completos ambientes de desenvolvimento de aplicações do mercado, em nada lembrando o obsoleto Clipper, exceto pela sua sintaxe e semântica básica, além de seu banco de dados preferencial baseado em tabelas DBF.

A licença do Harbour é similar a LGPL com a exceção de suportar aplicações comerciais para serem construídas e distribuídas através do Harbour.

História É uma linguagem derivada, de linhagem antiga. Originou-se do compilador Clipper 5, que é uma evolução bastante diferente do Clipper Summer 87, que derivou-se da linguagem encontrada no SGBD dBase III for MS-DOS, que por sua vez, é uma migração do dBase II que rodava no CP/M. As raízes da linguagem, portanto, datam das primeiras gerações de linguagens de programação.

A ideia de se criar uma alternativa ao Clipper que já era defunto, circulava pelas discussões em comp.lang.clipper. Em 1999 o espanhol responsável pela conhecida biblioteca de interface gráfica para Windows Fivewin, Antonio Linares iniciou um tópico para discutir algumas ideais sobre o uso dos softwares Lex and Yacc para implementar um compilador semelhante ao Clipper.

"Velejando com o barco clipper para um porto seguro" foi a frase que serviu de base do nome. Clipper é um tipo de barco. Harbour é sinônimo de porto(onde barcos atracam), em Inglês, então Harbour é o porto seguro para a linguagem Clipper.

Em 2009, o Harbour recebeu uma reformulação geral em sua arquitetura promovida principalmente por Viktor Szakáts e Przemyslaw Czerpak, os principais desenvolvedores do Harbour no momento. Esta reformulação coloca o Harbour entre os melhores compiladores existentes no mercado mesmo quando se compara com outras linguagens.

Público alvo O compilador Harbour encontra seus principais usuários nos programadores Clipper, que já possuem grande quantidade de código escrito e precisam evoluir junto com as constantes inovações do mundo da informática, e também do surgimento de novas necessidades dentro das empresas e instituições onde os sistemas estão implantados. Embora seja uma poderosa linguagem de propósito geral, ela é primariamente utilizada para construir aplicativos de negócios e onde se utilizam grande volumes de dados. Até hoje, os principais fabricantes de equipamentos para automação comercial precisam disponibilizar bibliotecas de acesso aos seus hardwares para os programadores xBase interagirem, se desejam ter sucesso no mercado.

Clipper pode ser considerada uma linguagem obsoleta, inclusive por ter inúmeros bugs sem solução desde meados da década de 90. Já o Harbour tem posição oposta, sem deixar de lado a compatibilidade com o estilo Clipper 5.x, versões anteriores como Summer'87 e ainda colocando compatibilidade com outros dialetos, permite uma série de inovações na linguagem modernizando-a e colocando no mesmo patamar das linguagem que possuem as últimas novidades. Vale lembrar que muitas das funcionalidades glorificadas hoje em dia em linguagens modernas já estavam presentes no Clipper há mais de 20 anos atrás de uma forma ou de outra.

Características Software livre e multiplataforma ( (DOS, Microsoft Windows (32, 64), Linux (32, 64), Unix (32, 64), BSD, Mac OS X, OS/2, Windows CE, Pocket PC, Symbian, iPhone, Android, QNX, VxWorks, Ecomstation, BeOS, etc); 100% Compatível com o CA-Clipper 5.2 e 5.3 e possui camadas de compatibilidade para XBase++, Flagship, FoxPro, Visual Objects e xHarbour; O Harbour converte os arquivos com extensão PRG em C, usando depois um compilador C para gerar os arquivos executáveis. Suporte Técnico especializado em lista de discussão aberta a todos; Sua licença permite a criação de programas tanto de código aberto como de código fechado. Pré-processador de código-fonte; Compiladores de alta-performance para geração do pCode e utilização de compiladores C para gerar o executável; Depurador interativo; Interface gráfica (opcional, com implementações diferentes, destacando-se a Qt colocando o Harbour em pé de igualdade com qualquer outra linguagem moderna no quesito interface); Suporte a diversos modos de console de texto ou gráfico (com os drivers adequados) com recursos melhorados em relação ao Clipper; Forte integração com a linguagem C e consequentemente com assembly, melhorando e facilitando o que já era muito bom no Clipper, incluindo uma extensiva API revelando boa parte dos componentes internos da plataforma Harbour.

Harbour pode usar um dos seguintes compiladores C, entre outros: GCC, MinGW, Clang, ICC, Microsoft Visual C++ (6+), Borland C++, Watcom C, Pelles C e Sun Studio.

Informações Complementares O Harbour permite a dinamização de aplicações com arquivos de dados, tornando-as mais fáceis e rápidas que as desenvolvidas em uma linguagem de programação tradicional, como Cobol, Basic ou Pascal ou mesmo as mais modernas como Java, C# ou Delphi. Com uma simples, moderna e eficiente linguagem de programação, permite o encadeamento ordenado e lógico de seus comandos possibilitando rapidamente a definição de programas com alto grau de complexidade e sofisticação, permitindo inclusive interações com outras linguagens como “C” e Assembler, que lhe confere a flexibilidade necessária para a utilização profissional.

Manipulação de saída Harbour faz uso de múltiplas emulações e acessos nativos a terminais gráficos incluindo através de drivers específicos para console e terminais híbridos Console/GUIs.

Exemplos de drivers:

Nativos GtNul, GtCGI, GtStd, GtPCA, GtOS2, GtWin, GtCrs, GtSLN, GtTRM, GTWvt, GTWvg, GtXWc, GtAlleg, GtGUI, GtCTw, HBQt

Fornecidos por terceiros como software livre HWGui, MiniGUI, HMGExt, ooHG

Fornecidos por terceiros comercialmente FiveWin, Xailer

HBQt é uma biblioteca que fornece bindings à biblioteca Qt de uma forma inovativa. Com a HBQt qualquer programador Harbour pode criar aplicações com visual profissional e nativo à cada plataforma sem nenhuma alteração no código. A aplicação HBIDE inclusa na distribuição oficial e através do repositório SVN é um exemplo do potencial da HBQt.

Suporte a banco de dados Harbour estende os Replaceable Database Drivers (RDDs) do Clipper. Esses RDDs são precursores do ODBC permitindo que várias tecnologias de banco de dados possam ser acessados utilizando a mesma base de código.

O Harbour já oferece nativamente múltiplos RDDs tais como DBF, DBFNTX, DBFCDX, DBFDBT and DBFFPT. É permitida a utilização de vários RDDs simultaneamente e a criação de novos RDDs lógicos frutos da combinação de outros RDDs já existentes, já que sua arquitetura permite a herança dos RDDs de forma semelhante ao que ocorre com a orientação a objeto. RDDs de terceiros, como RDDSQL, RDDSIX, RMDBFCDX, Advantage Database Server, and Mediator exemplificam algumas funcionalidades da tecnologia do RDD. A implementação do DBFNTX tem quase toda funcionalidade existente no DBFCDX (típica do FoxPro) and RDDSIX (através da biblioteca SixDrive). NETIO (nativo do Harbour) e o LetoDBLetoDB fornecem acesso remoto à DBFs através do protocolo TCP, evitando os problemas de compartilhamento de arquivos encontrados em conexões SMB normalmente adotadas em redes locais.

Harbour também oferece suporte ao ODBC com uma sintaxe OOP, e suporte ao ADO através da tecnologia OLE. MySQL, PostgreSQL, SQLite, Firebird, Sybase,DB2, Oracle, SQLServer são exemplos de bancos de dados que o Harbour pode interagir nativamente através de suas próprias combinações.

Tecnologias xBase são frequentemente confundidas com softwares SGDB. Embora isso seja verdade, essas tecnologias são mais que simples sistemas de banco de dados ao mesmo tempo que uma linguagem baseada em xBase usando apenas o formato DBF não pode fornecer todo o modelo que um SGDB real pode alcançar.

Extensões Internet (http, pop, smtp, CGI, TCP, UDP, RPC), através de sockets, bibliotecas TIP, TPathy e cURL, permitindo a criação de páginas dinâmicas para a web ou mesmo criar seus próprios servidores; Criptografia OpenSSL Blat, um software para envio de e-mail; FreeImage e GD para manipulação de imagens; Manipulação de expressões regulares estilo Perl através da PCRE; Compactação e descompactação de dados através do HbZip (zlib and bzip2) XML; Implementação própria das bibliotecas CA-Tools e NanFor Unicode Multi-Threading nativo; Suporte a execuções em Background; Interface Gráfica para Windows e Linux, OS/2, Mac e outros com várias tecnologias como a Qt da Nokia, base do KDE e Cairo; OLE cliente e servidor; ADO cliente e servidor; OOP seguindo a sintaxe básica da tradicional Class(y); Novos tipos de dados, como Hash, Symbol e Pointer, além de sintaxe natural para literal de data (Ex.: 0d20100401); Novas sintaxes SWITCH, FOR EACH, etc.; Exceções estruturadas ou centralizadas em objeto específico Acesso a estruturas C diretamente do código xBase; Módulos de carregamento dinâmico (HRB) que funcionam semlhante a uma DLL, mas voltada para integração de um pCode auxiliar à VM principal

Filosofia de Programação Harbour tem a proposta de ser extremamente portável mas ao contrário de Java que pretende ser write once, run anywhere (escreva uma vez, rode em qualquer lugar), Harbour procura ser write once, compile anywhere (escreva uma vez, compile em qualquer lugar). Uma vez que o mesmo compilador esteja disponível para todas as plataformas já citadas, não há necessidade de produzir códigos diferentes para cada plataforma, exceto para características exclusivas de um sistema operacional e mesmo assim Harbour sempre procura fornecer soluções portáveis. Compilação cruzada entre plataformas também é oferecida através do compilador MinGW32.

Sob Microsoft Windows, Harbour é mais estável ao passo que também é menos documentado que seu predecessor Clipper, mas a capacidade multiplataforma é mais transparente, personalizável e é portável no sentido de mobilidade, podendo rodar a partir de um dispositivo USB com memória flash.

Sob Linux e Windows Mobile, um código original Clipper pode ser compilado com pouquíssimas adaptações. A maioria dos softwares escritos para compilar com XBase++, Flagship, FoxPro, xHarbour e outros dialetos podem ser compilados com alguma adaptação. Em 2010, muitos esforços estão sendo feitos para facilitar a transição de todos os dialetos xBase para o Harbour.

Qualquer linguagem seguindo o padrão xBase foi projetada para oferecer um grande ganho de produtividade no desenvolvimento de aplicações de negócios e de acesso intensivo de bases de dados, utilizando, algumas vezes, técnicas questionáveis por programadores de outras linguagens, mas que funcionam muito bem para a finalidade empregada neste tipo de aplicação. Harbour não é uma exceção.

Paradigmas de programação Paradigma Procedural Assim como o Clipper é pertencente ao Paradigma procedural (como Pascal, C, Ada, Cobol, Fortran), Harbour utiliza fundamentalmente este paradigma de forma estruturada, seja em sua forma imperativa ou declarativa.

Paradigma Orientado a Objeto