Show/Hide Toolbars

XSharp

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. All dialects apart from the Core dialect require a reference to the XSharp runtime DLLs

 

Feature

Core

VO

Vulcan

Harbour

Xbase++ 14

FoxPro

4 Letter abbreviations of keywords

(FUNC, WHIL etc).

-

Yes 11

-

Yes 11

Follow the conventions of Xbase++

Yes 11

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

-

Yes

-

Yes

Yes

Yes

* at beginning of line as comment character

Yes

Yes

Yes

Yes

Yes

Yes

ALIAS (->) operator

-

Yes

Yes

Yes

Yes

Yes

AND, NOT, OR, XOR as alternatives for .AND., .NOT. etc

-

-

-

-

-

Yes

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

-

Yes

Yes

Yes

Yes

Yes

BREAK statement

-

Yes

Yes

Yes

Yes

Yes

BEGIN SEQUENCE .. RECOVER .. END SEQUENCE

-

Yes

Yes

Yes

Yes

Yes

CLIPPER calling convention (requires USUAL support)

-

Yes

Yes

Yes

Yes

Yes

CODEBLOCK type

-

Yes

Yes

Yes

Yes

Yes

DATE type, including NULL_DATE

-

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

-

Yes

Yes

Yes

Yes

Yes

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

-

Yes

Yes

Yes

Yes

Yes

FOR .. ENDFOR as alternative for FOR .. NEXT

-

-

-

-

Yes

Yes

FOR EACH as alternative for FOREACH

-

-

-

-

-

Yes

GLOBAL statement

Yes

Yes

Yes

Yes

Yes

Yes

IIF() expression and the /vo10 compiler option

Yes 7

Yes 7

Yes 7

Yes

Yes

Yes

Late binding

-

Yes (with /lb+)

Yes (with /lb+)

Yes

Yes

Yes

LPARAMETERS statement

-

-

-

-

-

Yes

MACRO compiler

- 13

Yes

Yes

Yes

Yes

Yes

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

-

Yes

-

Yes

Yes

Yes

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

-

Yes

Yes

Yes

Yes

Yes

PSZ Indexer

n/a

1 based

0 based

1 based

1 based

1 based

NULL_STRING

Yes 9

Yes 9

Yes

Yes

Yes

Yes

SYMBOL type, including Symbol literals & NULL_SYMBOL

-

Yes

Yes

Yes

Yes

Yes

Statements before the first entity in a source file

-

-

-

-

-

Yes

USUAL type, including NIL literal (1,2)

-

Yes

Yes

Yes

Yes

Yes 15

TEXT Command

-

-

-

-

-

Yes

Special features




Yes

Yes

Yes

VOSTRUCT and AS/IS syntax (10)

-

Yes

Yes

-

-

-

UNION and AS/IS syntax (10)

-

Yes

Yes

-

-

-

Untyped Literal Arrays

-

Yes 8

Yes 8

Yes

Yes

Yes

Missing types allowed

-

Yes 3

Yes 3

Yes

Yes

Yes

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

-

Yes

Yes

Yes

Yes

Yes

Pseudo functions




Yes

Yes

Yes

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

-

Yes 4

Yes 4

Yes 4

Yes 4

Yes 4

SLen()

-

Yes 5

Yes 5

Yes 5

Yes 5

Yes 5

_Chr()

-

Yes

Yes

Yes

Yes

Yes

AltD()

-

Yes 6

Yes 6

Yes 6

Yes 6

Yes 6

PCall, PCallNative

-

Yes

Yes

Yes

Yes

Yes

CCall, CCallNative

-

Yes

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


 

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.

15.In FoxPro NIL is not allowed and redefined to FALSE.