首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自从尝了Rust,Java突然不香了

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/

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

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

语法易学

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

尽管语法非常相似,在函数和功能方面而言,Rust语言做得更广更深。该编程语言的“广”在于,你可以发现每个函数体中所包含的几乎所有部分,包括控制流操作符,本身都是以表达式来呈现的。简而言之,如果你已经掌握了C或C++,在对这些编程语言的一般理解标准下,Rust能帮助你完成更多工作,所以这就使得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还支持接口继承,但是只允许使用复合集成来替代实现继承。

Rust代码示例

1、Hello World函数

代码语言:javascript
复制
fn main() {    
println!("Hello World!");
}

2、递归函数

代码语言:javascript
复制
 fn factorial(i: u64) -> u64 {
match i {
0 => 1,
n => n * factorial(n-1)
}}

3、迭代函数

代码语言:javascript
复制
fn factorial(i: u64) -> u64 {
let mut acc = 1;
for num in 2..=i {
acc *= num;
}
acc
}

当下使用Rust的主流项目

如果你知道现在有哪些软件和应用程序是用Rust语言开发的,那么你可能会比以前更加信赖这种编程语言。Rust已经被用于开发很多赫赫有名的主流应用程序,其中包括Mozilla Firefox浏览器、Discord(一款游戏语音聊天应用)、Gecko浏览器、Tor浏览器、GNOME Fractal(一款即时消息客户端)、谷歌Fuchsia操作系统、Redox OS、Rocket Web Framework、Servo(一款由Mozilla开发的网页浏览器排版引擎)、Terminus DB(一款数据库软件)、Libra(数字货币)、OpenDNS等等。

Rust的独有特性

  • 十分接近基本的C和C++编程语言和语法;
  • 做代码分析时,即使对于第三方代码阅读器而言,也能轻松解析其中引用的语义;
  • 所有权系统设计非常合理,这也让Rust变得特点鲜明;
  • 由于有逻辑内存分配、引用处理和内存管理等特性,Rust内置的包管理器Cargo功能非常强大;
  • Rust的编译器自身功能令人惊叹

Rust比Java好在哪?

即使对于一个中等水平的程序员而言,从Java切换到Rust也是一件很容易的事情。从一开始学习,你就会觉得概念和语法似曾相识,这能让学习和编程都变得十分容易。因此,尽管Rust的确在技术上朝前迈出了一大步,但程序员在编程习惯上并不需要做出很大的调整。使用Rust语言,你可以放心大胆地去探索各式类型新颖的复杂项目,而之前由于Java语言的复杂性,你不敢轻易尝试这些项目。对于独立开发者来说,完美的资源分配和良好的内存管理是必备之选,这的确是Rust一个较大的优点。

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

结束语

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

原文链接:

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

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/0vsWtFtyw29liSoH6Dyp
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券