作者 | Sayan Dey策划 | 李冬梅 相对而言,Rust 是软件行业中比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功能来保证性能和安全。而且,Rust 还能在无需使用传统的垃圾收集系统的情况下保证内存的安全性。

Rust 语言原本是 Mozilla 员工 Graydon Hoare 的私人项目,Graydon Hoare 当时是 Mozilla 研究部门的一位经验丰富的 IT 科学家。2009 年,Mozilla 开始赞助这个计划,并且在 2010 年首次揭露了它的存在。

随着越来越多设计者的加入,他们为该编程语言打造了浏览器引擎,并设计了 Rust 编译器。Rust 编译器是一款免费和开源的编程软件,受 MIT 许可证和 Apache 许可证保护。自 2016 年起,由于许多开发人员开始更多选择 Rust 而不是 Java 来进行开发(据Stack Overflow开发者调查),Rust 语言开始成为人们关注的焦点。

Rust 官网链接:https://www.rust-lang.org/

1为什么 Rust 受到许多开发者的青睐?

Rust 具有更强大的高并发性和高安全性,堪称栈溢出开发的完美选择。对函数的优秀控制能力和对内存布局的完美运用,这让Rust 成为一种面向性能的编程语言。使用 Rust,你可以事半功倍地维护系统的完整性和安全性,此外,在语法、内存安全性以及内存管理上 Rust 也有着不俗表现。

语法易学

由于 Rust 与软件行业中最流行的 C++ 语言的相似性以及其简单的语法,让学习和理解这门语言变得非常容易,甚至对于初学者而言也简单易懂。Rust 的语法与 C 和 C++ 编程有很多相似之处,比如 if-else、while、for、return 等关键字的用法,而 Rust 中一些关键字还使用了模式匹配技术,这使得这门语言更容易上手。

尽管语法非常相似,就函数和功能方面而言,Rust 语言做得更广更深。该编程语言的“广”在于,你可以发现每个函数体中所包含的几乎所有部分,包括控制流操作符,本身都是以表达式来呈现的。简而言之,如果你已经掌握了 C 或 C++,在对这些编程语言的一般理解标准下,Rust 能帮助你完成更多工作。

内存安全

说到 Rust 的安全特性,它被专门设计为保护内存安全,它在安全代码中不允许使用空指针、悬垂指针和数据竞争。如果你需要对一个数据值进行初始化,那么只能通过一系列固定的形式来完成初始化,它要求在函数开始前初始化所有的输入。几乎所有其他语言都允许指针以有效形式或 Null 形式存在,但 Rust 提供了一组额外的特性集来测试指针是否有值。

非传统的特性

Rust 还引入了一些额外添加的语法和功能来管理函数本身的生命周期,另一个方面,如果需要编写一些不安全的代码,可以使用 Unsafe Rust 功能来对其进行限制,而所有权功能作用于所有的值,让每个值只可以有一个唯一的所有权属主,值的有效范围和该唯一所有权属主的有效范围保持一致。值可以通过不可变引用关键字 &T 进行传递,也可以通过可变引用关键字 &mut T 来完成传递。Rust 编译器在编译时执行这些规则,并同时追踪所有引用的有效性。

内存管理

Rust 不像 Java 或.Net 等编程语言那样使用传统的自动垃圾回收系统,Rust 也不像 Swift 或 C++ 等编程语言那样使用自动引用系统。Rust 是通过其 RAII(资源获取即初始化)规范方法来管理内存和其他资源的。此外,Rust 还使用最优引用计数方法来对内存分配进行优化,它还支持值的堆栈分配方法而非隐式装箱转换。

基于特征(Traits)和结构化类型来实现

Rust 的系统是基于特征(Traits)和结构化类型来实现的。在 Rust 中,类是用关键字 impl 来定义的。继承和多态是由特征提供的,并允许开发人员使用方法和混合实现。此外,结构化类型还用于定义不同类型的字段。实现和特征不能进行自我定义,它们只能提供继承数据。Rust 还支持接口继承,但是只允许使用复合集成来替代实现继承。

2Rust 代码示例

Hello World 函数

fn main() {println!("Hello World!");}

递归函数

 fn factorial(i: u64) -> u64 {match i {0 => 1,n => n * factorial(n-1)}}

迭代函数

fn factorial(i: u64) -> u64 {let mut acc = 1;for num in 2..=i {acc *= num;}acc}

3当下使用 Rust 的主流项目

如果你知道现在有哪些软件和应用程序是用 Rust 语言开发的,那么你可能会比以前更加信赖这种编程语言。Rust 已经被用于开发很多赫赫有名的主流应用程序,有如下:

  1. Mozilla Firefox 浏览器;

  2. Discord(一款游戏聊天应用);

  3. Gecko 浏览器;

  4. Tor 浏览器;

  5. GNOME Fractal(一款即时消息客户端);

  6. 谷歌 Fuchsia 操作系统;

  7. Redox OS;

  8. Rocket Web Framework;

  9. Servo(一款由 Mozilla 开发的网页浏览器排版引擎);

  10. Terminus DB(一款数据库软件);

  11. Libra(数字货币);

  12. OpenDNS;

4Rust 的独有特性

  • 十分接近基本的 C 和 C++ 编程语言和语法;

  • 做代码分析时,即使对于第三方代码阅读器而言,也能轻松解析其中引用的语义;

  • 所有权系统设计非常合理,这也让 Rust 变得特点鲜明;

  • 由于有逻辑内存分配、引用处理和内存管理等特性,Rust 内置的包管理器 Cargo 功能非常强大;

  • Rust 的编译器自身功能令人惊叹。

5Rust 比 Java 好在哪?

即使对于一个中等水平的程序员而言,从 Java 切换到 Rust 也是一件很容易的事情。从一开始学习,你就会觉得概念和语法似曾相识,这能让学习和编程都变得十分容易。因此,尽管 Rust 的确在技术上朝前迈出了一大步,但程序员在编程习惯上并不需要做出很大的调整。

使用 Rust 语言,你可以放心大胆地去探索各式类型新颖的复杂项目,而之前由于 Java 语言的复杂性,你不敢轻易尝试这些项目。对于独立开发者来说,完美的资源分配和良好的内存管理是必备之选,这的确是 Rust 一个较大的优点。

另一方面,如今所有行业都建设在 IT 基础之上,无论你是否是一名专业编程人员,在任何需要挖掘创造力的技术领域,都需要借助软件编程。因此,复杂的编码语言让非专业程序员很难轻松地编写出所需代码,而 Rust 正好可以为这类人提供解决方案。即使是业余程序员和初学者,也可以轻松地学习并在逻辑上理解这门编程语言,从而磨砺自己的技能并在各行各业中去尽力发挥他们的创造力。

6结束语

从 Java 切换到 Rust 很简单,而且顺理成章,只需要在编程语言上做出一些调整就能完成切换。而且这种切换并不会让你忘记所有已经掌握的 Java 技能,因此,如果需要,你还可以随时切换回 Java。但是,如果你坚持使用 Rust 的话,你的生产效率将会变得更高,资源使用率将得到优化,代码安全性会变得更好,而且最重要的一点是,你能享受Rust 提供的诸多额外特性和功能。

参考阅读:

https://www.how2shout.com/technology/why-one-should-switch-to-rust-from-java-programming-language.html


InfoQ 读者交流群上线啦!各位小伙伴可以扫描下方二维码,添加 InfoQ 小助手,回复关键字“进群”申请入群。大家可以和 InfoQ 读者一起畅所欲言,和编辑们零距离接触,超值的技术礼包等你领取,还有超值活动等你参加,快来加入我们吧!

点个在看少个 bug 

C++和Rust_自从尝了 Rust,Java 突然不香了相关推荐

  1. C++和Rust_自从尝了Rust,Java突然不香了

    作者 | Sayan Dey 译者 | 杨志昂 策划 | 冬梅Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高 ...

  2. Java脑洞程序编写怎么写,脑洞丨自从尝了Rust,Java突然不香了

    原标题:脑洞丨自从尝了Rust,Java突然不香了 作者 | Sayan Dey 译者 | 杨志昂 策划 | 冬梅 Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C ...

  3. C和Java没那么香了,Serverless时代Rust即将称王?

    笔者在上周参加阿里云开发者大会时,特别注意到一个现象就是Serverless这个概念被反复提及,其受关注程度提升明显,笔者仔细看了一下,Serverless的核心理念就是函数式计算,开发者不需要再关注 ...

  4. java会被rust替代吗_自从尝了 Rust,Java 突然不香了

    Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功能来保证性能和安全.而且,Rust 还能在无需使 ...

  5. rust 调用 java_自从尝了 Rust,Java 突然不香了

    Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功能来保证性能和安全.而且,Rust 还能在无需使 ...

  6. Flutter 初尝:从 Java 无缝过渡,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起在群里探讨技术. 准备 ...

  7. Flutter 初尝:从 Java 无缝过渡

    准备阶段 下载 Flutter SDK 新建 Flutter 文件夹,克隆 Flutter SDK: git clone -b beta https://github.com/flutter/flut ...

  8. 还在网上找Demo?这个Java项目真香!

    我前几天专门去网上搜集项目,打算找一些分享给大家用来实践. 但找了一圈发现,网上的项目都比较旧,业务也有些过时,再有就是一些特别大型的项目,不适合初学者做. 不过,我最终还是发现了1个免费的Java训 ...

  9. java 创建文件夹_VS Code用来开发JAVA项目真香

    Intellij vs VSCode 作为一名资深的JAVA工程师,对Intellij IDEA有着很深的感情,一直也伴随着它的升级持续使用,这套JAVA专属开发系统的强大之处在此不再赘述.如果不是激 ...

最新文章

  1. DevOps Troubleshooting(1)-运维思想
  2. 使用渲染纹理的制作摄像头
  3. Oracle的外部表
  4. 从任务到可视化,如何理解LSTM网络中的神经元 By 机器之心2017年7月03日 14:29 对人类而言,转写是一件相对容易并且可解释的任务,所以它比较适合用来解释神经网络做了哪些事情,以及神经网
  5. gradle 指定java版本_Eclipse使用gradle编译时,使用固定的jdk版本进行编译(修改gradle的jdk编译版本)...
  6. TOGAF:从业务架构到业务需求
  7. 一个类的java代码_求一段java代码,定义一个类
  8. python处理二进制文件_使用Python进行二进制文件读写的简单方法(推荐)
  9. 各种VS Code的学习秘诀,全是这六条法则撑起的!
  10. TP5实践小总结(1)
  11. mmsi是代表船舶什么_海上移动业务识别码(MMSI)是一种九位识别码,主要分配给()在DSC和NBDP通信中相互识别身份是使用。...
  12. Coinbase与华尔街的内幕故事
  13. 大数据将走向何方?未来大数据的十大趋势评析
  14. 小程序快递单号查询接口物流助手对接指南
  15. 2020张宇1000题【好题收集】【第四章:多元函数微分学】【第五章:二重积分】
  16. 资深投资人: VC的“增值平台”就是一坨狗屎
  17. 新出免费字体——阿里巴巴普惠字体(附安装使用教程)
  18. 大数据时代——从谢顿计划说开去
  19. Esp8266天猫精灵_RGB灯_非点灯平台
  20. 释放cuda显存及进程

热门文章

  1. 所有外包项目威客网站列表
  2. 微机原理真题2019年,错题整理
  3. Unity3D制作3D虚拟漫游场景(二)
  4. 无人驾驶汽车系统入门(十七)——无人驾驶系统基本框架
  5. 2020 Vue 基于Element-UI开发 手动导入并使用Timeline组件(附组件文件)查看快递信息
  6. Style Transfer for Anime Sketches with Enhanced Residual U-net and Auxiliary Classifier GAN
  7. 论文阅读:Stroke Based Posterior Attention for Online Handwritten Mathematical Expression Recognition
  8. Android动态修改icon
  9. 计算机电源负载能力差,电脑电源问题:电脑电源负载能力差的原因及解决方法...
  10. 【Framework】透视Android中的Handler