Stdout handle uses buffered output, currently using std::io::LineWriter which flushes the buffer whenever a newline is detected. println! prints a newline, print! as used here doesn't.
It's possible to manually force STDOUT to be flushed by calling stdout's flush method.
use std::io::{stdout, Write};
fn main() {
let mut i = 1;
while i <= 1000 {
if i == 500 { continue; }
print!("{} ", i);
stdout().flush().unwrap();
i += 1;
}
}