云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

数据库服务器_十五年之痒百度云_0元

小七 141 0

网络云服务器_如何选择_哪个云主机平台好用

在第一篇博文中,我首先概述了Rust编程语言,并向您展示了我在Rust中基本实现SAP云应用程序编程模型(CAP)的一些示例。

现在让我们来分析一下Rust与其他编程语言的不同之处。前面显示的所有特性都不是新的,而是从其他语言借用的,这很好。人们并不总是需要重新发明轮子。

但是有一件事生锈了:借阅检查器。我之前告诉过你,在云上,Rust没有垃圾收集器,作为一个程序员,返利怎么用,你不必处理手动内存管理。但这是怎么起作用的,这是某种魔法吗?如果你遵循这些概念,答案很简单。(我遵循官方的Rust手册的指导)

Rust编译器不断检查这些所有权规则:

Rust中的每个值都有一个称为其所有者的变量。一次只能有一个所有者。当所有者超出范围时,值将被删除。

这是非常直观的,但在实践中如何工作?首先我们需要介绍堆栈和堆。

在许多编程语言(包括Rust)中,内存有几个部分:堆栈和堆。堆栈遵循"后进先出"的原则,这意味着您可以将数据推送到堆栈上,中移物联网,最后推送的数据将弹出。堆栈上的所有数据都必须有一个固定的大小,所以像未知大小的向量之类的东西必须存储在其他地方。这就是堆进入画面的地方。这是一个组织较少的空间,内存分配器需要找到一个空空间来存储数据,返利系统,这称为分配。然后在堆栈上存储指向堆上该位置的指针。由于堆栈不需要分配器,包括所有簿记把戏,所以存储数据的速度更快。读取堆栈上的数据也更快,因为处理器不需要跟随指针在内存中来回跳转。

现在让我们看看实际的所有权原则,考虑堆栈上的数据:

现在让我们考虑堆上的数据:

这段代码将导致非常有用的编译器错误:

有多个所有者,如果变量超出范围,编译器不知道是否应该释放相应的内存。此外,还会有不受控制的突变导致许多讨厌的错误,例如"免费使用"。本文详细研究了内存安全缺陷以及生锈如何消除这些缺陷。

所有权原则也适用于函数调用,也就是说,如果使用输入参数调用函数,则将所有权转移到函数中的变量。如果函数返回数据,它将再次移动到接收器。

如果没有额外的机制,这将是一个非常低效的编程方式,因为它的方式过于限制。例如,函数不可能只读取数据而不获取所有权。因此,让我们看看我们如何克服这些限制。

诀窍在于硬编码数据使用者的意图:他们是想拥有所有权,还是只想读取数据,还是另外想改变数据(但以可控的方式)?我们已经看到了所有权是如何被移动的,所以让我们看看如何告诉编译器我们不想要所有权,并且我们不会改变数据。这被称为"不可变借用",它看起来是这样的:

这里,`s`仍然是字符串的所有者,只是函数'calculate\u length'借用了它一小段时间。

也有可能借用某些东西并打算对其进行变异。看看这个:

现在如果我们不建立更多的规则,北京大数据研究院,这将再次导致讨厌的错误,所以我们来:

在任何给定的时间,你可以有一个可变的引用或任何数量的不可变的引用。引用必须总是有效的。

第一条规则防止类似的情况:

我们得到编译器错误:

这确保不可变引用的使用者不必处理数据更改。

第二条规则确保您不能有悬空指针。考虑这个例子:

生锈编译器给你一个错误:

这是有意义的。你不能仅仅返回一个指向某个即将超出范围的东西的指针。

还有很多东西需要学习(尤其是生命周期的概念),但这会让你第一眼看到借用检查器。所有这些规则一开始可能会让人困惑,但随着时间的推移,在Rust编译器的帮助下,您将掌握其中的诀窍。作为回报,您可以免费获得内存管理,消除所有类的错误,并拥有更好的结构化程序。