Rust 它凭啥这么难?学习路线这么陡峭。。。。

2021-03-19 09:22:41 +08:00
 nickyang897897
19673 次点击
所在节点    Rust
102 条回复
typetraits
2021-03-19 09:44:08 +08:00
Rust 适合有 C++基础的人学

第一天用的时候各种报错,到第二天突然感觉豁然开朗,有种语言就该这么设计的感觉。昨天写 JavaScript 时顺手写了个 const x = if {} 一直报错,看了半天才发现问题


对我个人来说最大的缺点是还需要写分号
yamasa
2021-03-19 09:47:36 +08:00
那要看你之前主要用的啥。
no1xsyzy
2021-03-19 09:53:39 +08:00
Rust 是给原本写 C/C++ 的人用的。
既不想放弃 C/C++ 手动管理内存的性能优势,又想要避免手动管理内存的风险
结果就很简单:编译器帮你作内存管理的 Code Review
而为了实现这一目的,填充了大量的让编译器能理解的标注。
missdeer
2021-03-19 10:00:06 +08:00
几年前 Rust 刚出来的时候我看了一下,也觉得挺难的,直接被劝退了
前些天偶然在 B 站看到一个微软 MVP 做的入门教程,发现也不难,除了语法糖多,也就多了个内存管理和生命周期的新概念
abcbuzhiming
2021-03-19 10:07:36 +08:00
我个人对 Rust 的看法是,它其实并没有降低复杂性(因为它要操作内存,并且需要极致性能),它只是把复杂性从开发者那里,移动到了编译器的变异阶段,所以 rust 的编译速度特别慢,而且它的特性不比 C++少多少
xzh654321
2021-03-19 10:09:34 +08:00
@missdeer 可以分享一下课程吗
solaya
2021-03-19 10:12:29 +08:00
搞过 C++的学起来还好
676529483
2021-03-19 10:12:56 +08:00
我以前也这么觉得,后来看了 c++,发现 rust 就是 c++的 move+RILL+引用,就没那么难了。当然,放弃了指针也带来了很多不便,最关键找工作没用。。。
anonydmer
2021-03-19 10:13:20 +08:00
春节时候学习了一下 Rust,发现难就难在它那个内存管理和生命周期的概念上;但是编译器都帮你搞定了几乎;所以基本上只要代码能通过编译,就没问题了
yannxia
2021-03-19 10:13:59 +08:00
Rust 的 lifetime 属于好理解,写起来就有点脑壳痛。学习曲线复杂还是得看 Haskell 。Rust 学习的背景大多数是因为之前不是搞 CPP 的,如果从 Java / Go 转过来会在内存管理上卡一下,如果是从 C 转过来,就会在复杂的语言特性卡一下。说起来还是 CPP 本身的复杂度换了个马甲。
XIVN1987
2021-03-19 10:14:38 +08:00
因为有且仅有它和 C++追求“zero cost abstraction”

既想要没有性能损失,还想要高级的抽象能力,,那肯定要损失点儿什么,,总不能只有好处、没有代价吧,,天下哪有这么好的事儿
h82258652
2021-03-19 10:16:37 +08:00
确实是很难,生命周期这东西我就没一次可以一次性写对的,总是被编译器教做人
宏定义这玩意到现在还是学不会
然而我觉得 Rust 这种才是未来语言的发展方向,完整的 tool chain ( cargo 、rustfml 、rustdoc ),ownership 使得不需要 GC 的存在,不存在 null 也就不存在 NullPointerException,灭掉 Exception 改为 Result 这样就不会像 C#、Kotlin 这种调用第三方不知道里面会扔什么异常的情况( Java 有显式异常所以还好)。
trait 我目前还是保留意见,没有其它语言中 extends 这种感觉还是怪怪的,但数据字段与方法实现的完整分离是个好设计。
目前对于 Rust 来说最大问题就是生态,async 、await 标准确定下来才没多久,可用的 GUI 框架也没有( iced 试过,离实际生产差太多了)。再过个 5 年或者 10 年应该就会好很多,现在学完全就是投资未来。

PS:个人想法,要是 Rust 能加上 C# 的表达式树那就完美了
yazoox
2021-03-19 10:21:46 +08:00
再难能有 c++难?
c++编译那一堆莫名其妙的 compile or linking errors,那才是让人崩溃呢......
araaaa
2021-03-19 10:34:45 +08:00
难的原因其实就是把原来 C 运行期的问题提前到了编译期,然后就会产生非常多的写法上的限制。
SuperMild
2021-03-19 10:41:57 +08:00
Rust 不难,难的是 rust 想解决的问题。

我试过不管效率不管资源消耗,一切对象都复制复制,这样写 Rust 非常爽,不难学。但如果想尽量提高效率节省资源,就难写了。

然而,想尽可能提高效率节省资源,哪种语言不难呢?可见难的不是语言,是现实问题。
levelworm
2021-03-19 10:42:41 +08:00
话说如果写 C++严格按照一个子集来写,会不会也很好?之前在知乎看到一个帖子,说是大家讨论 C++里面哪些特性应该小心使用,不知道大家怎么看这个?

> 能做到对 C++语言的特性基本分类,然后根据分类正确使用它们我对 C++特性的四大分类为了兼容 C 语言,不得不继承下来的特性,比如#include,强制类型转换,直接内存操作,基础类型和函数系统,宏为了零开销实现 OOP 而设计的特性,比如 class 继承和派生,虚函数,函数重载为了开发效率而设计的特性,比如 template 以及一些列 stl,算符重载,auto 为了解决实际问题不得不向现实妥协而设计的特性,比如 explicit,mutable,xxxxx_cast,register,volatile,inline,asm,template 特化,friend 第一种特性在真正需要和 C 语言打交道是要小心使用,第二种特性才是主要使用的,第三种特性只在遇到开发效率问题时使用,第四种特性要尽量避免使用,尽量不要制造需要这些特性才能解决的问题

作者:姚冬
链接: https://www.zhihu.com/question/444555079/answer/1754123101
SuperMild
2021-03-19 10:45:03 +08:00
看到楼主附言说 “学 Rust 虽然可以理解,但是学完一点生产力都没有,看别人的源码还是不知所云”,可见 rust 本身不难,而是一般需要用到 rust 的地方,多数是想解决难题,“看别人的源码不知所云”不是不理解 rust,而是不理解别人在解决的问题。
DearMark
2021-03-19 10:45:07 +08:00
通过编译,世界和平。为了无 GC,加上了无数特性。但确实很规范的语言,Result 处理真的优雅。
gygesm123
2021-03-19 10:53:11 +08:00
rust
2021-03-19 10:56:41 +08:00

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

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

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

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

© 2021 V2EX