首页 > 其他分享 >01 - 安装 Rust 和使用 Cargo

01 - 安装 Rust 和使用 Cargo

时间:2023-09-05 10:55:04浏览次数:47  
标签:Cargo 01 rustup cargo 使用 安装 Rust

一、Rust 介绍

Rust 是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust 在语法上和 C++ 类似,但是设计者想要在 保证性能的同时提供更好的内存安全。Rust 最初是由 Mozilla 研究院的 Graydon Hoare 设计创造,然后在 Dave Herman,Brendan Eich 以及很多其他人的贡献下逐步完善的。Rust 的设计者们通过在研发 Servo 网站浏览器布局引擎过程中积累的经验优化了 Rust 语言和 Rust 编译器。Rust 编译器是在 MIT License 和 Apache License 2.0 双重协议声明下的免费开源软件。Rust 已经连续七年 (2016 ~ 2022) 在 Stack Overflow 开发者调查的 “最受喜爱编程语言” 评选项目中折取桂冠。

二、安装 Rust

在学习 Rust 之前需要先安装 Rust,会通过一个叫作 rustup 的命令行工具来完成 rust 的下载和安装,rustup 还被用来管理不同的 rust 发行版本及其附带的工具链。
Rust 由工具 rustup 安装和管理,Rust 有着以 6 星期为周期的快速版本迭代机制,支持多平台,因而不同时期存在大量不同的 Rust 构建版本。rustup 用于管理不同平台下的 Rust 构建版本并使其互相兼容, 支持安装由 Beta 和 Nightly 频道发布的版本,并支持其他用于交叉编译的编译版本。

2.1 Linux 和 MacOS 下安装

使用以下命令直接一步到胃

curl https://sh.rustup.rs -sSf | sh

这条命令会下载并执行一个脚本来安装 rustup 工具,进而安装最新的 Rust 稳定版本。上面的安装过程会自动将 Rust 工具链添加到环境变量 PATH 中,并在下一次登录终端时生效。正常编译执行 Rust 程序需要一个链接器,C 程言编译器通过会附带链接器,另外,一部分常用的 Rust 包会依赖于使用 C 语言编写的代码。

2.2 Windows 下安装

在 Rust 中文官网下载 Rust 安装程序

安装 Rust

image

下载后在命令行中运行 rustup-init.exe,选择默认安装即可,同样也依赖于 C++ 构建工具,当安装完成后,通过以下这条命令检测是否安装成功,如果回显相关版本号就可确认已正确安装。

rustc --version

三、更新与卸载

可通过 rustup 来更新与卸载 Rust

# 更新
rustup update

# 卸载
rustup self uninstall

四、本地文档

安装工具在执行的过程中会在本地生成一份离线文档,可以通过 rustup doc 命令在浏览器中打开它。当你在标准库中发现了某个自己并不清楚用途或使用方法的类型或函数时,可以通过离线文档在任何时刻查询对应的 API 来获取相关信息!

image

五、第一个 Rust 程序

编程入门都得从 Hello World 起,IDE 选择 Visual Studio Code,在 VS Code 中安装支持 Rust 插件

image

第一个 Rust 程序

fn main() {
    println!("Hello World!");
}

image

代码编写完成保存后,在命令行下使用 rustc 对其进行编译,再运行,就能看到输出的 Hello World! 了。

六、剖析

有几个需要注意的细节:

  • Rust 程序源代码文件以 .rs 为后缀名;
  • main.rs 中定义了 main 函数,函数名前用 fn 来声明,类似于 Javascript 函数前的 function;
  • 标准 Rust 风格使用 4 个空格而不是 Tab 来实现缩进;
  • 注意 println! 不是函数,而是宏;
  • 行以分号结尾;

Rust 程序的编译与 gcc 或 clang 非常相似,在使用 rustc 编译后,可以观察下编译生成的文件,windows 下会生成一个 .exe 文件及一个 .pdb 文件。

当仅仅使用 rustc 编译简单的程序并不会造成太大的麻烦,但随着项目规模越来越大,协同开发的人越来越多,管理项目依赖、代码构建的事情就会变得越来越复杂和琐碎,就不得不用一个能够帮助我们简化问题的工具,Rust 构建工具 — Cargo。

七、Hello,Cargo!

Cargo 是 Rust 工具链中内置的构建系统及包管理器,由于它可以处理众多诸如构建代码、下载编译依赖库等琐碎但重要的任务,所以绝大部分的 Rust 用户会选择它来管理自己的 Rust 项目。

7.1 使用 Cargo 创建一个项目

Cargo 在使用 rustup 安装 Rust 时已经被安装好了,可以在命令行下输入 cargo –version 来验证。在 rs_projects 下使用 Cargo 命令新建一个名为 hello_cargo 项目

image

观察两者的不同,在使用 Cargo 生成的项目中,多了几个文件,一个名为 Cargo.toml 文件及一个 main.rs 源代码文件,源代码文件被放置在 src 目录下,与此同时,Cargo 还会初始化一个新的 Git 仓库并生成默认的 .gitignore 文件。
Git 是一种常见的版本控制系统,在创建项目时,通过使用 –vcs 参数来选择不使用版本控制系统,或者使用某个特定的版本控制系统,运行 cargo new –help 可获取关于命令参数的更多说明。

Cargo.toml 内容

[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]

Cargo 使用 TOML (Tom’s Obvious,Minimal Language) 作为标准的配置格式。[package] 块是一个区域标签,表示接下来的语句会被用于配置当前的程序包,[dependencies] 同样也是一个区域标签,用来声明项目的依赖。在 Rust 中,把代码的集合称作为包,虽然在第一个 Rust 程序中没有使用任何第三方包。

自动生成的 main.rs 中的内容与刚开始手动创建的内容一样。

7.2 使用 Cargo 构建和运行项目

使用 Cargo 来构建和运行项目与手动使用 rustc 相比有哪些异同呢?在当前目录下使用 cargo build 命令来构建

image

执行命令后,会将可执行文件生成在路径 target/debug 下,除此之外,还会在项目根目录下生成一个名为 Cargo.lock 新文件,这个文件记录了当前项目所有依赖库的具体版本号,由于当前项目不存在任何依赖,所以这个文件暂时还没有太多东西,最好不要手动编辑此文件内容,Cargo 会自动维护它。

除了 cargo build 外,若想构建完直接运行可使用 cargo run 命令,另外还有一个 cargo check 命令,可以使用此条命令来快速检查当前的代码是否可以通过编译,而不需要花费额外的时间去真正生成可执行程序。

image

为何需要 cargo check 这条命令,通常来讲,由于 cargo check 跳过了生成可执行程序的步骤,所以它的运行速度要远远快于 cargo build。如果在编码的过程中需要不断地通过编译器检查错误,那么使用 cargo check 就会极大地加速这个过程。事实上,大部分 Rust 用户在编写程序的过程中都会周期性地调用 cargo check 以保证自己的程序可以通过编译,只有在真正生成可执行程序时才会调用 cargo build

7.3 以 Release 模式进行构建

当准备发布自己的项目时,可使用命令 cargo build --release 在优化模式下构建并生成可执行程序。生成的可执行程序会被放置于 target/release 目录下,这种模式会以更长的编译时间为代价来优化代码,从而使用代码拥有更好的运行时性能。如果想要对代码的运行效率进行基准测试,可运行 cargo run --release 命令进行构建,并使用 target/release 目录下的可执行程序完成基准测试。

7.4 生成的大小

在用 cargo buildcargo build --release 生成可执行文件后,debug 版的体积大小为 160KB,而 release 版的体积大小为 157KB,两者相差并不大。

八、养成良好的习惯,多使用 Cargo

你也许无法在较为简单的项目中意识到 Cargo 相对于 rustc 的使用优势,但随着程序变得越来越复杂,Cargo 最终一定会证明自己的价值。对于那些由多个包构成的复杂项目而言,使用 Cargo 来协调整个构建过程要比手动操作简单得多。

标签:Cargo,01,rustup,cargo,使用,安装,Rust
From: https://www.cnblogs.com/zer0daysec/p/17679049.html

相关文章

  • NOIP2015提高组复赛day1解析
    1. 解析:送分题,按题意模拟即可代码:#include<bits/stdc++.h>#definelllonglong#definexfirst#defineysecondusingnamespacestd;constintN=39+7;inta[N][N],n;map<int,pair<int,int>>mp;intmain(){ freopen("magic.in","r&......
  • day01
    STL标准模板库  STL中文名标准模板库,有惠普实验室(使用C++模板语言封装的常用的数据结构与算法)  STL中有六大组件:    *算法:以函数模板形式实现的常用算法,例如:swap、max、min、find、sort    *容器:以类模板的形式实现常用数据结构,例如vector(顺序表)......
  • AcWing 2. 01背包问题
    题目有$N$件物品和一个容量是$V$的背包。每件物品只能使用一次。第$i$件物品的体积是$v_i$,价值是$w_i$。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,$N,V$,用空格隔开,分别表示物品数量和背包容积。......
  • 整数分解方法——腾讯2017春招真题
    如下示例:1:共0种分解方法;2:共0种分解方法;3:3=2+1共1种分解方法;4:4=3+1=2+1+1共2种分解方法;5:5=4+1=3+2=3+1+1=2+2+1=2+1+1+1共5种分解方法6:6=5+1=4+2=4+1+1=3+2+1=3+1+1+1=2+2+1+1=2+1+1+1+1共7种分解方法以此类推,求一任意整数num有几种分解方法?思路:对于数num,按照分解......
  • vs2019快捷键注释不起作用
      使用:  再一次:Ctrl+/ 反注释。 ......
  • P2305 [NOI2014] 购票
    P2305[NOI2014]购票Solution记\(f_{i}\)表示\(i\)节点处的答案。\(f_1=0\)。记\(d_i\)表示根节点到点\(i\)的距离,容易得到\(O(n^2)\)的dp转移:\[f_{i}\xleftarrow{\min}f_j+(d_i-d_j)\timesp_i+q_i,d_i-d_j\lel_i\]设\(y=f_i-d_i\timesp_......
  • win2016系统php7.4安装oracle oci8扩展
    查看php版本,判断操作系统是否64位;phpinfo();判断PHP是否TS查看ThreadSafety的值,如果是disabled就是NTS,否则是TS,下载的时候要区分;下载扩展oci82.2.0forWindows:https://pecl.php.net/package/oci8/2.2.0/windows下载并解压,把php_oci8.dll,php_oci8_11g.dll,php_oci8_12c......
  • Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 关键字
    最终是,查询条件,入参为null,所导致。JDBCgetParameterTypecallfailed-usingfallbackmethodinsteadRA-00923:FROMkeywordnotfoundwhereexpected 进一步,这个错误,在job执行的时候,会导致,oracle游标不够ORA-01000maximumopencursorsexceeded   参考: ......
  • 泛微E-cology9 browser.jsp SQL注入漏洞QVD-2023-5012
    漏洞简介泛微e-cology9存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。影响版本泛微e-cologyV9<10.56漏洞复现fofa语法:app="泛微-协同商务系统"登录页面:POC:POST/mobile/%20/plugin/browser.jspHTTP/1.1Host:115.236.39.115:8088User-Agent:Mozilla/5.0(W......
  • 一台机器同时运行多个Tomcat服务解决方案(2017更新)
    作者:fbysss关键字:Tomcat  如何在一台服务器上安装多个Tomcat假设有2个tomcat,分别为/usr/local/tomcat/tomcat-app1/usr/local/tomcat/tomcat-app2以第一个为例:1.修改环境变量sudovi/etc/profile添加export CATALINA_HOME_APP1=/usr/local/......