七爪源码Rust中的工作区继承
看一下 Rust 1.64 的新特性
Rust 1.64 今天已经到来,这个版本将影响网络上数百个各种类型的项目。
这样做的原因是它具有一个关键特性,任何项目都被划分为大量不同的 crate。 这个特性是工作空间继承,它允许我们在 crate 之间共享版本号或元数据字段等字段。 Cargo.toml 文件终于开始遵循 DRY 原则。
告别复制粘贴许可证和作者
任何人在创建新 crate 时要做的第一件事就是打开前一个 crate 的清单并复制两者之间共有的所有部分 - 即使它们在同一个工作区中。
例如,在我用来展示代码示例的存储库中,您可以看到我曾经在每个 crate 中拥有相同的 authors 密钥。 现在我可以去掉所有的重复。 如何? 首先,使根 Cargo.toml 如下所示:[package] name = "sotoestevez_medium" version = "0.1.0" [workspace] members = ["add_trait", "beginning_tips", "generify_with_compiler_errors", "modules", "scoped_threads" ] [workspace.package] edition = "2021" authors = ["Soto Estévez "] description = "Demos of the articles at https://medium.com/@sotoestevez" documentation = "https://medium.com/@sotoestevez" readme = "./README.md" homepage = "https://www.sotoestevez.dev" repository = "https://github.com/kriogenia/medium" license = "MIT OR Apache-2.0"
在这个新版本中,在 [workspace.package] 下,您可以定义要声明为工作区默认值的 package 部分的一些键。
这将允许工作区 crate 选择加入并继承那些相同的部分,否则会被复制(在此示例中,它们是您在 workspace.members 中看到的存储库的所有 crate)。
现在,要使用这些默认值,我们只需将它们调用到其他清单中。 例如,现在是 add_trait/Cargo.toml:[package] name = "add_trait" version = "0.1.0" edition.workspace = true authors.workspace = true description = "Dissecting Rust Traits to Learn Their Secrets" documentation = "https://betterprogramming.pub/dissecting-rust-traits-to-learn-their-secrets-839845d3d71e" homepage.workspace = true repository.workspace = true license.workspace = true
add_trait 的清单现在将继承我们在根目录中为我们使用 {key}.workspace 带来的键设置的值,例如 edition 或 authors。另请参阅我们如何忽略那些我们不想带来的内容,例如自述文件,因为这个箱子没有;或描述,这是不同的,我们是压倒一切的。
有了这个新清单,所有项目将始终使用相同的版本,并且无需在每个项目中手动更新诸如更改许可证之类的更新。
保持版本同步
但是我们可以利用这种新的继承来做另一件事,这将是商业项目的关键。这是使用继承来授予依赖项之间的同步性。为此,我们可以采用与 [package] 相同的方法,但使用 [workspace.dependencies] 和典型的依赖声明(但我们不能在这里使用 optional)。
例如,将其添加到根 Cargo.toml 会将工作区默认版本和功能设置为这三个依赖项:[... rest of the manifest ] [workspace.dependencies] num = { version = "0.4", default-features = false } vector2d = "2.2" rand = "0.8.5"
现在,在generify_with_compiler_errors,我们可以将这些依赖项与工作区版本和功能一起使用,并在下面的示例中在宣言中声明它们:[package] name = "generify_with_compiler_errors" version = "0.1.0" edition = "2021" authors.workspace = true [dependencies] num = { workspace = true, default-features = true } vector2d.workspace = true [dev-dependencies] rand = { workspace = true, features = [ "log" ] }
看看我们如何在工作区中以相同的方式声明 vector2d,但是我们如何覆盖 num 依赖项,因为这个 crate 需要使用默认功能,我们只使用相同的版本。 这个 crate 不使用 rand,但我添加它是为了展示如何在声明的特性之上声明特性,并将依赖项不仅引入 [dependencies],还引入 [dev-dependencies] 和 [build-dependencies]。
关注七爪网,获取更多APP/小程序/网站源码资源!
警惕!这种奶茶杯千万不要碰!最近市场上出现了外包装成奶茶杯星球杯可乐罐等的玩具,受到了不少年轻人的欢迎,光看下面的图,你是不是以为是什么好玩好吃的新产品,并且萌生试试看的想法?千万打住!这个想法很危险!这些五
0128观赛记法甲洛里昂VS雷恩西甲阿尔梅里亚VS西班牙人相信看过前几天对阿尔梅里亚的点评的朋友对昨晚3比1胜西班牙人的赛果不会感到什么意外一会我们再来点评法国甲组联赛的洛里昂和雷恩20230123记巴伦西亚人员鼎盛兵强马壮但却欠缺一名中
点名辅佐詹姆斯!拒绝3000万合同,124悍将成湖人夺冠最后拼图湖人队通过交易得到八村塁这名日本球员之后他们并没有停止对阵容的补强,据了解,湖人队现在依然渴望得到更多出色的球员,并且他们打算送走球队的后卫贝弗利,然而就在这个时候,骑士队的后卫则
印尼羽毛球大师赛刘雨辰欧烜屹晋级四强1月27日,刘雨辰欧烜屹(右)在比赛中庆祝得分。新华社记者徐钦摄当日,在印度尼西亚雅加达举行的2023年印尼羽毛球大师赛男子双打四分之一决赛中,中国组合刘雨辰欧烜屹以2比1战胜印度
爆冷!欧文空砍40分篮网被活塞击败,塔图姆3514绿军三连败篮网背靠背主场迎战活塞,全场被对手压制,最终以122130吞下两连败。双方数据对比上,活塞12次抢断大大领先于篮网的5次,也因此让篮网付出高达17次的失误,篮网的防守出现问题,失败
哪位阿根廷国脚落选百大球星最委屈?不是莫利纳,也非阿库尼亚北京时间昨天晚上,卫报早些时候公布了2022年百大球员完整排名,此前夺得世界杯冠军的阿根廷有11人入选,分别为梅西(第1)大马丁(第20)小恩佐(第21)阿尔瓦雷斯(第32)迪马利
春节在三亚,并没有后悔九派新闻发表的春节来三亚,他们后悔了,火上了热榜。作为一名春节期间在三亚旅行亲身体验的驴友来说,春节在三亚,整体感觉很良好,并没有后悔。九派新闻的春节来三亚,他们后悔了这篇文章,靠
西安,位列第一!这个春节,西安彻底火了春节假期转眼进入尾声这个假期全国旅游消费市场一片火热经文化和旅游部数据中心测算,今年春节假期全国国内旅游出游3。08亿人次,同比增长23。1,恢复至2019年同期的88。6。实现国
大A股市既是世间炼狱,也是人间天堂呢股票炒股心得今日头条大A股市既是世间炼狱,也是人间天堂呢今天是1月27日农历的正月初六,寓意六六大顺哈,这几天跟亲戚朋友们交流最多的一个话题是大A股票和炒股赚钱亏损这些话题。儿时的
创业者大多数败在格局太大本文为日更第四十二篇原创作者柴公子配图来源视觉中国当一些人看到这个标题之时,肯定会有不少人会质问我?不是都说创业者需要格局大吗?怎么格局太大还是导致企业倒闭,创业者失败的原因呢?在
专家的建议又来了专家建议对50万以上存款征收利息税专家建议50万家庭存款征收高额利息税,以此刺激消费看到专家的这个建议,我有些抑制不住的情绪急需表达!以目前的消费水平来看,存款达到50万的家庭,也