Rebol has historically had DOES as the arity-1 function generator, to make a little helper routine you can call, generally inside another function.
>> name: "Bob"
>> hello: does [print unspaced ["Hello" _ name "!"]]
>> hello
Hello Bob!
I had a "fun" idea at one point, that you could pass DOES anything that DO took:
>> hello: does https://example.com/print-hello.r
>> hello
Hello From The Interwebs!
So basically, DOES was just a specialization of DO.
I actually started tacking on some other behaviors to it, like if it got a WORD! it would fetch that word:
>> proxy: does $name
>> proxy
== "Bob"
But if you're doing that, it's something that makes more sense to be done with "accessors", e.g. proxy: getter $name ... because it can be optimized further and you don't need to use slashes in your calling syntax to get it.
But DO of a BLOCK! is Marked For Repurposing
So what "DOES" actually wants to do is EVAL the block.
Should it be called EVALUATES now?
>> name: "Bob"
>> hello: evaluates [print unspaced ["Hello" _ name "!"]]
>> hello
Hello Bob!
Shorthanded as EVALS?
>> name: "Bob"
>> hello: evals [print unspaced ["Hello" _ name "!"]]
>> hello
Hello Bob!
Or is the disconnect between DOES and DO not a problem?
What's a little bit lame is this:
>> hello: does [do https://example.com/print-hello.r]
I'm not crazy about does do
. But honestly, that isn't something that comes up often.
I Lean To Saying DOES Just Takes A BLOCK! and It's Fine
I go back and forth on it. DOES seems brief and familiar. It can be seen as its own concept, that's not necessarily in lockstep with DO just because it has the letters D-O in it.
But... when I stop and look at DOES I sort of have a bit of Jamais Vu to where it starts to look like a weirder word than I think it is. Like it's deer.