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 dialect

VO Dialect

Vulcan dialect

Other

ALIAS (->) operator

No

Yes

Yes

n/a

ARRAY type, Including Array literals & NULL_ARRAY

No

Yes 2

Yes 2

n/a

BREAK statement

No

Yes 1

Yes 1

n/a

BEGIN SEQUENCE .. RECOVER .. END SEQUENCE

No

Yes 1

Yes 1

n/a

CLIPPER calling convention (also requires USUAL support)

No

Yes 1,2

Yes 1,2

n/a

CODEBLOCK type

No

Yes

Yes

n/a

DATE type, including Date literals & NULL_DATE

No

Yes 2

Yes 2

n/a

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

No

Yes 2

Yes 2

n/a

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

No

Yes 2

Yes 2

n/a

IIF() expression and the /vo10 compiler option

Yes 7

Yes 7

Yes 7

n/a

MEMVAR statement

NO

Not yet

No

n/a

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

No

Yes 1,2

Yes 1,2

n/a

NULL_STRING

Yes 9

Yes 9

Yes 9

n/a

SYMBOL type, including Symbol literals & NULL_SYMBOL

No

Yes 2

Yes 2

n/a

USUAL type, including NIL literal

No

Yes 2

Yes 2

n/a

Special features

     

n/a

Untyped Literal Arrays

No

Yes 8

Yes 8

n/a

Missing types allowed

No

Yes, 2,3

Yes 2,3

n/a

Pseudo functions

       

 PCount(), _GetMParam(), _GetFParam()

No

Yes, 2,4

Yes 2,4

n/a

 SLen()

No

Yes 5

Yes 5

n/a

 AltD()

No

Yes 6

Yes 6

n/a

1.Requires a reference to VulcanRT.DLL

2.Requires a reference to VulcanRTFuncs.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 casted to OBJECT. In the VO/Vulcan dialect the expression is cast to USUAL when VulcanRTFuncs is included. Otherwise it is casted to OBJECT.

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.