当前位置: 首页 > news >正文

选择Rust,并在Ubuntu上使用Rust

在过去的 8 年里,Rust 一直是开发人员最喜欢的语言,并且越来越被各种规模的软件公司采用。然而,它的许多高级规则和抽象创造了一个陡峭的初始学习曲线,这可能会给人留下 Rust 是少数人的保留的印象,但这与事实相去甚远。让我们来看看为什么 Rust 通常是一个很好的选择,看看如何在 Ubuntu 上开始使用它。

有什么大惊小怪的

Rust 是一种具有许多令人兴奋的属性的语言,包括出色的安全性、高级人体工程学、低级(low-level)性能和卓越的用户体验。那么这些如何使 Rust 成为您的正确选择呢?

众所周知,Rust 是一种安全的语言,这在很大程度上归功于它的表达类型系统,该系统允许在编译过程中进行严格的检查。简单地说,如果一个 Rust 程序通过编译,内存使用是安全的,资源在释放后无法使用,错误已经处理或确认。由于内存错误是Microsoft、谷歌和苹果最近发现的大多数安全漏洞的根源,这些安全功能意味着该语言在帮助创建可靠和安全的软件方面具有独特的地位。

编写 Rust,虽然考虑到其最初的学习曲线令人生畏,但实际上非常愉快。该语言提供了许多高级抽象,例如标准容器库、迭代器、特征和函数式编程风格方法,所有这些都避免了重复常见实现样板的需要,使开发人员能够专注于实现有用的功能。Rust 的严格类型系统对此有很大帮助,减少了使用调试工具追逐错误所花费的时间,正如 Rust linter 的维护者 Andre Bogus 所说,“应用程序通常不需要调试。

在其他语言中,令人愉快的高级抽象会产生巨大的成本,但在 Rust 中,有可能获得这些好处通常为低级语言保留的性能,这是可能的,原因有两个。首先,Rust 建立在 LLVM 二十年的前沿研究之上。因此,其人性化的结构可以在编译时进行优化,只留下二进制文件中的机器友好指令。其次,Rust 的类型系统引入了所有权和借用的概念。这些允许编译器在资源超出范围时插入指令以释放资源。因此,Rust 程序的内存使用率极低,尤其是与垃圾收集替代方案相比。这种对低级性能的高度强调导致了对用户系统、钱包和环境更友好的高效二进制文件。

显然,Rust 在制作可靠和高效的软件方面拥有良好的基础,但如果没有令人信服的用户体验,这些好处可能很难离开象牙塔。这就是 Rust 的秘密——一流的用户体验。从简单的设置(如下所述)到非常有用的工具和文档,Rust 体验的所有元素都经过精心设计。它的错误消息注释了源代码,以显示问题的来源和方式,只需询问编译器即可获得更详细的解释。它的棉绒提供清晰、惯用的建议,并且通常可以自动修复它检测到的问题。它的文档具有独特的质量,包含大量的解释和示例,以确保用户确切地知道使用任何给定结构的位置、方式和原因。在 Rust 中,知识是共享的,而不是囤积的。

这些功能使 Rust 成为学习和使用所有领域的绝佳选择,从内核和嵌入式系统到桌面、云和 Web。对于新用户来说,很明显,这种语言已经投入了大量的关怀、爱和关注。现在,让我们简要地看一下如何开始并适应 Rust。

引导新的 Rust 安装

在本节中,需要: 乌班图

建议通过 Rustup 工具链版本管理器 rustup 安装 Rust。要安装 rustup,然后安装最新的稳定版 Rust,请运行以下命令。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup toolchain install stable

接下来,让我们通过在新目录中运行以下命令来创建、构建和运行我们的第一个项目。

cargo new hello-world
cd hello-world
cargo run

就是这样!在编译器输出下方,你应该看到“Hello,world!”,这意味着你刚刚成功构建并运行了 Rust 代码。欢迎来到锈类动物(Rustacean)的世界!

现在你有一个可以工作的编译器,让我们建立一个很好的环境,为高效的 Rust 编写做好准备。

引导新的 Rust 开发环境

对于本节,需要: VSCode

通过 VSCode 可以获得很棒的 Rust 体验,开箱即用的体验还可以,但让我们调整一下,让它变得非常好。

首先,编写 Rust 最重要的工具是语言服务器,位于 rust-lang.rust-analyzer 扩展中。这将提供许多提示,并建议从编辑器中修复 lint 问题。为了获得最佳建议,请将“检查”命令设置从检查更改为剪辑。 (前者检查类型,而后者检查类型、惯用法、代码正确性等等!

能够在执行过程中暂停程序以检查它当前正在处理的值非常有用。安装 vadimcn.vscode-lldb 为 Rust 添加调试器,允许您设置断点并查看程序的当前状态。

编写 Rust 的核心部分是有效地利用周围的生态系统。为了帮助进行软件包管理,请安装 serayuzgur.crates。这将允许您通过建议版本轻松使依赖项保持最新。

最后,编写 Rust 偶尔需要编辑包清单 Cargo.toml。为此,tamasfe.even-better-toml提供了一个很好的体验。这改进了默认语法突出显示和验证。

引导新的Rustacean

对于本节,需要:你自己 🙂

有很多资源可以帮助学习 Rust,这里有一些建议。

要快速入门,请查看 Rust 之旅以获取许多集中的交互式练习,以帮助您快速入门。旅游不假设以前的知识,并提供多种语言版本。

每个锈类人(Rustacean)都应该看看官方的Rust Book。它包含大量的解释和示例,旨在帮助您理解所有 Rust 程序的构建块。因此,它提供了一站式教程和参考资料。这本书既不假设先验知识,也不假设语言。

对于更简洁的内容,请尝试 Rust by Example 提供了 Rust 语言的超简洁视图。

要真正掌握该工具并在您自己的系统上尝试该语言,请尝试梦幻般的 Rustlings 课程。

最后,但并非最不重要的一点是,如果您有任何问题,或者您只是想找到更多的 Rustaceans,请在他们的众多平台之一上加入 Rust 庞大、热情和热情的社区。
https://ubuntu.com/blog/why-and-how-to-use-rust-on-ubuntu

相关文章:

选择Rust,并在Ubuntu上使用Rust

在过去的 8 年里,Rust 一直是开发人员最喜欢的语言,并且越来越被各种规模的软件公司采用。然而,它的许多高级规则和抽象创造了一个陡峭的初始学习曲线,这可能会给人留下 Rust 是少数人的保留的印象,但这与事实相去甚远…...

SVM详解

公式太多了,就用图片用笔记呈现,SVM虽然算法本质一目了然,但其中用到的数学推导还是挺多的,其中拉格朗日约束关于α>0这块证明我看了很长时间,到底是因为悟性不够。对偶问题也是,用了一个简单的例子才明…...

mysql全文检索使用

数据库数据量10万左右,使用like %test%要耗费30秒左右,放弃该办法 使用mysql的全文检索 第一步:建立索引 首先修改一下设置: my.ini中ngram_token_size 1 可以通过 show variables like %token%;来查看 接下来建立索引:alter table 表名 add f…...

opencv 进阶17-使用K最近邻和比率检验过滤匹配(图像匹配)

K最近邻(K-Nearest Neighbors,简称KNN)和比率检验(Ratio Test)是在计算机视觉中用于特征匹配的常见技术。它们通常与特征描述子(例如SIFT、SURF、ORB等)一起使用,以在图像中找到相似…...

Mac Flutter web环境搭建

获取 Flutter SDK 下载以下安装包来获取最新的 stable Flutter SDK将文件解压到目标路径, 比如: cd ~/development $ unzip ~/Downloads/flutter_macos_3.13.0-stable.zip 配置 flutter 的 PATH 环境变量: export PATH"$PATH:pwd/flutter/bin" // 这个命…...

在外SSH远程连接macOS服务器

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …...

Dockerfile文件详细

Dockerfile 是一个文本文件,里面包含组装新镜像时用到的基础镜像和各种指令,使用dockerfile 文件来定义镜像,然后运行镜像,启动容器。 dockerfile文件的组成部分 一个dockerfile文件包含以下部分: 基础镜像信息&…...

C语言学习系列-->看淡指针(3)

文章目录 一、字符指针变量二、数组指针变量2.1 概述2.2 数组指针初始化 三、二维数组传参本质四、函数指针五、typedef关键字六、函数指针数组 一、字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* 一般使用&#xff1a; #include<stdio.h>int main…...

Java抽象类详解

抽象类 抽象类的概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。比如&#xff1a; 说…...

06-微信小程序-注册程序-场景值

06-微信小程序-注册程序 文章目录 注册小程序参数 Object object案例代码 场景值场景值作用场景值列表案例代码 注册小程序 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例&#xff0c;绑定生命周期回调函数、错误监听和页面不存在监听函数等。 详细的参数含义和使…...

多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)

多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)。 一个新项目,后端使用 PHP 实现,前端不做路由,提供一个模板,由后端路由控制。 Route::get(pages/{name}, [\App\Http\Controllers\ResourceController::class, getResourceVersion])...

视频汇聚云平台EasyCVR视频监控管理平台进行SDN转推的操作步骤

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等&#xff0c;视频智能分析平台EasyCVR融合性强、开放度…...

SQL 语句继续学习之记录二

三&#xff0c; 聚合与排序 对表进行聚合查询&#xff0c;即使用聚合函数对表中的列进行合计值或者平均值等合计操作。 通常&#xff0c;聚合函数会对null以外的对象进行合计。但是只有count 函数例外&#xff0c;使用count(*) 可以查出包含null在内的全部数据行数。 使用dis…...

【Python原创设计】基于Python Flask 机器学习的全国+上海气象数据采集预测可视化系统-附下载链接以及详细论文报告,原创项目其他均为抄袭

基于Python Flask 机器学习的全国上海气象数据采集预测可视化系统 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 在信息科技蓬勃发展的当代&#xff0c;我们推出了一款基于Python Flask的全国上海气象数…...

Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四)

文章目录 Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四)服务端客户端 Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四) 服务端 服务端结构如下&#xff1a; UserModel using System; using System.Collections.Generic; usin…...

【Go 基础篇】Go语言获取用户终端输入:实现交互式程序的关键一步

介绍 在许多编程场景中&#xff0c;我们需要编写交互式程序&#xff0c;以便用户可以在终端中输入数据并与程序进行交互。Go语言提供了丰富的方式来获取用户终端输入&#xff0c;使得编写交互式程序变得简单而有趣。本篇博客将深入探讨Go语言中获取用户终端输入的各种方法&…...

学习笔记:Opencv实现拉普拉斯图像锐化算法

2023.8.19 为了在暑假内实现深度学习的进阶学习&#xff0c;Copy大神的代码&#xff0c;记录学习日常 图像锐化的百科&#xff1a; 图像锐化算法-sharpen_lemonHe_的博客-CSDN博客 在环境配置中要配置opencv&#xff1a; pip install opencv-contrib-python Code and lena.png…...

如何在前端实现WebSocket发送和接收UDP消息(多线程模式)

目录 简介&#xff1a;步骤1&#xff1a;创建WebSocket连接步骤2&#xff1a;创建Web Workers步骤3&#xff1a;发送和接收UDP消息&#xff08;多线程模式&#xff09;结束语&#xff1a; 简介&#xff1a; 本文将继续介绍如何在前端应用中利用WebSocket技术发送和接收UDP消息…...

【微服务】一文了解 Nacos

一文了解 Nacos Nacos 在阿里巴巴起源于 2008 2008 2008 年五彩石项目&#xff08;完成微服务拆分和业务中台建设&#xff09;&#xff0c;成长于十年双十一的洪峰考验&#xff0c;沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。 随着云计算兴起&#xff0c; 2018 2018 20…...

量子计算对信息安全的影响:探讨量子计算技术对现有加密方法和信息安全基础设施可能带来的颠覆性影响,以及应对策略

第一章&#xff1a;引言 随着科技的迅猛发展&#xff0c;量子计算作为一项颠覆性的技术正逐渐走入我们的视野。量子计算以其强大的计算能力引发了全球科技界的广泛关注。然而&#xff0c;正如硬币的两面&#xff0c;量子计算技术所带来的不仅仅是计算能力的巨大飞跃&#xff0…...

ajax-axios-url-form-serialize 插件

AJAX AJAX 概念 1.什么是 AJAX ? mdn 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端拿到数据数…...

【AIGC】单图换脸离线版软件包及使用方法

云端再好&#xff0c;都不如放自己手里啊&#xff0c;想怎么就怎么玩。云端再好&#xff0c;都不如放自己手里啊&#xff0c;想怎么就怎么玩。 Roop作为一个新出的开源项目&#xff0c;配置起来还是有一定难度的。 我已经把各种依赖&#xff0c;模型&#xff0c;环境配置已经…...

8.19论文阅读

文章目录 Graph-Segmenter: Graph Transformer with Boundary-aware Attention for Semantic Segmentation方法 SCSC: Spatial Cross-scale Convolution Module to Strengthen both CNNs and Transformers方法 Deformable Mixer Transformer with Gating for Multi-Task Learni…...

HAProxy

目录 HAProxy HAProxy介绍 主要特性 LVS、nginx、HAProxy区别 nginx LVS HAProxy 负载均衡策略 Haproxy搭建 Web 群集 Haproxy服务器 编译安装 Haproxy Haproxy服务器配置 添加haproxy 系统服务 节点服务器部署 日志定义 HAProxy HAProxy介绍 HAProxy是可提供高…...

基于EasyExcel的Excel读取

1.引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version> </dependency>2.读取器代码&#xff1a; package com.vz.utils.excel;import com.alibaba.excel.Eas…...

链路聚合详解

链路聚合详解 华为交换机链路聚合&#xff1a;Linux链路聚合bond配置 华为交换机链路聚合&#xff1a; 方式一&#xff1a;配置手工负载分担方式的链路聚合 [CORE1] interface Eth-Trunk 1 [CORE1-Eth-Trunk1] trunkport GigabitEthernet 0/0/5 to 0/0/6 [CORE1-Eth-Trunk1] p…...

Shell编程学习之if分支语句的应用

Shell编程中的if分支语句&#xff1a;伪代码表示&#xff1a;注意符号和表达式之间的空格&#xff1b; if [ 表达式1 ] then分支1 elif [ 表达式2 ] then分支2 elif [ 表达式3 ] then分支3 else其它 fi按整型的方式&#xff0c;if分支语句比较字符串的大小&#xff1a;等于&am…...

2023.8 - java - 泛型

泛型问题的引出&#xff1a; jdk 1.5 引出泛型 // package 泛型; public class index {public static void main (String[] args){test t new test();t.setContent("aaa");int a (int) t.getContent();System.out.println(a);} }class test{Object content;publi…...

【数据结构练习】链表面试题锦集一

目录 前言&#xff1a; 1. 删除链表中所有值为key的节点 方法一&#xff1a;正常删除&#xff0c;头结点另外讨论 方法二:虚拟头结点法 方法三&#xff1a;递归 2.反转链表 方法一&#xff1a;双指针迭代 方法二&#xff1a;递归法解析&#xff1a; 3.链表的中间结点 方法…...

自然语言处理从入门到应用——LangChain:链(Chains)-[通用功能:SequentialChain和TransformationChain]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 SequentialChain 在调用语言模型之后&#xff0c;下一步是对语言模型进行一系列的调用。若可以将一个调用的输出作为另一个调用的输入时则特别有用。在本节中&#xff0c;我们将介绍如何使用顺序链来实现这一点。顺序…...

商城网站源码dede/东莞企业网站排名

OpenGL配置&#xff1a; 1.下载OpenGL的相关资料包 http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip2.解压安装包。将glut.h放在C盘的gl目录下&#xff08;可以通过在C盘搜索GL) 3.将glut.lib和glut32.lib放在vs的VC\lib目录下。 4.将glut.dll和glut32.dll…...

今日世界军事新闻/seo排名快速刷

人脸识别关键技术及原理人脸识别基础关键技术1、人脸检测&#xff08;Face Detection&#xff09;2、人脸对齐&#xff08;Face Alignment&#xff09;3、人脸特征提取&#xff08;Face Feature Extraction&#xff09;4、人脸识别&#xff08;Face Recognition&#xff09;5、…...

网站建设网络公司整站源码/seo基础知识培训视频

首先&#xff0c;Spark是MapReduce-like&#xff08;架构上和多数分布式计算框架类似&#xff09;&#xff0c;Spark有分配任务的主节点&#xff08;Driver&#xff09;和执行计算的工作节点&#xff08;Worker&#xff09;。 其次&#xff0c;Low-latency基本上应该是源于Work…...

网站建设 助力社会组织/百度一下百度一下你就知道

7 配置DAG 7.1 创建仲裁存储账户 在Azure Portal上选“新建”——>Storge——>Storage account-blob…&#xff0c;如图。 输入存储账户名称&#xff0c;账户类型设置为“常规用途”&#xff0c;复制设置为“本地冗余存储LRS” 为了保证仲裁资源的独立性&#xff0c;当地…...

网页设计与网站建设完全学习手册/seo工程师

JS BOM window对象 全局变量和全局方法都归在window上 alert-comfirm-prompt 让alert 、confirm等弹出框上的提示文字实现换行&#xff1a;\n // confirm()// 点击确定返回true&#xff0c;取消返回falsevar btndocument.getElementById("btn");btn.onclickfunctio…...

高邮企业网站建设公司哪家便宜/极速建站网站模板

COMSOL Multiphysics 软件提供了四种可用于模拟自由液面的方法&#xff1a;水平集、相场、动网格和稳态自由表面。作为系列的第一节&#xff0c;我们将讨论水平集和相场法&#xff0c;这两种基于场的方法几乎可以描述任何类型的自由液面。在第二节中&#xff0c;我们计划将本文…...