在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的噩梦