七爪源码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/小程序/网站源码资源!
从富士康员工徒步艰难返乡路,看当前苹果手机代工厂严重内卷现象富士康员工徒步艰难返乡,表面上看是企业管理出了问题,人文关怀缺失,缺乏温度等,但是,从深层次来看,这正折射出了目前苹果手机代工厂之间的竞争,面临着严重内卷现象。众所周知,目前的手机
欧文给二女儿庆生,15岁亭亭玉立!4个孩子继承颜值,养眼家族还记得迈克尔欧文吗?这位昔日三狮军团的追风少年,如今一晃也都43岁了,不仅如此,他的孩子们也都纷纷长大,其中大女儿吉玛目前在英国人气颇高,是真人秀节目的红星,而二女儿艾米丽(Emi
与时间赛跑科学家正在寻找澳大利亚猴面包树上的古代土著雕刻对于澳大利亚原住民来说,猴面包树上的雕刻与岩石艺术一样重要。现在,我们正在与时间赛跑以便在这些杰出的遗产树死掉之前记录下树皮上的古代艺术。在一场跟时间的赛跑中,在地球上一些最崎岖的
国舜股份国舜全生命周期开发安全解决方案来源鑫智奖第四届金融数据智能优秀解决方案评选获奖单位国舜股份荣获奖项网络信息安全创新优秀解决方案一解决方案简介国舜全生命周期安全开发解决方案,以需求设计编码测试部署等开发阶段为主要
千万要看好自己的孩子,孩子的一个行为可能就会有生命危险在10月28日浙江嘉兴有一位8个月大的女婴误吞贴纸后,一直不停的干呕,孩子也是不停的抠嗓子眼,妈妈幸会及时发现,采用了海姆立克方法,40秒内成功挽救了一个新生命。这位妈妈其实是一名
夜读生命的化妆主播读经典,陪您说晚安。各位好,这里是闪电夜读,我是武城融媒主播灵志。今晚,为您分享林清玄的作品生命的化妆。生命的化妆文林清玄我认识一位化妆师。她是真正懂得化妆,而又以化妆闻名的。
有个异性知己的感觉,真的很好在人生当中,有个异性知己,会是一种什么样的感觉?那种感觉,很特别,很舒服,因为有了这样的一个异性知己,内心有所安放,情绪得以释放,总之,就是感觉很好!但是,千万别想歪了,绝对不是你
夫妻和睦,才是一家之福夫妻和睦,一家之福。一家人之间和和睦睦,这是家庭最大的幸福,一家人没有什么比和睦更重要的啦,和气生财,和和气气。不要夫妻千担粮,只要夫妻好商量。夫妻能够走到一起,真的不容易,不论是
催眠能看前生吗?作者徐敬东最近有网友问听说催眠能看前生?觉得很有意思,可以帮我催眠看一看前生吗?若问前生事且看今生受其实你不必追求这个境界,既然命运安排,让我们想不起来,那就没必要一定去看见。若问
受骗记声泪俱下的电报稿浮生若梦,坎坎坷坷,壅滞半生。有欢欣有忧伤有意气昂扬也有消沉绝望,林林总总经历颇多,酸甜苦辣,可谓五味俱全。沉淀日久,一腔块磊,心中淤积。转瞬间鹤发槁颜,华鬓不耐秋,闲暇之时,亦顾
杨绛先生的经典名言抄书打卡第八天07认识到自己的不好是个很痛苦的过程。我猜想圣人苦修苦练,只从这点做起。一个人刻意修身求好,才会看到自己的不好。然后,出于羞愧,才会悔改。悔了未必就会改过来。要努力不懈,才会改得好