Even though it comes hot on the heels of our 7.0 release last month, 7.1 is a major update to both Oxygene and RemObjects C#, with a groundbreaking number of over 250 fixes and improvements and several major new features:
That's right. We've added full support for generics on the Cocoa platform. While 7.0 allowed generics to be used on mapped types and provided generic variations of NSDictionary and NSArray, 7.1 now extends this to support generics on all types – including custom types derived from standard Cocoa classes such as NSObject or more concrete types. Of course this feature is available in both the RemObjects C# and Oxygene languages.
This is a big step towards further language parity between the platforms.
We just could not live without it ourselves, so we went ahead and implemented support for the ?. operator that's officially coming in C# to our RemObjects C# dialect, ahead of time. The ?. is, essentially, what the colon operator has been in Oxygene for ages: a way to safely call members of objects, whether the reference is null or not.
As in Oxygene, the ?. operator will convert the result into a nullable type, and RemObjects C# benefits from the full nullable arithmetic and ternary boolean logic as Oxygene when working with these types.
We find that the ?. operator (and Oxygene's colon one) comes in especially handy on the Cocoa platform, where calling members on null objects is second nature for developers coming from Objective-C.
Timing was not on our side when Apple shipped iOS 7.1 shortly after we shipped Elements 7 last month, and so manual import of the iOS 7.1 SDK was needed for anyone wanting to use RemObjects C# or Oxygene with the new SDK and the new Xcode 5.1. This new update – fittingly enough, given the version number – now includes support for iOS 7.1 in the box to make this easier. And we're working on infrastructure to make these overlap periods less painful going forward, in time for iOS 8 and the next OS X release.
Further language and compiler enhancements include:
The introduction of a [Category] aspect to make it easier to implement extension classes (i.e. categories, in Cocoa parlance) in RemObjects C# without the introduction of a special syntax (Oxygene, of course, has dedicated extension class syntax for this, but it can also use the new aspect).
Additions to the Cross-Platform Compatibility Mode to ignore the difference in case for the first letter of class called members, and to ignore the case of namespaces in cross-platform code. This makes it a lot easier to deal with shared code on .NET (which prefers PascalCase) and Java or Cocoa (which prefer camelCase, and require lowercase namespaces).
Additional Fix-Its and Auto-Fixes.
Support for methods on records/structs on the Cocoa and Java platforms.
Support for building Portable Class Libraries for the .NET platform – for example to share code between Windows and Windows Phone, or with Xamarin-based apps.
Toolchain and IDE improvements include:
Support for the ASP.NET "Razor" view engine model in Oxygene.
Improvements to the refactoring engine, for example to allow full renaming of WPF Forms.
We have also converted the "with Visual Studio" installers from .ISO files to embedded .exe installers to make them even easier to use.
As always, the full Change Log will have all the details.