菜鸡的Rust教程

前言


声明(BB in front)

  1. 出于个人学习进度(刚接触不到一年)和精力限制,教程将分为三期,教程(一)将只介绍Rust基础编程概念,教程(二)将介绍Rust泛型和生命周期等,后续学习理解后将会及时更新教程(三)(并发等)。

    另外,为方便了解上手Rust,我将每一期教程分成两大部分,正篇介绍Rust编程知识,副篇介绍模块和crate和包、如何方便地测试代码、Cargo的更多用法、API文档生成等调试、管理项目的知识,后一部分内容可以选择性跳过,或者在看完所有正篇后再看副篇(副篇并不是指不重要,分篇是考虑到每个人学习方向不同,为了大家看得方便,后期会专门弄个分类)。

  2. 写此教程时本人算不上对Rust和编程有很深入的了解,写此仅是为了记录分享,因此该栏目下所有篇章难免会有错误和纰漏,欢迎读者&大佬在发现错漏后指正和提供建议。

总之,不建议你只依靠该栏目学习Rust,个人建议将此教程用作参考以及官方教程(官方英文|中文译本)的补充。

推荐传送门:

如果你对满篇的基础概念学习并不感兴趣的话,建议左转《通过例子学Rust》(官英|中英翻译对照)。

今年(2021)微软也出了Rust教程(页面是英文,里面章节带有翻译),用Visual Studio的可以看看,怎么说呢,很有微软味。

谁适合阅读本教程


本教程撰写的出发点为:力求简洁明了的让有一定编程基础的读者能快速上手并深入了解Rust。因此本教程只适用于掌握过一门编程语言,最好是了解过面向对象,内存管理的读者。如果你刚刚接触编程,我建议先对C++有过较广(注意不是较深)的学习了解后再看本教程。

如果你拿捏不准什么算较广的话,我有以下几个建议:

  • 如果你还没深入接触过某个语言,我不建议你看Rust教程,目前(2021)网上的Rust教程大多基于别的语言,后期我会考虑做从零开始的教学(很可能会弃坑,不要抱太大希望)。

  • 我在每一章开头都说明了此章需要有什么前置知识,你可以对着去看C++(个人推荐,因为我最初就是先了解C++,之后就接触并学习了Rust,因此省略的部分都可以从C++中学到)或自己学习过的语言的对应知识,但学习时请注意一点:不必学习太深。毕竟主要目的是学习Rust。

另外,本教程只面向语言"使用者",不包含"学习者",教程不会涉及过多的专业术语,并且也有可能介绍非标准概念,如果你学习的目的包含考试、面试,我非常、非常不建议你看此教程。

介绍


关于介绍,我觉得既然你看到了这个教程,估计已经听说Rust的相关信息,因此我就简单说明一下(不必完全理解):

  1. 基本信息:
    • 静态编译型语言,可跨平台、嵌入式开发(但是本教程不介绍嵌入式),性能接近C++(为保证内存安全牺牲了部分性能)。
    • 支持过程式、函数式、并发式和面向对象编程。
    • 系统级语言,可用于编写系统(但是本教程不介绍系统编写)。
    • 专注高并发和并发安全(如果你想学恭喜你来错地方了,因为我不了解Orz,视情况更新)。
  2. 特性:
    • 无GC,数据在生命周期结束后就会被销毁并释放内存,智能指针则在引用计数为零后销毁数据释放内存。
    • 无空指针,使用Option<T>枚举实现类似功能。
    • let声明支持类型推导,自动判断类型(特殊情况下仍需手工指定类型)。
    • ...
  3. 开发工具:
    • rustc为Rust官方编译器,报错、警告信息丰富。
    • rustfmt为Rust代码格式化工具,如果你或团队在代码风格上有选择困难的话,不妨使用rustfmt
    • cargo为Rust的项目和包管理器,提供项目编译管理等功能。
    • Rust的工具链管理器rustup提供了安装、更换Rust工具链的功能,并且支持安装插件。
    • ...
    • 安装rustup即可安装好上述基础工具,环境变量也会一并设置。
    • 主流的IDE,详见官网的其他工具一节。
  4. 生态:
    • std及第三方库的API文档统一使用rustdoc生成,点击std即可大致了解,不足的是没有多语言适配(因为文档是基于注释生成的)。
    • 社区讨论活跃,更多信息可以自行查看Rust社区
    • ...
    • 不足:由于Rust还比较年轻(2015发布正式版v1.0),许多第三方库仍处于实验阶段v0.x,追求完全稳定者还需多加考虑。
    • ...
  5. 个人认为的不足:
    • 编译时间长,特别是编译大型项目时,编译时间以分钟甚至小时为单位,具体可参考Rust编译模型之殇(中翻)。如果你只打算写小项目的话还是不错的。
    • 大多数人认为Rust学习曲线陡峭,学习成本较高(个人感觉其实还好,高二疫情期间花了一星期看完了官方入门文档)。
    • Rust语法看上去简单(与C++相似)但实则复杂,初次接触Rust写出来的代码往往不符合语言规范而无法编译。
    • ...

接下来,让我们开始学习Rust!