作者:京东批发 王梦津
I. 前言
Rust,不少程序员的白月光,这里咱们简略列举一些大牛的评估。
Linus Torvalds:Linux 内核的创始人,对 Rust 的评估是:“Rust 的次要长处是代码的安全性和速度,很难在 C ++ 中实现这种安全性,而且 Rust 编译器会捕捉很多 C ++ 难以发现的谬误”。
Brian Kernighan:C 语言的创始人之一,对 Rust 的评估是:“Rust 是一门十分弱小的程序语言,在资源管理、内存平安、多线程等方面具备很强的能力”。
Rob Pike:Go 语言的创始人之一,对 Rust 的评估是:“Rust 是一门很有前途的语言,它将许多最佳实际和先进技术整合在了一起,是将来零碎编程的重要抉择”。
越来越多大学的课程设计中也将 rust 作为了一个选项,
比方取得国家精品课程的清华大学的操作系统: http://rcore-os.cn/rCore-Tuto…
如果下面这些让你对 rust 感兴趣了的话,能够移步官网学习链接:https://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 生态的咱们理解了另一个生态下更加显式的内存治理、高效的内存调配以及代码安全性和可读性的设计思路,也同时通知了咱们程序语言的设计上对于老本、效率永无止境的谋求。