惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
美团技术团队
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
A
About on SuperTechFans
Recent Announcements
Recent Announcements
D
Docker
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
腾讯CDC
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志

博客园 - liufu627

使用option 链式调用来代替异步方法幂调用 Rust 各种情况下如何修改变量 Rust 单链表的实现 Closure move 数值类型与引用类型的区别 rust 使用泛型来完成多态 # Rust异步网络编程 红黑树新解(删除) 红黑树新解(插入) WCF快速創建 dropdownlist - liufu627 - 博客园 ArcGIS安装 泛型OraHelper - liufu627 - 博客园 让SendKeys支持空格键 - liufu627 - 博客园 标点符号的英文说法 Hashtable 让哈希表顺序输出。 PDA datagrid问题 日期格式化 - liufu627 - 博客园 JSON.net的使用 关于C#测试Oracle数据库链接的问题
Rust学习
liufu627 · 2020-03-24 · via 博客园 - liufu627

# Rust学习

## Rust安装

1. 直接访问官网 https://www.rust-lang.org/tools/install 下载相应的版本进行安装。

2. 如果是Windows版本的Rust,需要安装Visual Studio 2012以上版本的VC++ 才能编译通过

3. 在命令行窗口中运行  rustc --version     如果能正常显示版本说明已安装成功

4. 安装VS Code的RUST插件 ,在VSCode Extension中查找Rust, 选择 “Rust (rls)”并安装。

5. 在用户目录下(~\.cargo\bin),应该有cargo-clippy.exe,cargo-fmt.exe,cargo-miri.exe,cargo.exe,clippy-driver.exe,rls.exe,rust-gdb.exe,rust-lldb.exe,rustc.exe,rustdoc.exe,rustfmt.exe,rustup.exe

6. rustdoc 帮助文档

7. rustc rust编译器

8. rustup rust 版本安装和更新器

9. cargo rust的包管理,像NODEJS的NPM

10. cargo new <packagename> --bin 新建一个RUST的应该项目

11. cargo new <packagename> --lib 新建一个RUST的链接库项目

12. rust切换nightly模式

rust stable 切换 nightly

安装:rustup install nightly

设为default: rustup default nightly

rustc --version就能看到切换到nightly版本了

13. rust切换stable模式

rustup default stable

14. cargo 换国内中科镜像(如果所处的环境中不允许使用 git 协议,可以把上述地址改为:registry = "https://mirrors.ustc.edu.cn/crates.io-index")

15. 调试rust程序

> 必须在vscode里安装 Microsoft C/C++ 插件

> 然后再设置选中 Allow setting breakpoints in any file.

> 先用cargo build,生成exe文件

> 按F5开始调试,修改launch.json例如以下内容,将program值修改为当前exe文件。 保存 launch.json

'''

{    

    "version": "0.2.0",

    "configurations": [

        {

            "name": "(gdb) 启动",

            "type": "cppvsdbg",

            "request": "launch",

            "program": "${workspaceFolder}/target/debug/netchat.exe",

            "args": [],

            "stopAtEntry": false,

            "cwd": "${workspaceFolder}",

            "environment": [],

            "externalConsole": true,            

        }

    ]

}

'''

> 然后就可以随便设置断点, 按F5调试 。

```

[source.crates-io]

registry = "https://github.com/rust-lang/crates.io-index"

replace-with = 'ustc'

[source.ustc]

registry = "git://mirrors.ustc.edu.cn/crates.io-index"

```

将上述内容保存为 config ,放在~/.cargo/

## 新建一个项目用 cargo new <packagename> --bin

1. cargo new hello --bin

2. 结构为:hello\

                 cargo.lock

                 cargo.toml     当前项目的配置文件

                 .gitignore

                 \src\main.rs

3. cargo.toml                 

```

[package]

name = "hello"

version = "0.1.0"

authors = ["alfred"]

edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

rocket = "0.3.6"

rocket_codegen = "0.3.6"

基于rust官方仓库crates.io,通过版本说明来描述:

基于项目源代码的git仓库地址,通过URL来描述:

基于本地项目的绝对路径或者相对路径,通过类Unix模式的路径来描述: 这三种形式具体写法如下:

[dependencies]

typemap = "0.3"

plugin = "0.2*"

hammer = { version = "0.5.0"}

color = { git = "https://github.com/bjz/color-rs" }

geometry = { path = "crates/geometry" }

```

4. cargo build

   输出到  hello\ target

# 包管理

1. 系统模块引用: 直接使用use ;  ex. use std::collections::HashMap;

use std::collections::HashMap;

let mut scores = HashMap::new();

scores.insert(String::from("Blue"), 10);

scores.insert(String::from("Yellow"), 50);

2. main文件中同级模块引用:使用 mode; 

> 例如:同级目录下有一个data.rs,内有公开方法out;

  mod data;

  fn main(){

     data::out();

  }

3. 非main文件中引用非系统模块,不能直接使用mod, 需要使用 mod.rs 来公开模块;例如当前目录下有data.rs,mod.rs,c.rs; 要在mod.rs中添加相应的module,然后可以mod.rs和c.rs中引用。

>data.rs; 因为out是公开的,data在同级目录下应该也是公开的

pub fn out() {

    println!("hello");

}

>mod.rs

pub mod data;//公开data模块

pub mod c;

fn out(){

    data::out();

}

>c.rs

use crate::data;

fn out(){

    data::out();

}

4. 引用本地crate(程序集),需要在cargo.toml指明要添加的crate 和对应路径。
[dependencies]
util={path="../util"}

5. 引用rust.io里的模块,需要在cargo.toml指明要添加的crate 和version和featrues

[dependencies]

tokio = { version = "0.2", features = ["full"] }