What is Rust? Why Rust?

why Rust?

在这里插入图片描述

目前,Rust 变得越来越流行。然而,仍然有很多人(和公司!)误解了 Rust 的主张价值是什么,甚至误解了它是什么。在本文中,我们将讨论 Rust 是什么以及为什么它是一种可以增强您的技能的良好编程语言。

What is Rust?

简而言之,Rust 是一种多范式、通用目的语言。因此,它目前正在许多领域中使用和试验。来自 Rust 网站:

A language empowering everyone to build reliable and efficient software.
这种语言使每个人都能够构建可靠且高效的软件。

借用检查器(borrow checker) 和所有权(ownership model)模型使其能够保持较低的内存使用量。类型系统与 Rust 的 traits 相结合,提供了某些通常在其他语言中不可能实现的安全保证(例如内存安全)。 Rust 的 crate 管理器 Cargo 也是一个 formatter、linter 和 test runner。 Rust 有一个小型标准库,为您自己的工具提供构建块。这消除了将内容添加到标准库的官僚主义。

Rust 迄今为止历史的简短总结

2006 年,Rust 最初是由当时 Mozilla 的软件开发人员 Graydon Hoare 创建的一个小型业余项目。 2009 年,Mozilla 正式赞助该项目,并于 2015 年 5 月实现稳定版本。此后,微软、亚马逊和 Cloudflare 等许多公司都采用了 Rust。 2022 年 12 月,Linux 内核也开始使用 Rust。该语言在社交媒体上也非常受欢迎,许多 Rust 开发人员在他们的名字中使用了螃蟹表情符号。随着时间的推移,主要开源 Rust 生态系统的增长变得越来越快。该社区非常强大,许多贡献者现在在他们的工作中使用 Rust。

使用 Rust 的原因

以下是 Rust 能够帮助您成为更好的程序员的一些原因 - 不仅仅是因为“Rust 速度快并且无畏并发”。虽然这仍然是事实,但我们想深入研究一些更深入的细节。

Rust 无需尝试即可为您省钱

由于内存占用较低,几乎可以肯定你会通过使用 Rust 来省钱。一个普通的 Java Spring 或 Python Django 应用程序可以在大型应用程序中使用许多 GB 的内存。如果您尚未优化您的应用程序,或者您在某处遇到随机内存泄漏,则尤其如此。使用 Rust,您很可能已经在内存消耗方面领先,无需任何花哨的技巧 - 但如果您需要它们,它们就在那里!不要只相信我们的话。一家公司从 Ruby 切换到 Rust,节省了 87% 的计算成本。您可以在这里找到有关他们如何做到这一点的更多信息。

即使您不打算在生产中直接使用 Rust,您仍然可以在应用程序中使用它。您可以通过使用 Rust 模块然后使用外部函数接口 (FFI) 来完成此操作。虽然这需要您付出一些努力(特别是如果您不熟悉使用 FFI),但它还可以让您处理得更快,从而节省资金。这也允许更加逐步地采用 Rust,这可能更符合您的喜好。当然,您也可以使用 wasm-bindgen 将 Rust 转换为 WASM,这对于任何基于 JavaScript 的应用程序来说都是完美的。

Rust 中的错误处理非常棒

Rust 是一种强制您预先处理错误的语言。大多数 Rust 开发人员都知道,您应该在生产中尽可能避免使用 .unwrap() 。然而,很高兴知道当您准备好时,您可以随时返回并改进错误处理。以下面的语句为例:

thing.use_function_that_can_fail().unwrap();

您可以将其转换为使用模式匹配:

let result = thing.use_function_that_can_fail();match result {Ok(result) => result,Err(error) => println!("{error}");
}

这可用于匹配单个错误。同时,您还可以使用 ?号来传播错误:

thing.use_function_that_can_fail()?;

这尝试将错误转换为函数返回的错误类型。这意味着您可以避免展开和模式匹配!有许多软件包可以帮助您改进错误处理,例如 eyreanyhow 。您可以在此处找到有关错误处理的更多信息。

Rust 语法很丑陋

是的,语法很丑陋。然而,习惯new types的语法(无论它们是否丑陋!)通常是一件好事,因为它可以帮助您获得新的视角。这有点类似于学习一门新口语后获得新的视角,因为单词可以起源于何处。文化观念可以影响口语的形成方式。

特别是,模式匹配导致了诸如 let-elseif-let 之类的事情。这是您在其他主流编程语言中看不到的两个语法示例。让我们快速浏览一下这两个操作:

// using let-else
let Ok(some_result) = function_that_can_fail() else {return Err("The function failed!");
}// using if-let
if let Ok(result) = function_that_can_fail() {println!("The function succeeded!");
}

如您所见,相当简单。它还避免了我们必须直接使用模式匹配,而是允许我们“匹配” 分支,因为 Rust 是一种面向表达式的语言。

这是因为 Rust 是一种具有高度表现力的语言。通过让自己接触新想法,我们可以学习新的方法来做事,使我们的代码更具可读性或性能更好。许多开发人员甚至从 Rust(或一般的函数式编程)中汲取灵感,并用其他语言实现它们:例如 Result 枚举类型。

Rust 最终也可能成为通向其他功能性编程(“FP”)语言(如 OCaml)的门户。尽管不是最近,Rust 的第一个编译器迭代实际上是用 OCaml 编写的。尽管这两种语言没有正式相互关联,但这两种语言之间有很多相似之处,特别是 Rust 对求和类型(“枚举”)和一般代数数据类型的使用。

Rust 被用在哪?

当然,如果没有使用 Rust 的公司列表,本文就不完整。这里有一些例子。

Cloudflare

Cloudflare 使用 Rust 并不是什么大秘密。 Google 搜索“cloudflare rust”会返回 Oxy,他们的新代理框架。他们还用 Rust 编写了自己的内部代理,称为 Pingora。查看他们的博客还会返回许多与 Rust 相关的文章的搜索结果。最早讨论使用 Rust 进行 Cloudflare 开发的文章是在 2019 年。

1Password

1Password 并不是在向世界大喊他们使用 Rust。然而,一看他们的 GitHub 组织页面就知道他们非常频繁地使用它。他们还通过发布 crates 为 Rust 生态系统做出了贡献。其中之一是 passkey-rs,它是实现 Webauthn Level 3 和 CTAP2 标准的库的集合。

Daimler (Mercedes-Benz)

大约 4 年前,Mercedez-Benz集团的一些内部源代码被泄露。尽管大部分代码都是 C++,但值得注意的是还包含了一些 Rust。此外,该组织的第一个开源贡献是 Rust。大致可以推断,他们很可能一直在使用它。这对于汽车行业的 Rust 来说是一个很好的迹象——即使它不是代码的大部分。

Shuttle

我们的平台也主要是用 Rust 编写的!我们通过使用宏的 Rust 箱来配置运行时和基础设施资源。我们的平台还允许您编写自己的资源宏。虽然我们目前主要支持 HTTP 服务,但我们目前正在考虑升级我们的内部系统,以允许使用原始 TCP、指定 Rust 工具链等功能。

可以在此处找到使用 Rust 的更详尽的公司列表。

不使用 Rust 的原因

尽管 Rust 具有所有优点,但如果您打算采用 Rust,仍然存在一些明显的优势。以下是使用 Rust 时可能导致问题的一小部分内容。

学习曲线陡峭

一旦你真正学会了 Rust,一切都会很顺利。然而,在此之前,请做好应对一些非常不舒服的颠簸的准备。特别是,借用检查器(borrow checker)(尤其是在没有适当关注范围的情况下)可能是一个大问题。您可以使用以下一些快速提示来改善您的 Rust 初始学习体验:

  • 尽可能使用引用。函数还可以将引用作为参数。
  • 当涉及到迭代器时, .iter() 迭代元素引用的向量。如果您想迭代owned元素,您需要使用 .into_iter()
  • 当谈到错误处理时, anyhow 是你的朋友。您还可以使用 thiserror 轻松扩展您自己的错误类型的行为。

生态系统小

Rust 的许多领域都相当强大,特别是在异步和 WebAssembly 方面。然而,由于 Rust 尚未获得普遍的主流采用,一些公司并不积极支持 Rust。此外,许多crate都受到开源劳动力的支配。这并不是说它们维护不善。但由于开源工作之外的义务,有时crate可能需要很长时间才能更新。这是您在采用 Rust 时需要考虑的事情;如果它还不存在,您可能需要自己编写。

部署 Rust

与其他语言相比,部署 Rust Web 服务并不是特别容易。这主要是由于 Rust 缺乏普遍采用。通常,您需要通过 Dockerfile 部署 Rust 程序,设置您自己的 Nginx 代理并添加 SSL 证书(除其他外)。很多,特别是如果这是你第一次这样做。 Shuttle 旨在通过允许单命令部署并让您在代码中声明基础架构来解决这一问题。


原文地址:What is Rust and Why Should You Use It?


更多阅读:

  • 为什么我说Rust是靠谱的编程语言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/654797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vivado 配置内存IP

配置内存IP UltraScale体系结构内存IP支持DDR3和DDR4 SDRAM的配置,QDRIIPLUS SRAM和RLDRAM3型接口。截至2015.3,内存IP已被拆分基于内存接口标准和工具流,将其划分为不同的IP。“自定义IP”对话框框包含基本和高级配置选项,其中包…

【C/C++ 05】快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序算法,其基本思想是:任取待排序序列中的某元素作为基准值,按照该基准值将待排序集合分割成两个子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于…

数据在网络传输中为什么要加密?

在信息化浪潮席卷全球的今天,数据如同流淌在信息高速公路的生命血液,其安全传输的重要性不言而喻。随着网络空间中各种威胁与挑战日益凸显,加密技术已成为保护数据安全、维护用户隐私、确保业务连续性的关键手段。它就如同一道无形的防护盾&a…

Nestjs 全局拦截器

一、拦截器 拦截器作用: 在函数执行之前、之后绑定额外的逻辑转换函数的返回结果转换从函数抛出的异常扩展基本函数的行为根据所选条件重写函数 期望接口返回一个标准的json格式,利用拦截器对数据做全局的格式化 {code: "200",data: [],mess…

【文本到上下文 #7】探索 NLP 中的 Seq2Seq、编码器-解码器和注意力机制

一、说明 今天,我们将探讨序列到序列 (seq2seq) 模型的复杂工作原理,特别关注编码器-解码器架构和注意力机制。这些概念是各种 NLP 应用的基础,从机器翻译到问答系统。 这是可以期待的: Seq2Seq模型中的编码…

数据结构之单链表详解

前言 之前大摆了5天多,没怎么学编程,自昨日起,觉不可如此,痛定思痛,开始继续学习,昨天刷了20多道简单级别的力扣,今天想把链表好好巩固一下,于是乎,把单链表的增删查改搞…

基础算法之Huffman编码

// Type your code here, or load an example. #include<iostream> #include<string> #include<queue> #include <unordered_map> #include <vector>using namespace std;//树节点结构 struct Node {char ch;int freq;Node *left;Node *right;No…

数据结构3、基于栈的后缀算术表达式求值

1 题目描述 图1 中缀表达式转化为后缀表达式题目描述 图2 基于栈的后缀算术表达式求值题目描述 2 题目解读 借助一个运算符栈&#xff0c;可将中缀表达式转化为后缀表达式&#xff1b;借助一个运算数栈&#xff0c;可对后缀表达式求值。借助一个运算符栈和一个运算数栈&#xf…

Java基础数据结构之哈希表

概念 顺序结构以及平衡树 中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在 查找一个元素时&#xff0c;必须要经过关键 码的多次比较 。 顺序查找时间复杂度为 O(N) &#xff0c;平衡树中为树的高度&#xff0c;即 O( log2N ) &#xff0c;搜索的效…

防火墙用户认证、NAT、策略路由、DNS透明代理以及双机热备笔记

用户认证 防火墙管理员登录认证 --- 检验身份的合法性&#xff0c;划分身份权限 用户认证 --- 上网行为管理的一部分 用户&#xff0c;行为&#xff0c;流量 --- 上网行为管理三要素 用户认证的分类 上网用户认证 --- 三层认证 --- 所有的跨网段的通信都可以属于上网行为。…

【Web前端实操19】商城官网_分析与顶部广告

本次实操主要是借用小米之前的网站来进行参考&#xff0c;达成网站静态页面开发的目的&#xff0c;而新学者想要一次性直接开发整个网站&#xff0c;肯定会很懵圈&#xff0c;因此&#xff0c;这个商城官网我会一部分一部分地进行拆分来写&#xff0c;最后合成整个界面。 本次…

国企重组整合后,如何严把“选人用人”关?

三年国企改革之后&#xff0c;新一轮国企改革明确重组方向&#xff0c;强调将“战略性重组和专业化整合”作为深化供给侧结构性改革从而建设世界一流企业的重要抓手&#xff0c;推动了国有资源的高效运转流动。在很多企业兼并、重组后&#xff0c;成立了新的集团性公司&#xf…

Mysql查询数据

1 基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT语句。SELECT语句的基本格式是&#xff1a; 2 单表查询 2.1 查询所有字段 SELECT * FROM 表名; 2.2 在SELECT语句中指定所有字段 SELECT f_id, s_id ,f_name, f_price FROM fruits; 2.3 查询单个字段 SELECT 列名FR…

nginx部署前端(vue)项目及配置修改

目录 一、前端应用打包 二、部署前端应用 1、上传前端文件夹 2、修改nginx配置文件 3、重启nginx 三、查看效果 nginx安装参考&#xff1a;linux安装nginx-CSDN博客 一、前端应用打包 打包命令 npm run build 打包成功如下&#xff0c;会在项目路径下生成dist文件夹 二…

Windows Server 2003 Web服务器搭建

系列文章目录 目录 系列文章目录 前言 一、Web服务器是什么&#xff1f; 二、配置服务器 1.实验环境搭建 2.服务器搭建 1)控制面板中找到增加或删除程序打开 2)点击增加程序 3)安装Web服务器 4)查看安装是否成功 5)打开Internet信息服务(IIS)管理器,进行配置 6)找…

【开源之美】:cppcheck

一、项目链接 https://github.com/danmar/cppcheck/tree/main 二、效果示例

图像复原的天花板在哪里?SUPIR:开创性结合文本引导先验和模型规模扩大

SUPIR&#xff08;Scaling-UP Image Restoration&#xff09;&#xff0c;这是一种开创性的图像复原方法&#xff0c;利用生成先验和模型扩大规模的力量。通过利用多模态技术和先进的生成先验&#xff0c;SUPIR在智能和逼真的图像复原方面取得了重大进展。作为SUPIR中的关键催化…

如何配置MacLinuxWindows环境变量

这里写目录标题 什么是环境变量什么是PATH为什么要配置环境变量 如何配置环境变量环境变量有哪些环境变量加载顺序环境变量加载详解 配置参考方法一&#xff1a; export PATHLinux环境变量配置方法二&#xff1a;vim ~/.bashrcLinux环境变量配置方法三&#xff1a;vim ~/.bash_…

go语言基础之泛型

1.泛型 泛型是一种独立于所使用的特定类型的编写代码的方法。使用泛型可以编写出适用于一组类型中的任何一种的函数和类型。 1.1 为什么需要泛型 func reverse(s []int) []int {l : len(s)r : make([]int, l)for i, e : range s {r[l-i-1] e}return r }fmt.Println(reverse…

红外热成像仪定制_热成像仪/红外夜视仪开发方案

红外热成像技术是一种利用红外热成像仪将物体发出的不可见红外辐射能量转换成可见的温度场图像的技术&#xff0c;通过不同颜色来表示不同温度。这项技术的应用领域非常广泛&#xff0c;从电路维修到暖通检测再到汽车故障排查等各个领域都有着重要的作用。 红外热成像仪的解决方…