当前位置:   article > 正文

rust简介 对比 c++ go_rust c++

rust c++

一、rust简介

1、rust目标

干掉以前容易出错的语言。很有可能替换掉c++。

2、rust特点

不能指向null,悬垂指针。

3、rust优势

1、Rust 完全是内存安全(除非使用unsafe)。这也是Rust 和 C/C++ 的最大区别。

2、因为没有虚拟机,所以不会出现STW。(go语言依然会有STW,因为他还是有虚拟机)。

3、不用写GC,因为他的严格的变量使用机制,让编译器可以知道变量在哪里就结束使用了,所以编译的时候会自动加上回收语句。

Rust--如何实现内存安全的?

rust官方文档翻译版

入门指南 - Rust 程序设计语言 简体中文版

二、rust与其他语言对比

c++和rust

c++可以看成一种编程语言的标准,不能把他看成一门编程语言。c++下面有clang,vc,jcc,差异性很大,工具混乱。
c++的系统要想写好,需要一套很强的规范。而rust本身就带了这些规范。rust编译器会约束你。rust更适合应用。 
相比c++,rust更工程化,面向工程。

rust和go

golang,工程化的编程语言,面向的是工程师,而不是学者,即面向应用,而非理论。

2022.2编程语言排行榜 Php又回来了 Go与Rust的时代将要到来吗?_哔哩哔哩_bilibili

Go的哲学是简单易用、性能、高并发、编译快,最适合半路出家学编程的小白,那时候虽然Rust也已诞生但是语法太怪诞,接受不了生命周期的语法。Go的特性大概十几项,都是我极其喜欢的,摒弃了许多之前编程语言的弊病,开创了一些新的设计,可以说是承前启后,大道至简的语言。

如果喜欢开发后端尤其是web服务器,推荐搞Go语言,人生因此而精彩。

Go和Rust的真正的区别就是,Go能做的,Rust都能做,反之却不一定。

Go是谷歌三位大牛开发,仍然有C的影子和根植于谷歌的web基因,最擅长的事情绝对是web服务器之类的高并发场景,这是他的核心目标。

如果要写嵌入式,操作系统,GUI,区块链,高性能3D游戏,VR游戏,除了C/C++,只有Rust可以,其他语言一边站。

Rust的优点之大白话:

  1. 应用场景几乎无所不包,简单的说就是什么类型的软件都能开发;
  2. OS,Driver,GUI,WEB,APP, GAME Engine,WASM ...
  3. 支持几乎所有主流架构和操作系统,支持的架构和平台甚至比Go还要多;
  4. 没有历史包袱,语言设计细节都注重安全和性能,都几乎都是各领域深思熟虑的最优解
  5. 近年开发新作,集大成之作,广纳百川,扬长避短,除了很多人在强调的学习曲线,略高?
  6. 人体工程学:自动格式化,包管理器cargo,依赖管理,专有crate站点,UTF-8,自动代码检查和优化(Go也实现了一部分但Rust更甚,太任性(人性)了)
  7. 安全(类型安全,内存安全,线程安全),性能(接近C,与C++不分伯仲)
  8. robustness,无GC,非手动管理内存,编译前安排好各类型(对应内存)的生命周期

编译时间比go慢,简直就是唯一的缺点。

我为什么喜欢Rust - 知乎

三、学习rust

  • 只有 C 经验的人,学习 Rust 时,有如下挑战:
  1. Rust 编程范式。c 语言是过程式,而 Rust 是混合编程范式,支持面向对象和函数式编程风格。c语言过来的人,很容易把 Rust 写成过程式风格,虽然用过程式也可以用 Rust 写出完整功能,但在代码架构上会损失 Rust 的优势。和编程范式相关的概念:泛型/ trait / 错误处理 / 结构体 / 枚举 。
  2. 所有权和借用检查。c 里面是 手动管理内存,但是 Rust 是用所有权来管理。c 里面都是用指针,但是在 Rust 里,将指针进行了安全抽象变成了引用,需要有借用检查。 这些都是 c 开发者必须要掌握的概念。
  3. Unsafe Rust 安全抽象。c 语言开发者要理解 Unsafe Rust 的编码规范,理解如何进行安全抽象,这一点比较重要,尤其是和 C 相互调用时。
  4. 宏。 Rust 中声明宏类似于 C 语言的声明宏,都是代码替换,但是功能比 C 的强大,这些应该也算一个学习挑战。Rust 还有功能更强大的过程宏,可以在前期学习的时候不用考虑,后期再学。
  • 有 Cpp 经验的人,默认其对 C 有一定了解,学习 Rust 时,有如下挑战:

    1. Rust 编程范式。 Rust 的混合范式 和 Cpp 的混合范式不同。Rust 不是纯粹的面向对象语言,没有构造函数。Rust 中的泛型、 trait 、枚举 和 错误处理 对于 Cpp 开发者同样是学习重点。
    2. 所有权和借用检查。因为 Rust 也引入了 和 Cpp 11 引入的 基于RAII 机制的智能指针,所以在内存管理方面,对 Cpp 11 及以上版本有经验的人更容易理解。但是没有这方面经验的 Cpp 开发者就有一定难度了。
    3. Unsafe Rust 安全抽象。这一点和来自 C 语言的初学者一样,是需要对 Unsafe Rust 的编码规范有一定理解。
    4. 泛型 和 过程宏。 Cpp 开发者有模版,但是 Rust 中有泛型。Rust 中泛型的功能没有 Cpp 模版强大,但是有过程宏可以弥补。也就是说 Cpp 模版编程 等价于 Rust 的泛型和过程宏的结合。如果 Cpp 开发者也想要在 Rust 中追求 模版编程的效果,那么需要掌握 泛型和过程宏。
  • 只有 GC 语言使用经验的人,比如 Java、Python、Ruby 、Haskell等,学习 Rust 时面临的挑战和 Cpp 基本相同,但因为使用 GC 语言的人,大部分对底层内存管理没有足够深入的了解,入门曲线会更加陡峭。

学习 Rust 要经历至少三个阶段:

  1. 整体学习一遍 Rust 语法。对 Rust 语法和语言特性有一个充分了解。
  2. Rust 基本所有权概念需要一定深入理解
  3. 深入领域学习。上面两个阶段完成以后,就可以投入到领域实践中,进一步深入学习。

编程零基础,需要补充必要的基础:

  1. 计算机科学基础,推荐一些快速入门的书籍:《计算机是如何工作的》、《程序是如何跑起来的》、《网络是如何连接的》
  2. 入门一下 C 语言。 入门 C 语言之后,学习 Rust 的时候有对比,更容易理解。
  3. 然后再遵循上面的三个阶段来学习 Rust 。

四、rust学习框架

第一阶段:全面了解 Rust 语法

需要做到

  1. 对 Rust 语法有一个比较全面的了解。
  2. 对 Rust 语法进行分类。

第一阶段配套学习资料

  1. 《Rust 权威指南》,即 Rust 官方出品的 Rust Book 。
  2. 《Rust Cargo Book》
  3. 其他免费或收费的入门类 Rust 资料。

看这些资料学习的时候,要围绕第一阶段的学习目标:全面了解 Rust 语法。

对 Rust 语法有一个基本了解之后,可以通过官方出品的Rust by example 和 Rustlings 来检验自己的学习成果。

第一阶段练手项目推荐

这里推荐一些练手项目:

  1. 结合官方的《Command Line Apps in Rust》一书,实现一个简单的终端应用,比如读取 CSV 文件之类。
  2. 去 GitHub 开源仓库中寻找案例灵感:
    1. 比如实现一个终端打字练习的应用,比如toipe 。
    2. 或者是一个简单的编辑器,比如 kyun 
  3. 从 《Rust Magazine》 中寻找练手灵感。
  4. 其他,比如有些学习资料自身就配套应用案例。

第二阶段: 掌握 Rust 语言关键概念

主要包含如下概念:

  1. 所有权和借用检查。
  2. 类型系统与编程范式。
  3. Unsafe Rust 和 宏。

其中 「所有权和借用检查」是重点,只有在掌握了这两个概念之后,才算入门 Rust 语言。

第二阶段配套学习资料推荐

  1. 《Rust 编程之道》
  2. 《Programming Rust》第二版
  3. 《Rust Design Patterns》
  4. Rust 标准库文档
  5. 《Rust 编码规范》
  6. 《Too Many lists》
  7. 其他进阶类 Rust 书目,以及免费或收费的学习资料。

第二阶段练手项目推荐

  • 这个时候可以阅读 《Too Many Lists》来实现一个链表,或者,可以去 LeetCode 刷题,借此来检验自己对 Rust 所有权机制的理解。
  • GitHub 项目中获取灵感:
    • smallvec,比如实现一个自定义的 Vector 集合容器
    • toydb,比如实现一个简单的分布式数据库
    • 其他。学习资料中本身推荐的案例,或者依据学习者擅长的领域来选择适合的项目。

第三阶段:深入领域学习

经过上面两个阶段的学习,可以投入到自己的实际项目中开始学习了。如果没有自己的实际项目,可以参与到开源项目的贡献中去。

比如 Rust 并发和异步开发相关的内容,重点概念中关于类型系统、编程范式、宏、Unsafe Rust 的深入学习和应用,都在这个阶段去完成。

学习 Rust 你需要一个认知框架 - 一君_的个人空间 - OSCHINA - 中文开源技术交流社区

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/370451
推荐阅读
相关标签
  

闽ICP备14008679号