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

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

1
ฉันสามารถรวมข้อมูลการดีบักสำหรับรหัสของฉันโดยไม่มีแพ็คเกจเท่านั้น
เมื่อรวมข้อมูลการดีบักไบนารีของฉันจะกลายเป็น 400 MB สิ่งนี้เกิดขึ้นเนื่องจากสนิมมีข้อมูลการดีบักสำหรับการอ้างอิงทั้งหมด มีวิธีใดที่จะรวมข้อมูลการดีบักสำหรับรหัสของฉันเท่านั้น? [package] name = "app" version = "0.7.1" edition = "2018" [dependencies] actix = "*" actix-web = {version = "1.0", features = ["ssl"]} ... tokio-core = "*" tokio = "*" [profile.release] debug = true
11 rust  rust-cargo 

1
ฉันจะเรียกใช้ฟังก์ชันได้อย่างไรเมื่อตัวแปรและฟังก์ชันมีชื่อเหมือนกัน
ตัวแปรและฟังก์ชั่นมีชื่อเดียวกัน ฉันจะเรียกฟังก์ชั่นได้อย่างไร fn main() { let a = 1; fn a() -> i32 { 2 } println!("{}", a()); } คอมไพเลอร์ Rust บอกฉัน: error[E0618]: expected function, found `{integer}` กล่าวอีกนัยหนึ่งคอมไพเลอร์ Rust ไม่ได้เรียกใช้aฟังก์ชัน แต่เข้าถึงaตัวแปร
10 rust 

1
อะไรคือความแตกต่างระหว่าง `| _ | async move {} `และ` async move | _ | {} `
ลองพิจารณาตัวอย่างต่อไปนี้: main.rs use futures::executor::block_on; use futures::future::{FutureExt, TryFutureExt}; async fn fut1() -> Result<String, u32> { Ok("ok".to_string()) } fn main() { println!("Hello, world!"); match block_on(fut1().and_then(|x| async move { Ok(format!("{} is \"ok\"", x)) })) { Ok(s) => println!("{}", s), Err(u) => println!("{}", u) }; } Cargo.toml [dependencies] futures = "^0.3" ฉันถามเกี่ยวกับการแสดงออกแทน|x| async move …
10 rust 

1
จะใช้ Rust async fn ที่ใช้การอ้างอิงเป็นการติดต่อกลับได้อย่างไร
async fnส่งคืนชนิดที่ไม่ระบุชื่อที่ใช้Futureดังนั้นหากเราต้องการใช้เป็นโทรกลับเราต้องแปลงค่าส่งคืนเป็นวัตถุลักษณะ ฉันพยายามเขียนฟังก์ชั่นการทำเช่นนี้ แต่ฉันมีปัญหาตลอดชีวิต async fnจะคืนค่าอายุการใช้งานของพารามิเตอร์ทั้งหมดดังนั้นลายเซ็นของการติดต่อกลับยังต้อง ฉันจะเพิ่มอายุการใช้งานในค่าส่งคืนของการโทรกลับได้อย่างไร use futures::future::{Future, FutureExt, LocalBoxFuture}; type Context = (); type AsyncCb = Box<dyn for<'r> FnOnce(&'r Context) -> LocalBoxFuture<'r, ()>>; fn normalize_async_cb<Fut: Future<Output = ()>>(f: for<'r> fn(&'r Context) -> Fut) -> AsyncCb // how to add 'r for Fut? ^^^ { let cb = move …
10 rust  async-await 

1
ทำไมการเพิ่มความหมายที่สองทำให้ไม่สามารถโต้แย้งได้
ฉันเจอปัญหานี้เมื่อพยายามเพิ่มความหมายAdd<char> for Stringลงในไลบรารีมาตรฐาน แต่เราสามารถทำซ้ำได้อย่างง่ายดายโดยไม่ต้องมีผู้ควบคุม shenanigans เราเริ่มต้นด้วยสิ่งนี้: trait MyAdd<Rhs> { fn add(self, rhs: Rhs) -> Self; } impl MyAdd<&str> for String { fn add(mut self, rhs: &str) -> Self { self.push_str(rhs); self } } เรียบง่ายพอสมควร ด้วยวิธีนี้รหัสต่อไปนี้รวบรวม: let a = String::from("a"); let b = String::from("b"); MyAdd::add(a, &b); ทราบว่าในกรณีนี้การแสดงออกอาร์กิวเมนต์ที่สอง ( &b) &Stringมีชนิด จากนั้นจะถูกบีบอัด&strและการเรียกใช้ฟังก์ชันทำงาน …

1
ดีเซลควรถูกเรียกใช้โดยใช้ซิงค์นักแสดง, actix_web :: web :: block หรือ futures-cpupool?
พื้นหลัง ฉันกำลังทำงานกับแอปพลิเคชัน actix-web โดยใช้ดีเซลผ่าน r2d2 และไม่แน่ใจว่าจะสร้างข้อความค้นหาแบบอะซิงโครนัสได้ดีที่สุดได้อย่างไร ฉันพบตัวเลือกสามตัวที่ดูเหมือนสมเหตุสมผล แต่ไม่แน่ใจว่าตัวเลือกใดดีที่สุด โซลูชั่นที่เป็นไปได้ ซิงค์ดารา สำหรับหนึ่งฉันสามารถใช้ตัวอย่าง actixแต่มันค่อนข้างซับซ้อนและต้องมีการสร้างแผ่นสำเร็จรูปสำเร็จรูปอย่างยุติธรรม ฉันหวังว่าจะมีทางออกที่สมเหตุสมผลมากกว่านี้ Actix_web::web::block เป็นอีกตัวเลือกหนึ่งที่ฉันสามารถใช้actix_web::web::blockเพื่อตัดฟังก์ชันการสืบค้นของฉันในอนาคต แต่ฉันไม่แน่ใจเกี่ยวกับประสิทธิภาพของสิ่งนี้ คิวรีนั้นทำงานในระบบ Tokio เดียวกันหรือไม่ จากสิ่งที่ฉันสามารถหาในแหล่งที่มาของมันจะสร้างการตั้งกระทู้ในพื้นฐาน threadpool นั่นเป็นปัญหาหรือไม่? หากฉันอ่านรหัสถูกต้อง r2d2 จะบล็อกเธรดเมื่อรับการเชื่อมต่อซึ่งจะบล็อกส่วนหนึ่งของคอร์แอกทีฟเว็บหลัก เช่นเดียวกับการสืบค้นฐานข้อมูล นี่จะบล็อก actix-web ทั้งหมดหรือไม่ถ้าฉันทำแบบสอบถามมากกว่าฉันมีเธรดในกลุ่มนั้น ถ้าเป็นเช่นนั้นปัญหาใหญ่ Futures-cpupool สุดท้ายเดิมพันที่ปลอดภัยที่อาจมีค่าใช้จ่ายบางส่วนที่ไม่จำเป็นเป็นฟิวเจอร์ส-cpupool ปัญหาหลักคือสิ่งนี้หมายถึงการเพิ่มลังอื่นให้กับโครงการของฉันแม้ว่าฉันจะไม่ชอบแนวคิดของซีพียูหลายตัวที่ลอยอยู่รอบ ๆ ในแอปพลิเคชันของฉันโดยไม่จำเป็น เนื่องจากทั้ง r2d2 และดีเซลจะปิดกั้นมีสิ่งที่น่าประหลาดใจจำนวนมากในที่นี่ ที่สำคัญที่สุดอย่าแชร์ cpupool นี้กับสิ่งใด ๆ ที่ไม่ได้ใช้พูล r2d2 เดียวกัน (เนื่องจากเธรดทั้งหมดที่สร้างขึ้นอาจบล็อกรอการเชื่อมต่อ r2d2 ล็อคพูลทั้งหมดเมื่อมีงาน) ประการที่สอง (ชัดเจนขึ้นเล็กน้อย) …

1
คุณเปิดใช้งานคุณลักษณะ "ลังไม้" ของ Rust ได้อย่างไร
rand::SmallRngฉันพยายามที่จะใช้ เอกสารกล่าวว่า PRNG นี้เป็นคุณลักษณะที่รั้วรอบขอบชิด : small_rngใช้คุณต้องเปิดใช้งานคุณลักษณะลัง ฉันค้นหามาแล้วและไม่สามารถหาวิธีเปิดใช้งาน "คุณสมบัติลัง" ได้ วลีนี้ไม่ได้ใช้แม้แต่น้อยในเอกสารสนิม นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้: [features] default = ["small_rng"] แต่ฉันได้รับ: คุณสมบัติdefaultรวมถึงsmall_rngซึ่งไม่ใช่การพึ่งพาหรือคุณสมบัติอื่น เอกสารผิดหรือมีบางอย่างขาดหายไปหรือไม่?

2
กำลังส่งการอ้างอิงฟังก์ชันที่สร้างตัวชี้ที่ไม่ถูกต้อง
ฉันกำลังติดตามข้อผิดพลาดในรหัสบุคคลที่สามและฉัน จำกัด ให้แคบลงเหลือบางอย่างตามลำดับ use libc::c_void; pub unsafe fn foo() {} fn main() { let ptr = &foo as *const _ as *const c_void; println!("{:x}", ptr as usize); } วิ่งบนเสถียร 1.38.0 นี้จะพิมพ์ตัวชี้ฟังก์ชั่น แต่เบต้า (1.39.0-beta.6) และส่งคืน '1' ทุกคืน ( สนามเด็กเล่น ) _การอนุมานคืออะไรและทำไมพฤติกรรมจึงเปลี่ยนไป ฉันถือว่าวิธีที่ถูกต้องในการส่งแบบนี้จะเป็นไปได้foo as *const c_voidแต่นี่ไม่ใช่รหัสของฉัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.