Primitives

Rust provides access to a wide variety of primitives. A sample includes:

Scalar Types

  • signed integers: i8, i16, i32, i64 and isize (pointer size)
  • unsigned integers: u8, u16, u32, u64 and usize (pointer size)
  • floating point: f32, f64
  • char Unicode scalar values like 'a', 'α' and '∞' (4 bytes each)
  • bool either true or false
  • and the unit type (), whose only possible value is an empty tuple: ()

Despite the value of a unit type being a tuple, it is not considered a
compound type because it does not contain multiple values.

Compound Types

  • arrays like [1, 2, 3]
  • tuples like (1, true)

Variables can always be type annotated. Numbers may additionally be
annotated via a suffix or by default. Integers default to i32 and
floats to f64. Note that Rust can also infer types from context.

  1. fn main() {
  2. // Variables can be type annotated.
  3. let logical: bool = true;
  4. let a_float: f64 = 1.0; // Regular annotation
  5. let an_integer = 5i32; // Suffix annotation
  6. // Or a default will be used.
  7. let default_float = 3.0; // `f64`
  8. let default_integer = 7; // `i32`
  9. // A type can also be inferred from context
  10. let mut inferred_type = 12; // Type i64 is inferred from another line
  11. inferred_type = 4294967296i64;
  12. // A mutable variable's value can be changed.
  13. let mut mutable = 12; // Mutable `i32`
  14. mutable = 21;
  15. // Error! The type of a variable can't be changed.
  16. mutable = true;
  17. // Variables can be overwritten with shadowing.
  18. let mutable = true;
  19. }

See also:

the std library, mut, inference, and shadowing