rust 的模块化太繁琐

2021-02-26 11:42:25 +08:00
 syaka

rust 的模块化是在太繁琐:

  1. 学习了 npm 的糟粕,每个文件当作一个模块。尤其是 xxx/mod.rs 简直了。
  2. crate 内的模块还需要在 lib.rs 声明才能使用。

这两点导致 crate 里导出充斥着无意义的 mod.rs ,而 mod.rs 的内容全是无意义的 pub mod xxx 。

跟 Go 的模块化比起来,rust 的模块化设计真的是糟粕。

3799 次点击
所在节点    Rust
22 条回复
Thetruechar
2021-02-26 11:59:48 +08:00
很喜欢这样的引战帖
Leviathann
2021-02-26 12:08:42 +08:00
反正我觉得官方书的模块化那章写的很烂
最后一节忽然说文件夹也是 path 的一部分
也没提 lib 和 binary 怎么交互
试了下才知道把 lib 当成外部 package 一样用 cargo 文件夹名才能导进来
GTim
2021-02-26 12:13:22 +08:00
nnd. 所有权和所有权转让、指针、智能指针、装箱等等才是大头啊,这几个你中有我,我中有你,不来回个 50 遍根本理解不了
HeapOverflow
2021-02-26 12:14:35 +08:00
一看就是没被 c++虐过
CatCode
2021-02-26 12:19:21 +08:00
hunk
2021-02-26 12:25:52 +08:00
花了几天时间看 rust 和 go,准备先从 go 学起。
有个需要大并发的需求.
palfortime
2021-02-26 12:35:53 +08:00
2018 可以不用 mod.rs 。写 mod xxx,有什么不好,这样更明确清晰。
fakeshadow
2021-02-26 17:30:54 +08:00
那如果让你知道了 pub(self/super/crate) 是不是会更抓狂?
syaka
2021-02-26 18:37:36 +08:00
@palfortime 没发现一个文件作为一个 mod 有什么优点,现在的模块化语法太繁琐了。
syaka
2021-02-26 18:38:35 +08:00
@Thetruechar 非引战,实际项目中实在繁琐的不行,更理解不了为什么一个文件作为一个 mod 有什么收益。
syaka
2021-02-26 18:39:14 +08:00
@GTim 所有权是精髓,但是现在的模块化方案真的是糟粕
syaka
2021-02-26 18:39:32 +08:00
@HeapOverflow 还真是,人生苦短,我用 Golang
syaka
2021-02-26 18:40:18 +08:00
@CatCode 我已经明白了模块化是怎么回事,只是实在不理解如此繁琐的设计有什么必要
maxat20xx
2021-02-26 19:21:11 +08:00
@GTim 不能同意更多…
CatCode
2021-02-26 20:05:58 +08:00
@syaka 可能是早期的设计吧。而即使到了 2018 edition 也不便于改太狠,毕竟兼容性还是要考虑的。
有的东西,在早期可能是当时很好的设计。但是随着技术发展,更好的设计可能会出现,然后在对比原来的设计,就发现原来的设计不是那么美好。
Jirajine
2021-02-26 20:26:31 +08:00
我到觉得两者没太大优劣之分。
rust 的单文件模块,一个模块代码很多的时候文件就会太长,不得不分模块。而 go 就可以用多个文件写同一个模块。
而 go 用目录分模块,模块很多一个模块代码很少的时候也会很麻烦,并且文件名不体现模块名。

但是 rust 整个的包管理 crate 系统要更好,lib 的归 lib,bin 的归 bin,比 go 都混到一起更清晰。
plko345
2021-02-27 08:51:18 +08:00
喜欢 rust,但这点也同意楼主的观点
syaka
2021-02-27 15:37:02 +08:00
@Jirajine go 用一个目录作为一个模块(和 Java 一样),一般是目录名体现模块名。
cargo 是包管理工具,这一点确实比 go modules 好。
poly000
2021-04-05 07:47:22 +08:00
感觉可以一个 lib 一个 crate 这样 cargo 支持多 crate 管理
Nugine0
2021-04-28 11:32:32 +08:00
你可以在一个文件内写多个模块,也可以用 include! 把多个文件合成一个模块,还可以用 #[path="xxx.rs"] 把模块指向不同名的文件。

lib.rs 里还能一次性写完整个项目的模块树,完全不需要额外的 mod.rs

不喜欢默认模块配置的话,有很多比较方便的方法修改行为。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/756431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX