`
aaa110110
  • 浏览: 16841 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

rust学习

 
阅读更多

在Rust中,你并不需要自己调用像 malloc 和 free 这样的函数:编译器静态决定何时你需要分配和销毁内存,并自动调用这些函数。人非圣贤孰能无过,不过编译器永远也不会忘记
当有其它引用存在时改变值是危险的,因为我们可能使这个引用无效
我们可以使用 cargo build --release 来开启优化并编译你的项目
cargo new hello_world --bin 用了 --bin 标记,因为我们要创建一个二进制文件,而不是一个库文件
它们默认是不可变的。这时为什么我们的例子使用了 mut :它让一个绑定可变,而不是不可变
并且Rustacean们可以编写更小的由很多子包组装成的项目
这个基本观点是:方法定义在一些叫做“特性”的东西上面,而为了让方法能够工作,需要这个特性位于作用域中。
在这种具体的情况中经常被用到, guess 开始是一个 String ,不过我们想要把它转换为一个 u32 。遮盖(Shadowing)让我们重用 guess 名字,而不是强迫我们想出两个独特的像 guess_str 和 guess ,或者别的什么的
impl 块让我们在 Philosopher 上定义方法
 .to_string() 。这将创建一个我们 &str 指向的字符串的拷贝,并给我们一个新的 String
 Rust是一个“基于表达式”的语言,它意味着Rust中几乎所有的东西都是一个表达式并返回一个值,对函数也适用,最后的表达式是自动返回的

let handles: Vec<_> = philosophers.into_iter().map(|p| {
thread::spawn(move || {
p.eat();
})
}).collect();
 这个闭包需要一个额外的标记, move ,来表明这个闭包将会获取它获取的值的所有权。主要指 map 函数的


use std::sync::Mutex;
struct Table {
forks: Vec<Mutex<()>>,
}
这个 Table 有一个 Mutex 的向量,一个互斥锁是一个控制并发的方法:一次只有一个线程能访问它的内
容。这正是我们需要叉子拥有的属性。我们用了一个空元组, () ,在互斥锁的内部,因为我们实际上并不
准备使用这个值,只是要持有它。

这些代码还有另一个奇怪的事情:我们命名结果为 _left 和 _right 。为啥要用下划线?好吧,我们并不
打算在锁中“使用”这些值。我们仅仅想要获取它。为此,Rust会警告我们从未使用这些值。通过使用下划
线,我们告诉Rust这是我们意图做的

 

 

 

  • 大小: 7.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics