C-Omega compiler preview available for download

A little while ago some members of our team experimented various ways to reduce the Relational<->Objects<->XML (ROX) impedance mismatch by adding concepts and operators from the relational and XML (specifically W3C XML Schema) world into an object oriented programming language. This effort was spear headed by a number of smart folks on our team including Erik Meijer, Matt Warren, Chris Lovett  and a bunch of others all led by William Adams. The object oriented programming language which was used as a base for extension was C#. The new language was once called X# but eventually became known as Xen.

Erik Meijer presented Xen at XML 2003 and I blogged about his presentation after the conference. There have also been two papers published about the ideas behind Xen; Programming with Rectangles, Triangles, and Circles and Unifying Tables, Objects and Documents. It's a new year and the folks working on Xen have moved on to other endeavors related to future versions of Visual Studio and the .NET Framework.

However Xen is not lost. It is now part of the Microsoft Research project, Cw (pronounced C-Omega). Even better you can download a preview of the Cw compiler from the Microsoft Research downloads page

Comments (7)
  1. Is this research going to become C# 3.0 – as discussed by <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=10276">Anders Hejlsberg – Programming data in C# 3.0</a>? I don’t think he mentioned C-Omega directly. Would it be implemented directly at CLR-level? VB etc. might get the syntax enhancements for free.

  2. Alexander Neumann says:

    This is cool stuff, but you can’t install it without having Visual Studio.net 2003.

  3. Simon,

    It is still too early to speculate about C# 3.0 (after all C# 2.0 hasn’t shipped yet) but Anders and several memebers of the C# team are aware of the work’s that been done in C-Omega.

  4. theCoach says:

    This stuff is really a big improvement. Some quirks need to be ironed out, or quite possibly I need to better understand it, but it would make a lot of the things I am doing much, much easier – a lot of serialization of xml into objects and persisting to dbs. I will have to look more at the async stuff, but I think it makes a lot of sense for it to be built in, and it seems to me that in a connected world async is the way to go.

    There really are three big parts (cirlcles, triangles and squares) and there is a lot ot digest, but some great advances.

    Almost totally unrelated, but an impedence mismatch that I have found with XML–>objects.

    Consisder this scenario: I get some XML, or XML Fragment from a data store. I want to validate it against a schema (possibly only when I insert or update, but I want to validate it against a valid Store State. Then I do some processing and I want to add a node, lets say for the sake of argument that I want to add a <CurrentTime/> node. I then want to validate again, but validating against a Message state. Very little has changed, and I would prefer to keep namespaces the same (simply to add a node or two that do not make sense in storage), and I want to clarify that the XML is in a different state – state promotion. This seems like it should be a common scenario, but is clumsy. Forgive me if there is a very simple way to do this and I have just not found it yet, but it seems unnatural to do this with current Xml tools. Do you agree/disagree, or think it is an uninteresting scenario? I am quite curious to know what an expert would think of that. Thanks.

  5. theCoach,

    The scenario you describe is one that we plan to make easier in Whidbey. The design details are still in flux but rest assured that features that enable that scenario are in the works.

  6. xml training says:

    "C# 2.0 hasn’t shipped yet",

    Is 2.0 the version to be shipped with VS 2005?

  7. Stuart Updegrave says:

    > Is 2.0 the version to be shipped with VS 2005?

    yes; see many many articles on MSDN for information on new language features.

Comments are closed.

Skip to main content