In this chapter, we would like to give you an overview of the design decisions that we made, what the run time looks like, where you can find which types and functions, etc.
We will also list the features that are not supported yet here.
When we designed the X# compile and X# Runtime, we had a few focus points in mind:
•The language and runtime should be VO compatible whenever possible. We know that the Vulcan devteam made some decisions not to support certain features from VO, but we decided that we would like to be as compatible as technically possible.
•We want our runtime to be fully Unicode and AnyCPU. It should run on any platform and also both in x86 and x64 mode. This has caused some challenges, as VO is Ansi (and not Unicode) and also X86. In VO you can cast a LONG to a PTR. That will not work in X64 mode because a LONG is 32 bits and a PTR 64 bits
•We want the code to compile in "Safe" mode, and avoid unsafe code except when strictly needed. The biggest problem/challenge here is the PTR type. With a PTR you can access memory directly and read/write from memory, even if you don't "own" that memory. However, the same PTR type is also used as "unique identifier", for example in the low level file i/o, and in the GUI classes for Window and Control handles. These PTR values are never used to read or write memory, but are like object references. We have decided to use the .Net IntPtr type for these types of handles. Of course the compiler can transparently convert between PTR and IntPtr.
•We want to prove that the X# language is a first class .Net development language, which is why we decided to write the X# runtime in X#. By doing that, we also create a large codebase to test the compiler, making it a win-win situation.
•We want the runtime to be thread safe. Each thread has its own "global" state and its own list of open work areas. When a new thread is started, it inherits the state of the main thread, but it not the main thread's work areas.
•At this moment, the X# Runtime is compiled against .Net Framework 4.6.
If you want to know in which Assembly a function or type is defined, your "best friend" is the documentation. We are using a tool to generate the documentation, so this is always correct.
Some subsystems have functions in XSharp.Core DLL and in XSharp.VO.DLL as well.
Component |
Description |
Dialect used |
Framework Version |
---|---|---|---|
This is the base DLL of the X# Runtime. |
X# Core |
4.6 |
|
This DLL contains support code for .Net SQL based data access and for SQL based cursors. |
X# Core |
4.6 |
|
This DLL is required for all dialects apart from Core. |
X# non - core |
4.6 |
|
This DLL contains the functions and windows for the Runtime Debugger. |
X# core |
4.6 |
|
This DLL adds features to the runtime that are needed for the VO and Vulcan dialects. |
X# VO and X# Vulcan |
4.6 |
|
This DLL adds features to the runtime that are needed for the Xbase++ dialect. |
X# XPP |
4.6 |
|
This DLL adds features to the runtime that are needed for the FoxPro dialect. |
X# FoxPro |
4.6 |
|
This DLL is the X# "fast" macro compiler. |
X# Core |
4.6 |
|
This DLL is the X# "full" macro compiler. |
X# Core |
4.6 |
|
This DLL contains the various RDDs implemented for X#. |
X# Core |
4.6 |
|
VO SDK Class libs: VOGUIClasses.dll VOInternetClasses.dll VORDDClasses.dll VOReportClasses.dll VOSQLClasses.dll VOSystemClasses.dll VOWin32APILibrary.dll |
These DLLs represent the class libraries from Visual Objects. |
X# VO and X# Vulcan |
4.6 |
Feature |
Description |
Expected when |
---|---|---|
Some runtime functions are not supported yet: |
These functions will most likely be added in one of the next betas. For now, they will throw a notimplementedexception when you use them. |