菜鸡的Rust教程
前言
声明(BB in front)
出于个人学习进度(刚接触不到一年)和精力限制,教程将分为三期,教程(一)将只介绍Rust基础编程概念,教程(二)将介绍Rust泛型和生命周期等,后续学习理解后将会及时更新教程(三)(并发等)。
另外,为方便了解上手Rust,我将每一期教程分成两大部分,正篇介绍Rust编程知识,副篇介绍模块和crate和包、如何方便地测试代码、Cargo的更多用法、API文档生成等调试、管理项目的知识,后一部分内容可以选择性跳过,或者在看完所有正篇后再看副篇(副篇并不是指不重要,分篇是考虑到每个人学习方向不同,为了大家看得方便,后期会专门弄个分类)。
写此教程时本人算不上对Rust和编程有很深入的了解,写此仅是为了记录分享,因此该栏目下所有篇章难免会有错误和纰漏,欢迎读者&大佬在发现错漏后指正和提供建议。
总之,不建议你只依靠该栏目学习Rust,个人建议将此教程用作参考以及官方教程(官方英文|中文译本)的补充。
推荐传送门:
如果你对满篇的基础概念学习并不感兴趣的话,建议左转《通过例子学Rust》(官英|中英翻译对照)。
今年(2021)微软也出了Rust教程(页面是英文,里面章节带有翻译),用Visual Studio的可以看看,怎么说呢,很有微软味。
谁适合阅读本教程
本教程撰写的出发点为:力求简洁明了的让有一定编程基础的读者能快速上手并深入了解Rust。因此本教程只适用于掌握过一门编程语言,最好是了解过面向对象,内存管理的读者。如果你刚刚接触编程,我建议先对C++有过较广(注意不是较深)的学习了解后再看本教程。
如果你拿捏不准什么算较广的话,我有以下几个建议:
如果你还没深入接触过某个语言,我不建议你看Rust教程,目前(2021)网上的Rust教程大多基于别的语言,后期我会考虑做从零开始的教学(很可能会弃坑,不要抱太大希望)。
我在每一章开头都说明了此章需要有什么前置知识,你可以对着去看C++(个人推荐,因为我最初就是先了解C++,之后就接触并学习了Rust,因此省略的部分都可以从C++中学到)或自己学习过的语言的对应知识,但学习时请注意一点:不必学习太深。毕竟主要目的是学习Rust。
另外,本教程只面向语言"使用者",不包含"学习者",教程不会涉及过多的专业术语,并且也有可能介绍非标准概念,如果你学习的目的包含考试、面试,我非常、非常不建议你看此教程。
介绍
关于介绍,我觉得既然你看到了这个教程,估计已经听说Rust的相关信息,因此我就简单说明一下(不必完全理解):
- 基本信息:
- 静态编译型语言,可跨平台、嵌入式开发(但是本教程不介绍嵌入式),性能接近C++(为保证内存安全牺牲了部分性能)。
- 支持过程式、函数式、并发式和面向对象编程。
- 系统级语言,可用于编写系统(但是本教程不介绍系统编写)。
- 专注高并发和并发安全(如果你想学
恭喜你来错地方了,因为我不了解Orz,视情况更新)。- 特性:
- 无GC,数据在生命周期结束后就会被销毁并释放内存,智能指针则在引用计数为零后销毁数据释放内存。
- 无空指针,使用
Option<T>
枚举实现类似功能。let
声明支持类型推导,自动判断类型(特殊情况下仍需手工指定类型)。- ...
- 开发工具:
rustc
为Rust官方编译器,报错、警告信息丰富。rustfmt
为Rust代码格式化工具,如果你或团队在代码风格上有选择困难的话,不妨使用rustfmt
。cargo
为Rust的项目和包管理器,提供项目编译管理等功能。- Rust的工具链管理器
rustup
提供了安装、更换Rust工具链的功能,并且支持安装插件。- ...
- 安装
rustup
即可安装好上述基础工具,环境变量也会一并设置。- 主流的IDE,详见官网的其他工具一节。
- 生态:
std
及第三方库的API文档统一使用rustdoc
生成,点击std
即可大致了解,不足的是没有多语言适配(因为文档是基于注释生成的)。- 社区讨论活跃,更多信息可以自行查看Rust社区。
- ...
- 不足:由于Rust还比较年轻(2015发布正式版v1.0),许多第三方库仍处于实验阶段
v0.x
,追求完全稳定者还需多加考虑。- ...
- 个人认为的不足:
- 编译时间长,特别是编译大型项目时,编译时间以分钟甚至小时为单位,具体可参考Rust编译模型之殇(中翻)。如果你只打算写小项目的话还是不错的。
- 大多数人认为Rust学习曲线陡峭,学习成本较高(个人感觉其实还好,高二疫情期间花了一星期看完了官方入门文档)。
- Rust语法看上去简单(与C++相似)但实则复杂,初次接触Rust写出来的代码往往不符合语言规范而无法编译。
- ...
接下来,让我们开始学习Rust!