Show/Hide Toolbars

XSharp Bandol

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 want to use. The Core dialect is default.

 

Feature

Core

VO & Vulcan 1,2

Harbour 1,2

Xbase++
14

FoxPro

 

4 Letter abbreviations of keywords

(FUNC, WHIL etc).

No

VO: Yes, Vulcan: No (Vulcan) 11

Yes

Follow the conventions of Xbase++

Yes

&& as single line comment character (alternative syntax for //)

No

VO: Yes Vulcan: No

Yes

Yes

Yes

* at beginning of line as comment character

Yes

Yes

Yes

Yes

Yes

ALIAS (->) operator

No

Yes

Yes

Yes

Yes

ARRAY type, Including Array literals & NULL_ARRAY, including missing elements

No

Yes

Yes

Yes

Yes

BREAK statement

No

Yes

Yes

Yes

Yes

BEGIN SEQUENCE .. RECOVER .. END SEQUENCE

No

Yes

Yes

Yes

Yes

CLIPPER calling convention (requires USUAL support)

No

Yes

Yes

Yes

Yes

CODEBLOCK type

No

Yes

Yes

Yes

Yes

DATE type, including NULL_DATE

No

Yes

Yes

Yes

Yes

DATE and DateTime literals

Yes

Yes

Yes

Yes

Yes

DEFINE statement with optional type clause

Yes

Yes

Yes

Yes

Yes

FIELD statement, and recognition of Field names in stead of locals or instance variables

No

Yes

Yes

Yes

Yes

FLOAT type, including Float literals & the /vo14 compiler option

No

Yes

Yes

Yes

Yes

GLOBAL statement

Yes

Yes

Yes

Yes

Yes

IIF() expression and the /vo10 compiler option

Yes 7

Yes 7

Yes

Yes

Yes

Late binding

No

Yes (with /lb+)

Yes

Yes

Yes

MACRO compiler

No 13

Yes

Yes

Yes

Yes

MEMVAR, PUBLIC, PRIVATE, PARAMETERS statement , including undeclared variables 14

No

VO: Yes, Vulcan: No

Yes

Yes

Yes

PSZ Type, including NULL_PSZ and (pseudo) PSZ conversion functions (String2Psz(), Cast2Psz()

No

Yes

Yes

Yes

Yes

PSZ Indexer

n/a

VO: 1 based,
Vulcan 0 based

Yes

Yes

Yes

NULL_STRING

Yes 9

Yes 9

Yes

Yes

Yes

SYMBOL type, including Symbol literals & NULL_SYMBOL

No

Yes

Yes

Yes

Yes

USUAL type, including NIL literal

No

Yes

Yes

Yes

Yes

Special features



Yes

Yes

Yes

Untyped Literal Arrays

No

Yes 8

Yes

Yes

Yes

Missing types allowed

No

Yes 3

Yes

Yes

Yes

Missing arguments in function/method calls MyFunc(1,,2)

No

Yes

Yes

Yes

Yes

Pseudo functions



Yes

Yes

Yes

PCount(), _GetMParam(), _GetFParam(), _Args()

No

Yes 4

Yes 4

Yes 4

Yes 4

SLen()

No

Yes 5

Yes 5

Yes 5

Yes 5

_Chr()

No

Yes

Yes

Yes

Yes

AltD()

No

Yes 6

Yes 6

Yes 6

Yes 6

PCall, PCallNative

No

Yes

Yes

Yes

Yes

CCall, CCallNative

No

Yes

Yes

Yes

Yes

Other information






Generated Function class name

Functions
X$<ModuleName>$Functions
for static functions and globals

<AssemblyName>.Functions (DLLs)
<AssemblyName>.Exe.Functions (EXEs)
<AssemblyName>.Exe.$<ModuleName>$.Functions
for static functions and globals


VOSTRUCT and AS/IS syntax

No 10

Yes

Yes

Yes

Yes

UNION and AS/IS syntax

No 10

Yes

Yes

Yes

Yes

 

1.Requires VulcanRT.DLL or XSharp.VO.DLL

2.Requires VulcanRTFuncs.DLL or XSharp.VO.DLL

3.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

4.Only supported inside functions and methods with Clipper Calling convention

5.The Vulcan runtime does not have a SLen() function. The compiler translates this to accessing the Length property of the string

6.This gets translated to
       IF System.Diagnostics.Debugger.Attached
               System.Diagnostics.Debugger.Break()
       ENDIF

7.In the core dialect each of the expressions is cast to OBJECT. In the other dialects the expression is cast to USUAL.

8.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

9.With the /vo2 compiler option NULL_STRING is compiled to an empty string. Otherwise to a NULL.

10.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.

11.Only for VO compatible keywords, not for keywords introduced in Vulcan or XSharp.

12.The true and false expressions for an IIF() are optional in Harbour and XBase++

13.The macro compiler is not supported. However when you use the RDD system in the Core dialect then 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.

14.This requires the XSharp runtime.