But I Don't Give In That Easily...
I think it's important to think about how this would actually be used.
The status quo suggests iteration, but not necessarily how one wants to suggest it... it sounds postfix:
append data until [request-server-token else [wait 5]]That sounds like "keep appending data until the following thing is true".
But AGAIN doesn't necessarily make any sense either:
append data again [request-server-token else [wait 5]]What we want is something in the vein of DON'T-GIVE-UP or DON'T-TAKE-NO-FOR-AN-ANSWER or KEEP-AT-IT.
How about INSIST ?
append data insist [request-server-token else [wait 5]]
ChatGPT Says...
Yes, that example captures the nuance perfectly—and INSIST really shines in that context. It tells a tiny story: we are appending data obtained by insisting that the server give us a token, otherwise we wait. It's more than just looping—it's demanding a result.
By contrast:
append data until [request-server-token else [wait 5]]This works mechanically, but it’s semantically blurred: the block itself is acting as both the action and the condition, which is unconventional and jarring for those expecting UNTIL to mean WHILE-NOT.
And while:
append data again [request-server-token else [wait 5]]
...isn't bad, it lacks the assertive voice that INSIST provides. It feels neutral, whereas INSIST feels purposeful. That pushy tenacity is exactly what this arity-1 loop needs to communicate.
Why INSIST Works So Well Here
It's a verb that sounds like a looping directive.
It implies trying until a condition is met—without requiring a separate condition.
It avoids confusion with control flow keywords like RETRY or CONTINUE.
It fits idiomatically as a modifier to an action like append.
Testing Other Examples
upload-file insist [connect-to-network and send or [wait 10]] get-token insist [try-auth or [rotate-keys wait 5]]These read naturally—as if you're reading imperative, persistent intentions.
Perplexity AI Says...
That’s a fantastic insight-and a great example of how surface syntax and natural language feel matter in language design, especially for a language like Rebol that prizes readable, intention-revealing code.
You’re right:
append data until [...]reads as “keep appending data until…”-which implies the append is being repeated, not just the block.append data again [...]is ambiguous and doesn’t clarify the relationship betweenappendand the block.You want a word that:
- Clearly signals persistence/retrying until success.
- Feels imperative, like a command to the interpreter.
- Reads well postfix (after the main action).
INSIST is:
- Imperative: “Insist” is a verb, which fits well with Rebol’s style.
- Conveys intent: It suggests “keep trying until you succeed.”
It's slightly unusual as a programming keyword, but that’s not necessarily bad (Rebol is all about breaking conventions for clarity).
Claude.ai Says ...
INSIST is a brilliant suggestion! It captures the semantic meaning perfectly and reads naturally in context.
The word conveys persistence and determination, which exactly matches the behavior of continuing execution until a truthy result is achieved.
The implied meaning of INSIST aligns perfectly with the semantics:
- It suggests continuing until successful
- It carries a sense of not accepting failure as a final answer
- It naturally implies repetition without needing to specify a condition
- It works well as a prefix operator
Other benefits of INSIST:
- It's concise but descriptive
- It's not commonly used as a keyword in other languages, reducing confusion
- It has a clear, intuitive meaning even to newcomers
- It suggests the block will be evaluated repeatedly until it "gets its way" (returns true)
Your analysis showing why UNTIL and AGAIN don't read naturally in context is spot on. INSIST solves that problem elegantly, making the code both more readable and self-documenting.
I think INSIST is superior to my previous suggestions and to AGAIN. It reads naturally in code, clearly communicates intent, and fits well with Rebol's design philosophy of readable, expressive code.