前言
一直以来笔者都在从事以C++为主要开发语言的工作,但事实上在实际的工作中,并不可能一门语言就cover住所有的需求。一来,对于像前端、CGI、脚本、数据库相关等工作任务,本来就着其专用的工具和语言,作为后端开发程序员都是必须涉猎的,也就是所谓「全栈」;二来,C++虽然全能,但它也逐渐老了,在一些更为专用的领域会显得臃肿,因此越来越多新兴语言也开始百花齐放。
作为软件、互联网行业的一员,我们也必须时刻跟上时代的脚步,在加上一些大佬的安利,笔者决定开始研究Rust,并且着重研究这门语言的世界观、倾向性以及它与C++的异同。
本系列文章作为笔者的学习笔记和研究产出,主要面向下列读者群体:
- 已经有足够的C++知识积累或开发经验
- 希望转型到Rust,或是希望以Rust作为第二技能的,又或是单纯兴趣性地学习和研究Rust的
- 并不满足于表面涉猎,希望能深入理解和领悟的
作为一门程序语言,能够找到的入门级教程可以说数不胜数,但笔者认为,针对Rust来说,从C++转入Rust的教程比单纯的Rust入门教程更加有意义,理由如下:
- 很少有人会把Rust作为第一入门语言的,或者说,假如这个人没有接触过编程,那么他大概率是不会把Rust作为第一门学习编程的语言的(反倒是C语言、js或者Swift作为第一门语言的概率要大得多)。
- 从Rust的很多设计理念上来说,他针对于C++容易出现的各种问题做了非常多的优化,所以对于那些「饱受C++摧残」的程序员来说,更加适合来学习一下Rust,从中可以获得很多不一样的思路。
- Rust相对来说会更加偏底层一些,比如说嵌入式、各种系统内核、各种中间件、各种通用工具等,这些领域正好完美命中了C和C++之间的尴尬地带,或者说用C语言不太够但用C++又门槛太高且风险较大,Rust提供了一个比较好的解决方案,非常适合那些不满足于纯C,但又忍受不了C++的这部分人或团队。
因此,针对于本身是C++程序员,又希望涉足Rust的这部分人群来说,更加需要的是一个专有的教程,而非通用的Rust入门教程。
综上所述,笔者以《面向C++程序员的Rust教程》进行开题,作为本身就是C++程序员兼Rust学习者的身份,相信能给读者带来切身体会和不一样的理解感悟。
从Hello World说起
按照世界级惯例,程序语言教程都由一个Hello World开始。一来我们可以以最少的篇幅来编写一段可运行的程序,让我们建立对这门语言的主观印象;二来也可以从这个最简单的程序里看到很多端倪,这有助于我们接下来的学习和研究。
fn main() {
println!("Hello, World!");
}
算上大括号也就只有短短的3行,但其实能看出不少东西的,我们一一来说。
首先,整体上来说,Rust也采用了大括号和分号的代码风格,这一点跟C++一样,而不同于Python和Go。函数体是用大括号包裹的,并且每行语句都以分号结尾,那么这种风格通常来说都是对缩进和空格、空行不敏感的,因此这里的缩进、空行等都是一种让代码可读性更高的编码规范,而不是语法本身要求。
其次,这里出现了我们熟悉的main函数,作为程序的入口。函数是可以直接单独存在的,不需要强行包裹在类中,这一点与Java不同,说明Rust至少是「可以」做面向过程编程的。
最后,我们可以看到main函数是空参数空返回值的,这一点与C/C++不同,也就是说当Rust程序作为应用程序时,其与OS或父进程之间的交流应当有其他专有的方式,而不是通过传参。这种限制其实有他自己的独特优势的,这点我们在后面章节再详细介绍。
其他呈现的细节还有比如说双引号表示字符串,而单引号表示字符,这与C++表现一致,不同于js、Python、shell等。这些都等后面章节我们再一一诉说。
这里希望读者可以有一个主观印象,Rust程序大致就是长这个样子哒~。
类型说明符
在C语言以及其衍生语言(如C++、Java、Objective-C等)中,有一个非常大的特点(甚至说是缺陷),就是「行为」被隐含在了「类型」说明符之中。
举个例子来说:
int a;
这里的int首先是表达了「创建变量」的含义,其次才是表示「变量类型是整型」。「创建变量」这种表示动作的语义是隐藏在里面的,根据类型说明符的位置、上下文、组合等不同来区分。比如上面单独一个类型符号表示创建变量,而如果加上小括号就表示「函数声明」的动作:
int f();
这里的int和()共同表示「函数声明」,而int又承担了「函数返回值类型」的类型说明的含义。
而在一些「仅需要表示动作,不需要类型」的场合,C++的这种语法就显得很奇怪和诡异,比如说:
template <typename T1, typename T2>
auto f(T1 a, T2 b) -> decltype(a + b) {

&spm=1001.2101.3001.5002&articleId=136838631&d=1&t=3&u=4f6241fccfb1401090d3986f9928d4e6)
5万+

被折叠的 条评论
为什么被折叠?



