iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Rust语言技巧的使用方法是什么
  • 625
分享到

Rust语言技巧的使用方法是什么

2023-06-16 09:06:23 625人浏览 独家记忆
摘要

这篇文章主要介绍“Rust语言技巧的使用方法是什么”,在日常操作中,相信很多人在Rust语言技巧的使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Rust语言技巧的使用方法是什么”的疑惑有所帮助!

这篇文章主要介绍“Rust语言技巧的使用方法是什么”,在日常操作中,相信很多人在Rust语言技巧的使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Rust语言技巧的使用方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Racer,Clippy,rustfmt和fix

这是非常好用的一组工具

Racer用来帮助你对rust代码进行补全。

可以使用carGo安装racer使用:

cargo install racer

racer需要先获取Rust源码路径,可以通过rustup获取源码:

rustup component add rust-src

rustup update可以随时获取最新代码

Clippy可以在代码中捕获各种lints,并检查代码是否符合rust惯用写法,地道不地道、高效不高效?。

要安装Clippy,请运行rustup component add clippy

然后在工作区中运行Clippy:

cargo clippy --tests -- -W clippy::cargo

可以通过执行命令行参数或者clippy.toml配置文档来制定clippy的检查事项:

Rust语言技巧的使用方法是什么

rustfmt是一种根据风格样式来格式化Rust代码的工具。

安装rustfmt,使用:

rustup component add rustfmt

然后工作区中运行rustfmt:

cargo fmt。

同样的可以用rustfmt.toml来配置rustfmt的风格:

Rust语言技巧的使用方法是什么

cargo fix工具可以自动修复编译器中警告项。

同名宏,函数和类型

熟悉Rust的同学可能知道,Rust最强大的功能之一就是宏,比如Hello,ChonGChong范例中:

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

println!()就是一个宏。

在Rust我们可以使用相同的名称声明一个宏,一个函数和一个类型,然后可以用一条import语句将他们引入其他文件。

dbg!宏

Rust语言技巧的使用方法是什么

DBG宏可用于显示表达式和值的计算过程,可以用来快捷调试部分代码表达式。比如:

let a = 2;  et b = dbg!((a+3) * 2) + 1;  assert_eq!(b, 11);

上面的代码将打印出:

[dbg.rs:3] (a + 3) * 2 = 10

错误类型转换

直接使用rust的错误处理可能不够灵活,使用unwrap(),当出现错误时候就会触发panic,导致程序挂掉,很多时候这不是我们所期望的。下面是一个例子,

fn main() {  let path = "/tmp/example";  println!("{}", read_file(path));  }  fn read_file(path: &str) -> String {  std::fs::read_to_string(path).unwrap()  }

如果/tmp/example,不存在就会触发panic错误:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', ok.rs:7:5  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

好在我们可以使用?,通过?运算符可以将错误返回转化为了Err(From::from(err))和Ok(ok)分支处理,这样错误可以转换为自动类型。部分代码如下,可以自定义错误消息CustomError:

fn main() -> std::result::Result<(),CustomError>{  let path = "/tmp/example ";  let v = read_file(path)?;  Ok(())  }

模块化测试

试想,你项目测试结构如下:

tests/  aaa.rs  bbb.rs

测试时,这些每个都会被编译为单独的二进制文件,这会花费大量编译时间和空间。可以将这些测试文件作为模块添加到一个测试中,这样就只生成一个二进制文件。新测试结构如下所示:

tests/  all/  mod.rs // mod aaa; mod bbb;  aaa.rs  bbb.rs  mod.rs // mod all;

使用该技巧,能够大大减少编译时间,节省时间和空间提高效率。

当然它也有缺点那就是不能对单个文件进行测试,而只能统一编译该文件。即使只更改了一个测试文件,它也要编译完整项目文件。

编译器缓存

Rust编译器cargo只支持工作区内部项目间的编译缓存,不支持工作区之间的缓存。对于多个工作区的多个项目使用相同的依赖关系,就要额外花费时间各自编译。我们可以借助cargo缓存工具sccahe来解决这个问题。

sccache是类似于ccache的cargo的编译器缓存,编译该依赖关系一次,然后在所有项目中就可以重复使用。可以大大节省编译时间和磁盘空间。sccache除了可以把编译构建存在本地外,也支持存在云端,比如AWS  S3或者GCS等。

可以使用操作系统包管理器或者cargo来安装sccache:

cargo install sccache。

windows下可以使用

scoop install sccache

要使用sccache缓存rust编译,需要在cargo配置文件(~/.cargo/config)中定义build.rustc-wrapper:

[build]  rustc-wrapper = "/path/to/sccache"

也可以在编译时候直接设置RUSTC_WRAPPER环境变量:

RUSTC_WRAPPER=/path/to/sccache cargo build

避免不必要的克隆

在rust中对变量调用.clone()会为其创建数据的副本。创建数据副本需要消耗很多内存资源,因此大多数情况下会影响程序的性能,应避免使用。通常,可以将使用应用引用而非创建clone。例如:

fn main() {  let x = Foo::new();  func(x.clone());  func(x.clone()); // 该克隆是非必须的  fn main() {  let x = Foo::new();  func(x.clone());  func(x); // This will work fine because you do not need  // to use x after this call  }

使用:

fn main() {  let x = Foo::new();  func(&x);  func(&x);  }

枚举大小受最大成员限制

枚举的大小使其能够容纳其最大的变体。因此,建议在枚举内使用类似大小的变体,以避免内存布局不理想。如果需要,可以考虑将较大的变量Box化。考虑以下示例:

enum Foo{  A(u64),  B([u64; 1000]),  }  enum FooBoxing {  A(u64),  B(Box<[u64;1000]>)  }  fn main() {  let x = Foo::A(0); // 大小8008 字节  let y = FooBoxing::A(0); // 16字节  println!("Foo size {:?}", std::mem::size_of_val(&x));  println!("FooBoxing size {:?}", std::mem::size_of_val(&y));  }

在上面的示例中,枚举Foo的变体A的大小比变体B小得多,但用于两个变体的内存布局将相同,因此,当使用变体A时,其性能将不理想。

标准交换功能

rust swap函数允许直接交换两个变量,而无需创建一个临时变量。

use std::mem;  let mut x = 5;  let mut y = 42;  mem::swap(&mut x, &mut y);  assert_eq!(42, x);  assert_eq!(5, y);

到此,关于“Rust语言技巧的使用方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Rust语言技巧的使用方法是什么

本文链接: https://www.lsjlt.com/news/283039.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Rust语言技巧的使用方法是什么
    这篇文章主要介绍“Rust语言技巧的使用方法是什么”,在日常操作中,相信很多人在Rust语言技巧的使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Rust语言技巧的使用方法是什么”的疑惑有所帮助!...
    99+
    2023-06-16
  • 为什么要使用Rust语言、Rust语言有什么优势
    Rust 是一种采用过去的知识解决将来的问题的技术。” ——Graydon Hoare Rust 是一种快速、高并发、安全且具有授权性的编程语言,...
    99+
    2024-04-02
  • C语言ifdef的使用方法是什么
    在C语言中,#ifdef 是预处理指令之一,用于判断一个宏是否已经被定义。其基本语法格式为: #ifdef 宏名 // 宏已...
    99+
    2024-04-02
  • C语言socketpair的使用方法是什么
    在C语言中,可以使用socketpair函数来创建一对相互连接的套接字。这对套接字可以用于在同一进程内进行通信。下面是socketp...
    99+
    2024-03-06
    C语言
  • c语言switch的使用方法是什么
    在C语言中,switch语句用于根据不同的情况执行不同的代码块。其基本语法结构如下: switch (expression) { ...
    99+
    2024-03-15
    c语言
  • c语言extern的使用方法是什么
    在C语言中,extern关键字用于声明一个全局变量或函数,表示该变量或函数是在其它文件中定义的。extern的使用方法如下: 声明...
    99+
    2024-04-02
  • Rust语言的全链路追踪库tracing使用方法
    目录可观测性日志(Logs)指标(Metrics)追踪(Traces)Rust 中的 TraceSpanEventCollector在 Rust 中使用tracing 的完整示例Tr...
    99+
    2022-12-28
    Rust 全链路追踪库 Rust 全链路追踪库 tracing Rust tracing
  • 学习Go语言的方法与技巧
    学习Go语言的方法与技巧,需要具体代码示例 随着互联网技术的不断发展,Go语言作为一种快速、可靠、高效的编程语言,受到了越来越多开发者的青睐。想要学习Go语言,掌握其方法与技巧,首先需...
    99+
    2024-03-14
    学习方法 go语言基础 go编程技巧 go语言 标准库
  • java语言中一些方法技巧
    这篇文章将为大家详细讲解有关java语言中一些方法技巧,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列...
    99+
    2023-06-14
  • c语言中break的使用方法是什么
    在C语言中,break语句用于终止循环或switch语句,并将程序控制流转移到循环或switch语句之后的下一行代码。break的使...
    99+
    2023-10-12
    c语言
  • go语言中ffmpeg使用的方法是什么
    Go语言中使用FFmpeg的方法有两种:使用CGO调用FFmpeg的C语言库,或者使用Go语言封装的FFmpeg库。 使用CGO调...
    99+
    2024-02-29
    go语言 ffmpeg
  • c语言中free的使用方法是什么
    在C语言中,free()函数用于释放之前通过malloc()、calloc()或realloc()函数动态分配的内存空间。使用方法如...
    99+
    2024-03-15
    c语言
  • c语言指针的使用方法是什么
    在C语言中,指针是一个特殊的变量,它存储了一个内存地址的值。指针的主要作用是对内存中的数据进行直接操作,而不需要进行数据的拷贝。指针...
    99+
    2024-03-01
    c语言
  • C语言中getchar的使用方法是什么
    getchar()函数用于从标准输入流(stdin)读取一个字符,并返回该字符的ASCII码值。它的基本用法如下: int...
    99+
    2024-03-06
    C语言
  • C语言函数的使用方法是什么
    本文小编为大家详细介绍“C语言函数的使用方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言函数的使用方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、函数的嵌套调用在定义函数时,一个函数内...
    99+
    2023-06-30
  • ADO.NET使用技巧是什么
    本篇内容介绍了“ADO.NET使用技巧是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!打开连接后,ADO.NET技巧使本地OLE DB向...
    99+
    2023-06-17
  • c语言联合体的使用方法是什么
    在C语言中,联合体(union)是一种特殊的数据结构,它允许不同的数据类型在相同的内存空间中存储。联合体的定义方式和结构体...
    99+
    2024-03-15
    c语言
  • C语言断言函数assert()的使用方法是什么
    本篇内容介绍了“C语言断言函数assert()的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  在C语言库函数中提供了一个辅...
    99+
    2023-06-25
  • Rust语言中Copy和Clone的用法
    本篇文章和大家了解一下Rust语言中Copy和Clone的用法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1. Copy traitCopy trait 用于表示一个类型可以按位复制。当一...
    99+
    2023-08-03
  • 怎么使用Rust语言的类型转换
    本篇内容介绍了“怎么使用Rust语言的类型转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是类型转换类型转换,是调用函数时,根据函数要...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作