Belated 2021 Post-Mortem + New Years 2022 Vision 🤹

Happy 2022!

...and I Hope Your New Year's Was Better Than Mine... :man_facepalming:

Though I've spent most of the last few New Years Days (and this last one) traveling and in some hotel...I've usually gotten myself a nice supply of beer, and worked start-to-finish through a post. I talk about what worked and didn't work, and where things might go next. Although it generally takes the greater part of a day to write those, it's in some ways kind of a fun thing to write...and I was always pleased to beat Red to the punch with accomplishments I found more impressive.

This year felt unfortunately different. I had a big wave of pessimism for all kinds of reasons--ranging from personal relationships, to my new laptop screen getting cracked when it was in my just a general feeling that the world is going to hell in a handbasket.

:skull: ...But It's Not As Grim As All That... :potato:

After eating a ridiculous potato from A Hipster Potato Restaurant In St. Petersburg--and inadvisedly drinking 2 Sugar-Free Red Bulls--my stomach and brain weren't going to sleep for a long time.

Though traveling makes retrieving a repaired laptop on an extended warranty difficult, I still had my old laptop with me. So I dug it out, and found an unfinished post about a seemingly-esoteric point about invisible evaluations and void isotopes. Some deep realizations clicked into place. Those realizations led to a proud thought:

2021 was the year of invention for BAD-WORD!s, "isotopes", and ^META. While the older invention of NULL was akin to mathematicians inventing zero to solve previously hard problems... isotopes and meta-transformations are like the invention of imaginary numbers.

Having that energy boost put me on a slight incline toward positive thinking. Enough so that I'm pushing out a New Year's post before the calendar ticks over to February... here goes:

UPARSE Is Already a Big Success Story

Many who use Rebol got addicted because of PARSE. But people who work with other languages and parser combinators have wondered what the big deal is. Though Rebol's PARSE is a literate alternative to simple RegEx scenarios, it's weak at building high level structures from smaller simpler parsers--there are too many inconveniences in writing reusable rules.

UPARSE stands for (U)sermode PARSE and to me it deals Rebol back in the parsing game:

  • It keeps the classic feel of PARSE alive, while bringing its power up to the level of combinators in other languages. Arbitrary values can be synthesized from processing the input, instead of just data captures at the level of the input series.

  • You can come up with "new keywords" without waiting for someone to do so. These are expressed as ordinary functions with multiple return values, and hence can be optimized as natives.

  • The behavior of values of certain datatypes themselves can be overridden, to bend parsing to entirely different meanings.

  • It has a generic architecture for rolling back the effects of combinators, with a default behavior that lets the average combinator author avoid the details if they just want any failure to roll back everything in the order it was done.

  • As a proof of its flexibility, a Rebol2/Red-compatible combinator set is defined.

But besides the combinators, the usermode implementation of the UPARSE engine itself that composes and runs them is as much of the story as anything else. Rebol has had a shaky history of giving usermode code the same perceptive power as what could be done from C...and that can be as basic as how to tell the difference between [a b #[none]] and [a b] with looking at the result of THIRD of the block. All these upgrades come into the mix in UPARSE...from FRAME! mechanics and specializations to ^META and isotopes and generic quoting.

On the downside: it hasn't been optimized much yet, so the performance is abysmal...and a lot of work is left to do on error messages. But seeing how to build a dialect in this way--where it's not like you have to be a C programmer, but you can wire together the pieces--is the "Minecraft of Programming" I talk about.

The Ren-C GitHub Action Has Been Amazing

Although it required me gritting my teeth through some JavaScript programming, we now have a turnkey way to install an up to date interpreter with a line of code on a cloud runner for Mac, Linux, and well as run automation of the latest web build.

It's a big force multiplier, and it's helped with testing the Whitespace Interpreter Dialect and the USCII Dialect...both of which received major updates this year. When Redbol examples are given they often risk merely showing the language is capable of generic computation and if you put enough hours into it then you might get something that sort-of-works. But I feel these are approaching good examples of the form--where they lay out the particular power and composability that Ren-C has been angling for.

Devices are Gone and now it's all libUV

I think that libUV pretty much represents the objectives of what Carl might have wanted a device layer to be. Not only is it pure C code that can be built with things like the TinyC compiler, it compiles for esoteric platforms like Haiku. It's something Rebol might well have used had it been around.

And the web build doesn't use libUV at all--accomplishing its network reads and such through completely different mechanisms. So it shows the language is staying pure and repurposeable on platforms that don't have threads or whatever dependencies libUV requires. A simple stripped down version could just offer C stdio (for instance).

There's a long way to go for our usage of libUV to live up to its potential. But it gives the foundations for doing things like a good version of async IO, where you code in a synchronous style. (I've explained that I think the old WAIT/AWAKE model really represented a dead end, and so it had to be ripped out).

Sea of Words and Customizable Modularization Arrives

What was supposed to be unique about Rebol's modules was that the code that processed headers would be like a dialect. That dialect was processed by usermode code, and you could write your own spin on it if you had some other idea of how you wanted modularization to work.

It's early yet to really say for sure how the mechanics behind this will evolve. But there have been big steps taken--and the personal success I feel is how the test dialect can create modules out of individual tests. So the test files are really making thousands upon thousands of isolating contexts, and when the tests are done running the user context is not contaminated at all. This makes the tests less subject to weird side effects from each other...keeps things tidy...and is overall good for the garbage collector as well.

Disconnecting the use of words from the creation of variables is good for all the reasons I cite. I've been very happy with that idea, though what "attachment" to a context means has design work to do. Make no mistake--this is a process of invention--and so it's going to be weird and take time.

PICK and POKE and Pathing Are Resolved (I Think)

I've struggled since very early on to tame "path dispatch", which was very oddly shaped. I'm not going to rehash all of the thought process. But I'm pleased with the outcome, and I think it will generalize well to extension types.

First Try At String Binding + Interpolation

It isn't there yet, but it has been prototyped. I've written up a post about where I think binding/scoping has to go:

Rebol And Scopes: Well, Why Not?

There are still no easy answers. But there's good news about having so many complex codebases in play (like UPARSE, whitespace dialect, etc.) that are not throwing softballs at the language. If new binding concepts add functionality but don't break any of that, that's a good sign it may be good.

...A Lot Of Other Stuff Happened...

This is just a mini list of some of the things I find most notable to call out. As usual, you can scroll through posts or commit logs to see more.

But I also got the chance to visit @BlackATTR and meet his family and dogs, so that was fun. We got some work done on his QUERY dialect, but more to go.

I managed to get ODBC and webserver bugs fixed for @gchiu so he could do a demo, and to put it on GitHub Actions with tests.

What Hangs in the Balance for 2022?

I mentioned my bad New Years, and reading Red's New Years post did not help, because it felt so incredibly cyclic. Seeing them start a New Year by long-windedly plagiarizing Back to Personal Computing... again... made me fear their man-years of toil without heeding advice or warnings has grown no audience for either their work, nor Ren-C's inventions. Their formerly active YCombinator group had a collective yawn about comment at time of writing, so they seem to be slipping off the radar...even though they are much less research-oriented and more "give-the-people-what-they-want-right-now" oriented (in theory).

Apologies to Gregg Irwin for ranting at him. But we/I sadly can't count on Red to keep an audience alive for Redbols, as the old guard moves on and new people aren't there to replace them. And I'm not a marketer, especially since I fundamentally disagree with the way social media power structures work. So Ren-C's cool creations are at high risk of not even making it to @BlackATTR's "bad"-case outcome of becoming "a museum piece like the Antikythera mechanism."

(Makes me think of the species extinction risk scale. Sure, the source code is on GitHub, and the topic list of this forum seems to be on the Internet Archive...but if you click through to individual pages there's nothing about the post contents. Should we do a scrape of the data here and put it elsewhere?)

I have always been able to consider the notion that Rebol's fundamental idea is flawed and it should die out. In fact: I started out getting involved in Rebol to prove to Reichart that it was bad, and using it for Qtask was misguided. My attempts to construct that proof ran up against the fact that its odd plasticity and choice to throw out the rulebook on what a computer language is-or-should-be gave it a slippery yet timeless English itself.

But given the bus-factor-of-one nature of Ren-C, I should probably be thinking more about how to communicate that to new audiences, vs. going too deeply into an engineering project where I try to re-graft Ren-C onto a Go-like runtime model.

So maybe I need to be better about making YouTube videos, packaging demos, and showing off the existing infrastructure. When I look at other WebAssembly language projects, we actually still compare favorably. And maybe I'm too quiet about it for fear of looking a fool for all the things that I know aren't working right. confidence increases as I've been moving the architecture around to try and steer away from the obviously bad ideas, in a way that new people coming in would be able to shore up missing pieces.

...Predictions Are Hard To Make

It probably looks as if I've been notoriously bad at predicting what things are going to get accomplished. I'd wanted 2021 to hopefully be when stacklessness got integrated, and I wanted to see progress on debugging. And it may seem like none of that happened.

But sometimes progress is subtle. There were major barriers to making R3-Alpha's PARSE architecture stackless, but the UPARSE design is much more amenable to it. So I think the answer will just be that we'll skip stackless PARSE3 and just assume UPARSE is the future of PARSE.

And when it comes to debugging, I demonstrated some impressive tracing in UPARSE that works today...which is the sort of thing a user can customize. Understanding how dialect authors are going to be able to hook and trace their dialects ties in a lot to seeing a big picture of how the evaluator itself might be traced, so all of this really does plug together.

Nevertheless, I feel skeptical of making new predictions. Especially because here in 2022: Realistically speaking, so long as I'm traveling and trying to find a new home base it's hard to get very much done. I've chosen to travel in Florida because things are open for business despite the existence of coronavirii...and that aligns with my belief that being vaccinated and boostered is enough to have a social life. That means I am out maskless indoors doing a fair number of things with people...and changing locations every few days. It may be a while before I can really focus on coding.

So Let's Put Predictions On Hold, at least until I have a :derelict_house:

One thing that's been working so far, it's my mandate on continuous integration and keeping all the things that are supposed to work, working, as new experiments are tried. This is not a natural habit for the personality type that programs in Rebol. People drawn to the language are not "correct-by-construction" folks, more like Larry The Cable Guy "Git-R-Done" mentality.

I want to keep developing @BlackATTR's QUERY and make it part of that "everything is kept working" strategy.

All of @gchiu's projects, as well. And my USCII, Whitespacers, itself, etc. Anything I can convince @giuliolunati to put in a GitHub workflow, as well!

I want to re-commit to Rebmu, also, and make it part of the CI tests. It might seem like I am always putting this off--even though I claim to say it's one of the big motivators, the "great code golf game in the sky" that I say I'm pursuing. (When have you seen me solve a puzzle or develop it lately?) But it's actually in the back of my mind, always.

It was nice with Whitespace to actually draw some attention from a curator of collections of implementations of whitespace... @aarchi. He said he found it to be one of the more interesting examples, and that's always been my goal with this. To build on the novelty of the medium and give people a new tool to think. (Recently re-watching that movie "Arrival" and the "language/weapon/tool" bit.)

I'm a few minutes from February so I'll just close by saying: continue automating, continue examples, and maybe do a bit more YouTube evangelism. I'll keep frittering with the mechanics. And get my laptop fixed (!)


A little addendum from one of my recent favorite YouTubers, Joel Haver, on doing what you love:

And I think that is a good meditation on not really deviating from the parts of this that I find interesting, but staying that course...even if it takes time.

So I'll try and promise to keep doing the parts that impress me. And someday, it might find an audience.


Like it is said, "if you do what everyone else is doing, you will get the same as all of them".
The lack of continuity on the posts of the f00 team is legendary, and combined with the prioritised goals it is encouraging many to wander on.
The dynamics of REN-C, changing even core behavior if seen as a promising experiment is on the complete other end of the spectrum. Not suitable for many seeking an alternative to the library madness, where using even for standard functionality refuge is sought in external API's, for their stable project needs.

Fortunately I am very busy with my new career, but as a downside almost no devtime. But still like what I am doing, so must do more now ... :smiley:

Happy New Year and thanks for the excellent update.

Following this wget suggestion (How to create a read only, archive version of discourse content - support - Discourse Meta) I just quickly did a full scrape of this forum (public posts only). It works very well.
All the best, John

A post was split to a new topic: Could Ren-C and Red Interoperate (and if so, should they?)

Done. Browsable Archive now located on github pages here:
I am just running this from my laptop for the moment on a weekly cron job (and I have added a few delays to reduce the server load).
Not the most robust approach, but it should do for the moment. I think we have moved the risk of losing the forum content a few points down the scale.


Wow--thank you! It's comforting to think that if I get hit by a bus these ideas will still be somewhere out there... :bus:

1 Like

I couldn't find something here and so I did a google site search to see if it was better and found...

no hits!

Google results for

I don't think this is all bad, as the plan is re-launching the content under a new domain "when it's ready". I'm okay with being under the radar until then. And hey--it keeps one from worrying too much about keeping old links working.

--nevertheless-- it is a little bit unsettling in the sense that there are plenty of inbound links. Zero Google indexing is surprising. I think the quality of content is better than many other places (personally).

Not necessarily a particular action item--not trying to get found yet. But definitely a call to arms, and praise for @johnk making the valiant preservation effort!

1 Like