Rust是未来的5个理由

zhouxiaojie 2020-09-16

如果您正在寻找某种金属面板业务,请让我澄清一下:我所指的Rust是一种编程语言。

还在那里?

当我8岁开始学习编程语言时,世界处于不同的状态,计算机更像是浪漫而神奇的盒子,而不是抖音如今使用的工具。

GW-Basic和C是我在可以直接访问内存的时代从事计算机科学的第一门镜头,这是许多人的乐趣和他人的利益。 通过某些语言提供的合法构造,对操作系统内核进行野蛮攻击是如此容易。

Rust是未来的5个理由

> If this picture makes you nostalgic you are old enough to continue reading. If not, keep reading :

我在学术界的这些年一直以在后端系统中大量使用C(更少使用C ++)以及在计算机科学中实现常见且更奇特的算法为特征。 我博士的岁月大跃进 其特点是大量使用C并指示编译器减轻所有低级编程语言均会受到的讨厌问题,即直接访问内存。 因此,诸如忘记忘记已经释放了内存(双重释放),超出数组限制的读取/写入(缓冲区溢出),指向和访问无效内存等问题导致了我们所知的一些最严重的攻击 迄今为止的计算机科学史。

那么这与Rust有什么关系呢?

事实上,Rust从字面上抹去了我大部分的博士学位。 一种新的编程范例。 而且我一点也不生气。

在攻读博士学位期间,我最雄心勃勃的目标(不仅是我的目标) 是要构建一个编译器来自动修复内存的双重释放问题,缓冲区溢出和无效指针(有时甚至没有通知开发人员最终要一遍又一遍地重复该讨厌的错误-这是什么意思?)。

Rust做到了这一点:它通过引入一种新的方法将许多职责从开发人员转移到了编译器(对于Python程序员,编译器就是您每次都写得很好……Python便会放弃灵活性和性能。 编程范例。

在这样的范例中,不可能有这些错误。 编译器只会拒绝继续并生成有问题的程序。 更加花哨的Rust编译器的唯一副作用是,它肯定会使开发人员感到沮丧。 但是我没有解决方案。 是时候再拿博士学位了?

Rust通过在编程语言设计中利用五个基本概念来提供如此出色的功能。 尽管有些紧密相关,但让我简要介绍一下它们。

借阅检查器

Rust的借阅检查器可确保引用(和指针!)不会超出它们指向的数据的寿命。 所有内存不安全的错误? 走了 "是的,但是伙计……我正在失去灵活性",您说吗? 不用担心,您仍然可以使用不安全的Rust。 如果您觉得自己应该承担责任(并且您最好知道正在做的WTF),那就继续吧,使代码不安全并释放一些超级功能。 好消息是,当您遇到错误时(伙计),您将确切知道在哪里查看。 还记得您写过的并且感到如此自豪的不安全代码吗? 也许您想看看那里。

所有权

如果您不想整理房间,那么其他人(妈妈?)将不得不这样做。 这将是有代价的(不要让我去那里)。 为什么所有基于垃圾收集器的语言都比没有垃圾收集器的语言慢,这是有原因的。 你猜怎么了? 所有权是一种编程范例,允许Rust以零成本跟踪内存(并在不再使用时释放内存)。 怎么样? 通过改变程序员习惯于思考的方式(相信我,Rust迫使您思考的方式是正确的方式)。 琐碎的

let y = SomeType { field: String::from("hello") };  
let x = y;  
println!("{:?}", y); // This will fail. We no longer own y 

将y的所有权移到x。 这意味着在该语句之后不能使用y。 这个简单的概念使编译器可以为您管理内存并使房间保持无可挑剔的状态。

并发

这是一个很大的。 特别是由于在多核上分布计算的总体趋势。 Rust不仅使并发变得容易(还相对容易,有时语法是b!tch)。 所有权和锁定机制的结合使Rust中的并发性变得无所畏惧。 通道强制执行线程隔离,并且数据受锁保护,并且仅当持有锁时才能访问数据。 这样可以防止意外共享状态。 数据争用是不可能的(编译器只会拒绝生成可能导致数据争用的代码)。

可移植性

Rust编译器基于LLVM构建,而LLVM可以为大量目标平台生成机器代码。 尽管此级别的可移植性还不如C / C ++大,但请记住Rust仅10岁(刚开始编程时比我大一点,多么可爱?)

速度与安全

如果要编译器生成安全代码,请准备放弃性能。 低级安全社区意识到有多少代码检测技术可以使您的软件变慢(以至于许多人更愿意将不安全的代码换成高性能代码)。 使用Rust,您可以同时拥有两者。 Rust是一种编译语言。 与C / C ++和其他编译语言所产生的机器代码一样,所产生的机器代码也可以进行优化(并且随着编译器变得更加智能,其优化程度也会更高)。

至于速度,可以在此处找到不错的Rust与C的比较,并在此处进行更详细的说明。 只需考虑在惯用的Rust和惯用的C之间进行比较。不用说,糟糕的代码性能不可能好,与选择的语言无关。

当然,这篇文章并不能给Rust带来公义,因为Rust提供了更多令人惊奇的东西。 尽管这是一种绝对要用于系统编程的语言,但是社区正以惊人的速度增长,并在纯Rust中封装了包和库的crates.io出现了。 我要说的是有很多重复,很多图书馆似乎都被放弃了。 我相信这是由于许多开发人员和工程师最初的热情所致,他们一直在对Rust进行测试。

相关推荐