作者:京东零售 王梦津

I. 前言

Rust,不少程序员的白月光,这里咱们简单罗列一些大牛的点评。

Linus Torvalds:Linux内核的创始人,对Rust的点评是:“Rust的首要优点是代码的安全性和速度,很难在C++中实现这种安全性,而且Rust编译器会捕获许多C++难以发现的过错”。

Brian Kernighan:C言语的创始人之一,对Rust的点评是:“Rust是一门非常强大的程序言语,在资源办理、内存安全、多线程等方面具有很强的才能”。

Rob Pike:Go言语的创始人之一,对Rust的点评是:“Rust是一门很有出路的言语,它将许多最佳实践和先进技术整合在了一同,是未来系统编程的重要挑选”。

越来越多大学的课程规划中也将rust作为了一个选项,

比如取得国家精品课程的清华大学的操作系统: rcore-os.cn/rCore-Tutor…

假如上面这些让你对rust感兴趣了的话,能够移步官方学习链接:doc.rust-lang.org/book/

II. Rust Ownership概述

这篇文章咱们介绍一下rust的一个核心概念 ownership

Ownership是Rust言语的一个核心概念,它决议了一个值在程序中的生命周期以及对其拜访权限的约束。Rust的Ownership有以下几个特点:

Rust有严厉的内存安全性:Ownership规矩决议了在程序中每一个值的生命周期,因而在Rust程序中不存在内存走漏和数据竞争问题。

Rust是一种静态言语:在编译阶段就能够确定程序中每一个值的生命周期,因而程序的功能是非常稳定的。

清晰的资源办理:Ownership规矩决议了程序中的资源怎么被分配,开释和办理,因而程序员不用手动进行内存办理。

总的来说,Rust的Ownership供给了一种经过清晰的规矩办理内存和资源的方法,然后防止了许多常见的编程过错,使程序员能够开发出更安全,高效,牢靠的程序。

III. Ownership的代码实践

// Rust代码
fn main() {
 let v = vec![1, 2, 3];
 let _v2 = v;
 println!("{:?}", v);
}

上面的 Rust 代码会发生编译过错,因为在 Rust 中一个变量只能有一个所有者。在本代码中,当将 v 赋值给变量 v2 时,v 就不再拥有它分配的内存,所以 v 不能被运用。比较之下,C++代码是这样的:

#include <vector>
#include <iostream>
int main() {
 std::vector<int> v = {1, 2, 3};
 std::vector<int> v2 = v;
 std::cout << v[0] << std::endl;
 return 0;
}

这段 C++ 代码不会发生任何过错,即使 v 被赋值给 v2,v 依然能够被运用。这是因为 C++ 运用废物收回机制,它在运行时才检测到内存问题,而 Rust 运用编译期所有权办理机制,能够在编译阶段发现内存问题,更安全。

IV. Ownership与内存办理

首要和c++比较

C++不供给相似于Rust Ownership的特性首要是因为C++言语的前史和规划目标的差异。C++在更早的时代就已经存在,而且它的目标是在C言语的基础上添加面向对象编程的支持。它的目标是供给最大的灵活性和可控性,以便开发人员能够最大限度地运用系统资源和高效的底层操作。因而,在C++中,内存办理的责任首要在开发人员的身上。

而Rust言语则在现代编程言语中引入了Ownership概念,其目标是经过对内存办理和资源办理的严厉约束来进步代码的安全性和牢靠性。在Rust言语中,Ownership机制能够防止许多常见的编程过错,例如悬空指针、数组越界、运用已开释的内存等。因而,假如C++也想要实现相似的特性,那么它必须从言语规划的视点进行许多改变,而这在当前已经有大量C++代码存在的情况下是很困难的。

总归,C++和Rust言语的内存办理和Ownership特性之间的差异首要是因为两种言语的前史和目标不同导致的。C++更注重开发人员的灵活性和可控性。

和咱们熟悉的jvm废物收回比较

规划目标:Rust Ownership 旨在在编译时防止内存问题,例如空间走漏和运用开释的对象,并确保程序的安全性和功能。比较之下,JVM 废物收回则是在运行时办理内存的机制,旨在处理内存走漏和碎片化问题。

编程体会:Rust Ownership 需求程序员常常手动办理对象的生命周期,对语法要求比较高。比较之下,JVM 废物收回则不需求程序员进行内存办理,但是运行时可能会因废物收回带来功能问题。

内存安全:Rust Ownership 经过在编译时防止内存问题,供给了更高的内存安全确保。比较之下,JVM 废物收回可能存在内存问题,例如内存走漏,但通常情况下仍是比较安全的。

功能:Rust Ownership 能够经过防止编译时防止内存问题来进步功能。比较之下,JVM 废物收回的功能可能会遭到废物收回带来的影响,但它依然能够经过其他方法优化功能。

V. 总结

本文介绍了Ownership的概念、特点和优势。

让熟悉JVM生态的咱们了解了另一个生态下愈加显式的内存办理、高效的内存分配以及代码安全性和可读性的规划思路,也一起告诉了咱们程序言语的规划上关于成本、效率永无止境的追求。