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

Rust初接触

一、什么是Rust

Rust 是由 Mozilla 开发的多范式编程语言,专注于性能和安全性。
Rust 以其先进的安全并发能力而闻名, 它的语法类似于 C++,但它提供了更快的速度和内存安全性,但不使用垃圾收集器。
Rust 最初是为 Mozilla Firefox 浏览器开发的,但它的效率和优势吸引了许多开发人员开始使用 Rust,通常用于游戏开发。
Rust 在内存管理方面是创新的。例如,它不允许空指针或悬空指针。由于其功能性,Rust 常用于构建设备驱动程序、嵌入式系统、游戏和操作系统,例如 BlogOS、Redox、RustOS、Rux 和 Tock。
Rust 代码可以说以其速度和在测试前调试代码的能力而闻名。例如,Rust 可以开发在运行时检查代码错误的程序。
Rust 的特点

- 内存管理
- 内存安全
- 所有权制度
- 多态性
- 速度和性能

二、环境安装

1.windows

下载安装程序: https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe
会得到一个rustup_init.exe,运行出现这个界面:
在这里插入图片描述

三个选项的意思分别是 1.默认参数安装 2.自定义安装 3.取消

*如果当前机器上已经安装了 MSVC (推荐),那么直接输入 1 并回车即可(默认装在C盘),直接进入第二步。如果机器上安装的是 MinGW,那么需要输入 2 (自定义安装),然后会提示 Default host triple ? ,将 default host triple 的 “msvc” 改为 “gnu” 再输入安装程序:
在这里插入图片描述
*

默认安装如果报错如:
在这里插入图片描述

解决方法就是科学上网

最后安装结果:
在这里插入图片描述

然后查看版本测试一下安装是否正常:
在这里插入图片描述

2.linux

直接运行:

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

也需要选择安装信息,我是直接默认了:
在这里插入图片描述

最后安装成功:
在这里插入图片描述

这里比windows多一步是重新加载环境变量,最后测试一下:
在这里插入图片描述

3.others

上面两个系统上安装实际上都是使用rustup来完成,如果你不想使用这种方法,例如无法科学上网在下载时总是失败,那么可以试试:
https://forge.rust-lang.org/infra/other-installation-methods.html

三、VSCODE 配置

rust没有官方的编辑器,但它被很多编辑器支持,甚至不用编辑器只使用命令行也可以,我习惯用VSCODE。
安装这两个插件:
在这里插入图片描述

配置就结束了。。。。。
然后测试一下,新建一个hello.rs文件,里面写:

fn main() {println!("Hello, world!");
}

然后命令行里用 rustc 编译生成exe,运行即可:

在这里插入图片描述

四、cargo

1.cargo

Rust 自带一个名为 Cargo 的构建系统和包管理器。大多数 Rustacean 们使用 Cargo 来管理 Rust 项目,它可以处理很多任务,比如构建代码、下载依赖库并编译这些库。
在编写复杂的 Rust 程序时,几乎都需要用到依赖项,如果使用 Cargo 启动项目,添加依赖项将极其容易。

如果使用 rustup 安装的 rust 编译器的话,则会自带 Cargo,如果通过其他方式安装的话,还需要再手动安装一下。可以在终端输入如下命令检查是否安装了 Cargo:

$ cargo --version

如果看到了如下,则说明已安装!如果看到类似 command not found 的错误,就要去查看相应安装文档以确定如何单独安装 Cargo。
在这里插入图片描述

2.使用

找一个文件夹,命令行里输入:

cargo new hello_cargo

结果:
在这里插入图片描述

可以看到生成了一个 hello_cargo 文件夹,这也是我创建时指定的工程名称。
然后这个工程中有一个 src/main.rs ,这里面只有一个main函数,函数中输出了一句 hello world。
然后有一个.gitingore 文件,这是因为 cargo 会在创建目录时初始化一个 git 仓库。如果在一个已经存在的 git 仓库中运行 cargo new,则这些 git 相关文件则不会生成;可以通过运行 cargo new --vcs=git 来覆盖这个行为(cargo new 可以切换到其它版本控制系统)。
接下来是一个 carho.lock 文件,这个文件用来记录项目依赖的实际版本,正常来说,开发者不要改动这个文件,完全由 cargo 去控制这个文件的内容。
最后是一个 cargo.toml 文件,这个文件使用 TOML (Tom’s Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。里面的内容是:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
  • [package],是一个片段(section)标题,表明下面的语句用来配置一个包。随着在这个文件增加更多的信息,还可以增加其他片段(section)。

  • name等三行设置了 Cargo 编译程序所需的配置:项目名称、项目版本以及使用的 Rust 版本。(edition 与 rust 的版本对应参考: https://doc.rust-lang.org/nightly/edition-guide/index.html )

  • [dependencies],是其它依赖的片段的开始。在 Rust 中,代码包被称为 crates。这个项目并不需要其他的 crate,等项目用到依赖时就会用这个片段了。

下一步使用 cargo build 来编译项目:
在这里插入图片描述

看到编译成功,并且生成了一个 target 文件夹,这里面生成了一个 hello_cargo.exe 。

cargo 默认是编译的 debug 版本,因此生成的是 target/debug , 如果想要生成release ,需要使用

cargo build --release 

最后,cargo 还有两个命令:

cargo run
cargo check

cargo run 会在一个命令中同时编译并运行生成的可执行文件;
cargo check 会快速检查代码确保其可以编译,但并不产生可执行文件;

cargo 使用起来很简单,了解这些就可以上手了,剩余的有一些细节和优化就要去官方文档找了: https://doc.rust-lang.org/cargo/

相关文章:

Rust初接触

一、什么是Rust Rust 是由 Mozilla 开发的多范式编程语言,专注于性能和安全性。 Rust 以其先进的安全并发能力而闻名, 它的语法类似于 C,但它提供了更快的速度和内存安全性,但不使用垃圾收集器。 Rust 最初是为 Mozilla Firefox …...

shell脚本学习笔记03(小滴课堂)

在shell脚本中,表示变量除了可以使用$a(a是一个变量),还可以使用${a} 那这两种表示方式有什么区别么? 花括号可以和其它字符或者字母区分开来。 >追加内容 我们发现使用>会把原来的内容覆盖。 我们使用>>就不会覆盖了&#xff…...

软件工程和计算机科学与技术学习方向区别

软件工程(Software Engineering)和计算机科学与技术(Computer Science and Technology)是两个相关但不同的领域,它们涉及到计算机和软件的不同方面。以下是它们之间的主要区别: 计算机科学与技术&#xff…...

React常用hooks总结

React Hooks react常用hooks React Hooks React Hooks是React16.8版本新增的特性,它允许你在不编写class的情况下使用state以及生命周期等特性。 在React中,组件的创建方式有两种:类组件和纯函数组件。 然而,函数组件没有状态…...

【算法学习】-【滑动窗口】-【找到字符串中所有字母异位词】

LeetCode原题链接:438. 找到字符串中所有字母异位词 下面是题目描述: 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&…...

利用python学习如何处理需要登录的网站

要处理需要登录的网站,你可以按照以下步骤进行学习: 了解网站的登录机制:登录机制通常有用户名密码登录、OAuth授权登录、Cookie登录等。了解目标网站使用的登录机制是学习处理的第一步。 使用Web抓取工具模拟登录:通过使用工具如…...

vue适配各个屏幕

1:不是响应式&#xff0c;只是用缩放来适配各个pc 2&#xff1a;使用中会出现由于 transform 属性导致的定位问题&#xff0c;具体的需要针对性的处理 App.vue <div id"app" ><div class"app-view" :style"{--scale:scale}"><…...

在conda创建的虚拟环境中安装jupyter以及使用

1. 进入你的虚拟环境 conda activate conda_env_name 2. 安装jupyter notebook conda install -y jupyter 3. 启动jupyter jupyter notebook 4. 将conda环境添加到jupyter的内核中 conda install ipykernel python -m ipykernel install --name conda_env_namepython -m…...

【Java 8的新特性】

引言 Java 8是Java编程语言的一个重要里程碑&#xff0c;它引入了许多令人兴奋的新特性和改进。这些新特性不仅使Java编程更加简洁和高效&#xff0c;还提供了更多的功能和灵活性。在本文中&#xff0c;我们将探讨Java 8的一些重要新特性&#xff0c;并展示它们是如何改变我们…...

Android+Appium自动化测试环境搭建及实操

1、Appium简介1.1 Appium概念1.2 Appium工作原理 2、Appium Server环境搭建2.1 Java JDK2.1.1 下载JDK2.1.2 运行exe安装JDK&#xff0c;设置安装路径2.1.3 设置环境变量2.1.4 验证安装结果 2.2 Android SDK2.2.1 下载安装Android SDK安装包2.2.2 下载platform-tools&#xff0…...

NetSuite ERP系统健康检查

这个题目来自最近的一个项目感受&#xff0c;“上线即停滞”。这是在中小型企业十分普遍的一个情况&#xff0c;一旦上线后&#xff0c;基本上信息化的建设就停止了。这是一个中小企业信息化的一个特点&#xff0c;因为其IT力量比较弱&#xff0c;所以在信息化的推动中缺乏话语…...

常用的数字格式代码

文章目录 数值占位符文本占位符 两类占位符: 数值占位符, 文本占位符. 数值占位符 有三种&#xff1a;0&#xff0c;#&#xff0c;&#xff1f; 0 是强制的占位符。 文本占位符 文本占位符只有一个&#xff1a; : 作用于文本的占位符&#xff0c;可以用英文引号" &quo…...

GitLab使用步骤

GitLab使用步骤 1 注册用户 1 访问&#xff1a;http://10.0.0.203/users/sign_up地址 2 填入注册信息&#xff0c;注册成功&#xff0c;需要管理员审核 3 用root登录&#xff0c;地址&#xff1a;http://10.0.0.203/users/sign_in账号&#xff1a;root密码&#xff1a;xxxx…...

基于MindSpore的llama微调在OpenI平台上运行

基于MindSpore的llama微调在OpenI平台上运行 克隆预训练模型 克隆chatglm-6b代码仓&#xff0c;下载分布式的模型文件 git lfs install git clone https://huggingface.co/openlm-research/open_llama_7b准备环境 安装Transformer pip install transformers执行转换脚本 …...

P34~36第八章相量法

8.1复数 复数可表示平面矢量、也可表示正弦量。特别是: 当复数表示正弦量的时候&#xff0c;此时复数称为相量。 8.2复数运算 复数除法也可看做乘法&#xff0c;乘法的几何意义是旋转&#xff08;辐角相加&#xff09;( e^x e^y e^xy)&#xff0c;同时伸缩&#xff08;模变…...

WAF绕过-漏洞发现之代理池指纹探针 47

工具 工具分为综合性的&#xff0c;有awvs&#xff0c;xray&#xff0c;单点的比如wpscan专门扫描wordpress的。而我们使用工具就可能会触发waf&#xff0c; 触发点 第一个就是扫描速度&#xff0c;太快了&#xff0c;可以通过演示&#xff0c;开代理池&#xff0c;白名单绕…...

模型预测控制(MPC)中考虑约束中的不确定性(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

校招C#面试题整理—Unity客户端

前言 博客已经1年多没有更新了&#xff0c;这一年主要在实习并准备秋招和春招&#xff0c;目前已经上岸Unity客户端岗位&#xff0c;现将去年校招遇到的一些面试题的事后整理分享出来。答案是笔者自己整理的不一定保证准确&#xff0c;欢迎大家在评论区指出。 Unity客户端岗的…...

【数字IC设计】利用Design Compiler评估动态功耗

利用DC对RTL设计的动态功耗进行评估,主要可以分为以下步骤: 用vcs编译运行testbench,生成.saif文件(Switching Activity Interchange Format)在Design Compiler编译前,读入.saif文件Design Compiler编译完设计文件后,输出功耗报告 下面通过一个计数器的设计,来演示该过程…...

Docker Compose命令讲解+文件编写

docker compose的用处是对 Docker 容器集群的快速编排。&#xff08;源码&#xff09; 一个 Dockerfile 可以定义一个单独的应用容器。但我们经常碰到需要多个容器相互配合来完成某项任务的情况&#xff08;如实现一个 Web 项目&#xff0c;需要服务器、数据库、redis等&#…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...