fn main() {
    let s = String::from("witaj");  // Zmienna s wchodzi w zakres

    takes_ownership(s);             // Wartość zmiennej s jest przenoszona do funkcji...
                                    // ...i dlatego tutaj zmienna s nie jest już poprawna

    let x = 5;                      // Zmienna x wchodzi w zakres

    makes_copy(x);                  // Zmienna x zostałaby przeniesiona do funkcji,
                                    // ale i32 to kopia, więc można nadal
                                    // używać po tym zmiennej x

} // Tutaj z zakresu wychodzi x, a następnie s. Ponieważ jednak wartość s została przeniesiona,
  // nie dzieje się nic specjalnego.

fn takes_ownership(some_string: String) { // some_string wchodzi w zakres
    println!("{}", some_string);
} // Tutaj some_string wychodzi z zakresu i wywoływane jest `drop`.
  // Zwalniana jest wykorzystywana pamięć.

fn makes_copy(some_integer: i32) { // some_integer wchodzi w zakres
    println!("{}", some_integer);
} // Tutaj some_integer wychodzi z zakresu. Nie dzieje się nic specjalnego.
