< 返回我的博客

爱国的张浩予 发表于 2022-03-23 09:32

rust中令人印象深刻的三大【编译时】“条件”处理

  1. 条件编译
    • 根据cargo features#[cfg(feature = "***")]元属性,有条件地在编译时包含或排除一部分代码块。
  2. 条件【成员方法】实现 [例程]
    • 根据impl块【实现类Self】的【泛型类型参数】是否满足trait bound,有条件额外地实现(几个)成员方法。
    • 若【泛型类型参数】的“实参”不满足此trait bound,那么你从【实现类】可就点不出额外的成员方法哟!
  3. 条件trait实现 [例程]
    • 这有一个酷炫的名字blanket implementation(通用实现)。
    • 根据impl块【实现类Self】的【泛型类型参数】是否满足trait bound,有条件额外地给【实现类】再实现(一个)trait
    • 若【泛型类型参数】的“实参”不满足此trait bound,那么【实现类】可就不能被静态分派为此额外的trait哟!

搞懂后两种编译时条件处理,看这一个例程就足够了。

我现在对rust最大的感觉就是:

rust 是由许多cpp牛人渐进式地将【cpp的最佳开发实践经验】代码化入rustc进而被拼搭出来的语言。这很类似于我自已手写eslint规则:一边实践,一边踩坑,一边教条地总结归纳,一边将经验“代码化”入eslint规则的实现代码里。于是,没有好几十页大部头儿的教条编程规范。相反,一切都被收敛于自定义eslint规则里。然后,只要开启eslint规则,就站在了我之前所有沉淀之上了。

评论区

写评论
c5soft 2023-03-17 08:38

搞懂后两种编译时条件处理,看“这一个例程”就足够了,“这一个例程”打不开了,很需要。

Krysme 2022-04-07 14:57

Rust的代码生成也是非常不错的,也就是C++那边引以为傲的meta-programming,但是C++就是搞不出像serde这样的东西。Rust直接就可以让你参与编译期的AST生成,而不是C++那种社区研究出来的奇怪技巧。

Mike Tang 2022-03-25 14:40

见解很深刻。

marvinguo 2022-03-24 18:35

是的,是从C++过度来的,可以这样想像,C++的template只成就了一些库,而rust在编写全世界最大的泛型库。泛型是rust最流行的模式。

kidd808 2022-03-23 11:26

条件编译应该是js的噩梦

1 共 5 条评论, 1 页