Rust 入门 (一)
Rust
语言的介绍、特性什么的都不说了,如有需要,请自行了解。这里我们直接进去正题。
一、开发环境
mac或linux系统,在命令行安装
curl https://sh.rustup.rs -sSf | sh
安装过程中会询问安装方式,我直接选择的第一种默认方式,第二种是自定义,第三种是取消安装
然后会发现在自己家目录下有一个 .cargo
的隐藏文件夹,里面有四个文件 bin env git registry
。
1.env
文件设置了 Rust
的环境变量,
2.bin
文件夹下是相关的工具 cargo cargo-miri rust-gdb rustdoc cargo-clippy clippy-driver rust-lldb rustfmt cargo-fmt rls rustc rustup
。
更新到最新版本(rust会6个星期更新一个版本)
rustup upddate
查看版本
rustc --version
cargo --version
卸载
rustup self uninstall
在 Windows
系统上就不说了,直接下载 Rust安装包rustup-init.exe 安装即可。
tips: 如果想查看文档,可以使用如下命令:
rustup doc
二、Hello World
学习语言的老规矩,二话不多说,先写一个Hello World
。
新建一个 hello.rs
文件,写入如下内容:
fn main() {
println!("Hello, world!");
}
然后编译运行即可
rustc hello.rs // 编译,会编译出一个名为hello的可执行文件
./hello // 运行,会把"Hello, world!"打印出来
做一个简单的说明,fn
是方法声明的关键字,main
是主函数的名字,rust
程序的入口,即 rust
程序是从 main
方法开始运行的。方法名字后面通常会跟着一对小括号 ()
,然后是大括号 {}
包裹着函数体(方法的参数和返回值暂且不说)。本文的函数体就是打印 Hello, World!
字符串,而 println!
则是 rust
中的宏,宏指令后文介绍,现在只需要知道宏指令后面需要紧跟着感叹号 !
就可以了。
三、Cargo
Cargo
作为 Rust
语言编译代码和包的管理工具。大多数 Rust
程序都使用这个工具来管理他们的 Rust
项目,因为 Cargo
帮我们做了大量的工作,比如:编译代码、下载代码需要的依赖,并且编译这些依赖。
简单的 Rust
项目不需要任何依赖,比如我们前面写的那个。所以我们可以只使用 Cargo
编译代码部分的功能,但是当你写复杂项目的时候,就可以在项目中使用 Cargo
来更加容易地添加依赖。
下面我们正式学习这个工具,在上文安装 Rust
的时候就已经安装好了这个工具,在此,我们可以查看一下它的版本号:
cargo --version
使用 Cargo
创建一个新的项目,项目名叫 hello_cargo
cargo new hello_cargo && cd hello_cargo
这条命令创建了一个 Cargo.toml
文件和一个 src
文件夹(git相关的就先不说了),Cargo.toml
文件如下:
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["shanpengfei <shanpengfei7@163.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
[package]
下的四行是项目的基础信息,Cargo
会自动获取项目的名字、版本、作者和rust
的发行版本。[dependencies]
则是存放项目需要的依赖。Rust
的包是映射成crates
的,而当前项目不需要任何其它依赖,后文再仔细介绍。
src
文件夹下则是一个 main.rs
文件,里面存放的代码是
fn main() {
println!("Hello, world!");
}
使用 Cargo
编译项目
cargo build
这里会生成一个 Cargo.lock
文件和一个 target
文件夹。Cargo.lock
文件用于锁定项目依赖的版本,而 target
文件夹则是编译生成的结果。然后运行项目项目
./target/debug/hello_cargo
Hello, world!
其实上面两条命令可以使用 run
命令代替
cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/hello_cargo`
Hello, world!
在写代码的时候,我们通常不需要执行代码,只需要确保代码是可编译的,此时可以使用 check
命令来检查:
cargo check
Checking hello_cargo v0.1.0 (/Users/shanpengfei/work/rust-work-space/study/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.12s
这个命令比 build
命令的速度快,只有当项目需要运行的时候才使用 build
命令。
结尾
最基础的入门级内容先介绍这么多,下一篇文章使用 rust
做一个小游戏玩一玩。
欢迎阅读单鹏飞的学习笔记
Rust 入门 (一)的更多相关文章
- Rust入门篇 (1)
Rust入门篇 声明: 本文是在参考 The Rust Programming Language 和 Rust官方教程 中文版 写的. 个人学习用 再PS. 目录这东东果然是必须的... 找个时间生成 ...
- rust 入门
hello rust fn main() { println!("Hello, world!"); } 从hello world入手,rust的语法是比较简洁. 在mac os中, ...
- Rust 入门 (二)
我认为学习计算机语言,应该先用后学,这一节,我们来实现一个猜数字的小游戏. 先简单介绍一个这个游戏的内容:游戏先生成一个1到100之间的任意一个数字,然后我们输入自己猜测的数字,游戏会告诉我们输入的数 ...
- Rust 入门 (三)_上
这部分我们学习 rust 语言的 变量.数据类型.函数.注释.流程控制 这五个方面的内容.本文我们介绍前两个内容,下一篇文章介绍后三个内容. 变量 默认情况下,rust 语言中声明的变量是不可变的,比 ...
- Rust 入门 (三)_下
这部分我们学习 rust 语言的 变量.数据类型.函数.注释.流程控制 这五个方面的内容.前文介绍了前两个内容,本文介绍后三个内容. 函数 函数在 rust 代码普遍存在,我们也已经见过了它的主函数 ...
- Rust 入门 (四)
所有权是 rust 语言独有的特性,它保证了在没有垃圾回收机制下的内存安全,所以理解 rust 的所有权是很有必要的.接下来,我们来讨论所有权和它的几个特性:借用.切片和内存结构. 什么是所有权 Ru ...
- Rust 入门 (五)
定义并介绍结构体 结构体和我们前面学习的元组类似,结构体中的每一项都可以是不同的数据类型.和元组不同的地方在于,我们需要给结构体的每一项命名.结构体较元组的优势是:我们声明和访问数据项的时候不必使用索 ...
- rust
books--------------Rust 中文教程 RustPrimer http://wiki.jikexueyuan.com/project/rust-primer/any/any.html ...
- Rust从入门到放弃(1)—— hello,world
安装及环境配置 特点:安全,性能,并发 rust源配置 RLS安装 cargo rust管理工具,该工具可以愉快方便的管理rust工程 #!/bin/bash mkdir learn cd learn ...
随机推荐
- 入门了解Service Mesh + Istio?从本文开始
下周六,深圳,阔别已久的线下技术沙龙要和你见面啦! 现场有Rancher Labs研发经理demo刚刚发布的Rancher 2.3中的Istio.Windows容器.集群模板等功能及使用,还有k3s首 ...
- EXC_BAD_ACCESS的本质详解以及僵尸模式调试原理
原文:What Is EXC_BAD_ACCESS and How to Debug It 有时候,你会遇到由EXC_BAD_ACCESS造成的崩溃. 这篇文章会告诉你什么是EXC_BAD_ACCES ...
- 第3次作业-MOOC学习笔记:Python网络爬虫与信息提取
1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进 ...
- Java基础(42)AbstractSet类
AbstractSet类的子类有HashSet(其子类是LinkedHashSet).EnumSet.TreeSet 1.HashSet public class HashSet<E> e ...
- OptimalSolution(9)--其他问题(1)
一.从5随机到7及其扩展 题目1:给定一个等概率随机产生1~5的随机函数rand1to5: public int rand1To5() { return (int)(Math.random() * 5 ...
- mybatis的插件机制
一.mybatis的插件介绍 关于mybatis的插件,我想大家也都用过,就比如最常用的逆向工程,根据表结构生成model,dao,xml文件,还有分页插件,那这些插件的工作原理是怎么样的呢,就比如分 ...
- ORM之多表操作
一.创建模型 from django.db import models # Create your models here. class Book(models.Model): nid = model ...
- Linux系统运行级别和关机重启命令介绍
Linux系统运行级别介绍 Linux系统有七种运行级别(Run Level),各个运行级别下,系统有不同的状态,各个级别的意义描述如下. 0:关键级别1:单用户运行级别,运行rc.sysinit和r ...
- SpringBoot 整合 Elasticsearch深度分页查询
es 查询共有4种查询类型 QUERY_AND_FETCH: 主节点将查询请求分发到所有的分片中,各个分片按照自己的查询规则即词频文档频率进行打分排序,然后将结果返回给主节点,主节点对所有数据进行汇总 ...
- [考试反思]0916csp-s模拟测试44:可笑
出现了有史以来第一个3首杀AK啊...然而跟我没有丝毫关系 (曾经还是有一次考试差点就有那么一点关系的...) 然而反正我考得很水就是了.不是很垃圾,而是很水. 这套题是真的水... T1不会证复杂度 ...