在rust中令人印象深刻的三大【编译时】“条件”处理
- 条件编译
- 根据
cargo features和#[cfg(feature = "***")]元属性,有条件地在编译时包含或排除一部分代码块。
- 根据
- 条件【成员方法】实现 [例程]
- 根据
impl块【实现类Self】的【泛型类型参数】是否满足trait bound,有条件额外地实现(几个)成员方法。 - 若【泛型类型参数】的“实参”不满足此
trait bound,那么你从【实现类】可就点不出额外的成员方法哟!
- 根据
- 条件
trait实现 [例程]- 这有一个酷炫的名字
blanket implementation(通用实现)。 - 根据
impl块【实现类Self】的【泛型类型参数】是否满足trait bound,有条件额外地给【实现类】再实现(一个)trait。 - 若【泛型类型参数】的“实参”不满足此
trait bound,那么【实现类】可就不能被静态分派为此额外的trait哟!
- 这有一个酷炫的名字
搞懂后两种编译时条件处理,看这一个例程就足够了。
我现在对rust最大的感觉就是:
rust 是由许多cpp牛人渐进式地将【cpp的最佳开发实践经验】代码化入rustc进而被拼搭出来的语言。这很类似于我自已手写eslint规则:一边实践,一边踩坑,一边教条地总结归纳,一边将经验“代码化”入eslint规则的实现代码里。于是,没有好几十页大部头儿的教条编程规范。相反,一切都被收敛于自定义eslint规则里。然后,只要开启eslint规则,就站在了我之前所有沉淀之上了。
1
共 5 条评论, 1 页
评论区
写评论搞懂后两种编译时条件处理,看“这一个例程”就足够了,“这一个例程”打不开了,很需要。
Rust的代码生成也是非常不错的,也就是C++那边引以为傲的meta-programming,但是C++就是搞不出像serde这样的东西。Rust直接就可以让你参与编译期的AST生成,而不是C++那种社区研究出来的奇怪技巧。
见解很深刻。
是的,是从C++过度来的,可以这样想像,C++的template只成就了一些库,而rust在编写全世界最大的泛型库。泛型是rust最流行的模式。
条件编译应该是js的噩梦