Rust 从入门到精通03-helloworld
安装完成 Rust 之后,我们可以编写 Rust 的 Hello Word。这里介绍两种方式,一种是rust原生方式,一种是利用 cargo 工具(重要)
1、rustc 方式
1.1 创建项目目录
rust 运行不关心代码存放的目录,我们可以任意选择一个合适的位置,创建一个目录。
比如:我们创建一个目录名称为 rust_helloword
mkdir rust_helloword
1.2 编写rust程序
rust 的源文件后缀是 .rs 。所以我们在第一个创建的项目目录下,创建一个 main.rs 文件。
然后在 main.rs 文件中写入如下代码:
fn main(){
println!("Hello World!");
}
1.3 编译并运行 rust 程序
在创建的 main.rs 文件目录下,输入如下命令:
①、编译
rustc main.rs
执行之后,会在当前目录下生成一个 main 的可执行文件。
PS:windows 是生成 main.exe 可执行文件;Linux/Mac 是生成 main 文件。
②、运行
./main
运行之后会在窗口打印出 Hello World!
至此,我们完成了第一个 Rust 程序的编写。
2、cargo方式
cargo 英文文档:https://doc.rust-lang.org/cargo/
cargo中文文档:https://cargo.budshome.com/index.html
Cargo 是 Rust 的构建系统和包管理器。大多数 Rustacean(这个词是从甲壳纲动物这个单词Crustacean[[krʌ'steʃən]],去掉了首字母C,而演变而来的,表示 rust 开发者) 使用 Cargo 来管理 Rust 项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。
在编写更加复杂的 rust 程序时,会用到很多依赖项,如果使用 Cargo 来启动项目,会简单很多。
2.1 检查cargo安装
注意:在安装 rust 时,我们是安装的 rustup,这会自动安装 Cargo,所以我们这里不介绍如何安装 cargo。
cargo --version
出现如下界面:
分别是 cargo 【版本号】(【哈希码】 【发布时间】)
2.2 创建项目
输入如下命令:
cargo new hello_cargo
该命令会自动创建一个 hello_cargo 目录,里面包含两个文件和一个目录:一个 Cargo.toml 文件,一个 src 目录,以及位于 src 目录中的 main.rs 文件。
2.3 文件介绍
①、Cargo.toml
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]
edition = "2018"
[dependencies]
这是 Cargo的配置文件,使用 TOML (Tom's Obvious, Minimal Language)语法
第一行,[package]
,是一个片段(section)标题,表明下面的语句用来配置一个包。随着我们在这个文件增加更多的信息,还将增加其他片段(section)。
接下来的四行设置了 Cargo 编译程序所需的配置:项目的名称、版本、作者以及要使用的 Rust 版本。Cargo 从环境中获取你的名字和 email 信息,所以如果这些信息不正确,请修改并保存此文件。
最后一行,[dependencies]
,用于书写项目的依赖包(类似Maven、Gradle里面编写的依赖)。在 Rust 中,代码包被称为 crates。这个项目并不需要其他的 crate。
②、src/main.rs
fn main() {
println!("Hello, world!");
}
Cargo 为我们生成了一个 “Hello, world!” 程序,rust 原生方式与 Cargo 生成项目的区别是 Cargo 将代码放在 src 目录,同时项目根目录包含一个 Cargo.toml 配置文件。
Cargo 期望源文件存放在 src 目录中。项目根目录只存放 README、license 信息、配置文件和其他跟代码无关的文件。使用 Cargo 帮助你保持项目干净整洁,一切井井有条。
如果没有使用 Cargo 开始项目,比如我们创建的 Hello,world! 项目,可以将其转化为一个 Cargo 项目:将代码放入 src 目录,并创建一个合适的 Cargo.toml 文件。
2.4 构建并运行项目
①、构建项目
cargo bulid
这个命令会创建一个可执行文件 target/debug/hello_cargo (在 Windows 上是 target\debug\hello_cargo.exe),而不是放在当前目录下。
②、运行
执行运行上一步生成的可执行文件即可。
如果一切顺利,终端上应该会打印出 Hello, world!
。首次运行 cargo build
时,也会使 Cargo 在项目根目录创建一个新文件:Cargo.lock。这个文件记录项目依赖的实际版本。这个项目并没有依赖,所以其内容比较少。
原则上自己永远也不需要碰这个文件,让 Cargo 处理它就行了。
2.5 cargo run
我们刚刚使用 cargo build
构建了项目,并使用 ./target/debug/hello_cargo
运行了程序,也可以使用 cargo run
在一个命令中同时编译并运行生成的可执行文件:
注意这一次并没有出现表明 Cargo 正在编译 hello_cargo
的输出。Cargo 发现文件并没有被改变,就直接运行了二进制文件。如果修改了源文件的话,Cargo 会在运行之前重新构建项目,并会出现像这样的输出:
2.6 cargo check
cargo check 该命令可以快速检查代码确保其可以进行编译,但是不产生可执行文件。
为什么你会不需要可执行文件呢?
通常 cargo check
要比 cargo build
快得多,因为它省略了生成可执行文件的步骤。如果你在编写代码时持续的进行检查,cargo check
会加速开发!为此很多 Rustaceans 编写代码时定期运行 cargo check
确保它们可以编译。当准备好使用可执行文件时才运行 cargo build
。
2.7 发布(release)构建
当项目最终准备好发布时,可以使用 cargo build --release
来优化编译项目。这会在 target/release 而不是 target/debug 下生成可执行文件。这些优化可以让 Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一种是为了开发,你需要经常快速重新构建;
另一种是为用户构建最终程序,它们不会经常重新构建,并且希望程序运行得越快越好。
如果你在测试代码的运行时间,请确保运行 cargo build --release
并使用 target/release 下的可执行文件进行测试。
3、总结
对于简单项目, Cargo 并不比 rustc
提供了更多的优势,不过随着开发的深入,其优势会越来越大。对于拥有多个 crate 的复杂项目,交给 Cargo 来协调构建将简单的多。
所以我们在开发过程中要将 Cargo 当做习惯。
Rust 从入门到精通03-helloworld的更多相关文章
- Rust 从入门到精通06-语句和表达式
1.语句和表达式 语句和表达式是 Rust 语言实现逻辑控制的基本单元. 在 Rust 程序里面,语句(Statement)是执行一些操作但不返回的指令,表达式(Expressions)计算并产生一个 ...
- Rust 从入门到精通01-简介
1.rust 从哪里来 Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目.第一个有版本号的 Rust ...
- Rust 从入门到精通05-数据类型
Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型. 在 Rust 中,每一个值都属于某一个 数据类型(data type),分为两大类: ①.标 ...
- Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)
简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...
- 【转】Git版本控制软件从入门到精通学习手册
GIT 学习手册简介 本站为 Git 学习参考手册.目的是为学习与记忆 Git 使用中最重要.最普遍的命令提供快速翻阅. 这些命令以你可能需要的操作类型划分,并且将提供日常使用中需要的一些常用的命令以 ...
- Spring Boot从入门到精通(八)日志管理实现和配置信息分析
Spring Boot对日志的处理,与平时我们处理日志的方式完全一致,它为Java Util Logging.Log4J2和Logback提供了默认配置.对于每种日志都预先配置使用控制台输出和可选的文 ...
- 15、ASP.NET MVC入门到精通——MVC-路由
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Routing(路由) – URL url 作为广泛使用的Web用户接口,需要被重视 好的Url应该满足如下条件: URL应为获取某种资源提 ...
- Nginx开发从入门到精通 学习目录分享学习 (阿里著作)
Nginx开发从入门到精通 缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块的开发以及它的内部 ...
- CUDA从入门到精通
http://blog.csdn.net/augusdi/article/details/12833235 CUDA从入门到精通(零):写在前面 在老板的要求下.本博主从2012年上高性能计算课程開始 ...
随机推荐
- python+pytest接口自动化(16)-接口自动化项目中日志的使用 (使用loguru模块)
通过上篇文章日志管理模块loguru简介,我们已经知道了loguru日志记录模块的简单使用.在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题. 这篇文章我们使 ...
- 用c语言调用Easy X实现图像的输出,附带音乐的读取
要实现此功能需要用EasyX 一.下载VS编译环境和EasyX. ①Vs2019https://iwx.mail.qq.com/ftn/download?func=3&key=9e9b6c33 ...
- 139_Power BI之某制造企业HR相关数据年度复盘
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近在忙一个关于制造企业HR年度数据复盘分析:数据已脱敏. 先来看看效果. 1.视频效果 [video widt ...
- node-sass,sass-loader和node之间的关系
vue-cli运行在node平台上scss语言是运行在 node-sass平台上node-sass的运行环境是node平台vue-cli工程中不识别scss语法,.scss模块,sass-loader ...
- MVC - forward 和 redirect 的区别
MVC - forward 和 redirect 的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服 ...
- SCI论文写作注意事项
1. 先写结论:(划定范围,以防添加无效的内容) 并非一开始就把整个结论都写出来,而是把
- centos 修改PHP默认版本
命令行输入export PATH=/usr/local/php/bin:$PATH 然后回车.
- C语言学习之我见-memchr()内存查找字符函数
memchr()内存查找字符函数:主要用于从内存中查找自己需要的字符位置. (1)函数原型: void *memchr(const void *_Buf ,int _Val,size_t _MaxCo ...
- SAP APO - Architecture
SAP APO体系结构由多个组件组成-数据库,BI环境包含InfoCube和实时缓存. InfoCube是BI数据集市的一部分,实时缓存是您保留与计划和调度有关的所有数据的主要区域. 您可以在实时缓存 ...
- Python收集这些视频只是单纯的想做做壁纸,大家不要误会
首先澄清一下,我用Python收集这些视频,绝不是想做别的什么,真的只是用来做动态壁纸,大家不要误会!我不是那样的人~ 这样的不过份吧 (这个动图看不看的到就看有没有缘分了 ) 阅读本文你需要准备 1 ...