The X# compiler can run in different dialects. The table below shows the differences between these dialects.
You can use the /dialect compiler option to select the dialect that you prefer to use. The Core dialect is default.
Feature |
Core |
VO 1,2 |
Vulcan 1,2 |
Harbour 1,2 |
Xbase++ |
FoxPro |
4 Letter abbreviations of keywords (FUNC, WHIL etc). |
No |
Yes 11 |
No |
Yes 11 |
Follow the |
Yes 11 |
&& as single line comment character (alternative syntax for //) |
No |
Yes |
No |
Yes |
Yes |
Yes |
* at beginning of line as comment character |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
ALIAS (->) operator |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
AND, NOT, OR, XOR as alternatives for .AND., .NOT. etc |
No |
No |
No |
No |
No |
Yes |
ARRAY type, Including Array literals & NULL_ARRAY, including missing elements |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
BREAK statement |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
BEGIN SEQUENCE .. RECOVER .. END SEQUENCE |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
CLIPPER calling convention (requires USUAL support) |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
CODEBLOCK type |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
DATE type, including NULL_DATE |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
DATE and DateTime literals |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
DEFINE statement with optional type clause |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
FIELD statement, and recognition of Field names in stead of locals or instance variables |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
FLOAT type, including Float literals & the /vo14 compiler option |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
GLOBAL statement |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
IIF() expression and the /vo10 compiler option 7 |
Yes | Yes | Yes | Yes | Yes | Yes |
Late binding (with /lb+) |
No |
Yes |
Yes |
Yes |
Yes |
|
MACRO compiler |
No 13 |
Yes |
Yes |
Yes |
Yes |
Yes |
MEMVAR, PUBLIC, PRIVATE, PARAMETERS statement , including undeclared variables 14 |
No |
Yes |
No |
Yes |
Yes |
Yes |
PSZ Type, including NULL_PSZ and (pseudo) PSZ conversion functions (String2Psz(), Cast2Psz() |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
PSZ Indexer |
n/a |
1-based |
0-based |
1-based |
1-based |
1-based |
NULL_STRING 9 |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
SYMBOL type, including Symbol literals & NULL_SYMBOL |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
USUAL type, including NIL literal |
No |
Yes |
Yes |
Yes |
Yes |
Yes 15 |
TEXT Command |
No |
No |
No |
No |
No |
Yes |
Special features |
|
|
|
|||
Untyped Literal Arrays 8 |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
Missing types allowed 3 |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
Missing arguments in function/method calls MyFunc(1,,2) |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
Pseudo functions |
|
|
|
|||
PCount(), _GetMParam(), _GetFParam(), _Args() 4 |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
SLen() 5 |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
_Chr() |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
AltD() 6 |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
PCall, PCallNative |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
CCall, CCallNative |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
Other information |
||||||
Generated Function class name |
Functions |
<AssemblyName>.Functions (DLLs) |
||||
VOSTRUCT and AS/IS syntax |
No 10 |
Yes |
Yes |
No 10 |
No 10 |
No 10 |
UNION and AS/IS syntax |
No 10 |
Yes |
Yes |
No 10 |
No 10 |
No 10 |
- Requires VulcanRT.DLL or XSharp.VO.DLL
- Requires VulcanRTFuncs.DLL or XSharp.VO.DLL
- Missing types get translated to USUAL. With the new /vo15 compiler option you can tell the compiler that you do not want to allow missing types
- Only supported inside functions and methods with Clipper Calling convention
- The Vulcan runtime does not have a SLen() function. The compiler translates this to accessing the Length property of the string
- This gets translated to
IF System.Diagnostics.Debugger.Attached
Diagnostics.Debugger.Break()
ENDIF - In the core dialect, each of the expressions is cast to OBJECT. In the other dialects the expression is cast to USUAL.
- Untyped literal arrays in the VO/Vulcan dialect are translated to the VO Array type:
{"aa", "bb", "cc"}
Typed literal arrays are prefixed with <Type> like this:
<STRING>{"aa", "bb", "cc"}
This becomes a literal string array - With the /vo2 compiler option NULL_STRING is compiled to an empty string. Otherwise to a NULL.
- The VOSTRUCT and UNION can be replaced with a standard .NET structure. For Union you need to use the [StructLayout(LayoutKind.Explicit)] attribute on the structure, and the [FieldOffSet()] attribute on each field, to explicitly define the location of the fields.
- Only for VO compatible keywords, not for keywords introduced in Vulcan or XSharp.
- The true and false expressions for an IIF() are optional in Harbour and XBase++
- The macro compiler is not supported. However, when you use the RDD system in the Core dialect, the index expression will still use the macro compiler, and a reference to the XSharp.RT.DLL is needed for the support of the macro compiler.
- This requires the XSharp runtime.
- In FoxPro, NIL is not allowed, and redefined to FALSE.