|Stable release||2.0.0 (2009-12-22)|
Harbour is a modern, fast computer programming language. It is a Clipper-compatible compiler which is cross-platform, running on many operating systems (DOS, Microsoft Windows, Linux (32, 64), Unix (32, 64), Mac OS X, Windows CE, Pocket PC, Haiku/BeOS).
The open source Harbour license is similar to the GNU General Public License, with an exception supporting commercial applications, so commercial applications can be produced with Harbour and distributed.
It is designed to use and compile Clipper source code, with Class(y) style OOP extensions.
Unlike Java which is intended to be write once, run anywhere, Harbour aims to be write once, compile anywhere. As the same compiler is available for all of the above operating systems, there is no need for recoding to produce identical products for different platforms, except when operating system dependent features are used. Cross-compiling is supported with MinGW32. Under Microsoft Windows Harbour is more stable but less well-documented than Clipper, but has multi-platform capability and is more transparent, customizable and can run from a USB flash drive. Under Linux and Windows Mobile, Clipper source code can be compiled with Harbour with very little adaptation.
Harbour can make use of multiple Graphic Terminal emulations, including console drivers, and Hybrid Console/GUIs, such as GTWvt, and GTWvg.
Harbour supports external GUIs, free (e.g. HWGui, MiniGUI) and commercial (e.g. FiveWin, Xailer ).
Harbour is 100% Clipper-compatible and supports many language syntax extensions including greatly extended run-time libraries such as OLE, ODBC, MySQL, PostgreSQL, TIpt, TXml, RegEx, HbZip and xbScript. Harbour has an active development community and extensive third party support.
Harbour extends the Clipper Replaceable Database Drivers (RDD) approach. It offers multiple RDDs such as DBF, DBFNTX, DBFCDX, DBFDBT and DBFFPT. In Harbour multiple RDDs can be used in a single application, and new logical RDDs can be defined from combination of other RDDs. The RDD architecture allows for inheritance, so that a given RDD may extend the functionality of other existing RDD(s). 3rd party RDDs, like RDDSQL, RDDSIX, RMDBFCDX, Advantage Database Server, and Mediator exemplify some of the RDD architecture features.
Harbour also offers ODBC support by means of an OOP syntax, and ADO support by means of OLE.
Macro Operator (runtime compiler)
One of the most powerful features of xBase languages is the MACRO Operator '&'. Harbour's implementation of the Macro Operator allows for runtime compilation of any valid Harbour expression. Such a compiled expression may be used as a VALUE, i.e. the right side of an assignment, but more interestingly, such a compiled expression may be used to resolve the LEFT side of an assignment, i.e. PRIVATE, or PUBLIC variables, or a database FIELD.
Additionally the Macro Operator may compile and execute function calls, complete assignments, or even list of arguments, and the result of the macro may be used to resolve any of the above contexts in the compiled application. In other words, any Harbour application may be extended and modified at runtime to compile and execute additional code on demand.
Object Oriented Programming
Programming in an OOP style is a broader issue than a specific library or a specific interface, but OOP programming is something many Clipper programmers have come to expect. CA-Clipper 5.2 and especially 5.3 added a number of base classes, and a matching OOP syntax. Libraries such as CLASSy, Fivewin, Clip4Win, and TopClass provide additional OOP functionality.
Harbour has OOP extensions with full support for classes including inheritance, based on CLASSy syntax. OOP syntax in Harbour is very similar to that of earlier Clipper class libraries so it should be possible to maintain legacy Clipper code with minimal changes.
xHarbour is a fork of the earlier Harbour project. xHarbour takes a more aggressive approach to implementing new features in the language, while Harbour is more conservative in its approach, aiming first of all for an exact replication of Clipper behaviours and then implementing new features and extensions as a secondary consideration.
The Harbour developers have attempted to document all hidden behaviours in the Clipper language and test Harbour-compiled code alongside the same code compiled with Clipper to maintain compatibility.
The Harbour developers explicitly reject extensions to the language where those extensions would break Clipper compatibility.
The idea of a free software Clipper compiler has been floating around for a long time and the subject has often cropped up in discussion on comp.lang.clipper. Actual work to get something developed started early in 1999 when Antonio Linares started a thread to discuss some ideas about developing a Clipper grammar using Lex and Yacc.
Sailing the Clipper ship to a Harbour port. Clipper is a type of ship. Harbour is a synonym to port (where ship docks) Harbour is out port to the Clipper language.
This is Antonio Linares assertion:
"My wife Sylvia proposed it to me. We were driving in the car with the kids and we were talking about a name for the project. Curiously enough the road was beside the sea, and I told them "ocean" as a possible name. Then she answered: "harbour" :-)
Two years before that time, I was highly interested in learning how to build a compiler. A friend of mine introduced me to Lex and Yacc and I built an early prototype that I named "Five". I tried to follow the "Force" compiler (by Sophco) architecture (native xbase. No virtual machine used) and though I did a nice progress, I realized there were a lot of troubles going the "Force" way. By that time Linux was already a huge success and I was reading many articles about cooperative development in Internet. It look quite incredible but I thought that if it worked for Linux, then it could also work for a Clipper compatible compiler.
Then I started a new Clipper compatible compiler, using this time a virtual machine, and then I went to comp.lang.clipper to propose to build it in an open source way, cooperative development, like Linux. It was a huge success :-) Lots of developers shown a big interest in the project like Ryszard, Dave Pearson, etc. and started helping to organize the open source project. Then I proposed Harbour (Sylvia's proposal) and it was widely accepted :-)"