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]
  1. [package] 下的四行是项目的基础信息,Cargo 会自动获取项目的名字、版本、作者和 rust 的发行版本。
  2. [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 入门 (一)的更多相关文章

  1. Rust入门篇 (1)

    Rust入门篇 声明: 本文是在参考 The Rust Programming Language 和 Rust官方教程 中文版 写的. 个人学习用 再PS. 目录这东东果然是必须的... 找个时间生成 ...

  2. rust 入门

    hello rust fn main() { println!("Hello, world!"); } 从hello world入手,rust的语法是比较简洁. 在mac os中, ...

  3. Rust 入门 (二)

    我认为学习计算机语言,应该先用后学,这一节,我们来实现一个猜数字的小游戏. 先简单介绍一个这个游戏的内容:游戏先生成一个1到100之间的任意一个数字,然后我们输入自己猜测的数字,游戏会告诉我们输入的数 ...

  4. Rust 入门 (三)_上

    这部分我们学习 rust 语言的 变量.数据类型.函数.注释.流程控制 这五个方面的内容.本文我们介绍前两个内容,下一篇文章介绍后三个内容. 变量 默认情况下,rust 语言中声明的变量是不可变的,比 ...

  5. Rust 入门 (三)_下

    这部分我们学习 rust 语言的 变量.数据类型.函数.注释.流程控制 这五个方面的内容.前文介绍了前两个内容,本文介绍后三个内容. 函数 函数在 rust 代码普遍存在,我们也已经见过了它的主函数 ...

  6. Rust 入门 (四)

    所有权是 rust 语言独有的特性,它保证了在没有垃圾回收机制下的内存安全,所以理解 rust 的所有权是很有必要的.接下来,我们来讨论所有权和它的几个特性:借用.切片和内存结构. 什么是所有权 Ru ...

  7. Rust 入门 (五)

    定义并介绍结构体 结构体和我们前面学习的元组类似,结构体中的每一项都可以是不同的数据类型.和元组不同的地方在于,我们需要给结构体的每一项命名.结构体较元组的优势是:我们声明和访问数据项的时候不必使用索 ...

  8. rust

    books--------------Rust 中文教程 RustPrimer http://wiki.jikexueyuan.com/project/rust-primer/any/any.html ...

  9. Rust从入门到放弃(1)—— hello,world

    安装及环境配置 特点:安全,性能,并发 rust源配置 RLS安装 cargo rust管理工具,该工具可以愉快方便的管理rust工程 #!/bin/bash mkdir learn cd learn ...

随机推荐

  1. “Triplet network”三元组网络阅读笔记

    记录<DEEP METRIC LEARNING USING TRIPLET NETWORK>阅读笔记 文章总体内容: 作者在前人提出的多个特征提取方法的基础上提出Triplet netwo ...

  2. 百万年薪python之路 -- 函数名的第一类对象及使用

    函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量 1.1.函数名的内存地址 def func(): print("呵呵") print(func) 结果: ...

  3. [.Net Core 3.0从入门到精通]1.笔记简介及.Net Core3.0介绍

    文章目的:.Net Core 3.0学习笔记整理与分享. 面向人群:有一定基础的C#开发人员或学习人员(C#语法一定要掌握). 笔者水平:中级C#开发攻城狮(水平有限,写的不对的地方希望大家指正). ...

  4. 基于SkyWalking的分布式跟踪系统 - 微服务监控

    上一篇文章我们搭建了基于SkyWalking分布式跟踪环境,今天聊聊使用SkyWalking监控我们的微服务(DUBBO) 服务案例 假设你有个订单微服务,包含以下组件 MySQL数据库分表分库(2台 ...

  5. Unity调用Android相册

    最近有一个项目有这个需求,让用户上传自己的交易凭证的截图,之前因为对调Android原生的东西不太熟悉,就先放了一边 因为项目已经上线,只不过是该功能未开放而已,那么现在为什么要写这篇博客呢,是因为. ...

  6. 第二十七章 system v消息队列(三)

    消息队列实现回射客户/服务器 msg_srv.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> ...

  7. Luogu P2668 斗地主(NOIP2015)

    还记得那道我只用特判得了30分的"斗地主"吗? 我今天脑抽打算把它改A掉.为什么不用这大好时光去干些更有意义的事 于是我就挖了这个坑. 题解: 题目链接:P2668 斗地主 本题就 ...

  8. MVC5异步提交表单疑难杂症

    //此处必须添加,不然不能执行异步回调OnAddPortSuccess方法 <script src="~/scripts/jquery.unobtrusive-ajax.min.js& ...

  9. [考试反思]1031csp-s模拟测试96:常态

    按照smily的说法这一场的大众分暴力分是不是265啊QwQ那我可真是个大垃圾 总算还是回归了常态. T3文件名写错,把“city.in”写成“city,in” 还好,只丢了20分. T2乱打$O(n ...

  10. CSPS_106

    这场 死的太惨了! 我也不把我的错误像倒垃圾一样放在blog里了qwq 通过这场考试 我深深地认识到了情绪对人类的影响qwq 只要这种东西,不要出现在我的csp中就好了 T1 区间DP.. T2 枚举 ...