当前位置: 首页 > 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 来引入库,这部分后续再补充;

相关文章:

Rust 模块系统

文章目录 模块系统crate包cargo 创建库库的使用 模块系统 Rust的{模块系统|the module system},包括: * 包(Packages): Cargo 的一个功能,它允许你构建、测试和分享 crate。 * Crates :一个模…...

面向服务架构-架构师(六十四)

SOA概述和发展、参考架构、协议和规范、标准和原则、设计模式、构件和实施。 SOA概述和发展 服务指系统对外提供的功能,SOA是一种应用框架。 微服务去掉了ESB企业服务总线,SOA集中式,SOA和微服务的区别: 微服务更加精细。服务…...

Linux之系统编程

1.yum 1.yum list可以出现所有可下载的程序 辅助grep进行查找 2.yum install可以下载并安装 3.yum remove可以卸载程序 不同的商业操作系统内核都是一样的,主要是配套社区不一样。 开源组织,各大公司,既得利益者。 同上 基础软件源可以保证…...

信道数据传输速率、信号传播速度——参考《天勤计算机网络》

一、缘起题目 二、解析 三、总结 信道数据传输速率和信号传播速度是两个不同的概念。 3.1 信道数据传输速率(Channel Data Transfer Rate) 指的是在通信系统中,通过信道传输的数据量,通常以 比特率(bits per second…...

微信小程序vue+uniapp旅游景点门票预订系统 名胜风景推荐系统

与此同时越来越多的旅游公司建立了自己的基于微信小程序的名胜风景推荐平台,管理员通过网站可以添加用户、景点分类、景点信息、在线预订、最新推荐,用户可以对景点信息进行在线预订,以及开展电子商务等。互联网的世界里蕴藏无限生机&#xf…...

每日一题之二分查找(一)

每日一题之二分查找(一) 1.题目(搜索插入位置) 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间…...

Redisson的看门狗策略——保障Redis数据安全与稳定的机制

前言 自定义redis分布式锁无法自动续期,比如,一个锁设置了1分钟超时释放,如果拿到这个锁的线程在一分钟内没有执行完毕,那么这个锁就会被其他线程拿到,可能会导致严重的线上问题,在秒杀场景下,…...

2.2 消元法的概念

一、消元法介绍 消元法(elimination)是一个求解线性方程组的系统性方法。下面是使用消元法求解一个 2 2 2\times2 22 线性方程组的例子。消元之前,两个方程都有 x x x 和 y y y,消元后,第一个未知数 x x x 将从第…...

删除有序数组中的重复项

目录 题目: 示例: 题目分析: 解题思路: 题目: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的…...

【数据库】

文章目录 1. 聚合函数练习: 2. 子查询 1. 聚合函数 where中过滤条件中不能写聚合函数,有聚合函数需要写到Having中 方式一效率高: Select执行流程 练习: 2. 第七题:count(*)有问题,原因是左外连接后…...

高级深入--day38

阳光热线问政平台 http://wz.sun0769.com/index.php/question/questionType?type4 爬取投诉帖子的编号、帖子的url、帖子的标题,和帖子里的内容。 items.py import scrapyclass DongguanItem(scrapy.Item):# 每个帖子的标题title scrapy.Field()# 每个帖子的编…...

基于springboot,vue校园社团管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plus 本系…...

广州华锐互动:VR虚拟现实物理学习平台,开启数字化教学新格局

随着虚拟现实(VR)技术的不断发展,越来越多的领域开始应用这一技术。广州华锐互动开发的VR虚拟现实物理学习平台就得到了广泛应用,平台涉及力学、光学、热学等初中物理知识,还包含了物理名人、实验器具、物理现象的还原和学习,相比…...

【tio-websocket】8、T-IO对半包和粘包的处理

介绍 t-io对数据的解码是在DecodeRunnable中完成的,一个TCP连接对应一个DecodeRunnable半包粘包的处理也都在DecodeRunnable中完成的关于DecodeRunnable 先贴上 DecodeRunnable 的源代码: import java.nio.BufferUnderflowException; import java.nio.ByteBuffer; import j…...

【Linux】安装与配置虚拟机及虚拟机服务器坏境配置与连接

目录 操作系统介绍 什么是操作系统 常见操作系统 UNIX操作系统 linux操作系统 mac操作系统 嵌入式操作系统 个人版本和服务器版本的区别 安装VMWare虚拟机 VMWare虚拟网卡 ​编辑 配置虚拟网络编辑器 ​编辑 安装配置Windows Server 2012 R2 安装Windows Server 2…...

Redis常识

文章目录 缓存的三个风险数据结构淘汰策略 和 过期删除策略过期删除淘汰 如何理解单线程redis特性复制gossip协议事务(和mysql不同,是不严格的事务 )集群(高可用)管道持久化 缓存的三个风险 缓存雪崩(缓存…...

Instant,LocalDate,LocalTime,LocalDateTime和ZonedDateTime

Instant 封装了从 1970-01-01T00:00:00Z 开始的秒数,相当于时间戳。 主要有两个属性: private final long seconds; private final int nanos;LocalDate 用于表示日期,包括年、月、日,例如 2017-12-03。 主要有三个属性&…...

Web入门笔记

Web入门笔记 HTTP协议 超文本传输协议 规定了浏览器和服务器之间数据传输的规则,请问数据和响应数据的格式 基于TCP请求-响应模式一次请求对应一次响应无状态的协议 请问数据格式 浏览器版本:解决浏览器兼容问题。GET请求体:存放请求参数…...

Linux网络编程二(TCP三次握手、四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

TCP三次握手 TCP三次握手(TCP three-way handshake)是TCP协议建立可靠连接的过程,确保客户端和服务器之间可以进行可靠的通信。下面是TCP三次握手的详细过程: 假设客户端为A,服务器为B 1、第一次握手(SYN1,seq500&…...

C#核心笔记——(一)C#和.NET Framework

C#是一种通用的,类型安全的面向对象编程语言。其目标是提高程序员生产力。 一.面向对象 C#实现了丰富的面向对象范式,包括封装、继承、多态。 C#面向对象特性包括: 统一的类型系统 类与接口 属性、方法、事件 C#支持纯函数模式 二、类型安…...

【2023年冬季】华为OD统一考试(B卷)题库清单(已收录345题),又快又全的 B 卷题库大整理

目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治递归…...

云服务器的先驱,亚马逊云科技海外云服务器领军者

随着第三次工业革命的发展,移动互联网技术带来的信息技术革命为我们的生活带来了极大的便捷。其中,不少优秀的云服务器产品发挥了不可低估的作用,你或许听说过亚马逊云科技、谷歌GCP、IBM Cloud等优秀的海外云服务器。那么云服务器有哪些&…...

QT webengine显示HTML简单示例

文章目录 参考示例1TestWebenqine.promainwindow.hmainwindow.cppmain.cpp效果 示例2 (使用setDevToolsPage函数)main.cpp效果 参考 QT webengine显示HTML简单示例 示例1 编译器 : Desktop Qt 5.15.2 MSVC2019 64bit编辑器: QtCreator代码: TestWebenqine.pro # TestWeben…...

Spark_SQL函数定义(定义UDF函数、使用窗口函数)

一、UDF函数定义 (1)函数定义 (2)Spark支持定义函数 (3)定义UDF函数 (4)定义返回Array类型的UDF (5)定义返回字典类型的UDF 二、窗口函数 (1&…...

【Leetcode】【每日一题】【中等】274. H 指数

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/h-index/description/?envTyped…...

MySQL读写分离技术及实现方案

MySQL读写分离技术及实现方案 本文主要介绍了MySQL读写分离技术的原理、实现方案以及示例。通过使用读写分离技术,可以提高数据库的性能,降低服务器的压力。 一、MySQL读写分离技术简介 读写分离是指将数据库的读操作和写操作分别分配到不同的服务器上…...

git 推送到github远程仓库细节处理(全网最良心)

我查看了很多网上的教程都不是很好 我们先在github创建一个仓库,且初始化 readme 我们到本地文件初始化仓库 添加远程仓库 这时候我们就 git add . , git commit ,再准备git push 的时候 显示没有指定远程的分支 我们按照提示操作 提示我们要先git pull 提示我…...

算法训练|数据流中的中位数

LCR 160. 数据流中的中位数 - 力扣(LeetCode) 总结:这题自己最开始的想法是直接使用vector容器,每次取中位数的时候就进行一次排序,超时。题解很巧妙的利用大根堆和小根堆来解决问题,大根堆和小根堆各存一…...

LeetCode 2558. 从数量最多的堆取走礼物【模拟,堆或原地堆化】简单

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

windows服务器环境下使用php调用com组件

Office设置 安装 office2013 且通过正版激活码激活 在组件服务 计算机 我的电脑 DOM 中找到 Microsoft Word 97 - 2003 文档 服务,右键属性 身份验证调整为 无 在 标识中 调整为 交互式用户 php环境设置 开启com组件扩展 在php.ini中设置 extensionphp_com_dotn…...