The loop version of your example would be:

Code:
//tokenize 32 ~1 $!time ~3 | var %i = 1 | while (%i <= $0) { echo -a $mid( [ $+($,%i) ] ,2) | inc %i }


Yes, it's somewhat longer code, but it's simple and easy to understand. I wouldn't call this "a much longer method". I'd call it "a slightly longer method that is much clearer and provides much more flexibility". Since $* is not supported anymore, and since while loops are simple, there's really no reason to use $* at all.

As for accidental double evaluation, I agree that double evaluation is a problem and should be addressed. I've already created a feature suggestion thread on that topic.

What it comes down to is that for every case you can come up with where changing the behavior of $* would solve a problem, someone else can come up with a reverse case where the old behavior is necessary for $* to solve a problem. The only thing you'd be doing is shifting the way $* works to suit your personal needs.