- Created: 09 January 2019
We sometimes get a question about the differences between the VO and Vulcan dialect.
In the table below we have tried to list these differences
|Keyword abbreviations||Supported for all 'old' keywords for 4 letters or more. See table on https://www.xsharp.info/help/x-keywords.html. All the keywords in the VO column may be abbreviated.||Only supported for |
|String literals||String literals can be defined with single quotes and double quotes: |
"This is a string"
'This is a string with an embedded double quote "'
|String literals can only be defined with double quotes|
|Char literals||Must use single quotes prefixed with 'c', e.g. c'A'||Single quotes, the 'c' prefix is optional, e.g. 'A' and also c'A'|
|PSZ indexer||PSZ indexing is 1 based||PSZ indexing is 0 based (this is actually a bug in Vulcan that we are emulating)|
|MemVars (PUBLIC, PRIVATE)||Yes (in a future release)||No|
|Single line comments||Uses both // and &&||Only // is supported. |
&& is a synonym for .AND.
|Compiler macros||defines __DIALECT_VO__ and __VO__||defines __DIALECT_VULCAN__ and __VULCAN__|
Something else that needs to be mentioned: if you switch from the Vulcan runtime to the X# runtime, please remember to remove the #include statements for the Vulcan header files, such as VOWIn32ApiLibrary.vh)
The values in these header files are now stored as defines (constants) in the VO SDK assemblies, such as VOWin32APILibrary.dll and also in the runtime assemblies (for values from VOSystemLibrary.vh).
Removing the header files will most likely improve the compilation speed.
- Created: 04 January 2019
- Created: 22 December 2018
A few months ago we posted a message on our forums under the title "The X# devteam wants to meet you". The reponse to that has been very positive, so we have decided to organize the event. With the help of Greg Garza and his colleagues at QLAdmin Solutions we have booked a location and we are now finalizing the plans.
We have decided to name this the "X# Summit".
It will be held in Austin (Texas) and will be on Thursday March 21 and Friday March 22 2019 . Please block those dates in your calendar if you want to attend.We will post more information later this week with details about the schedule, how you can register, what the costs will be, how you can reserve a room at the hotel for a special price that we arranged etc.
We will present the current state of the X# development and show how to migrate your apps from VO to .Net. We will also have time to explain some of the internals of the X# compiler and runtime and how you can use the new features in the product (generics, lambda expression, linq, scripting, multi threading etc) in your apps. We will also show you the support that we have for other dialects (such as XBase++ and Harbour).
Of course there will also be plenty of time for questions and answers and to socialize with other XBase developers, exchange ideas and maybe make plans to work together.
We intend to be there with 2 people from the development team, but we are also looking for other speakers. If you are interested then you can fill a complete time slot, but it would also be great if you want to share a success story of a project that you did. Our idea is to have one time slot where people can show their applications ("Application Show"). We have done this on other events in the past and this was always very inspiring.
We did want to share this with you so you can discuss a possible trip to Austin with your family during the Christmas holidays. So why don't you come and bring your partner for a nice (romantic?) weekend after the conference.
Once again, on behalf of the entire X# development team a very happy Chrismas for you and your loved ones.
- Created: 20 December 2018
We are very proud that we can announce that we have just released XSharp Bandol 8 "The Christmas Edition" to our FOX subscribers.
This new version has many new features. To name a few:
The development team wishes you all a very happy Christmas.
- Created: 07 December 2018
A short message to inform you of things we are working on this moment.
- We are making good progress with the new macro compiler. Most of the features are ready. And performance is very good !
- We have located and fixed almost all of the issues (some of) you have reported with the X# runtime
- We have added support in the compiler for the Xbase++ dialect.
- We have fixed many things in the VS integration. And X# also installs and works with the new Visual Studion 2019 preview
- We have also rearranged the runtime to better support the Xbase++dialect. There is now a separate VO assembly and a XPP assembly. Both share a common RT assembly that contains the common code (such as the USUAL, DATE and FLOAT types)
- We have updated the compiler to the latest version of the Roslyn source code. As a result we have new features (such as the ability to generate reference assemblies ), the new combination of "PRIVATE PROTECTED" which makes a type member only accessible for derived classes in the same assembly and more.
We have not enabled all the new features of the latest C# versions yet. For some of them we still have to invent a syntax. We are considering to add the IN modifier for parameters in one of the next builds. This will declare a readonly reference parameter. This is especially useful when you have a structure as parameter of a method (like the FLOAT or USUAL structures in the runtime). This should result in somewhat faster execution speed since at runtime not the whole structure has to be passed to a function or method, but only the address of the structure. Once we have added this to the compiler then we will also start to use this in the runtime.
There are many other new features added to Roslyn. You can look at this page to see the new features in C# in the last versions.
If you see something that you think is useful for X#, please let us know. And if you have a suggestion for a syntax, that helps too. One other thing we are thinking about is the "is pattern", which combines the "IS" check with the "ASTYPE" operation and creates a variable that has the scope of the IF expression that it is part of :
IF oServer IS DbServer oDbServer
oDbServer:GoTop() /// <- this will generate a compiler error because the scope of oDbServer is the statementblock inside the IF expression
We expect a new FOX release of the product by the end of next week. A public release will follow short before Christmas
- Created: 21 November 2018
In our attempt to make X# as compatible as possible we are supporting almost all the constructs of the VO language. One of the language constructs that gives some problems is the _CAST operation.
Take the following code:
LOCAL uValue AS USUAL
LOCAL siValue AS SHORT
uValue := 100
siValue := SHORT(_CAST, uValue)
Which result is printer for siValue and uValue ?
Most of you will answer 100, and that is correct.
What if we change the example to:
LOCAL uValue AS USUAL
LOCAL siValue AS SHORT
uValue := MyFunction()
siValue := SHORT(_CAST, uValue)
RETURN 1 - PI
What will the answer be ? (And yes, PI is a predefined constant in VO and X# with the value of 3.14159265358979323846). And please, don't cheat, don't run the example in VO. Just solve this in your head.
- Created: 16 November 2018
This year we have another special offer on our subscriptions to celebrate Black Friday.
Buy a FOX subscription this week and enter the coupon code "BLACKFRIDAY2018" and you will get a 35% discount on your purchase.
Please note that this discount code can't be combined with other discount codes.
- Created: 15 November 2018
A quick message to inform you of some of the things that are happening in the X# team.
- We know that many of you (just like us) love footbal (soccer). Wouldn't it be great if you could combine soccer with technology.
It turns out you can. At the university of Twente a team of you students is working on Robot soccer.
We like that idea so much that we have signed up as sponsors: https://roboteamtwente.nl/
- We have received a request from the community to start adding support for the XBase++ dialect to the compiler. We have analyzed the language differences, and it seems that there are very few differences. The biggest change is the way that classes are declared. XBase++ follows the "Class(y)" style of class declaration (Anton van Straatens OOP extension to the Clipper language).
The class declaration syntax for XBase++ is also almost identical as the syntax for (x)Harbour. So we might combine the two.
At this moment we are working on the XBase++ support in the parser and compiler.
After that we will add runtime support for the XBase++ dialect.
This new dialect will most likely not be included in the upcoming releases , but we still would like to inform you.
Our XBase++ customer wants to run his code in a webservice. So no UI. Most likely we will create some kind of poor man's UI that emulates the CRT windows on the console.
If you are interested in XBase++ support and would like to contribute on the UI or specific runtime functions (maybe a library like Sql Express or XBase Tools) please contact us.