Questions tagged «rust»

Rust是一种没有垃圾回收器的系统编程语言,主要关注三个目标:安全性,速度和并发性。使用此标签可解决有关用Rust编写的代码的问题。对于特定于代码的问题,请使用特定于版本的标签,例如需要使用特定版本的代码,例如[rust-2018]。对[rust-cargo]和[rust-macros]等子主题使用更具体的标签。


1
假设两个可变引用都不能别名,Rust编译器为什么不优化代码?
据我所知,引用/指针别名会阻碍编译器生成优化代码的能力,因为它们必须确保在两个引用/指针确实是别名的情况下,生成的二进制文件的行为正确。例如,在以下C代码中, void adds(int *a, int *b) { *a += *b; *a += *b; } 当clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)用-O3标志编译时,它发出 0000000000000000 <adds>: 0: 8b 07 mov (%rdi),%eax 2: 03 06 add (%rsi),%eax 4: 89 07 mov %eax,(%rdi) # The first time 6: 03 06 add (%rsi),%eax 8: 89 07 mov %eax,(%rdi) # …

4
为什么不println!在Rust单元测试中工作?
我已经实现了以下方法和单元测试: use std::fs::File; use std::path::Path; use std::io::prelude::*; fn read_file(path: &Path) { let mut file = File::open(path).unwrap(); let mut contents = String::new(); file.read_to_string(&mut contents).unwrap(); println!("{}", contents); } #[test] fn test_read_file() { let path = &Path::new("/etc/hosts"); println!("{:?}", path); read_file(path); } 我以这种方式运行单元测试: rustc --test app.rs; ./app 我也可以用 cargo test 我收到一条消息,说测试已通过,但println!从未显示在屏幕上。为什么不?
284 rust  println 


2
在具有240个或更多元素的数组上循环时,为什么会对性能产生较大影响?
当在Rust中的数组上运行求和循环时,当CAPACITY> = 240 时,我注意到性能大幅下降。CAPACITY= 239快80倍。 Rust对“短”数组进行了特殊的编译优化吗? 与编译rustc -C opt-level=3。 use std::time::Instant; const CAPACITY: usize = 240; const IN_LOOPS: usize = 500000; fn main() { let mut arr = [0; CAPACITY]; for i in 0..CAPACITY { arr[i] = i; } let mut sum = 0; let now = Instant::now(); for _ …

4
如何在Rust中禁用未使用的代码警告?
struct SemanticDirection; fn main() {} warning: struct is never used: `SemanticDirection` --> src/main.rs:1:1 | 1 | struct SemanticDirection; | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: #[warn(dead_code)] on by default 在发生任何严重的问题时,我都会再次打开这些警告,但是我只是在修补这种语言,这使我感到很不快。 我尝试将#[allow(dead_code)]代码添加到我的代码,但这没有用。

2
为什么不能在同一结构中存储值和对该值的引用?
我有一个值,我想以自己的类型存储该值和对该值中内容的引用: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { count: 42 }; Combined(thing, &thing.count) } 有时,我有一个值,并且想在同一结构中存储该值和对该值的引用: struct Combined<'a>(Thing, &'a Thing); fn make_combined<'a>() -> Combined<'a> { let thing = Thing::new(); Combined(thing, &thing) } 有时,我什至没有引用该值,并且得到了相同的错误: struct Combined<'a>(Parent, Child<'a>); fn make_combined<'a>() …

10
为什么在Rust中需要显式的生存期?
我正在阅读Rust书的终生一章,并且遇到了这个示例,它给出了一个有名/显式的终生: struct Foo<'a> { x: &'a i32, } fn main() { let x; // -+ x goes into scope // | { // | let y = &5; // ---+ y goes into scope let f = Foo { x: y }; // ---+ f goes into scope x = …

5
如何在Rust中将字符串与字符串文字进行匹配?
我试图找出如何匹配StringRust 中的一个。 我最初尝试像这样进行匹配,但是我发现Rust不能隐式地从转换std::string::String为&str。 fn main() { let stringthing = String::from("c"); match stringthing { "a" => println!("0"), "b" => println!("1"), "c" => println!("2"), } } 这有错误: error[E0308]: mismatched types --> src/main.rs:4:9 | 4 | "a" => println!("0"), | ^^^ expected struct `std::string::String`, found reference | = note: expected type `std::string::String` found …
199 string  match  rust 


4
带有库和二进制文件的Rust包?
我想制作一个Rust包,其中包含一个可重用的库(在其中实现了大多数程序),以及一个使用它的可执行文件。 假设我在Rust模块系统中没有混淆任何语义,那么我的Cargo.toml文件应该是什么样?
186 rust  rust-cargo 

1
在Rust中将字符串转换为int吗?
注意:此问题包含1.0版之前的代码!答案是正确的。 要转换str成int拉斯特,我可以这样做: let my_int = from_str::<int>(my_str); 我知道如何将a转换String为an 的唯一方法int是获取其中的一部分,然后from_str像这样使用它: let my_int = from_str::<int>(my_string.as_slice()); 有没有一种方法可以直接将a转换String为int?
183 rust 

2
Rust的确切自动引用规则是什么?
我正在使用Rust进行学习/实验,并且在使用该语言所获得的所有优雅中,都有一种使我感到困惑的特质,并且似乎完全不合时宜。 进行方法调用时,Rust自动取消引用指针。我进行了一些测试以确定确切的行为: struct X { val: i32 } impl std::ops::Deref for X { type Target = i32; fn deref(&self) -> &i32 { &self.val } } trait M { fn m(self); } impl M for i32 { fn m(self) { println!("i32::m()"); } } impl M for X { fn m(self) { …

4
iter和into_iter有什么区别?
我正在做的Rust by Example教程具有以下代码片段: // Vec example let vec1 = vec![1, 2, 3]; let vec2 = vec![4, 5, 6]; // `iter()` for vecs yields `&i32`. Destructure to `i32`. println!("2 in vec1: {}", vec1.iter() .any(|&x| x == 2)); // `into_iter()` for vecs yields `i32`. No destructuring required. println!("2 in vec2: {}", vec2.into_iter().any(| …
174 rust 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.