工具

rustup

https://rustup.rs/

https://play.rust-lang.org/

  • 没有GC
  • 对象默认是移动语义。在特殊情况下也支持复制语义。但是不管是移动还是复制,变量之间不能共享同一份堆上的数据
  • 要想共享对象的数据,需要通过引用来借用。同一作用域内同时只能有一个可变的引用。没有可变的引用时,支持多个不变引用共享。
  • 变量绑定默认是不变的,可变的需要加mut关键字说明。引用也是如此。
  • 较大作用域的引用不能引用活得比它短的小作用域内的对象,反之可以。
  1. fn main() {
  2. //Rust 是强类型语言,但具有自动判断变量类型的能力
  3. let number = 3;
  4. let mut m_num = 4;
  5. println!("number{{0}}={0},m_num={1}",number,m_num);
  6. m_num=555;
  7. println!("m_num={0}",m_num);
  8. let x_num=2;
  9. let x_num=x_num+1;
  10. let x_num=x_num*2;
  11. println!("x_num{{0}}={0}",x_num);
  12. //
  13. let a = 2.0; // f64
  14. let b: f32 = 3.0; // f32
  15. let _c: [i32; 5] = [1, 2, 3, 4, 5];
  16. // c 是一个长度为 5 的 i32 数组
  17. let _d = [3; 5];
  18. // 等同于 let d = [3, 3, 3, 3, 3];
  19. println!("{0},{1}",a,b);
  20. //
  21. fn five() -> i32 {
  22. 5
  23. }
  24. println!("five()={0}",five());
  25. println!("add()={0}",add(33,2));
  26. //
  27. let mut v = vec![1,2,3];
  28. take(&mut v);
  29. println!("v{{3}}={}",v[3]);
  30. let _v2 = &v;
  31. let _v3 = &v;
  32. }
  33. fn take(v: &mut Vec<i32>){
  34. v.push(4);
  35. }
  36. fn add(a: i32, b: i32) -> i32 {
  37. return a + b;
  38. }