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} 那这两种表示方式有什么区别么? 花括号可以和其它字符或者字母区分开来。 >追加内容 我们发现使用>会把原来的内容覆盖。 我们使用>>就不会覆盖了ÿ…...
软件工程和计算机科学与技术学习方向区别
软件工程(Software Engineering)和计算机科学与技术(Computer Science and Technology)是两个相关但不同的领域,它们涉及到计算机和软件的不同方面。以下是它们之间的主要区别: 计算机科学与技术ÿ…...
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:不是响应式,只是用缩放来适配各个pc 2:使用中会出现由于 transform 属性导致的定位问题,具体的需要针对性的处理 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编程语言的一个重要里程碑,它引入了许多令人兴奋的新特性和改进。这些新特性不仅使Java编程更加简洁和高效,还提供了更多的功能和灵活性。在本文中,我们将探讨Java 8的一些重要新特性,并展示它们是如何改变我们…...

Android+Appium自动化测试环境搭建及实操
1、Appium简介1.1 Appium概念1.2 Appium工作原理 2、Appium Server环境搭建2.1 Java JDK2.1.1 下载JDK2.1.2 运行exe安装JDK,设置安装路径2.1.3 设置环境变量2.1.4 验证安装结果 2.2 Android SDK2.2.1 下载安装Android SDK安装包2.2.2 下载platform-tools࿰…...

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

常用的数字格式代码
文章目录 数值占位符文本占位符 两类占位符: 数值占位符, 文本占位符. 数值占位符 有三种:0,#,? 0 是强制的占位符。 文本占位符 文本占位符只有一个: : 作用于文本的占位符,可以用英文引号" &quo…...

GitLab使用步骤
GitLab使用步骤 1 注册用户 1 访问:http://10.0.0.203/users/sign_up地址 2 填入注册信息,注册成功,需要管理员审核 3 用root登录,地址:http://10.0.0.203/users/sign_in账号:root密码:xxxx…...
基于MindSpore的llama微调在OpenI平台上运行
基于MindSpore的llama微调在OpenI平台上运行 克隆预训练模型 克隆chatglm-6b代码仓,下载分布式的模型文件 git lfs install git clone https://huggingface.co/openlm-research/open_llama_7b准备环境 安装Transformer pip install transformers执行转换脚本 …...

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

WAF绕过-漏洞发现之代理池指纹探针 47
工具 工具分为综合性的,有awvs,xray,单点的比如wpscan专门扫描wordpress的。而我们使用工具就可能会触发waf, 触发点 第一个就是扫描速度,太快了,可以通过演示,开代理池,白名单绕…...

模型预测控制(MPC)中考虑约束中的不确定性(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

校招C#面试题整理—Unity客户端
前言 博客已经1年多没有更新了,这一年主要在实习并准备秋招和春招,目前已经上岸Unity客户端岗位,现将去年校招遇到的一些面试题的事后整理分享出来。答案是笔者自己整理的不一定保证准确,欢迎大家在评论区指出。 Unity客户端岗的…...
【数字IC设计】利用Design Compiler评估动态功耗
利用DC对RTL设计的动态功耗进行评估,主要可以分为以下步骤: 用vcs编译运行testbench,生成.saif文件(Switching Activity Interchange Format)在Design Compiler编译前,读入.saif文件Design Compiler编译完设计文件后,输出功耗报告 下面通过一个计数器的设计,来演示该过程…...

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

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

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

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <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)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

微服务商城-商品微服务
数据表 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* …...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

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