Island is a new target platform introduced back with Elements 9. Simply put, Island lets you write low-level CPU-native code.
The three existing Elements platforms – .NET, Java and Cocoa – all target higher-level abstractions, OOP-based APIs provided by the operating system and platform vendors for general app development. For .NET and Java, these involve compiling to "managed" byte code, while on the Cocoa platform, the APIs are "unmanaged", using CPU-native code.
Island goes a level deeper, forgoing the higher-level abstractions and letting you build directly to the low-level, non-OOP platform APIs – using "unmanaged" and CPU-native code in each case.
Currently, Island supports targeting the Win32 API for Windows (32-bit and 64-bit), the glibc API for Linux (64-bit Intel and 32-bit ARM), the Android NDK, as well as – new in v10 – WebAssembly.
But Island itself is a generic platform that can and will be expanded to other native targets as well in the future, including but not limited to Darwin (low-level macOS). In fact, Elements 9.1 adds support for ARM Linux (for example on embedded systems such as Raspberry PIs), and for the Android NDK with a range of CPU options.
Island lets you use all of the Elements languages – Oxygene, C#, Swift, Java, Go and Mercury (VisualBasic.NET) – to write this native code.
Let this sink in: You can now use C# to write CPU-native Windows code. Or use Oxygene on Linux, natively. Or write Java code against the Android NDK! And any other combination you can think of.
Couple that with the excellent support for the three existing higher-level platforms, and your Elements language of choice now truly runs everywhere, and it goes without saying that all four languages are completely compatible across all platforms.
Of course, as mentioned above, the basic platform APIs at the level Island works at are very basic – mostly non-OOP simple C- and function-based APIs.
But fret not. While Island gives you full access to all the platform's base APIs, Island is fully object oriented itself. It provides an object model that is compatible with how you think and write code on the other platforms, complete with an Object
base type, exceptions, a String
class, and everything. And it comes with Island RTL, a small run-time library that encapsulates common functionality as easy-to-use classes in a cross-platform fashion.
But what Island really is all about is that full and direct access to the platform APIs – primitive as they may seem. So for example, you can make a straight call to CreateWindowExW
on Windows, if you like . In fact, we ship an example for an old-school Win32 API-based Windows GUI app that runs its own WndProc
and everything. Available in Oxygene, C# and Swift.
Island comes with sophisticated IDE support, whether you are using Fire on the Mac or Water or Visual Studio on Windows. You can debug your apps right from the IDE, with the usual debugging experience you are used to, by connecting to a remote Linux or Windows machine via CrossBox 2, if needed.
Since Elements 9.1, our Elements RTL and Delphi RTL libraries are ported to Island as well, giving you an even more well-rounded set of object-oriented APIs that you can use cross-platform, and to write code that can be shared between Island and the other higher-level platforms. But even in this first version, the basic Island RTL already provides a lot of useful functionality. You can read more about Elements RTL here.
And since Hydra 5, our Hydra library for mixing .NET, Java and Delphi code in one application now lets you use Island plugins in your .NET (and Delphi) host applications – essentially enabling you to build the bulk of your app in a higher-level framework, such as WPF, but dropping down to CPU-native code for specific functionality.