Y’know, in this case, I think that what I’d do is “a C-style for-loop,” for exactly the reason mentioned: because it is “certainly one that would be understood by almost anyone who has taken up programming, regardless of the language.” Someone (anyone ...) could someday encounter that piece of code, fairly-quickly guess what it was long-ago intended to do, and be correct. If they now were tasked with changing that piece of code, they could once again do so with confidence. And that, to me, pretty much trumps every other consideration. “Shrink-wrap it... ship it...”