当前位置: 首页 > news >正文

网站改版升级步骤甘肃住房和城乡建设部网站

网站改版升级步骤,甘肃住房和城乡建设部网站,鑫灵锐做网站多少钱,备案查询网文章目录 模块系统crate包cargo 创建库库的使用 模块系统 Rust的{模块系统|the module system},包括: * 包(Packages): Cargo 的一个功能,它允许你构建、测试和分享 crate。 * Crates :一个模…

文章目录

  • 模块系统
    • crate
    • cargo 创建库
    • 库的使用

模块系统

Rust的{模块系统|the module system},包括:

* 包(Packages): Cargo 的一个功能,它允许你构建、测试和分享 crate。
* Crates :一个模块的树形结构,它形成了库或二进制项目。
* 模块(Modules)和 use: 允许你控制作用域和路径的私有性。

crate

crate 是 Rust 在编译时最小的代码单位。如果用 rustc 来编译一个文件,编译器就会将那个文件认作一个 crate。crate 可以包含模块,模块可以定义在其他文件,然后被编译进 crate 。

crate 有两种形式:二进制项和库。
第一种形式的二进制项可以被编译为可执行程序(exe)。它必须有一个 main 函数来作为入口函数。前面的每段代码段运行时都是编译成了一个二进制项。
第二种形式就是库,库其实就是工具包,只不过它提供的工具是函数/类/结构体/空间等等,它没有 main 函数,也不会编译为可执行程序,只能编译出类似于 dll/lib 之类的文件。大多数情况下 Rust 开发者说的 crate 指的都是库。库的入口为 lib.rs 。

在Rust中,包(package)是用于组织、管理和分发 Rust 代码和库的一种结构。Cargo 就是 Rust 用来管理包的工具,用 cargo 生成一个包时会含有一个 Cargo.toml 文件,阐述如何构建包含有的 crate。开发者还可以将包发布到crates.io,以供其他人使用。

一个包可以包含多个二进制 crate 项和一个可选的 crate 库。包中所包含的内容由几条规则来确立。

* 一个包中至多只能包含一个{library crate};
* 包中可以包含任意多个{binary crate};
* 包中至少包含一个 crate,无论是库还是二进制。

cargo 创建库

二进制项也就是exe前面用了很多了,这次用 cargo 创建一个 lib 工程,通过 new 指令,指定类型为lib,然后就可以得到这样一个工程:
在这里插入图片描述

与普通工程不一样的是main.rs变成了 lib.rs,然后看一下这里的代码:
首先定义了一个名为 add 的函数,它接受两个usize类型的参数,返回一个usize类型的结果,关于 pub:

在Rust中,pub是一个关键字,用于指示项的可见性。当一个函数、结构体、枚举或其他项前面带有pub关键字时,它表示该项是公开的(public),可以从该项的父模块或父作用域之外的地方访问和使用。
通过使用pub关键字,开发者可以控制项的可见性,确保某些项只能在特定的模块或作用域内使用,而不会被外部代码随意访问。这种可见性控制有助于代码的组织和封装,提供了更好的模块化和安全性。
简而言之,pub关键字用于将Rust项标记为公开的,以便可以在更广泛的范围内使用和访问。
这个后面学作用域会学到

后面的是自动生成的关于测试的代码:

#[cfg(test)]  // 使用#[cfg(test)]属性标记下面的代码块只在执行测试时编译和运行  
mod tests {  // 使用super::*导入父作用域中的所有公共项,以便在测试模块中使用add函数  use super::*;  // 定义一个测试函数it_works  #[test]  fn it_works() {  // 调用add函数并将结果赋值给result变量  let result = add(2, 2);  // 使用断言宏assert_eq!来检查result是否等于4,如果不等于,测试将失败  assert_eq!(result, 4);  }  
}

然后执行,cargo build, 就会发现 target 下生成了一些文件:
在这里插入图片描述

其中.d文件是用于依赖跟踪的。这个文件由编译器生成,并包含了源代码文件中使用的依赖信息。主要用于构建系统中,以确保在源代码文件更改时,所有依赖该文件的其他文件也会被重新构建。.d文件包含了源代码文件与其依赖项之间的关系,这样构建系统就可以准确地知道哪些文件需要重新编译,以及哪些文件可以跳过编译。这种做法可以提高构建的效率,因为只有需要重新编译的文件才会被构建,而不会被重新编译的文件则会被跳过。

.rlib文件就是 Rust 的静态库文件。这个文件包含了代码的编译结果,并可以用于链接到其他 Rust 项目中,供其他项目使用。.rlib文件包含了库的元数据和编译后的代码,它们是以平台无关的方式生成的,因此可以在不同的操作系统和架构上使用。

库的使用

刚开始我以为 Rust 里的库和C++里的一样,是直接拿过来用的,但是试了很久也没办法在本地只使用 .rlib 文件而不是用源码执行成功,如果有哪位大佬知道如何仅在工程中引入 .rlib 的方式请评论说一下,万分感谢;
另外在论坛看到有人说:

dependencies expects a Cargo package, which it will build as part of the larger build.
An rlib is the final product of a compilation step. Cargo passes them around under the hood to rustc.
So the question is: what are you really trying to do there? What does your project look like and why do you think using an rlib directly is the way to go?You can't use rlib with Cargo. Rust doesn't have a stable ABI, so you pretty much can't use them at all. Threat them as an internal implementation detail of Rust that is not for users.

似乎是因为没有C++的头文件导出的类似的机制,导致无法直接使用rlib ,因为使用者无法知道库中都提供了那些工具。

使用方式就是将库代码放在程序的目录下, 然后在 Cargo.toml 文件中,添加对库的引用,可以在dependencies部分添加一行,指定库的名称和路径,比如:

[dependencies]
hellolib = { path = "../hellolib" }

然后在,main.rs 中 extern crate hellolib; 就可以在代码中使用了;
具体目录层级与代码如下:
在这里插入图片描述

还有通过 crates.io 与 git 来引入库,这部分后续再补充;

http://www.yayakq.cn/news/849569/

相关文章:

  • 北京市建设厅门户网站个人制作网站的流程
  • 上海电子商务网站制作上海网站设
  • 成都 网站建设培训利用wordpress实现分类筛选
  • 网站建设计入到什么科目phpcms模板下载
  • 北京注册建设公司网站wordpress好玩的插件
  • 服务器证书与网站不符网络营销导向企业网站建设的一般原则包括
  • 佛山最好的网站建设合肥营销网站建设价格
  • 专业网站开发哪家专业apk连接wordpress
  • 企业网站优化服务主要围绕哪些要素?为什么?wordpress目录加图标
  • 西宁企业网站建设开发wordpress默认注册页面地址
  • 做图片网站赚钱吗主页设计
  • 有平面广告设计的网站wordpress繁体字插件
  • 网站查询域名解析网站建设 启象科技
  • 廊坊网站建站网站wordpress设置文本编辑器
  • 网站接入商查询好的营销网站设计公司
  • 小学生简短小新闻摘抄郑州seo优化培训
  • 一小时做网站wordpress 后台汉化
  • 中型网站流量中国电信云服务器
  • 网站你懂我意思正能量晚上在线观看不用下载免费保定网站建设求职简历
  • 产品网站建设公司哪家好什么叫做关键词
  • 建立网站的教学书籍广东省建设工程监督站官方网站
  • 文档分享类网站建设短视频分享网站开发
  • index 石家庄网站建设公司网站怎样备案
  • 我司网站改版上线网站建设绍兴seo网站管理
  • 学校网站集约化建设wordpress 酒店
  • 青海网站制作的公司百度指数代表什么
  • 顺企网萍乡网站建设哪些网站可以做淘宝客
  • 网站视觉优化怎么做网络团队
  • win2008 r2 搭建网站做网站地图
  • 门户网站建设 简报微信版网站开发