水木社区 Rust编程语言 版欢迎rust爱好者讨论发言。
Rust语言目前(2022年)在国内并不算流行,但发展势头却是近年来最猛的语言,引得许多人来学习。本帖汇集一些资源,以方便rust初学者。
文中所有主观的评论,仅代表rust版时任版主(RunningOn)的观点,不代表社区观点,也不一定是主流观点。读者如果不同意,欢迎讨论。文中如果有失效的链接,请回帖或私信告之。
一、Rust语言有什么特点?我是否需要使用Rust?
Rust是比较底层的语言,对标C/C++,运行效率很高,通常比C慢一些、和C++相当或比C++稍慢。Rust有许多很棒的特性,但有一个是Rust独有的、目前所有其它语言都做不到的: 在编译阶段就能做到内存安全,即不会在无权限的内存地址处进行读写,也不用管什么野指针、double free等问题。因此,时常会看到这两类项目使用Rust重写:
1. C/C++项目因内存安全问题而变得难以维护或维护成本太高。
2. 现有项目运行效率不佳(占内存大或速度慢),多见于一些python/go/java开发的项目。
不久后Linux内核也可使用Rust来开发。当然也有全新的项目从一开始就使用rust开发。
当你在考虑是否需要使用Rust时,第一个问题其实是是否需要使用C或C++,或类似的底层语言。你如果在 Rust 和 Python/Java/JS/Go 中的某一个语言之间进行选择,那答案基本是选择后者除非性能上不满足需求。
不谈Rust的学习难度,一个项目使用Rust的开发时间和C/C++不会有大的不同,此时推荐所有使用C/C++的地方都使用Rust(除非使用C能显著提升速度)。但在实际中,学习难度是个不可忽略的问题,所以如果一个项目有大量的开发者(且他们中的多数人不想学或学不会Rust),则不要使用Rust,而且目前Rust的程序员也不容易招到。
另外Rust并不支持继承,因此在移植C++的项目时很多时候并不能直接将C++代码“行对行翻译”为Rust,很可能要改一些设计,这个也需要注意。
但由于Rust的独一无二的特点以及目前的流行趋势,在单人或参与者都懂Rust的项目里,推荐全部用Rust取代C/C++。毕竟内存安全是非常重要的,且项目越大就越难保证内存安全,而这个问题除了用软件工程化的方法来减少(比如多用相关工具进行测试),目前只有Rust一条靠谱的出路。
所以要回答“是否需要使用Rust”这个问题,在于两点:一是项目是否需要C/C++般的性能,不需要的话还是推荐使用Python/JS/node/Go/Java这些;二是项目的其他参与者是否抗拒Rust。
说了那么多,Rust的缺点是啥呢?目前主要的缺点:一是难学,二是编译速度慢(但这通常不是大问题)。
二、推荐rust入门书籍、资源
以下链接有一些是github的,github时灵时不灵,请耐心多尝试刷新。
rust的许多免费资源、镜像源被整理到了这里,包括中文版的官方教程(感谢txgx提供):
https://github.com/huhu/rust-search-extension/blob/master/extension/index/commands.js
《Programming Rust》 英文版 (感谢z16166提供):
https://github.com/francoposa/programming-rust
一些pdf(感谢sakulaqi整理):
https://mdl.ink/Dqqydf 访问码 0716
官方教程叫 《The Rust Programming Language》(社区翻译的中文版叫《Rust 程序设计语言》,纸质书叫《Rust权威指南》),有一些爱好者更推崇《Programming Rust》。如果你英文水平一般,推荐看中文官方教程,没有明显的翻译问题。
Rust Playground (在线的rust编辑器,方便快速学习):
https://play.rust-lang.org/
欢迎补充
--
修改:RunningOn FROM 183.192.18.*
FROM 183.192.17.*