As a counter-point, I’ve found I really like the loop{} syntax. Even in languages without do while, I find I’m often writing code that fits the pattern of
loop {
let x = something_complicated();
if predicate(x) { break }
followup_somehow(x);
}
And not needing while (true) or for (;;) (Stroustrup-style) is nice.
On a “this is probably bad style but” note, I’m also rather enamoured by
fn find<T>(mut it: impl Iterator<Item=T>, mut f: impl FnMut(&T) -> bool) -> Option<T> {
loop {
let x = it.next()?;
if f(&x) { return Some(x) }
}
}
https://play.rust-lang.org/?gist=f87020e0249877bae4e8cb374027cb0b
(Even if I probably wouldn’t actually write code like that “for real”.)