- Red GUI : Red interpreter + View + GUI console
- Red CLI : Red interpreter + CLI console
- Red Toolchain : Encapper for Red + Red/System compiler
July 29, 2022
New Red binaries
July 14, 2022
The Road To 1.0
You cannot have missed that in the last months (and even last years), our overall progress has slowed down drastically. One of the main reasons is that we have spread our limited resources chasing different objectives while making little progress on the core language. That is not satisfying at all and would bring us most likely to a dead-end as we exhaust our funding. We have spent the last weeks discussing about how to change that. This is our updated action plan.
From now on, our only focus will be to finish the core language and bring it to the much-awaited version 1.0. We need to reach that point in order to kickstart a broader adoption and provide us and our users a stable and robust foundation upon which we can build commercial products and services necessary for sustainability.
Given the complexities involved in completing the language and bringing an implementation that can run on modern 64-bit platforms, we have devised a two-stage plan.
Upgrade the current 32-bit Red implementation
👉 Language specification
It is now time to do so in order to clean-up some semantic rules and address all possible edge cases which will help fulfill our goals of implementation robustness and stability. The process of writing down the complete language specs will result in dropping some features that we currently have that end up being problematic or inconsistent. OTOH, we might add some new features that will need to be implemented for 1.0.
👉 Modules
We need a proper module system in order to be scalable. We also need to have a proper package management system which will be tied to a central repo where we can gather third-party libraries. That would also enable modular/incremental compilation (or encapping) which will be most probably supported in the self-hosted toolchain.
👉 Concurrency
We need a proper model for concurrent execution in order to leverage multicore architectures. We will define one and make a prototype implementation in the 32-bit version.
👉 Toolchain
Before starting to work on the new toolchain, we will make some changes to the existing version in order to prepare for the transition. The biggest change is the dropping of the Red compiler, which will only act as a (smart) encapper. Routines and #system directives will still be supported, but probably with some restrictions. The Red preprocessor might also see some changes. This change means that Red will only have one execution model instead of the two it has currently. The Red compiler has become more of a burden than a help. The speed gains are not that significant in real code (even if they can be in some micro-benchmarks), but the impossibility for the compiler to support the exact same semantics as the interpreter is a bigger problem. This move not only will bring more stability by eliminating some edge case issues but also will reduce the toolchain by almost 25% in size, which will help reduce the number of features to support in the new toolchain.
👉 Runtime library
Some improvements are long overdue in the Red runtime library. Among them:
- unified Red evaluation stack.
- unified node! management.
- improved processing of path calls with refinements.
- improved object! semantics.
All those changes are meant to simplify, reduce the runtime library code and address some systemic issues (e.g. stack management issues and GC node leaks).
👉 Documentation
We need proper, exhaustive, user-oriented documentation for the Red core language. This is one of the mandatory tasks that needs to be completed and done well for wider adoption.
Self-hosted Red for 64-bit version
👉 Toolchain
In order to go 64-bit, we have to drop entirely our current toolchain code based on Rebol2 and rewrite it with a newer architecture in Red itself. The current toolchain code was disposable anyway, it was not meant to live this long, so this was a move we had to do for 1.0 anyway.
So the new toolchain will feature:
- a new compilation pipeline with a plugin model.
- an IR layer.
- one or more optimizing layers.
- modular/incremental compilation support.
- x64, AArch64 and WASM backends.
- linker support for 64-bit executable file formats for the big 3 OS.
- support for linking third-party static libraries.
👉 Runtime library
Roadmap
Here are the main milestones:
- v0.7 : Full I/O with async support.
- v1.0b : (beta) completed self-hosted Red with 64-bit support.
- v1.0r : (release) first official stable and complete Red/Core language release.
- v1.1 : View 64-bit release.
- v1.2 : Android backend and toolchain release.
- v1.3 : Red/C3 release.
- v1.4 : Web backend for View release.
- v2.0 : Red JIT-compiler release.
- v3.0 : Red/...
The 0.7 should be the last version for the 32-bit Red version and current toolchain and we will be working on that first.
For reaching the 1.0-beta milestone, we target 12 months of intensive work, so that will bring us to Q3 2023. That's an ambitious goal but necessary to reach for the sake of Red's future.
The currently planned beta period for 1.0 is 2-3 months. We want a polished, rock-solid, production-ready 1.0 release.
For the 1.1, we will probably make some (needed) improvements to View engine architecture and backends.
For Red/C3, as the Ethereum network is transitioning to 2.0 and a new EVM, we need the WASM backend in order to support it.
Version 1.4 will bring a proper web runtime environment to the WASM backend, including GUI support.
The 2.0 will be focused on bringing a proper JIT-compiler to Red runtime, that should radically improve code execution of critical parts without having to drop to R/S.
Version 3.0 is already planned, but I will announce that once 1.0 will be released. ;-)
One major platform is missing from the above plan, that is iOS. Given how closed that platform is, we will need to come up with a specific plan on how to support it, as it won't be able to cross-compile for it (you would need a Mac computer), nor probably generate iOS apps without relying on Xcode at some point (not even mentioning dynamic code restrictions on the AppStore), which are layers of complexity that Red is trying to fight against in the first place... So for now, that platform is not among our priorities.
To finish, let me borrow some words from someone who succeeded more than anyone else in our industry:
Expect me to say "no" even more so from now on, as we get laser-focused on our
primary goal.
Cheers and let's go!