I've always loved the syntax of using "for..in" loops for iteration. However, I've found that historically there's been a hole in the way languages use iterator objects. That is, there's no notification to the iterator object that it's been terminated. Places where this becomes a problem is in areas like games where you have to avoid producing garbage, so ideally you'd reuse your iterator objects. If the iterator objects only have a maintenance condition (next) and no termination condition, they have no opportunity to free themselves back to a pool.
I don’t really have a proposed solution, but thought I’d pose the problem to see what smarter people than myself think about it.