rust-zero-cost
4
总安装量
3
周安装量
#49245
全站排名
安装命令
npx skills add https://github.com/huiali/rust-skills --skill rust-zero-cost
Agent 安装分布
trae-cn
2
claude-code
2
codebuddy
2
trae
1
antigravity
1
Skill 文档
é¶ææ¬æ½è±¡ä¸æ³å
æ ¸å¿é®é¢
éè¦ç¼è¯æ¶å¤æè¿æ¯è¿è¡æ¶å¤æï¼
éæ©æ£ç¡®çæ½è±¡å±æ¬¡ç´æ¥å½±åæ§è½ã
æ³å vs Trait Object
| ç¹æ§ | æ³å (static dispatch) | trait object (dynamic dispatch) |
|---|---|---|
| æ§è½ | é¶å¼é | vtable æ¥æ¾ |
| 代ç å¤§å° | å¯è½è¨è | æ´å° |
| ç¼è¯æ¶é´ | æ´é¿ | æ´ç |
| çµæ´»æ§ | ç±»åå¿ é¡»å·²ç¥ | è¿è¡æ¶å³å® |
| 弿éå | 䏿¯æ | Vec<Box<dyn Trait>> |
使¶ç¨æ³å
// ç±»åå¨ç¼è¯æ¶å·²ç¥
fn process<T: Processor>(item: T) {
item.process();
}
// è¿ååä¸ç±»å
fn create_processor() -> impl Processor {
// è¿åå
·ä½ç±»å
}
// å¤ä¸ªç±»ååæ°
fn combine<A: Display, B: Display>(a: A, b: B) -> String {
format!("{} and {}", a, b)
}
使¶ç¨ trait object
// è¿è¡æ¶å³å®ç±»å
trait Plugin {
fn run(&self);
}
struct PluginManager {
plugins: Vec<Box<dyn Plugin>>,
}
// 弿éå
let handlers: Vec<Box<dyn Handler>> = vec![
Box::new(HttpHandler),
Box::new(GrpcHandler),
];
对象å®å ¨è§å
// â 䏿¯å¯¹è±¡å®å
¨ç
trait Bad {
fn create(&self) -> Self; // è¿å Self
fn method(&self, x: Self); // åæ°æ Self
}
// â
对象å®å
¨
trait Good {
fn name(&self) -> &str;
}
impl Trait vs dyn Trait
// impl Traitï¼è¿åå
·ä½ç±»åï¼éæååï¼
fn create_processor() -> impl Processor {
HttpProcessor
}
// dyn Traitï¼è¿å trait objectï¼å¨æååï¼
fn create_processor() -> Box<dyn Processor> {
Box::new(HttpProcessor)
}
æ§è½å½±å
// æ³åï¼æ¯ä¸ªç±»åçæä¸ä»½ä»£ç
fn process<T: Trait>(item: T) {
item.method();
}
// ç¼è¯åï¼
// fn process_Http(item: Http) { ... }
// fn process_Ftp(item: Ftp) { ... }
// trait objectï¼åä¸è·¯å¾
fn process(item: &dyn Trait) {
item.method(); // éè¿ vtable è°ç¨
}
常è§é误
| é误 | åå | è§£å³ |
|---|---|---|
| E0277 | ç¼ºå° trait bound | æ·»å T: Trait |
| E0038 | trait object ä¸å®å ¨ | æ£æ¥å¯¹è±¡å®å ¨è§å |
| E0308 | ç±»åä¸å¹é | ç»ä¸ç±»åæç¨æ³å |
| E0599 | æªæ¾å°å®ç° | å®ç° trait ææ£æ¥çº¦æ |
ä¼åçç¥
- çç¹ä»£ç ç¨æ³å – æ¶é¤å¨æååå¼é
- æä»¶ç³»ç»ç¨ dyn – çµæ´»æ§ä¼å
- å°éåç¨æ³å – é¿å Box åé
- 大éåç¨ dyn – åå°ä»£ç è¨è