一年多 Rust 的了解,对蠢蠢欲动的同学一点建议

2019-01-29 18:42:04 +08:00
 VDimos

本来是前端,由于 webAssembly 的逐渐普及,从去年开始从 Rust 的那一本教程入手,看完以后又看了 Rust reference,接着看了 Rustnomicon,又大致浏览了一遍 Rust Doc,还有 cargo book。最后总结了以下:我觉得 Rust 应该是昙花一现的产物,因为它实在是太复杂了。

如果你不需要做 FFI 之类的,我个人还是不建议深入学习 Rust,有兴趣当然是好的,但是 Rust 需要花费的时间不是一天两天,对比其他的语言,比如 C,Rust 显得更复杂和困难。

Rust 保证的安全性的代价就是入门曲线很高,对于习惯了脚本语言或者 c 类语言的程序员而言,Rust 显得不是那么友善。我学这门语言更多的是因为学习兴趣很高,时间充沛,但是对于大多数人而言,时间以及语言( Rust 的文档除了教程以外几乎都是英文)问题,或许并不值得去学习。

更为重要的一点是,Rust 标榜的是安全性,对于很多人而言,Rust 的这种安全性根本不知道用在哪里,因为它的实战场景太少了!!! Rust 的最大的开源后台开发库 Rocket.rs ,甚至现在也没发布 1.0 版本,而且更多的是 Rust 目前几乎没有像诸如 java 之类的,甚至是 golang 之类的新语言,一套完善的开发栈可供参考。更多的是自己踩坑,自己挖坑自己踩!

Rust 是门从设计层面就假设你是个有很强逻辑以及经验的程序员,但是这个假设并不是什么时候都成立。Rust 的所有权系统有时候显得很“臃肿”,虽然有诸如 Rc 和 RefCell 之类的 struct 可以弥补。举个栗子来说,很多初学者在看完教程之后,基本的数据结构,诸如双向链表、二叉树之类的,都不能写出来,更糟糕的是,甚至完全没有头脑(我承认我就是这种人)。

Rust 我最爱的是它的宏!如果你是 C 之类的开发者,对 C 的宏忍无可忍,那么 Rust 的宏是真的只能用“美丽”来形容!

如果你是从事嵌入式、图形处理之类的,我强烈建议你深入了解 Rust 这门语言,它的安全性或许正是你所需要的!

Rust 目前是 2018 版本,这个版本修复了很多饱受诟病的 Bug,我很期待这门语言的发展与未来。

总结来说,如果你是一个初学者,或者时间不够,或者精力不够,或者语言(英语)能力不强,那么我建议还是不要碰这门语言了,如果有一天 Rust 发展得无比繁荣,那么 Rust 可以学一学,但目前看来,并不会(求打脸!!!)。

如果你是从事底层开发,对 C 语言的内存泄漏的问题很头大,那么 Rust 很适合你!但同上,时间和精力是问题。

29228 次点击
所在节点    程序员
85 条回复
SuperMild
2019-01-29 18:51:40 +08:00
大多数人学 rust 都是兴趣吧,毕竟明显不是很好找工作的语言。

rust 语言本身蛮优秀的,功能强大,可玩性高。所有权、生命周期那一套东西是需要一点时间才能熟悉,但本质上并不是很难很复杂的东西,只是思维不习惯(与别的语言差异较大),耐心多做一些练习题就会熟悉。

除了学习曲线这个缺点,别的特性优点还蛮多的,值得一学。
secondwtq
2019-01-29 18:54:49 +08:00
Rust 应该对标 C++,对比 C 复杂并不能说明什么 ...
trait
2019-01-29 18:54:55 +08:00
> 更为重要的一点是,Rust 标榜的是安全性,对于很多人而言,Rust 的这种安全性根本不知道用在哪里,因为它的实战场景太少了!
你真的理解了什么是安全性么?当然除了仅有的几所名校,中国各大计算机官方培训班没那个能力普及基本的 PL 知识,前端就更不用说了
> Rust 的最大的开源后台开发库 Rocket.rs ,甚至现在也没发布 1.0 版本
rocket 什么时候成了最大开源后台开发库,先了解一下生态再说
>Rust 的所有权系统有时候显得很“臃肿”,虽然有诸如 Rc 和 RefCell 之类的 struct 可以弥补。举个栗子来说,很多初学者在看完教程之后,基本的数据结构,诸如双向链表、二叉树之类的,都不能写出来,更糟糕的是,甚至完全没有头脑(我承认我就是这种人)。
这问题在 2017 年之前成立,现在还说写不出来只能说你官方 book 你没读进去,trpl 专门花了一章讲这几个智能指针,borrowchecker 原则更是明确列出来了
hhhsuan
2019-01-29 18:57:25 +08:00
rust 能用来干什么?
ChristopherWu
2019-01-29 18:57:44 +08:00
@trait 能否分享一下 PL 的知识?或者讲 PL 的科普数据?最近想从 PL 的角度来喷 go 脑残粉,发现不知道怎么样学习。
trait
2019-01-29 19:00:59 +08:00
@ChristopherWu 一般来说系统学习推荐看 TAPL https://www.cis.upenn.edu/~bcpierce/tapl/
不过想了解一下基础这篇牛津大佬的论文就可以了 http://lucacardelli.name/papers/typesystems.pdf
secondwtq
2019-01-29 19:09:05 +08:00
@ChristopherWu 如果只是想喷 go 脑残粉的话建议不要入坑,如果真要入坑的话建议时刻谨记 “不忘初心 牢记使命”

而且你跟 go 脑残粉说这些估计是没用的,如同对假“国学”受害者讲科普,和小粉红讲普世价值
ChristopherWu
2019-01-29 19:11:41 +08:00
@secondwtq 没事,图个爽快 XD
其实了解一下 PL 的基础知识(常识)挺好的,不然这门语言跟那门语言的优劣这种都说不了,就没啥意思了。
12101111
2019-01-29 19:12:39 +08:00
前端看 rust,就跟写 c 的看 node js 那些工具链一样。你先写几个月 c++,比如看看 chromium,再看看 servo,尤其是已经 merge 进 Firefox 的 CSS 引擎 stylo,排版引擎 webrender
adminsam
2019-01-29 19:13:20 +08:00
5G+物联网+区块链+Rust
neoblackcap
2019-01-29 19:18:32 +08:00
@12101111 看那些那么复杂,不如看看 TiKV 算了
misaka19000
2019-01-29 19:22:11 +08:00
@neoblackcap #11 关键是 TiKV 也不简单啊。。。
misaka19000
2019-01-29 19:23:23 +08:00
我觉得学 Rust 的大部分是出于兴趣吧,既然是出于兴趣我觉得学习一下也是挺好的
secondwtq
2019-01-29 19:35:27 +08:00
说到轮子,我觉得 Rust 现在有点像几年前的 JS,我逛 GitHub 经常碰到各路神仙拿纯 Rust 重新发明各种基础的库和工具

个人觉得 Rust 虽然没有 JS 渗透广泛,但是作为 native 语言发挥空间更大,在一干叫唤着要取代 C++ 的 PL 里面还算 userbase 比较扎实的,生态会慢慢好起来

另外那些大仙们重造的轮子,很多还处于早期阶段,虽然不一定能用于 production,但是代码量不多,Rust 的代码组织方式,抽象能力都比 C 等要好,对我来说相比于那些已经搞了好多年的 C 库要易读,如果只是想知道“某某类型的库 /某某算法的基本实现原理”,还是挺值得看下的。不一定要看 servo 之类明星项目,我觉得像是浏览器引擎这种复杂度的东西,除非有明确的项目目标或者全职在做,只是没事看看很难搞出有用的成果

讽刺的是,JS 圈现在正在风风火火地推广 WebAssembly 这个可以把他们自己灭掉的东西 ...
pabupa
2019-01-29 19:39:56 +08:00
之前看过一点文档。没有 gc,也不用手动释放,那怎么做嘞?一个复合变量在一个作用域只能用一次,,,,其实也挺麻烦的,不过比手动释放要顺手一点。
ps:在回家的车上,刷刷 v 站,随便 bb 两句,不知道对不对。
secondwtq
2019-01-29 19:44:44 +08:00
@secondwtq 噢对了忘了一条,如果按照 #14 中的逻辑,轮子该有的都会有的话,那 Rust 可能的最大的问题就如楼主所说,就是 智商兼容性 了 ...
Chingim
2019-01-29 19:45:48 +08:00
看完基础,尝试写快排,编译的时候想撞墙
现在我都不懂怎么自己实现 swap 函数
VDimos
2019-01-29 19:59:21 +08:00
@trait 我还在了解,多谢指正
trait
2019-01-29 20:01:06 +08:00
@Chingim std::mem::swap, vec 也自带 swap(_, _)
Moming
2019-01-29 20:03:48 +08:00
rust 后端觉得 actix 更有前景。
拿来写点小工具也挺好玩的,各种命令行工具重新造轮子

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

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

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

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

© 2021 V2EX