选择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* 一般使用: #include<stdio.h>int main…...
Java抽象类详解
抽象类 抽象类的概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。比如: 说…...
06-微信小程序-注册程序-场景值
06-微信小程序-注册程序 文章目录 注册小程序参数 Object object案例代码 场景值场景值作用场景值列表案例代码 注册小程序 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。 详细的参数含义和使…...
多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)
多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)。 一个新项目,后端使用 PHP 实现,前端不做路由,提供一个模板,由后端路由控制。 Route::get(pages/{name}, [\App\Http\Controllers\ResourceController::class, getResourceVersion])...
视频汇聚云平台EasyCVR视频监控管理平台进行SDN转推的操作步骤
视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度…...
SQL 语句继续学习之记录二
三, 聚合与排序 对表进行聚合查询,即使用聚合函数对表中的列进行合计值或者平均值等合计操作。 通常,聚合函数会对null以外的对象进行合计。但是只有count 函数例外,使用count(*) 可以查出包含null在内的全部数据行数。 使用dis…...
【Python原创设计】基于Python Flask 机器学习的全国+上海气象数据采集预测可视化系统-附下载链接以及详细论文报告,原创项目其他均为抄袭
基于Python Flask 机器学习的全国上海气象数据采集预测可视化系统 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 在信息科技蓬勃发展的当代,我们推出了一款基于Python Flask的全国上海气象数…...
Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四)
文章目录 Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四)服务端客户端 Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四) 服务端 服务端结构如下: UserModel using System; using System.Collections.Generic; usin…...
【Go 基础篇】Go语言获取用户终端输入:实现交互式程序的关键一步
介绍 在许多编程场景中,我们需要编写交互式程序,以便用户可以在终端中输入数据并与程序进行交互。Go语言提供了丰富的方式来获取用户终端输入,使得编写交互式程序变得简单而有趣。本篇博客将深入探讨Go语言中获取用户终端输入的各种方法&…...
学习笔记:Opencv实现拉普拉斯图像锐化算法
2023.8.19 为了在暑假内实现深度学习的进阶学习,Copy大神的代码,记录学习日常 图像锐化的百科: 图像锐化算法-sharpen_lemonHe_的博客-CSDN博客 在环境配置中要配置opencv: pip install opencv-contrib-python Code and lena.png…...
如何在前端实现WebSocket发送和接收UDP消息(多线程模式)
目录 简介:步骤1:创建WebSocket连接步骤2:创建Web Workers步骤3:发送和接收UDP消息(多线程模式)结束语: 简介: 本文将继续介绍如何在前端应用中利用WebSocket技术发送和接收UDP消息…...
【微服务】一文了解 Nacos
一文了解 Nacos Nacos 在阿里巴巴起源于 2008 2008 2008 年五彩石项目(完成微服务拆分和业务中台建设),成长于十年双十一的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。 随着云计算兴起, 2018 2018 20…...
量子计算对信息安全的影响:探讨量子计算技术对现有加密方法和信息安全基础设施可能带来的颠覆性影响,以及应对策略
第一章:引言 随着科技的迅猛发展,量子计算作为一项颠覆性的技术正逐渐走入我们的视野。量子计算以其强大的计算能力引发了全球科技界的广泛关注。然而,正如硬币的两面,量子计算技术所带来的不仅仅是计算能力的巨大飞跃࿰…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
