先声明,不是黑RUST哦,只是说说RUST中最不讨喜的一些东西而已。 对我个人来说,最讨厌RUST的宏功能,为什么呢?因为宏功能让RUST的各种库里出现了各种“方言”,RUST的宏功能很强大这个不假,但是这个功能的出现,使得本来就庞杂的RUST进一步出现了更多根本就不在RUST语言里面的“方言”语法,不同的包里不同的方言不同的用法,这会导致RUST的进一步的碎片化,连IDE都无法有效识别宏及里面的语句,RUST本来就繁杂难学,内容众多,宏又进一步加剧了这种情况,使得阅读RUST代码会进一步不直观,所以我最讨厌RUST的宏。 比如说在tokio里,会有这样的语法
#[tokio::main] pub async fn main() -> Result<()> { Ok(()) }
想这样的语句需要看tokio的文档才能知道它输出的完全体大概是啥?好不好?挺好,能少输入几行代码。好不好?不好,我得先理解宏,再结合tokio得文档代码示例,才能确切得知道其代表得完整含义。 总体上来说,我认为RUST得宏功能既是一个神器,却也是一个巨坑,很讨厌。
1
共 7 条评论, 1 页
评论区
写评论cargo-expand了解一下
宏还行,过程宏我觉得挺好的,是好文明。声明宏如果过度使用会感觉会有点不喜欢。
另外不喜欢的地方是不支持函数参数的默认值,但也不是特别影响我用它。
为什么要知道一个别人写的宏展开之后是啥?你要理解的应该是宏这个工具本身怎么用,至于别人库里的宏展开之后是什么代码,我才不想去理解,我只想看看文档知道这个宏是干嘛的,怎么用就OK了。
人家给你封装一个宏,就是简化使用的,你还花时间去看生成了什么代码,只能说本末倒置了,除非你是要研究写法,不然不推荐看宏怎么写的,最多从文档里知道一下几个注意点即可。tokio文档里就说tokio::main这个宏会把main函数里的代码包裹到一个runtime里运行,知道这个就够了,俺寻思C语言里宏比rust更黑暗,还不是照样用的飞起,嵌套N层的黑魔法宏多得是,跟迷宫一样,用C宏写的DSL也不少。也没几个教程要你去理解具体生成了啥代码吧,都是教你怎么用。
没有好恶,只有难易。Rust语言的每一下特征都是经过深思熟虑,不得以才添加的。有的特征是给业务开发人员用的,有的特征是给系统开发人员用的。从旁观到锈粉,你会喜欢Rust的每一个特征。
可不可以理解为Java中的注解 比方说常见的SpringBoot 框架中的一些注解
任何语言都有学习门槛,如果你觉得不喜欢哪个部分,要么不使用这部分,要么尝试去改善。
Rust 的宏非常强大,只不过现在 RA 在宏方面没能提供完善的提示。
而且,如果 Rust 的宏真的有那么糟糕,早就被摒弃了。
大家都聚到 Rust 圈子了,自学水平能差到哪里去呢?
Take it easy. 与其说你在这吐槽宏或者其他什么知识点,还不如平常心去看待。学不下去就跳过啊,有决心学下去就认认真真地。
有文档就没问题,tokio的宏都有文档说明的,查询起来也很方便的,crates网站上看一下就行了。
用了宏,代码更简洁,不是好事么?有利有弊。