Announcing Elements: Oxygene 7 and RemObjects C#
we’ve shipped some pretty significant releases this past weekend that i wanted to take a moment to talk to and update you about.
First, and probably most interesting to our existing users, we shipped version 7 of Oxygene. This is a pretty significant new release of our Oxygene language and toolchain, with many cool new features that we are very excited about. As always, you can find an overview of What’s New and a Full Change Log on our website, but i also want to go into some of the improvements in more detail.
Most exciting to me, personally, is the introduction of LINQ for the Cocoa and Java platforms. LINQ has always been one of the modern language features on .NET that i found really helpful, because it brings a clean structured way to working with filtering, sorting and otherwise manipulating lists of objects — in a type-save manner. With Oxygene 7, this feature, and most standard LINQ query operations, are now available across all three platforms. This means that you can now use LINQ syntax to sort or filter NSArrays on Cocoa for example.
One example i saw mentioned just yesterday that i would never have thought of is to use LINQ to find a particular view in your Cocoa app:
var wideView := (from v in view.subViews where v.frame.width > 300).FirstOrDefault
As you can see, LINQ is useful in many areas, not just when working with what we traditionally think of as “data”.
But LINQ is not the only item where we have updated the language to bring the platforms closer together. Multi-part method names, originally introduced because “we kinda needed them” for Cocoa are now available on all platforms. Many of you (and many of us) really liked this feature as a regular language syntax, and we saw no reason to hold it back to be Cocoa-only — so you can now write expressive and readable APIs for your classes, regardless of platform. We’ve also unified support for Iterators, the notify keyword and anonymous classes across all platforms, and added a bunch of standard attributes commonly used on .NET across platforms, via Aspects.
If you read between the lines, you gather that cross-platform is a big theme for this release, so we’ve also added a new Cross-Platform Compatibility Mode to the compiler. By default, Oxygene is strict about platform differences — when you write code for .NET, it tries to be a good .NET citizen; if you write for for Android, it is a good Java citizen instead. Turning on the Cross-Platform Compatibility Mode option (which can be done per-project or per-file), this dynamic changes. The compiler will be more lenient, and let it slide if you use a syntax feature needed on one platform, but not on the other. For example, you might want to mark a file as weak for Cocoa, and the compiler will simply ignore that keyword on .NET. The compiler will also be more helpful in letting you know when you write code that won’t be cross-platform. This way, when you’re set to build for .NET and write shared code, you’ll get early warnings if a language feature you are using might be problematic on Cocoa or Java, for example.
Finally, there’s the big one: Sugar. Sugar has been in the works for a while, and finally is being included as “version 1.0” officially in this release. What is Sugar? Sugar is a library of cross-platform classes that you can use on your code, so that you can share it across all three platforms. All three platform — .NET, Cocoa and Java — provide their own versions of basic types, from strings over dictionaries to XML processing, HTTP requests or file system access. Code that uses those APIs will often be platform-specific, without needing to be. Sugar provides a way to write base “business logic” code for your applications that can be easily shared between different platforms — for example if you are writing the same app for iOS, Android and Windows Phone. And it does this in a smart way (using mapped classes under the hood) that comes with no runtime overhead, even when crossing from platform-specific code into shared code and back.
These are the four whoppers, but there’s a lot more good stuff in Oxygene 7 that we think you’ll love. And as always, Oxygene 7 is of course a free update to all users with an active subscription.
But that’s not all!
Introducing RemObjects C#
In addition, we’ve also shipped a brand new product based on the same tool chain as Oxygene — a sister project to Oxygene, so to speak, and that product is called RemObjects C#.
You may have heard us talk or hint about RemObjects C# before under the code name “Hydrogene”, and that code name really illustrates well what RemObjects C# is in relation to Oxygene: It’s an implementation of the C# language for Cocoa, Java (and of course .NET), based on all the principles that make Oxygene great. In essence it is “Oxygene for people who’d rather use C#”.
RemObjects C# has all the things that make Oxygene great — a unified language and tool set that allows you to compile for the .NET CLR, for the Java JVM and for Cocoa’s Objective-C Runtime. It has the same great editor features — from our inline errors to Fix-Its. It has our Visual-Studio integrated debugging support for Java and Cocoa. It uses our CrossBox toolchain for deploying, running and debugging your applications on your Mac, your iOS or Android devices or the emulators/simulators right from Visual Studio. The only thing that’s different is the language itself.
RemObjects C# is a 100% true and ECMA—spec conform implementation of the C# language that millions of developers already use to build .NET apps. Except — like its sister product Oxygene — that language is now available to target the other development platforms as well.
Leaving the language aside, Oxygene and RemObjects C# will, from now on, evolve in parity, because they use all the same technologies under the hood (including even the most parts of compiler, except for the language front-end). So RemObjects C#, despite being a brand new product, immediately builds upon over a decade of experience and work that went into the underlying toolchain. And moving forward, 90% of the work we invest in the product will benefit both languages.
Which Language to Choose?
We approach the development of the two languages slightly different and that might influence that decision.
Oxygene has always been “our” language. Ever since we started off in 2003 with a language that already then provided vast improvements over the “standard” Object Pascal implementation in Delphi, we’ve been driving and improving Oxygene aggressively. As a result, Oxygene is one of the most powerful, versatile and expressive mainstream development languages out there today. And we will continue in that fashion — Oxygene will evolve, and get better and better
C# is a language designed by Microsoft, and well-defined in an ECMA specification. For our implementation, we tried to stay as close to that specification as we could (and only extend it in clean, tasteful and spec-conform ways, where really necessary). We will continue developing RemObjects C# in that fashion — we will evolve it as the official C# language evolves, but we will not be adding our own language features to it, just because we think they’d be neat language features. We feel that C# is not ours to evolve.
So if you’re already die-hard Oxygene (or Pascal) fan, and you want a language that’s advancing quickly and embracing new language features that enhance your development experience often, you will most likely want to stick (or start with) Oxygene. If you’re already a C# developer (or generally prefer other C-based languages) and/or not a big fan of Pascal, then RemObjects C# is the language for you.
Of course you don’t necessarily have to choose at all. You can use Oxygene and RemObject C# together. In fact, because both languages are built on the same back-end compiler, you can even use them together in the same project.
Ways to get Oxygene or RemObjects C#
As already mentioned, Oxygene is of course a free update, if your subscription is active as of March 1 — and if it’s not, now is as good a time to renew as ever.
Similarly, RemObjects C# is of course available at no extra charge to all customers with an active Suite subscription for the appropriate platforms (i.e. .NET, Cocoa or Java). If you’re a Suite subscriber, you should see new “Elements” SKUs for download on your licensed downloads page — these will install both Oxygene and RemObjects C#.
We also have the following purchasing options available.
For new users:
- Oxygene is available at $699 per user, including all platforms — same as it has always been.
- RemObjects C# is also available at $699 per user, including all platforms — in other words: same as Oxygene, just a different language.
- The bundle of Oxygene and RemObjects C# is available at $999 per user, including all three platforms and both languages.
For current Oxygene users:
- If your Oxygene subscription expired, or expires soon, you can renew at $499 for another year of upgrades to Oxygene.
- If you want to add RemObjects C# to the mix, you can renew both for $699. Only $200 extra, and you get a whole new language — we think that’s a pretty sweet deal. Also, both Oxygene and RemObjects C# will get the same new renewal date — so if your current Oxygene subscription is still good for a while, that’s an extra benefit for renewing early.
- Finally, if you just want to add RemObjects C# to your existing Oxygene license (and with the same renewal date), you can do that for just $399 (but really, the previous item at $699 is the better value, no matter your current subscription status).
The first two of thee options are also available to all customers of Prism XE3 or later, who currently enjoy a complimentary license extension to Oxygene for .NET from us as part of their SA coverage.
We’ve also recently made two adjustments to our online store (which also has been completely revamped and improved) that might benefit you:
First, if your subscription has expired more than 6 months ago, the store will now automatically apply what we call “amnesty renewal” when you purchase a renewal. Amnesty renewal makes sure that you always get at least the current release and six months of free updates from the purchase date. This holds true even if your previous subscription expired years ago.
Second, we’ve improved our volume discount program, so that you now start saving on multi-user license purchases for as little as 2 users. Volume discounts start at 5% (for two to five users) but can go all the way up to 30%. Our shop will handle all of that for you automatically.
That’s it for now
I think that’s it, for now (probably more than enough, wouldn’t you say? ;).
As you can probably tell, we are very excited by this new release — both with the new features added to Oxygene 7 (which, i should have mentioned, are all available to RemObject C# as well) as well as the brand new RemObjects C#.
We hope you enjoy them, too — and that if you’re not already a customer, you’ll grab the free 30-day trial and take the products for a spin. (It goes without saying that the RemObjects C# trial works well alongside your licensed copy of Oxygene as well.)
Oh, and last but not least: Scotty has created an awesome set of Getting Started videos for RemObjects C# (and similar videos for Oxygene are coming soon). Make sure to check them out!
Yours,
marc hoffman
Chief Architect