Harbour (software)

From Wikipedia, the free encyclopedia

Harbour is a modern, fast, multiplatform language , it is a open source cross-platform clipper compiler which runs on many operating systems. (DOS, Microsoft Windows, Linux (32,64), Unix (32,64), Mac OS X, Windows CE, Pocket PC).

Harbour license is GPL with an exception supporting commercial applications, so you can distribute commercial application made with Harbour.

It is designed to use and compile Clipper source code, with Classy OOP extension.

Contents

[edit] Design

Unlike Java which is intended to be write once, run anywhere, Harbour's aim 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 MiniGW32. 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 Window Mobile , Clipper source code can be compiled with Harbour with a little adaptation.

Harbour use c compiler Borland C++,Microsoft Visual C++ (6,7,8 ), Minigw32, Watcom C Harbour offering multiple GT (Graphic Terminals), including console drivers, and Hybrid Console/GUIs, such as GTWvt, and GTWvg.

Harbour support external GUIs (free such as HWGui, MiniGUI and commercial, such as FiveWin, Xailer ), Harbour is 100% Clipper backward compatible and supports many language syntax extensions, greatly extended run-time libraries such as OLE, ODBC, MySQL, PostgreSQL, TIpt, TXml, RegEx, HbZip, xbScript 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 xHarbour multiple RDDs can be used in a single application, and new logical RDDs can be defined from combination of other RDD. 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 be means of an OOP syntax, and ADO support by means of OLE. Macro Operator (runtime compiler) One of the most powerful features of the xBase languages is the MACRO Operator '&'. xHarbour's implementation of the Macro Operator allows for runtime compilation of any valid xHarbour expression. Such compiled expression may be used as a VALUE, i.e. the right side of an Assignment, but more interestingly, such compiled expression may be used to resolve the LEFT side of an assignment, i.e. PRIVATE, or PUBLIC variables, or 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. IOW, any xHarbour application may be extended, and/or modified in 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 Harbour have OOP extensions with full inheritance and class declaration. based on Classy syntax , Harbour follows suit in providing a full collection of commands for declaration of classes, inheritance, and so on. The syntax may not wind up being identical with that in the tool you previously used, but it should be possible to maintain your old Clipper class hierarchy with minimal changes to source code.

[edit] Xharbour comparison

Both the projects to set their standards and to choose what implement and how but we could have a "standard" [x]Harbour syntax. C compilers are often very different but there sth we call C language. Everyone will choose if writing standard code or use extensions. Clearly what today an "extension" tomorrow can be standard

Harbour want replicate exact Clipper behavior. Harbour document all hidden behavior making many tests with Clipper to imagine general rules used in the original code. Then I'm coding and for this I usually need much less time then for tests. The final results should be very simple because I do not believe that in Clipper someone intentionally hard coded exceptions. The exceptions are results of some design decisions. If later I have to explicitly hard code some chosen behavior in code I created instead of making some small modification in the algorithm then it means that the testing process was not enough precis and I took wrong decisions so I should repeat the tests. I very seldom decide to fix one special case without trying to understand why it exists in Clipper. Code which have a lot of exceptions is very hard to understand and later update.

Harbour project don’t want unusable extension if it break Clipper compatibility. In xharbour the Clipper behavior was mixed with some xHarbour extensions and the debug process is much harder then it should be... Harbour want made a clear separation and keeping the code clean is important

Finally Harbour have made most of important modifi decision to rewrite gt and multithread for cover all foundation need


[edit] History

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 :-)"

[edit] See also

[edit] External links

Languages