rust:cargo 和rustc 以及一点 小技巧

news2024/11/24 23:38:35

在正式学习 Rust 语言以前,我们需要先学会怎样输出一段文字到命令行,这几乎是学习每一门语言之前必备的技能,因为输出到命令行几乎是语言学习阶段程序表达结果的唯一方式。

在之前的 Hello, World 程序中大概已经告诉了大家输出字符串的方式,但并不全面,大家可能很疑惑为什么 println!( “Hello World”) 中的 println 后面还有一个 ! 符号,难道 Rust 函数之后都要加一个感叹号?显然并不是这样。println 不是一个函数,而是一个宏规则。这里不需要更深刻的挖掘宏规则是什么,后面的章节中会专门介绍,并不影响接下来的一段学习。

Rust 输出文字的方式主要有两种:println!() 和 print!()。这两个"函数"都是向命令行输出字符串的方法,区别仅在于前者会在输出的最后附加输出一个换行符。当用这两个"函数"输出信息的时候,第一个参数是格式字符串,后面是一串可变参数,对应着格式字符串中的"占位符",这一点与 C 语言中的 printf 函数很相似。但是,Rust 中格式字符串中的占位符不是 “% + 字母” 的形式,而是一对 {}

实例:runoob.rs 文件

fn main() {

    let name  = String::from("Zry") ;

    println!("Hello, {}’s world!",name);

}

使用 rustc 命令编译 runoob.rs 文件:

$ rustc runoob.rs # 编译 runoob.rs 文件

编译后会生成 runoob 可执行文件:

$ ./runoob # 执行 runoob

以上程序的输出结果是:

Hello, Zry’s world!

如果我想把 zry 输出两遍,那岂不是要写成:

println!("Hello{}, {}’s world!",name,name);

其实有更好的写法:

println!("Hello{0}, {0}’s world!",name);

在 {} 之间可以放一个数字,它将把之后的可变参数当作一个数组来访问,下标从 0 开始。

如果要输出 {} 怎么办呢?格式字符串中通过 {{}} 分别转义代表 { 和 }。但是其他常用转义字符与 C 语言里的转义字符一样,都是反斜杠开头的形式。

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

以上程序的输出结果是:

{}

自己的实操

首先使用 cargo 构建:

在这里插入图片描述

接下来使用 rustc 构建

在这里插入图片描述

思考内容

cargo 和rustc 的区别

cargo和rustc都是Rust编程语言的工具,但是它们的功能不同。

rustc是Rust编译器,用于将Rust源代码编译成可执行文件或库。它可以直接使用命令行来编译和运行Rust程序,也可以与其他构建工具(如Cargo)一起使用。

Cargo是Rust的构建系统和包管理器,它可以自动化构建、测试和发布Rust程序。它可以管理项目依赖关系、自动生成构建脚本、自动下载和编译依赖项等。使用Cargo可以更加方便地管理和构建Rust项目,特别是对于大型项目来说,使用Cargo可以大大简化构建过程。

因此,rustc主要用于编译Rust程序,而Cargo则用于管理和构建Rust项目。

结合实际再次深化区分

更详细的说明如下:

rustc是Rust编译器,它可以将Rust源代码编译成可执行文件或库。使用rustc可以直接在命令行中编译和运行Rust程序,例如:

rustc main.rs
./main

这里的main.rs是Rust源代码文件,使用rustc命令将其编译成可执行文件main,然后使用./main命令来运行该程序。

Cargo是Rust的构建系统和包管理器,它可以自动化构建、测试和发布Rust程序。使用Cargo可以更加方便地管理和构建Rust项目,例如:

cargo new my_project
cd my_project
cargo build
cargo run

这里的my_project是项目名称,使用cargo new命令创建一个新的Rust项目,然后使用cd命令进入该项目目录,使用cargo build命令编译项目,使用cargo run命令运行项目。

因此,rustc主要用于编译Rust程序,而Cargo则用于管理和构建Rust项目。

示例代码如下:

使用rustc编译和运行Rust程序:

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

使用rustc命令编译该程序:

rustc main.rs

使用./main命令运行该程序:

./main

使用Cargo创建和构建Rust项目:

cargo new my_project
cd my_project

编辑src/main.rs文件,添加以下代码:

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

使用cargo build命令编译项目:

cargo build

使用cargo run命令运行项目:

cargo run

总结:

cargo 以下称之为前者,rustc 以下称之为后者。
前者的实际是一个从工程化的角度提供支撑,类似于一个没有界面的Pycharm。
后者是一个最基础的编译器,类似于clang和gcc 。

从实际使用的展示中也可以体会到,cargo 可以通过 new 命令来创建一个完整的代码工程空间,你不单得到了一个主程序,还有与之相关的编译生成配置文件,测试路径,调试路径,以及其他相关的工程化内容。

而使用rustc 你只能对一个现有的代码文件操作,生成一个执行程序。

所以,在做一些小测试的时候,为了方便(我是指,测完就删的这种方便)。可以使用rustc 这样不必拘泥于项目构建等待那么久的时间。

但是如果你想做点小工程的话,还是cargo 更适合你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/616704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

system V共享内存

一、前言 共享内存是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递将不再涉及到内核,换句话说,进程将不再通过执行进入系统内核的系统调用来传递彼此的数据。 但其实比它好用的进程间通信还有很多种&…

Android HTTP请求方式:HttpClient

1.HttpClient使用流程 基本流程: 2.HttpClient使用示例 1)使用HttpClient发送GET请求 直接贴下简单的发送Get请求的代码: public class MainActivity extends Activity implements OnClickListener { private Button btnGet; private WebV…

什么是OSPF被动接口?如何配置?华为、思科、瞻博网络三厂商命令来了

OSPF(开放最短路径优先)是一种常用的动态路由协议,用于在大型网络中实现路由选择。在OSPF中,被动接口是一种特殊类型的接口,它被用来监测网络中的邻居关系,并接收来自邻居发送的Hello消息。被动接口不主动发…

华为OD机试之在字符串中找出连续最长的数字串(含“+-”号)(Java源码)

在字符串中找出连续最长的数字串(含“”号) 输入描述 请在一个字符串中找出连续最长的数字串,并返回这个数字串。 如果存在长度相同的连续数字串,返回最后一个。 如果没有符合条件的字符串,返回空字符串””。 注意: 数字串可以由…

Ansible进阶2——角色管理

文章目录 一、角色1.1 获取角色方式1.2 角色结构1.3 定义变量和默认变量1.4 使用方法1.5 控制playbook中的任务执行流程 二、红帽企业Linux系统角色2.1 常见系统角色2.2 使用系统时间同步角色 三、自定义角色3.1 创建角色目录结构3.2 编写角色内容3.3 编写总结 四、ansible gal…

【C++】内存管理的基本操作,new与delete的实现原理以及operator new与operator delete函数

文章目录 前言一、new,delete操作内置类型二、new/delete操纵自定义类型3. operator new与operator delete函数4. new/delete实现原理4.malloc/free和new/delete的区别 前言 程序中内存的划分: 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向…

高考必胜,归来仍是少年!

高考必胜,归来仍是少年! 这是小索奇专门为高考生写的文章高考生 我以前给大家弄过一些免费的付费资料,现在看到后台很多伙伴们都在寻找资料,一些没有充分准备的小伙伴此刻一定很匆忙吧! 我想对大家说: 高…

基于 FFMPEG 的跨平台视频播放器简明教程(二):基础知识和解封装(demux)

系列文章目录 基于 FFMPEG 的跨平台视频播放器简明教程(一):FFMPEG Conan 环境集成 文章目录 系列文章目录前言基础知识视频,你所看到的!音频 - 你所听到的声音编解码器 - 压缩数据容器 - 存放音频和视频的地方 解封…

vue3.0与vue2.0的区别简记(基于官方文档)

vue3.0与vue2.0的区别简记(基于官方文档) 基于vue3.0和vue2.0官方文档简单记录vue3.0版本和2.0版本的区别。 一直没有看文档的习惯(就是不爱学习,现在吃了没文化的亏),遇到问题才去补充点食粮&#xff0c…

祝2023高考考生高考顺利!金榜题名

前言:光阴似箭,岁月如梭。明天就是全国每年一次的高考了,我也即将结束我的大一生活成为一名大二的小学长啦嘿嘿。而我今天呢主要是想祝马上要高考的学弟学妹们高考顺利,金榜题名,并且借此机会顺便讲讲我的高考前后的故…

解决python通过pip离线安装flask,numpy报错解决(centos)

1. 离线安装Python https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz 解压,编译,安装 tar xzvf Python-3.7.1.tgz ./configuremakemake install 离线环境下如果系统不是完整版安装编译会报错,需要解决依赖问题,如下&am…

5 种常见的 Linux 打包类型:tar、gzip、bzip2、zip 、 7z

在 Linux 系统中,打包和压缩文件是常见的操作。不同的打包类型适用于不同的用途和需求。本文将详细介绍 5 种常见的 Linux 打包类型,包括tar、gzip、bzip2、zip 和 7z,以及它们的特点、使用方法和适用场景。 1. tar tar(tape arc…

音悦台项目测试报告

文章目录 项目背景项目功能测试计划与设计功能测试自动化测试 测试结果功能测试结果UI自动化测试结果 项目背景 现如今人们的生活压力大,容易使人疲惫,为了使得人们在闲暇之余可以听音乐放松,为此设计出一款轻量的听音乐网站,快速…

centos安装部署Kubernetes(k8s)步骤使用kubeadm方式

文章目录 1、修改系统配置2、安装docker应用3. 拉取docker镜像4、cri-dockerd安装5、安装kubeadm和kubelet6、配置flannel网络插件7、Node节点加入集群操作 机器地址: 192.168.0.35 k8s-master 192.168.0.39 k8s-node1 192.168.0.116 k8s-node2 1、修改系统配置 修…

Web应用技术(第十六周/持续更新)

本次联系基于how2j的教程完成对SpringBoot的初步学习。 初识Springboot 学习导入:1.第一个基于SpringBoot的项目:(1)application.java:该文件中的核心代码: (2)HelloController.jav…

一. ATR技术指标的定义与运用

一. ATR的定义 1. 什么是ATR ATR英文全名是Average true range,翻译过来就是平均真实波幅,这个指标主要用来衡量最近N天TR(真实波幅)的平均值。 2. ATR相关计算公式 T R [ ( 最高价 − 最低价 ) , ( 前一次收盘价 − 最高价 ) &#xff0…

macOS Sonoma 14.0 Beta 1 (23A5257q) Boot ISO 原版可引导镜像

macOS Sonoma 14.0 Beta 1 (23A5257q) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和…

OAuth2.0 授权 OpenID Connect 身份认证

文章目录 OAuth2.0历史由来名词解释授权码模式(authorization code 最常用)先换取code,再根据 code 换取 access_token原因 简化模式(implicit)密码模式(resource owner password credentials)客…

【P49】JMeter 查看结果树(View Results Tree)

文章目录 一、查看结果树(View Results Tree)参数说明二、准备工作三、测试计划设计 一、查看结果树(View Results Tree)参数说明 可以查看取样器的请求参数、返回结果 使用场景:一般在调试测试计划期间用来查看取样…

Bigdata1234.cn课堂测试

Java源文件中有一个公共类名称为Test,则该源文件名必须是:Test.java . Java中的基本数据类型共有8个:byte、short、int、long、float、double、char、boolean。 . Eclipse中内容补全的快捷键是alt/ Eclipse 中自动导包的快捷键是 Ctrl Sh…