|
|
|
|
This page takes a look at the evolution of the Oxygene langunage since its inception in 2004, from the very first release (then called "Chrome"), to our very latest.
Even when we started out in 2004 (working towards an early 2005 release), Oxygene took the Pascal language and thoroughly reinvigorated it with state-of-the-art features such as Class Contracts, "for each" loops and more, and started to make the language cleaner and more consistent with the Object Oriented model, with the "method" keyword, improved/cleaner visibility modifiers and other enhancements.
Over the following years, Oxygene only grew more powerful, as it advanced ahead of C# and Java (the two major languages of the time), integrated generics, sequences, queries, and paralellism ahead of its contemporaries and innovated the development space with vastly better nullable expressions, future types, and more.
The first release of Oxygene came out in early 2005, and supported version 1.1 of the .NET Framework (the then current version), as well as the beta releases of .NET 2.0 available at the time. The 1.0 revolutionized Object Pascal, cleaned up a range of inconsistencies with other Pascal dialects (such as introducing the "method" keyword and doing away with the highly unsafe "with" as we knew it), and brought it up to date with language innovations from C#. It also introduced Class Contracts, an innovation inspired by the Design by Contract feature in Eiffel.
...and probably more features that we forgot about because they have become so natural and second-nature to use by now that we take them for granted.
Despite its version moniker, 1.5 was really a major new release of the language, but versioned as .x release to make it available at no charge to existing users (our products were still licensed by version at the time). The main focus for 1.5 was to bring Oxygene up to date with official support for the .NET 2.0 framework (which, alongsinde C# 2.O, only shipped shortly after our release), with features such as Generics and Nullable types that were new to .NET 2.0.
One seemingly small feature that had a large impact (and would two years later be adopted in C# 3.0) was the introduction of Type Inference with the inline "var" keyword.
Once again being ahead of C# and the underlying .NET Framework, version 2.0 of the Oxygene language embraced "Sequences and Queries", making the concept of enumerable types a language-native construct, and adding support for LINQ.
2.0 also completely revamped the nullable types introduced in the previous release and fully integrating them into the language in ways that allow them to be used seamlessly in expressions and making possible the colon (":") operator — another small change that makes a big difference in day-to-day code.
Oxygene 3.0 (the first release under the language's new and final name) added two major new areas to the language.
The first was a focus on making multi-threaded development easier for the days of slowing CPU speed improvements and increasing number of CPU cores. Next to parallel for loops and improvements to asynchronous statements and thread synchronization options, the new "future" types are most interesting, allowing to define variables and fields whose value will be calculated out-of-band and asynchronously at a later time & mdash; with the types still seamlessly being usable in epxressions or regular code patters without worrying about their asynchronous nature.
The second big addition was the introduction of Cirrus, a combination of language extensions and helper library that allows developers to leverage Aspect Oriented Programming (AOP) to achieve separation of concerns.
"raise" statements for events
Optional warnings on Case Mismatch
A comparatively small update on the language side and focusing on other areas of the product, Oxygene 4.0 still brought a list of significant language enhancements, including the introduction of "if", "case" and "for" loop expressions, which promoted these three core language constructs from mere statements to being used inside of more complex expression trees and returnig values.
Also introduced was language-native support for "dynamic" types, a feature that set the ground for becoming very important for "Nougat" support in Oxygene 6.0.
Oxygene 5 is the current version as of this writing, its most distinguishing feature being the support for using the Oxygene language actively against the Java (and Android's Dalvik variant) frameworks and runtime, in addition to .NET/Mono.
Once again, the new version brought significant new features to the language, including support for drastically reducing the complexity of writing asynchronous code with the "await" keyword and the introduction of Duck Typing and its related Soft Interfaces.
Version 5.1 also introduced the new Mapped Types, a feature for framework designers to easily create zero-overhead mapping between different target APIs. Mapped Types lay the foundation for a major new feature, code named "Sugar", that is in the works for Oxygene 6.
Planning and development of Oxygene 6, the next major release of the Oxygene language, has been underway since early 2012, with one major feature being the extension of the language to its third base platform in addition to .NET and Java. This is being worked on under the codename "Nougat".
Oxygene 6 is scheduled to be released in early-to-mid 2013, and will of course be a update for all active subscribers.
Find information about more changes, including smaller enhancements not covered in our feature overview, and a complete list of all bug-fixes, in the detailed Change Logs.
In addition to our regular "feature" releases, new monthly interim releases with fixes, enhancements and sometimes minor features are made available on a semi-monthly schedule.
Read more about the evolution of the Oxygene language, from version 1.0 all the way to its current release. More