什么是锈? 安全,快速,简便的软件开发

快速,安全,易于编写-任意选择两个。 长期以来,这一直是软件开发的状态。 强调便利性和安全性的语言往往很慢(例如Python )。 强调性能的语言往往很难使用,并且很容易让您大吃一惊(例如C和C ++)。

所有这三个属性都可以用一种语言提供吗? 更重要的是,您可以与世界合作吗? Rust语言最初由Graydon Hoare创建,目前由Mozilla Research赞助,是一种尝试做这些事情的尝试。 Google Go语言具有类似的抱负 ,但Rust旨在尽可能减少对性能的让步。)

[下载InfoWorld 关于微服务基本指南,并学习如何创建可扩展的现代Web和移动应用程序。 | 通过《 InfoWorld日报》时事通讯了解最新的企业技术中的关键新闻和问题。 ]

相关视频:使用Rust开发更安全的软件

快速开始使用旨在创建快速的系统级软件的Rust新手。 这个为时两分钟的动画讲解者展示了Rust如何绕过令人烦恼的内存和管理编程问题。

Rust旨在快速,安全并且相当容易编程。它也打算被广泛使用,而不仅仅是出于好奇或在语言抽奖中也碰到麻烦 创建安全与速度和发展能力并驾齐驱的语言的理由很多。 毕竟,存在大量的软件(其中一些驱动关键的基础架构)采用的语言不是安全第一位。

Rust编程语言的优势

Rust从Mozilla的一个研究项目开始,部分目的是重新实现Firefox浏览器的关键组件 做出该决定的几个关键原因:Firefox应该更好地利用现代的多核处理器。 而且网络浏览器无处不在意味着它们需要安全使用。

但是所有软件(不仅仅是浏览器)都需要这些好处,这就是Rust为何从浏览器项目演变为语言项目的原因。 Rust通过以下特征实现了安全性,速度和易用性。

生锈快

Rust代码可跨多个平台编译为本机代码。 二进制文件是自包含的,没有运行时,并且生成的代码将具有与用C或C ++编写的可比较代码相同的性能。

锈是记忆安全的

Rust不会编译试图使用不安全内存的程序。 程序运行时会发现大多数内存错误。 Rust的语法和语言隐喻确保其他语言中与内存相关的常见问题(空指针或悬空指针,数据争用等等)永远不会进入生产环境。 编译器会标记这些问题,并在程序运行之前强制将其修复。

锈病费用低

Rust通过严格的规则来控制内存管理。 Rust的内存管理系统通过称为所有权的隐喻以语言的语法表示。 语言中的任何给定值一次只能由一个变量“拥有”,持有或操纵。

所有权在对象之间转移的方式由编译器严格控制,因此在运行时不会出现内存分配错误形式的意外消息。 所有权方法还意味着没有像Go或C#这样的语言中没有垃圾收集的内存管理。 (这也使Rust有了另一个性能提升。)Rust程序中的每一位内存都是通过所有权隐喻自动跟踪和释放的。

防锈灵活

如果需要,Rust会让您危险地生活。 在需要直接操作内存的地方,Rust的安全性可能会部分暂停,例如在C / C ++中取消引用原始指针。 关键字部分是因为Rust的内存安全操作永远不会被完全禁用。 即使那样,您也几乎不需要为常见的使用场合解开安全带,因此最终结果是默认情况下更安全的软件。

防锈易于使用

如果不使用Rust的安全性和完整性功能,则不会增加任何功能。 这就是为什么Rust的开发人员和社区试图使该语言对新手有用和欢迎的原因。

生成Rust二进制文件所需的一切都在同一包中。 仅当您在Rust生态系统之外编译其他组件(例如从源代码编译的C库)时,才需要外部编译器(例如GCC)。 Microsoft Windows用户也不是二等公民。 Rust工具链的功能与Linux和MacOS一样强大。

Rust是跨平台的

Rust可在所有三个主要平台上运行:Linux,Windows和MacOS。 除了这三者,其他人也得到了支持。 如果您想交叉编译或为不同于您当前正在运行的体系结构或平台生成二进制文件,则需要做更多的工作 ,但是Rust的主要任务之一是最大程度地减少此类任务所需的繁重工作量。工作。 同样,尽管Rust在大多数当前平台上都可以工作,但创建者的目标并不是绝对在任何地方编译Rust-只是在任何流行的平台上编译,而不必在任何地方进行不必要的妥协即可。

Rust具有强大的语言功能

如果发现开发人员的功能比以前更少或较弱,那么很少有开发人员希望以新语言开始工作。 与C ++等语言相比,Rust的本地语言功能具有优势:宏,泛型,模式匹配和组合(通过“ 特征 ”)都是Rust的一等公民。

Rust有一个有用的标准库

Rust更大使命的一部分是鼓励C和C ++开发人员尽可能使用Rust而不是那些语言。 但是C和C ++用户希望拥有一个不错的标准库,他们希望能够使用容器,集合和迭代器,执行字符串操作,管理进程和线程,执行网络和文件I / O等。 Rust在其标准库中完成了所有这些工作,甚至更多。 因为Rust设计为跨平台的,所以它的标准库只能包含可以可靠地跨平台移植的内容。 必须通过第三方库(如libc,mio或tokio)中的功能来支持特定于平台的功能(如Linux的epoll)。

也可以使用不带标准库的 Rust。 这样做的一个常见原因是构建没有平台依赖性的二进制文件,例如嵌入式系统或OS内核。

Rust有很多第三方库,也称为“坑”

语言的效用的一种衡量标准是借助第三方可以完成多少工作。 用于Rust库的官方存储库Cargo (称为“坑”)列出了大约一万个箱子。 它们中的大多数是与常见库或框架的API绑定,因此Rust可以用作那些框架的可行语言选项。 但是,Rust社区尚未根据其整体质量和实用性提供详细的整理箱或板条箱排名,因此,如果您不亲自尝试或对社区进行民意调查,就无法判断出什么效果很好。

Rust具有良好的IDE支持

同样,很少有开发人员希望在他们选择的IDE中接受很少或根本没有支持的语言。 因此,Rust最近推出了Rust语言服务器 ,该服务器可将Rust编译器向Microsoft Visual Studio Code等IDE提供实时反馈。

什么是锈? 安全,快速,简便的软件开发IDG

来自Rust语言服务器的Visual Studio Code中的实时反馈。 Rust语言服务器不仅仅提供基本的语法检查; 它还决定了诸如变量使用之类的事情。

Rust编程语言的缺点

除具有所有吸引人的,强大的和有用的功能外,Rust还具有缺点。 这些障碍中的一些绊倒了新的“ rustaceans”(就像Rust迷互相呼唤)和旧手一样。

锈是新的

Rust仍然是一门年轻的语言,仅在2015年才发布了1.0版本。因此,尽管许多核心语言的语法和功能都已被确定下来 ,但围绕它的许多其他事情仍然很不稳定。

例如,异步操作在该语言的语法中仍然不能很好地表示。 正在通过asyncawait关键字实现异步操作的工作。

Rust很难学

如果关于Rust的任何一件事情最有问题,那就是很难理解Rust的隐喻 所有权,借用和Rust的其他内存管理构想让每个人第一次感到难过。 许多新手Rust程序员都有一个共同的习惯,即“抗衡借用检查器”,在此他们直接发现编译器如何将可变的和不可变的东西分离开来。

锈很复杂

与其他语言相比,Rust的隐喻如何使冗长的代码变得有些困难。 例如,Rust中的字符串连接并不总是像string1+string2那样简单。 一个对象可能是可变的,而另一个则是不可变的。 Rust倾向于坚持让程序员说明如何处理此类事情,而不是让编译器猜测。

另一个例子:Rust和C / C ++如何协同工作。 在很多时候,Rust用于插入用C或C ++编写的现有库。 在Rust中,很少有C和C ++项目是从头开始重写的。 (而且,当它们出现时,它们倾向于以增量方式重写。)

Rust语言路线图

Rust团队意识到其中许多问题,并正在努力加以改善。 例如,为了使Rust更易于在C和C ++中使用,Rust团队正在研究是否扩展诸如bindgen之类的项目,该项目会自动生成与C代码的Rust绑定。 团队还计划使借贷和生活更灵活,更容易理解。

尽管如此,Rust仍成功实现了其目标,即以其他语言所不能提供的安全,并发和实用的系统语言,并以补充开发人员已经工作的方式来做到这一点。

From: https://www.infoworld.com/article/3218074/what-is-rust-safe-fast-and-easy-software-development.html