คำถามติดแท็ก rust

Rust เป็นภาษาการเขียนโปรแกรมระบบโดยไม่ต้องมีตัวรวบรวมขยะโดยมุ่งเน้นที่เป้าหมายสามประการ ได้แก่ ความปลอดภัยความเร็วและการทำงานพร้อมกัน ใช้แท็กนี้สำหรับคำถามเกี่ยวกับรหัสที่เขียนใน Rust ใช้แท็กเฉพาะของรุ่นสำหรับคำถามที่อ้างถึงรหัสที่ต้องใช้กับรุ่นใดรุ่นหนึ่งเช่น [rust-2018] ใช้แท็กเฉพาะเจาะจงมากขึ้นสำหรับหัวข้อย่อยเช่น [การเกิดสนิมสินค้า] และ [การเกิดสนิมมาโคร]

11
จะเข้าถึงพารามิเตอร์บรรทัดคำสั่งได้อย่างไร
สนิมกวดวิชาไม่ได้อธิบายวิธีการใช้พารามิเตอร์จากบรรทัดคำสั่ง fn main()จะแสดงเฉพาะกับรายการพารามิเตอร์ที่ว่างเปล่าในตัวอย่างทั้งหมด วิธีที่ถูกต้องในการเข้าถึงพารามิเตอร์บรรทัดคำสั่งmainคืออะไร?
153 command-line  rust 

5
ทำไมไฟล์สนิมถึงใหญ่มาก?
เพิ่งพบสนิมและได้อ่านสองบทแรกของเอกสารฉันพบวิธีและวิธีที่พวกเขากำหนดภาษาที่น่าสนใจเป็นพิเศษ ดังนั้นฉันตัดสินใจที่จะทำให้นิ้วของฉันเปียกและเริ่มด้วย Hello world ... ฉันทำเช่นนั้นบน Windows 7 x64 btw fn main() { println!("Hello, world!"); } การออกcargo buildและดูผลลัพธ์ในtargets\debugฉันพบผลลัพธ์ที่.exeเป็น 3MB หลังจากการค้นหาบางอย่าง (เอกสารของการตั้งค่าสถานะบรรทัดคำสั่งขนส่งสินค้าหายาก ... ) ฉันพบ--releaseตัวเลือกและสร้างการสร้างการเปิดตัว ด้วยความประหลาดใจของฉันขนาด. exe มีขนาดเล็กลงเพียงเล็กน้อยเท่านั้น: 2.99MB แทนที่จะเป็น 3MB ดังนั้นการสารภาพว่าฉันเป็นมือใหม่สำหรับสนิมและระบบนิเวศน์ของมันความคาดหวังของฉันจะเป็นไปได้ว่าภาษาการเขียนโปรแกรมระบบจะสร้างสิ่งที่กะทัดรัด ใครสามารถอธิบายอย่างละเอียดเกี่ยวกับสิ่งที่ Rust รวบรวมได้เป็นไปได้อย่างไรที่จะสามารถสร้างภาพขนาดใหญ่เช่นนี้จากโปรแกรม 3 สายการบิน? มันรวบรวมไปยังเครื่องเสมือนหรือไม่? มีคำสั่งสตริปที่ฉันพลาดไปหรือไม่ มีอะไรอีกบ้างที่ทำให้เข้าใจได้ว่าเกิดอะไรขึ้น
153 rust  rust-cargo 

2
โปรแกรม Rust สามารถเข้าถึงข้อมูลเมตาได้จากแพ็คเกจ Cargo ได้อย่างไร
คุณจะเข้าถึงข้อมูลเมตาของแพ็คเกจ Cargo (เช่นรุ่น) จากรหัส Rust ในแพ็คเกจได้อย่างไร ในกรณีของฉันฉันกำลังสร้างเครื่องมือบรรทัดคำสั่งที่ฉันต้องการให้มีการตั้งค่ามาตรฐาน--versionและฉันต้องการให้การใช้งานเพื่ออ่านเวอร์ชันของแพคเกจจากCargo.tomlดังนั้นฉันไม่จำเป็นต้องรักษาไว้ในที่สอง ฉันสามารถจินตนาการได้ว่ามีเหตุผลอื่นที่บางคนอาจต้องการเข้าถึงข้อมูลเมตาของ Cargo จากโปรแกรมเช่นกัน
150 rust  rust-cargo 

1
วิธีการอ่านและเขียนไฟล์ใน Rust 1.x โดยพฤตินัยคืออะไร?
เนื่องจาก Rust เป็นของใหม่ฉันได้เห็นวิธีการอ่านและเขียนไฟล์มากเกินไป หลายคนเป็นตัวอย่างที่ยุ่งมากที่ใครบางคนสร้างขึ้นสำหรับบล็อกของพวกเขาและ 99% ของตัวอย่างที่ฉันพบ (แม้ใน Stack Overflow) มาจากงานสร้างที่ไม่เสถียรซึ่งใช้งานไม่ได้อีกต่อไป ตอนนี้ Rust เสถียรแล้วอะไรคือตัวอย่างข้อมูลที่เรียบง่ายอ่านได้ไม่ตื่นตระหนกสำหรับการอ่านหรือเขียนไฟล์ นี่เป็นสิ่งที่ใกล้เคียงที่สุดที่ฉันเคยได้รับจากสิ่งที่ใช้ได้ผลในแง่ของการอ่านไฟล์ข้อความ แต่ก็ยังไม่ได้รวบรวมแม้ว่าฉันจะค่อนข้างมั่นใจว่าฉันได้รวมทุกสิ่งที่ควรมีไว้แล้ว สิ่งนี้มาจากตัวอย่างข้อมูลที่ฉันพบใน Google+ ของทุกที่และสิ่งเดียวที่ฉันเปลี่ยนไปBufferedReaderคือตอนนี้สิ่งเก่าคือBufReader: use std::fs::File; use std::io::BufReader; use std::path::Path; fn main() { let path = Path::new("./textfile"); let mut file = BufReader::new(File::open(&path)); for line in file.lines() { println!("{}", line); } } คอมไพเลอร์บ่นว่า: error: the trait bound …
148 file-io  rust 


3
ฉันจะสร้างซิงเกิลตันระดับโลกที่เปลี่ยนรูปได้อย่างไร
วิธีใดเป็นวิธีที่ดีที่สุดในการสร้างและใช้โครงสร้างที่มีเพียงอินสแตนซ์เดียวในระบบ ใช่สิ่งนี้จำเป็นเป็นระบบย่อย OpenGL และการทำสำเนาหลาย ๆ ชุดและส่งต่อไปทั่วทุกที่จะเพิ่มความสับสนแทนที่จะบรรเทา ซิงเกิลตันจะต้องมีประสิทธิภาพมากที่สุด ดูเหมือนจะเป็นไปไม่ได้ที่จะจัดเก็บวัตถุโดยพลการบนพื้นที่คงที่เนื่องจากมีวัตถุที่Vecมีตัวทำลาย ตัวเลือกที่สองคือการจัดเก็บตัวชี้ (ไม่ปลอดภัย) บนพื้นที่คงที่โดยชี้ไปที่ heap ที่จัดสรรซิงเกิลตัน อะไรคือวิธีที่สะดวกและปลอดภัยที่สุดในการดำเนินการนี้ในขณะเดียวกันก็รักษาไวยากรณ์ให้สั้นลง
143 rust 


3
จะรวมโมดูลจากไฟล์อื่นจากโครงการเดียวกันได้อย่างไร?
การทำตามคำแนะนำนี้ฉันได้สร้างโครงการขนส่งสินค้า src/main.rs fn main() { hello::print_hello(); } mod hello { pub fn print_hello() { println!("Hello, world!"); } } ที่ฉันใช้ cargo build && cargo run และรวบรวมโดยไม่มีข้อผิดพลาด ตอนนี้ฉันกำลังพยายามแยกโมดูลหลักออกเป็นสองโมดูล แต่ไม่สามารถหาวิธีรวมโมดูลจากไฟล์อื่นได้ แผนผังโครงการของฉันมีลักษณะเช่นนี้ ├── src ├── hello.rs └── main.rs และเนื้อหาของไฟล์: src/main.rs use hello; fn main() { hello::print_hello(); } src/hello.rs mod hello { pub fn print_hello() …
131 rust 

4
จำนวนเต็ม 128 บิตของ Rust "i128" ทำงานอย่างไรบนระบบ 64 บิต
Rust มีจำนวนเต็ม 128 บิตซึ่งแสดงด้วยชนิดข้อมูลi128(และu128สำหรับ ints ที่ไม่ได้ลงชื่อ): let a: i128 = 170141183460469231731687303715884105727; Rust ทำให้i128ค่าเหล่านี้ทำงานบนระบบ 64 บิตได้อย่างไร เช่นมันคำนวณอย่างไรกับสิ่งเหล่านี้? เนื่องจากเท่าที่ฉันทราบค่านี้ไม่สามารถใส่ลงในรีจิสเตอร์ x86-64 ซีพียูได้คอมไพเลอร์ใช้ 2 รีจิสเตอร์สำหรับi128ค่าเดียวหรือไม่ หรือพวกเขาใช้โครงสร้างจำนวนเต็มใหญ่แทนแทน?

3
Copy และ Clone ต่างกันอย่างไร?
ปัญหานี้ดูเหมือนจะบอกเป็นนัยว่าเป็นเพียงรายละเอียดการใช้งานเท่านั้น ( memcpyเทียบกับ ???) แต่ฉันไม่พบคำอธิบายที่ชัดเจนเกี่ยวกับความแตกต่าง
128 rust 

2
เหตุใดจึงไม่แนะนำให้ยอมรับการอ้างอิงถึง String (& String), Vec (& Vec) หรือ Box (& Box) เป็นอาร์กิวเมนต์ของฟังก์ชัน
ฉันเขียนรหัส Rust ที่ใช้&Stringเป็นอาร์กิวเมนต์: fn awesome_greeting(name: &String) { println!("Wow, you are awesome, {}!", name); } ฉันยังเขียนโค้ดที่ใช้อ้างอิงถึงVecหรือBox: fn total_price(prices: &Vec<i32>) -> i32 { prices.iter().sum() } fn is_even(value: &Box<i32>) -> bool { **value % 2 == 0 } อย่างไรก็ตามฉันได้รับคำติชมว่าการทำเช่นนี้ไม่ใช่ความคิดที่ดี ทำไมจะไม่ล่ะ?

1
ไม่สามารถย้ายออกจากเนื้อหาที่ยืมมา / ไม่สามารถย้ายออกจากข้อมูลอ้างอิงที่แชร์ได้
cannot move out of borrowed contentฉันไม่เข้าใจข้อผิดพลาด ฉันได้รับมันหลายครั้งและฉันแก้ไขมันมาตลอด แต่ฉันไม่เคยเข้าใจว่าทำไม ตัวอย่างเช่น: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } สร้างข้อผิดพลาด: error[E0507]: cannot move out of borrowed content --> src/main.rs:31:33 | 31 | for current_char in line.into_bytes().iter() { | ^^^^ cannot move out …

3
ตัวดำเนินการรวมที่เทียบเท่ากับเวกเตอร์ของสตริงคืออะไร?
ฉันไม่พบค่าเทียบเท่า Rust สำหรับโอเปอเรเตอร์ "join" บนเวกเตอร์ของ String s ฉันมีVec<String>และฉันต้องการเข้าร่วมเป็นหนึ่งเดียวString: let string_list = vec!["Foo".to_string(),"Bar".to_string()]; let joined = something::join(string_list,"-"); assert_eq!("Foo-Bar", joined); ที่เกี่ยวข้อง: วิธีการพิมพ์ตัววนซ้ำที่คั่นด้วยช่องว่างใน Rust คืออะไร?
120 string  rust 

2
'let x = x' ทำอะไรใน Rust?
ฉันเห็นรหัสนี้ในป่า : fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap()); let fields = fields; อะไรlet fields = fields;สายทำอย่างไร ทำไมถึงมี?
117 rust 

1
วิธีที่ถูกต้องในการส่งคืน Iterator (หรือลักษณะอื่น ๆ ) คืออะไร?
รหัสสนิมต่อไปนี้รวบรวมและทำงานโดยไม่มีปัญหาใด ๆ fn main() { let text = "abc"; println!("{}", text.split(' ').take(2).count()); } หลังจากนั้นฉันก็ลองทำอะไรแบบนี้ .... แต่มันไม่ได้คอมไพล์ fn main() { let text = "word1 word2 word3"; println!("{}", to_words(text).take(2).count()); } fn to_words(text: &str) -> &Iterator<Item = &str> { &(text.split(' ')) } ปัญหาหลักคือฉันไม่แน่ใจว่าto_words()ควรมีฟังก์ชันการส่งคืนประเภทใด คอมไพเลอร์กล่าวว่า: error[E0599]: no method named `count` found for type `std::iter::Take<std::iter::Iterator<Item=&str>>` …
114 rust 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.