main.rs
 1  fn main() {
 2      let s = String::from("hello");  // s comes into scope
 3  
 4      takes_ownership(s);             // s's value moves into the function...
 5      // println!("{}", s);              // ... and so is no longer valid here
 6  
 7      let x = 5;                      // x comes into scope
 8  
 9      makes_copy(x);                  // x would move into the function,
10      println!("{}", x);              // but i32 is Copy, so it's okay to still
11                                      // use x afterward
12  
13  } // Here, x goes out of scope, then s. But because s's value was moved, nothing
14    // special happens.
15  
16  fn takes_ownership(some_string: String) { // some_string comes into scope
17      println!("{}", some_string);
18  } // Here, some_string goes out of scope and `drop` is called. The backing
19    // memory is freed.
20  
21  fn makes_copy(some_integer: i32) { // some_integer comes into scope
22      println!("{}", some_integer);
23  } // Here, some_integer goes out of scope. Nothing special happens.