前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是Rust?安全的高性能开发语言

什么是Rust?安全的高性能开发语言

作者头像
老夫编程说
发布2023-02-10 21:22:08
2K0
发布2023-02-10 21:22:08
举报
文章被收录于专栏:Java 温故知新Java 温故知新

Rust 是由 Mozilla 主导开发的通用、编译型编程语言,以“安全、并发、实用”为设计准则,支持函数式、并发式、过程式以及面向对象的编程风格。

最初是 Mozilla 员工 Graydon Hoare 的私人项目,在 2010 年首次公开;2011 年,其编译器开始由原本的 OCaml 语言转移到用 Rust 语言,实现自举,这个版本的编译器在架构上采用了 LLVM 做为后端。

Rust 语言

Rust 1.0 是第一个稳定版本,于 2015 年 5 月 15 日发布。

性能、安全、易编写是传统软件开发中语言选型需要考虑的点,但一直以来,往往无法全部兼顾;强调易编写和安全的语言往往很慢(比如 Python),强调性能的语言往往很难驾驭(如 C 和 C++ ),让人又爱又恨。

那不禁要问,这三点都能在一种语言中实现吗?更重要的是,即便有,能获得开发者们的认可吗?Rust 语言的诞生便是为了解决这个问题,目前由 AWS、华为、谷歌、微软 和 Mozilla 等公司成立的 Rust 基金会也正是为了让 Rust 变得更好,进而推进 Rust 语言获取更多开发者的认可。

Rust 的目的是快速、安全和尽可能的容易编写,最终被广泛使用。创建一种安全、性能和易编写并重的语言的理由很多。

Rust编程语言的优势

Rust 最初是 Mozilla 的一个研究项目,部分目的是重新实现 Firefox 浏览器的关键组件。有几个关键原因推动了这一决定:

  • 火狐浏览器需要更好地利用现代多核处理器;
  • 几乎无处不在的网络浏览器,尤其需要安全使用的环境;

但这些优点不仅仅是浏览器需要,是所有软件都需要的,而这也是为什么 Rust 从一个浏览器组件项目演变成了一个完整的语言项目。Rust 通过以下特点实现了其安全性、速度和易用性:

Rust 的高性能

Rust 代码可以在多个平台上编译成本地机器代码。二进制文件是独立的,除了操作系统可能提供的运行时间外,没有外部运行时间,而且性能与用 C/C++ 编写的程序的性能一样好。

Rust 是跨平台的,可以在三个主要平台:Linux、Windows 和 MacOS 上运行,并都提供完整的工具链、库管理;Rust 工具链在 Windows 的能力与在 Linux 和 MacOS 上一样。除此之外,Rust 还支持开发 Linux 内核。

Rust 是内存安全的

不安全使用内存的代码不能通过Rust的编译,大多数内存错误的程序都是在程序运行时发现的。Rust的语法和语言隐喻(language metaphors)确保了空指针或悬空指针、数据竞赛等内存问题不会进入生产,因为编译器会强制要求修复这些问题,否则无法通过编译。

Rust 是低开销的

Rust通过严格的所有权规则实现内存管理,语言中的任何给定值都可以被被持有和操纵,一次只能被一个变量所拥有。

Rust程序中的每一点内存都是通过所有权自动跟踪和释放的,对象之间所有权的转移方式由编译器严格控制,所以在运行时不会出现内存分配错误的情况;

而所有权也意味着Rust不需要像Java和C#语言那样需要垃圾回收机制来释放内存,也就不再需要额外的STW时间,给Rust带来了另一种性能提升。

Rust 强大的语言特性

对于新人来说,如果发现 Rust 语言无法实现他想要的功能,或者语言缺少想要的特性,那么这个开发者往往会选择离开,就更别谈愿意用这种语言开发程序了。

Rust 的原生语言特性:宏、泛型、模式匹配和组合(通过 traits)都是 Rust 中的一等公民。与 C++ 等语言相比,大部分都能对应起来,对于这些语言的开发者来说,转入 Rust 开发,难度不会太高。

Rust标准库

Rust 更大的使命之一是鼓励 C 和 C 开发者尽可能地使用 Rust,但是 C 和 C 语言并没有一个像样的标准库,并且在标准库中能够使用容器、集合和迭代器,字符串操作,线程,管理进程,访问网络和文件I/O等等。

Rust 在其标准库中做到了所有这些,甚至更多;因为 Rust 是为跨平台而设计的,所以它的标准库只能包含可以安全可靠地跨平台移植的库。像 Linux 的 epoll 这样的操作系统的平台特定函数必须通过第三方库的函数来支持,比如 libc、mio 或 tokio。

在没有标准库的情况下使用 Rust 也是可能的,这样的场景往往是:嵌入式系统或操作系统内核。

Rust 有大量的第三方库

衡量一门语言的实用性的一个标准是,在第三方的帮助下,可以用它做多少事情。Cargo 是 Rust 库(crate)的官方仓库,列出了大约 6万 多个 crate。

其中有相当数量的是与常用库或框架的 API 绑定,因此 Rust 可以作为这些框架的一个可行的语言选择。每个开发者都可以提交的自己开发的三方库到官方库,贡献给其他开发者使用。

Rust 编程语言的缺点

尽管 Rust 具有所有吸引人的、强大和有用的功能,但它也有缺点。其中一些障碍使新的 "Rustaceans"(Rust 粉丝之间的相互称呼)和老手都被绊倒。

Rust 变化多

Rust 仍然是一种年轻的语言,它在2015年才发布1.0版本。尽管语言的许多核心语法和功能已经被敲定,但围绕它的许多其他特性仍在不断变化。

例如,异步操作在Rust中仍然是一项正在进行的工作。异步的某些部分比其他部分更成熟,而且许多部分是通过第三方组件提供的。

Rust学习路线陡峭

Rust作为一个全新的语言,他的所有权、借用和Rust的内存管理对于许多新手Rust程序员都有一个共同的痛点,就是 fighting the borrow checker,在不充分了解Rust特有的机制之前,会经常触发编译器发出这个提示。因此,入门Rust语言要比其它语言花费更多时间和精力。

与其他语言相比,Rust 的隐喻使得代码更加冗长。例如,Rust 中的字符串连接并不总是像 string1+string2 那样直截了当。一个对象可能是可变的,另一个是不可变的。Rust 倾向于把更多问题让程序员提前解决,或者告诉编译器如何处理,而不是让编译器猜测。

Rust 和 C/C++ 相互调用不便利

像 C/C++ 一样,Rust 可以用来编写系统级软件,因为它允许直接操作内存;很多时候,Rust 被用来插入现有的 C/C++ 编写的库;因此就避免不了的要和C/C++编写的库相互调用,但是 Rust 并没有提供一个很好的解决方案。

官方团队意识到了其中的许多问题,并正在努力改善这些问题。例如:为了使 Rust 更容易与 C/C++ 相互协作,Rust 引入了 bindgen 这样的项目,它可以自动生成 Rust 与 C 代码的绑定。

尽管 Rust 有着不少的不尽如人意之处,但也确确实实为解决安全和性能问题提供了一种可行的解决方案,现在也有越来越多的开发者和科技巨头加入了进来,和官方团队一起努力,想办法来解决这些问题,让 Rust 变得更好。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老夫不正经 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rust编程语言的优势
  • Rust 的高性能
  • Rust 是内存安全的
  • Rust 是低开销的
  • Rust通过严格的所有权规则实现内存管理,语言中的任何给定值都可以被被持有和操纵,一次只能被一个变量所拥有。
  • Rust 强大的语言特性
  • Rust标准库
  • Rust 有大量的第三方库
  • Rust 编程语言的缺点
  • Rust 变化多
  • Rust学习路线陡峭
  • Rust 和 C/C++ 相互调用不便利
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档