Foresight in 2020 (and 2019 Retrospective)

:partying_face: Happy Belated New Years to the People Who Matter!

(I'm talking of course, about the people who read this forum :P)

If you're wondering why I'm a month late making a New Year's's because I've been a month late making good on getting the 2019 conference videos edited by end of the year they were filmed in. But they're finally finished!

(Note: If you enjoy the videos and didn't attend the conference, please consider sending a contribution to @rgchris to offset the venue rental cost.)

...Are We Amazed, Yet?

In December I forced myself to put all development on hold (besides critical bugfixes) until the videos were done. Transforming real-life talks into something that has online watchable appeal is focused work that is very iterative--and takes days for each. So I've fit it in around my life (even dragging the computer to a 4-day New Years event, and sneaking back to the room to edit whenever I could...)

I had my doubts sometimes while doing it, but after seeing the wall of well-tuned talks I feel the time spent on the videos was totally worth it.

It's a fun reminder of an eventful summer. I was in Philadelphia for the month before -and- after the conference. And it's hard to imagine how any of the interesting things in my life that have occurred since would have happened, if not for getting out to take that trip!

But the videos also stand as an easy-to-absorb testimony to the arsenal of tools and design which we have been patiently steering toward. I've been adamant that there's no point in writing "Rebol 2, II".
So I've consciously avoided whipping out my mad Win32 skills to write yet another "80s cash register". It's been all about forming a solid core and library that would be a lasting foundation for the future... regardless of what that future held.

The accomplishments have been formidable:

...and that's just a small list of what we've got going for us.

Web Framework 2021, and Redbol

I'd proposed at the beginning of 2019 to pin down Ren-C with enough committed to so we could declare a Beta status: Beta/One. It would be acceptable even if it was a small subset of the language.
Just as long as there was enough to teach at least a couple concepts in an online tutorial, without people having to unlearn anything later.

But... to the extent people voted with their time and attention... I was overruled. Once web embedding came online, that's what captured the imagination. No one chipped in on design posts, but went off writing huge applications for the web... entirely in Rebol. Whether I approved or not, that's what happened.

So I pivoted in mid-year to say that we'd be better off building a solid Rebol2/Red emulation mode (the so-called "Redbol" module). Then give Ren-C more time to remain an evolving internal framework, by which Rebol-like systems were built.

Rather than be upset about it, I decided Redbol would make a good technical challenge of Ren-C's pliability.

2019 Had Plenty of Technical Achievements

The first half of 2019 was extremely productive from a development point of view, which was good since it gave us a lot to show off at the conference. The second half didn't see quite as much happening... because I had a lot of things going on in life. Taken as a whole, a lot still happened:

  • Beta/One Enfix Covenant - The desire to have constructs like ELSE in the language led down a complicated path. Trying to accomplish the distinction with parameter conventions brought up questions of what would happen if you used those parameter conventions on the right hand side. Reasoning ultimately led to what feels like the answer that eliminates the new parameter class.

  • Beta/One Mutability Manifesto - Rebol's fast-and-fluid attitude toward mutability is something people take for granted in small scripts, but bites new users and experts alike. The simplest examples like loop 2 [x: [] | append x ...] leads to confusion when the x: [] does not cause a reset on each iteration. For starters, Ren-C had tried unconditionally locking source series--which helped plug oversights in PROTECT, but caused vocal objections from users on how it affected casual scripting. Using a new and versatile technical approach, the out-of-the-box default provides something that no one has complained about yet...and that can empower the creation of Rebol2-compatible constructs.

  • Refinements As Their Own Arguments - Whether people appreciate it or not yet, this change is cross-cutting and benefits users and the evaluator alike. The trend in Ren-C has usually been one of increased nuance to bolster the claims of the "most freeform language ever designed"*, so it's a gratifying thing to have a sea change of simplification over historical Rebol! You can take my word about the benefits inside the interpreter, but as features like AUGMENT come online, I bet everyone will come to appreciate how critical this was.

  • Generalized Quoting Of Any Value Arrives - This is another case where not everyone appreciates the importance of being able to add an arbitrary number of quote levels to any value. Yet this is something the average user will come to appreciate when switch block ['[a b] [print "matching blocks in switch"] ...] or when append block '("appending" "groups"). And again you'll have to take my word for it that it has ripples of consequences which enable API features you haven't appreciated yet. As Hans and Franz would say: "Hear me now, and believe me later."

  • UTF-8 Everywhere Has Been Running Since March - Whether we're serving a HighCodepointCat(:smiley_cat:) over rebol-httpd or perhaps a full-spectrum test with Braille and such, Ren-C has the full Unicode support R3-Alpha lacked. While Red supports high codepoints as well, it does it in a way I do not think is "future-forward"...and Ren-C joins Rust as one of the few languages to truly only represent strings internally as UTF-8. We still hit a bump here and there...@giuliolunati found a bug some weeks ago, but it's running and there's no going back.

  • Viable ODBC Functionality - The ODBC extension was ported at one point, but not maintained. But we have a Travis CI test being keep it working with MySQL, SQLite, and Excel (among others).

Those are some big ones, but you can dig through commit logs or forum posts for more.


Now that the videos are finished, I'm ready to get back to coding.

I've moved to a new living situation (curiously, a mere 15 minute drive from the Rebol Cafe). There, I'm setting up a more monk-like existence, and have cut out most of the fun-but-distracting stuff I was doing. No more partying every night. :slightly_frowning_face: It's days of tea and typing again, so hopefully we'll see a repeat of the productivity from early 2019.

So what's on the radar, now?

  • The Redbol Module is going to be a big focus. We've already had some success with my blog generator and Gabriele's PDF maker. I'm going to start a separate repository for it, and begin a framework through which we can run Red's tests against it. This is going to be a long road, but a very deep stress test and proving ground for Ren-C. There will be bugs in the emulation to work on, and there will be bugs brought out in the core, so no shortage of work to do. I hope people can get on board with contributing to the userspace definitions, so I can tend to the C code and design that needs doing.

  • We're moving away from StackOverflow for chat and Q&A, and We Might Pick to Build a Rebol Solution. I don't want to be hasty in saying that we jump into that burden. But I've had something of a revelation that I can no longer be complicit in the "keeping things on some guy's website"...or even trusting the DNS system itself. Whether it's through Rebol or not, I want my remaining time as a user of the Internet to be spent as an activist for removing central control by fiat. I've talked about it for decades... but it's time to put my money where my mouth is, and find a way to participate with the people who've actually been walking the talk in the meantime. @gchiu has already started tinkering here, and I'll support those efforts as well as doing my own research.

  • Somewhat tied in with the above, cryptography is rather critical... and we should be providing an arbitrary precision INTEGER! type. So I want to see BigNum support as a foundational service sooner rather than later.

  • We need to become "Stackless". Wasm has forced our hand here, but it is a good idea regardless. Early experiments are promising, but putting this together won't happen overnight... it's by no means trivial.

  • I'm proud of how libRebol is working in C and JavaScript, but I'd like to see some forward-looking work into binding with Rust and .NET... as well as revisiting the C++ binding. The "RenCpp" interface was the primary design influence on libRebol, and I want to turn that around and see how to rethink the C++. Getting Ren Garden to build against the new "Qt Lite" would be a good test that would bring me up to date on that. @szeng did some exploratory work on Rust binding, and I'd like to see that and see what I think.

  • Would be cool to get Ren-C on the STM32 board donated by @jhgorse, just to do a bit of a check on our ability to run in truly resource-constrained environments and be useful there.

Of course there's a ton more to do. I guess a lot of what order we do things depends on you all.

Let's get to it.