Harbour (programming language): Difference between revisions

Content deleted Content added
Built-in data types: fix syntaxhighlight errors
mNo edit summary
Line 5:
}}
{{Use dmy dates|date=June 2014}}
 
{{Infobox programming language
| name = Harbour Project
Line 34 ⟶ 33:
[[IBM AIX|AIX]] and [[MS-DOS]].
 
== History ==
The idea of a free software Clipper compiler had been floating around for a long time and the subject has often cropped up in discussion on comp.lang.clipper. Antonio Linares founded the Harbour project and the implementation was started in March 1999. The name "Harbour" was proposed by Linares, it is a play on a [[Clipper ship|Clipper]] as a type of ship. Harbour is a synonym for port (where ships dock), and Harbour is a port of the Clipper language.
 
In 2009, Harbour was substantially redesigned, mainly by Viktor Szakáts and Przemyslaw Czerpak.
 
==Database support==
 
Harbour extends the Clipper Replaceable Database Drivers (RDD) approach. It offers multiple RDDs such as [[DBASE|DBF]], DBFNTX, DBFCDX, DBFDBT and DBFFPT. In Harbour multiple RDDs can be used in a single application, and new logical RDDs can be defined by combining other RDDs. The RDD architecture allows for inheritance, so that a given RDD may extend the functionality of other existing RDD(s). Third-party RDDs, like RDDSQL, RDDSIX, RMDBFCDX, [[Advantage Database Server]], and Mediator exemplify some of the RDD architecture features. DBFNTX implementation has almost the same functionality of DBFCDX and RDDSIX. NETIO and LetoDB<ref>{{cite web|url=https://sourceforge.net/projects/letodb |title=LetoDB |publisher=Sourceforge.net |access-date=2013-12-09}}</ref> provide remote access over [[Transmission Control Protocol|TCP]] protocol.
 
Line 73 ⟶ 71:
 
===Macro Operator (runtime compiler)===
 
One of the most powerful features of xBase languages is the [[Macro (computer science)|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 (rvalue), but such a compiled expression may be used to resolve the left side (lvalue) of an assignment, i.e. private, or public variables, or a database field.
 
Line 95 ⟶ 92:
 
===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 [https://web.archive.org/web/20010501165630/http://appsolutions.com/Classy/ Class(y)], FieWin, Clip4Win, and Top Class provide additional OOP functionality.
 
Line 106 ⟶ 102:
 
===Built-in data types===
Harbour has six scalar types : [[Null pointer|Nil]], [[String (computer science)|String]], [[calendar date|Date]], [[Logical]], [[Integer|Numeric]], [[Pointer (computer programming)|Pointer]], and four complex types: [[Array data type|Array]], [[Object (computer science)|Object]], [[Closure (computer science)|CodeBlock]], and [[Hash table|Hash]]. A scalar holds a single value, such as a string, numeric, or reference to any other type. Arrays are ordered lists of scalars or complex types, indexed by number, starting at 1. Hashes, or [[associative array]]s, are unordered collections of any type values indexed by their associated key, which may be of any scalar or complex type.
 
Literal (static) representation of scalar types:
Line 141 ⟶ 137:
Due to the dynamic nature of {{mono|PRIVATE}} and {{mono|PUBLIC}} variables, they can be created and destroyed at runtime, can be accessed and modified by means of runtime macros, and can be accessed and modified by Codeblocks created on the fly.
 
===Control Structuresstructures===
The basic control structures include all of the standard [[dBase]], and [[Clipper (programming language)|Clipper]] control structures as well as additional ones inspired by the [[C (programming language)|C]] or [[Java (programming language)|Java]] programming languages:
 
Line 239 ⟶ 235:
[STATIC] FUNCTION ''SomeProcedureName''( ''Param1'' [, ''ParamsN''] )
 
[[Subroutine|Procedures]] and [[Functionfunction (computer science)|Functionsfunctions]] in Harbour can be specified with the [[keyword (computer programming)|keyword]]s <code>PROCEDURE</code>, or <code>FUNCTION</code>. Naming rules are the same as those for ''Variables'' (up to 63 characters non-case sensitive). Both Procedures and Functions may be qualified by the scope qualifier ''STATIC'' to restrict their usage to the scope of the module where defined.
 
The ''INIT'' or ''EXIT'' optional qualifiers, will flag the procedure to be automatically invoked just before calling the application startup procedure, or just after quitting the application, respectively. [[Parameter (computer science)|Parameter]]s passed to a procedure/function appear in the subroutine as local variables, and may accept any type, including references.
Line 349 ⟶ 345:
* hbi18n – Tools to localizing text on applications
* hbdoc – Creates documentation for Harbour
 
All tools are multi-platform.
 
Line 374 ⟶ 371:
* '''[http://marinas-gui.org/ Marinas-GUI]''' – Multi-Platform QT Based GUI Development Package for Harbour. Marinas-GUI downloads as a complete installation package for the chosen target platform (IDE, Version Control, Harbour/C Compiler, Libraries etc.) – Basically install and start coding and compiling
 
== See also ==
* [[Visual FoxPro]]
* [[Visual Objects]]
Line 383 ⟶ 380:
{{Reflist}}
 
== External links ==
* {{official website|https://harbour.github.io}}
* [https://harbour.github.io/the-oasis/ The Oasis] Clipper, FoxPro and Xbase++ community repository
Line 390 ⟶ 387:
* [https://groups.google.com/group/harbour-users/ Harbour Users Mailing List]
* [http://www.kresin.ru/en/harbour.html Extensive Harbour documentation, libraries, tools site]
* [https://github.com/Petewg/harbour-core/wiki Harbour Wiki (Harbour Functions Dictionary)]
 
{{xBase}}