We are pleased to announce that Red/System v0.2.3 is out, extending Red to the mobile world with a complete support for Linux on ARMv5+ processors. The new port supports 100% of Red/System features and passes successfully the 8537 unit tests.
For those of you interested in more details, our ARM port targets the v5 family, with 32-bit instructions (no Thumb support) and optional literals pools (use -l or –literal-pool command-line option when compiling) that implement a global allocation strategy (unlike gcc’s function-local allocations).
New compilation targets have been provided for Linux and derivative OS running on ARM:
Android support is using the same code as Linux-ARM, only differing in libc and dynamic linker names.
Currently, as Red/System only works on command-line in Android, you need a special loader to download the executable and run it. This can be achieved using the NativeExe app. You will need to allow temporary installing apps from non market sources (Settings > Applications > Unknown sources). Also, your local 3G provider might be filtering out executables downloaded this way, you can workaround that by either manually loading the NativeExe-0.2.apk file with adb, or share a wired Internet connection with your mobile device.
You can easily install NativeExe app by just typing the following URL in your Android web browser:
or by scanning this QR-code instead:
Once done, input in the second field:
http://sidl.fr/red/hello and hit [Run].
Here are a few screenshots of HelloWorld tests:
Andreas has also reported that it’s working fine on Nokia N9 devices.
The next steps to enable building full apps on Android and iOS are:
Such approach will allow us to build easily Android or iOS apps without having to write a single line of Java or Objective-C code, while providing the full power of Red. At least, that’s the theory, we’ll see in practice if it’s up to our expectations. Also, cross-compilation should be fully available for Android (producing Android apps from any OS), but code signing and app publishing requirements might make it impossible for iOS and require a MacOS X with Xcode for producing apps (if you know workarounds, let us know).
The PIC support should be doable in a few days, the support for shared library generation might take a bit more time. Anyway, theses tasks will need to be multiplexed with Red runtime & compiler implementation, so don’t expect significant progress before a month.
In the meantime, you are welcome to test the ARM port of Red/System and hack Android and upcoming Raspberry Pi devices using it. ;-)
This new release took a while, first because a lot of work was done since the last release, about 390 new commits were added and 44 issues were fixed over 80 new tickets opened since the last release. But it was also delayed because, a month ago, I was invited at Recode 2013 developer conference to give a talk and present the latest advancements on Red.
I would like to thank again people that donated to cover the costs of my trip, Brian “HostileFork” Dickens and Coginov in the first place, and all the others that have contributed. I have spent a great time in Montréal and met with lot of Red and Rebol coders, it was great to meet you IRL and spend a few days with you guys!
Since this version, Red is now able to interface with a 32-bit Java Virtual Machine through JNI, using a dedicated bridge written in Red, including a very small part in Java. This bridge allows Red programs to instantiate Java objects and call their methods from Red directly at run-time.
Instructions for using this bridge and compiling the hello example are given on this page.
Here are some screenshots of the resulting AWT hello app done with the Red/Java bridge:
Red/System runs on Android since more than a year, but we were unable to access the Android API….until now. Thanks to the Red/Java bridge, an Android specific bridge has been made, in order to allow Red to call the whole Android API in Java. This is still alpha stuff, but it works really well, allowing you to build true native Android app in Red, without having to touch any Java code!
This is the hello Red/Android app screenshot, called eval, which simply shows a multiline input field where you can type any Red valid code and run it with the [Do] button. The last expression value gets printed below the button.
You can download the APK file (116KB) with the QR code on the right.
This is a proof of concept. Now that we know that this way works fine, we will continue to improve the bridge and add new layers of abstraction, in order to keep the low-level Java objects hidden as much as possible for the Red coders and replace them with DSLs and Red ports.
In order to build the eval demo app from the sources, just run the build script from a Rebol2 console.
Since a year, we were working on bringing shared library generation, now it is available in the main branch. New features were added to support library generation like a way to declare the exported symbols and special callback functions when loading and freeing the library. Here is a simple example of a Red/System library:
Red/System [ File: %testlib.reds ] inc: func [n [integer!] return: [integer!]][n + 1] #export [inc] You compile such shared library using the new -dlib command-line option: >> do/args %rsc.r "-dlib testlib.reds"
The output binary name will have a platform-specifc suffix (.dll, .so or .dylib).
You can then load this shared library from Red or any other programming language having a good enough FFI. For example, from Red/System, it could be done as simply as:
Red/System [ File: %loadlib.reds ] #import [ "testlib.dll" stdcall [ inc: "inc" [n [integer!] return: [integer!]] ] ] print inc 123
This will print
124 when run.
, any-series', replace, zero'
Functionkeyword now collects counter words from: repeat, foreach, forall.
#callcompilation directive to enable calling Red functions from Red/System.
Red/System got also several improvements:
Android is becoming the dominant OS, so we need to have Red support it as best and as soon as possible. This remains a priority, so improved Android bridge and new sample apps will be available in the next releases. At the same time, we still miss some core features in Red, so these are the new features that you can expect in the next releases of Red:
We are now heading towards the end of the alpha tunnel, if you look well enough, you’ll see the light already. ;-)