【跟小嘉学 Rust 编程】十四、关于 Cargo 和 Crates.io
系列文章目录
【跟小嘉学 Rust 编程】一、Rust 编程基础
【跟小嘉学 Rust 编程】二、Rust 包管理工具使用
【跟小嘉学 Rust 编程】三、Rust 的基本程序概念
【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念
【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据
【跟小嘉学 Rust 编程】六、枚举和模式匹配
【跟小嘉学 Rust 编程】七、使用包(Packages)、单元包(Crates)和模块(Module)来管理项目
【跟小嘉学 Rust 编程】八、常见的集合
【跟小嘉学 Rust 编程】九、错误处理(Error Handling)
【跟小嘉学 Rust 编程】十一、编写自动化测试
【跟小嘉学 Rust 编程】十二、构建一个命令行程序
【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包
【跟小嘉学 Rust 编程】十四、关于 Cargo 和 Crates.io
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 一、发布配置(Release profile)
- 1.1、发布配置(Release profile)
- 1.2、自定义 profile
- 二、发布 crates.io
- 2.1、crates.io
- 2.2、文档注释
- 2.2.1、文档注释介绍
- 2.2.2、常用章节
- 2.2.3、文档注释作为测试
- 2.2.4、为包含注释的项添加文档注释
- 2.3、pub use
- 2.4、发布 crate 步骤
- 三、Cargo 工作空间(Workspaces)
- 3.1、工作空间
- 3.2、创建工作空间
- 3.3、在工作空间依赖外部 crate
- 四、安装 二进制 crate
- 五、使用自定义命令扩展 cargo
- 总结
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 一、发布配置(Release profile)
- 1.1、发布配置(Release profile)
- 1.2、自定义 profile
- 二、发布 crates.io
- 2.1、crates.io
- 2.2、文档注释
- 2.2.1、文档注释介绍
- 2.2.2、常用章节
- 2.2.3、文档注释作为测试
- 2.2.4、为包含注释的项添加文档注释
- 2.3、pub use
- 2.4、发布 crate 步骤
- 三、Cargo 工作空间(Workspaces)
- 3.1、工作空间
- 3.2、创建工作空间
- 3.3、在工作空间依赖外部 crate
- 四、安装 二进制 crate
- 五、使用自定义命令扩展 cargo
- 总结
前言
到目前为止,我们讲解了 Cargo 的最基本的特性来构建、运行、测试代码,但是它可以为我们做更多的事情。本章节讲解 Cargo 更高级的特性,例如:
- 通过 release profile 来自定义构建
- 在 crates.io 上发布库文件
- 通过 workspaces 组织大工程
- 从 crates.io 来安装库
- 使用自定义命令扩展 cargo
主要教材参考 《The Rust Programming Language》
一、发布配置(Release profile)
1.1、发布配置(Release profile)
发布配置(Release profile) 是 预定义的,也可以自定义(可以使用不同的配置) 对代码编译拥有更多的控制。每个Profile的配置都独立于其他的Profile。
Cargo 主要两个 Profile:
- dev profile:适用于开发(开发环境), cargo build
- release profile:适用于发布(生产环境),cargo build --release
1.2、自定义 profile
针对每个 profile,Cargo 都提供了默认的配置,如果想自定义 xxx profile 的配置,可以在 cargo.toml 里面添加 [profile.xxx] 区域,在里面覆盖默认配置的子集。
[profile.dev]
opt-level = 0[profile.release]
opt-level = 3
opt-level 参数表示优化级别,编译时间比较久。针对每个配置的默认值和完整选项,可以参考 profile
二、发布 crates.io
2.1、crates.io
可以通过发布包来共享你的代码,crate 的注册表 在 crates.io 上,它会分发已注册的包的源代码,主要托管开源的代码。
2.2、文档注释
2.2.1、文档注释介绍
文档注释用于生成HTML文档,显式公共 API的文档注释(如何使用API),使用 /// 来表示 支持markdown 语法。
使用 cargo doc 可以生成文档,它会运行 rustdoc 工具,把生成的HTML文档放在 target/doc 目录下。
使用 cargo doc --open 可以打开生成的文档。
2.2.2、常用章节
- Examples:示例代码
- Panics:函数可能发生 panic 的场景
- Errors:如果函数返回 Result,描述可能的错误种类,以及可导致错误的条件
- Safety:如果函数处于 unsafe 调用,就可以解释函数 unsafe 的原因,以及调用者确保使用的前提。
2.2.3、文档注释作为测试
示例代码块的附加值:运行 cargo test 可以把文档注释中的示例代码作为测试来运行。
2.2.4、为包含注释的项添加文档注释
- 符号://!
- 此类注释通常用于描述 crate 和模块:
- crate root (按照惯例 src/lib.rs)
- 一个模块内,将 crate 或模块作为一个整体进行记录
2.3、pub use
使用 pub use 导出方便使用的公共 API。
2.4、发布 crate 步骤
一旦发布,就是永久性,该版本无法覆盖,代码无法删除,目的:依赖于该版本的项目可继续正常工作
1、创建并设置 crate.io 账号,并且获得 api token
2、 运行命令: cargo login [api token],通知 cargo ,你的 api token 存储在本地 ~/.cargo/credentials
3、发布之前需要 在 [package] 上设置元数据。
- crate 需要唯一的名称:name
- description:一两句话即可
- license:需要提供许可证的标识值(可以在 http://spdx.org/licenses/ 查找)。
- version:可以参照 http://semver.org 来使用你的语义版本
- author
4、发布:使用 cargo publish 命令
5、使用 cargo yank 撤回版本:
- 不可以删除 crate 之前的版本
- 但是可以防止其他项目把它作为新的依赖,但是已经存在的项目可以继续作为依赖
三、Cargo 工作空间(Workspaces)
3.1、工作空间
Cargo 工作空间,帮助管理多个相互关联需要协同开发的 crate。cargo 工作空间就是一套共享同一个 cargo.lock和输出文件夹的包。
3.2、创建工作空间
[workspace]
members = ["adder"
]
运行 :cargo run -p 二进制crate
3.3、在工作空间依赖外部 crate
工作空间只有一个 cargo.lock,在工作空间的顶层目录,保证工作空间内所有 crate 的使用的依赖的版本都相同,工作空间内所有 crate 相互兼容。
四、安装 二进制 crate
-
命令 cargo install
-
来源:crates.io
-
限制:只能安装具有二进制目标(binary target)的crate
- 二进制目标 (binary target)是一个可运行的程序,由 src/main.rs 或其他被指定为二进制文件的crate 生成
-
通常在 README 里面有关于 crate 的描述
- 拥有 binary target
- 拥有 library target
- 两者兼备
-
cargo install 安装的二进制目录存在根目录的bin文件夹
-
如果你使用 rustup 安装的 rust 没有任何自定义配置,那么二进制文件将存放在 $HOME/.cargo/bin。
五、使用自定义命令扩展 cargo
- cargo 被设计成可以使用自命令扩展
- 如果$PATH中的某个二进制文件是 cargo-something,你可以像子命令一样运行:cargo something。
- 类似这样的自定义命令可以通过该命令列出:cargo --list
- 优点:可以使用cargo install 来安装扩展,像内置工具一样来使用。
总结
以上就是今天要讲的内容
相关文章:
【跟小嘉学 Rust 编程】十四、关于 Cargo 和 Crates.io
系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...
防关联指纹浏览器:高效地管理你的Facebook账户
Facebook,作为全球最受欢迎社交平台的第一名已经成为我们日常和工作中不可或缺的一部分了。不管是用于日常分享、媒体营销、还是店铺运营,Facebook都占据着重要的位置。多个Facebook账户的优势非常明显,然而,当你需要同时管理他们…...
前端学习记录~2023.8.15~JavaScript重难点实例精讲~第7章 ES6(1)
第 7 章 ES6 前言7.1 let关键字和const关键字7.1.1 let关键字(1)let关键字的特性(2)使用let关键字的好处 7.1.2 const关键字(1)const关键字的特性 7.2 解构赋值7.2.1 数组的解构赋值(1ÿ…...
WebSocket详解以及应用
😜作 者:是江迪呀✒️本文关键词:websocket、网络、长连接、前端☀️每日 一言:任何一个你不喜欢而又离不开的地方,任何一种你不喜欢而又无法摆脱的生活,都是监狱! 一、前言 我们在…...
如何评估开源项目的活跃度和可持续性?
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
远程Linux/ubuntu服务器后台不间断运行py文件/sh脚本
通常我们在生产环境中运行一些项目时需要将程序不间断的运行在服务器上,并且将日志文件打印到某个文件中,直到程序运行结束,下面介绍了在Linux服务器上不间断运行py文件的方式,以及如何保存相应的日志信息。 对于 .py 文件&#x…...
记录一个诡异的bug
将对接oa跳转到会议转写的项目oa/meetingtranslate项目发布到天宫,结果跳转到successPage后报错 这一看就是successPage接口名没对上啊,查了一下代码,没问题啊。 小心起见,我就把successPage的方法请求方式从Post改为Get和POST都…...
Xamarin.Android中的Fragment
目录 1、Activity中使用Fragment2、Fragment与Activity通信3、Fragment与其他的Fragment通信 1、Activity中使用Fragment 一般而言,会在activity中添加一个加载fragment的方法。通过点击菜单的按钮,加载不同的fragment。其样子一般是这样的:…...
portainer初体验
官方文档 安装 docker 这里采用的的是国内汉化的一个镜像,版本号2.16.2。 地址 docker run -d --restartalways --name"portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce体验 访问9000端口。 尝试&#x…...
4G数传方案(合宙cat1模块)
一. 合宙Cat1简介 合宙 Air724 模组推出的低功耗,超小体积,高性能嵌入式 4G Cat1 核心版,标准的 2.54 排针、最小成本的进项 2G、4G Cat4 切换;主要功能如下: 实际测试工作环境为-35℃-75℃; 支持 5-12V 供电或者 3.7…...
ElasticSearch - 海量数据索引拆分的一些思考
文章目录 困难解决方案初始方案及存在的问题segment merge引入预排序 拆分方案设计考量点如何去除冗余数据按什么维度拆分,拆多少个最终的索引拆分模型演进历程整体迁移流程全量迁移流程流量回放比对验证异步转同步多索引联查优化效果 总结与思考参考 困难 索引数据…...
【SA8295P 源码分析】83 - SA8295P HQNX + Android 完整源代码下载方法介绍
【SA8295P 源码分析】83 - SA8295P HQNX + Android 完整源代码下载方法介绍 一、高通官网 Chipcode 下载步骤介绍1.1 高通Chipcode 下载步骤1.2 高通 ReleaseNote 下载方法二、高通 HQX 代码介绍2.1 完整的 HQX 代码结构:sa8295p-hqx-4-2-4-0_hlos_dev_qnx.tar.gz2.2 sa8295p-…...
【设计模式--原型模式(Prototype Pattern)
一、什么是原型模式 原型模式(Prototype Pattern)是一种创建型设计模式,它的主要目的是通过复制现有对象来创建新的对象,而无需显式地使用构造函数或工厂方法。这种模式允许我们创建一个可定制的原型对象,然后通过复制…...
初识 Redis
初识 Redis 1 认识NoSQL1.1 结构化与非结构化1.2 关联和非关联1.3 查询方式1.4. 事务1.5 总结 2 Redis 概述2.1 应用场景2.2 特性 3 Resis 全局命令4 Redis 基本数据类型4.1 String4.1.1 常用命令4.1.2 命令的时间复杂度4.1.3 使用场景 4.2 Hash4.2.1 常用命令4.2.2 命令的时间…...
php灵异事件,啥都没干数据变了?
这篇文章也可以在我的博客查看 搞WordPress,难免跟php打交道 然而这弱类型语言实在坑有点多 这不今儿又踩了个大坑直接时间-1😅 问题 话不多说直接上代码 <?php $items [1,2];foreach ($items as &$item) {/*empty loop*/} print_r($items)…...
【ffmpeg】基于需要使用videocapture的opencv编译配置(C++)
目录 配置简介ffmpeg源码编译方法记录gstreamer命令行安装方法opencv的编译项记录 配置简介 opencv使用videocapture读取视频流时,需要借助底层的ffmpeg库。如果不能正确编译,会报错,现记录正确编译配置方法。 ffmpeg源码编译方法记录 ope…...
Redisson分布式锁 原理源码 分析
# 基于setnx实现的分布式锁存在的问题: # 为了解决上面的问题,可以用Redisson # Redisson入门 # Redisson可重入锁原理 获取锁的Lua脚本: 释放锁的Lua脚本: # 锁重试原理分析 tryLock()底层代码分析 tim…...
Cocos独立游戏开发框架中的事件管理器
引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。在独立游戏开发中,事件管理器是一个不可或缺的组件。它为开发者提供了一种灵活的方式来处理游戏内部各种状态变化和用户交互,实现模块之间的解耦和通信…...
keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群
一、环境准备 1. 我这里准备了三台centos7 虚拟机 主机名主机地址软件node-01192.168.157.133rabbitmq、erlang、haproxy、keepalivednode-02192.168.157.134rabbitmq、erlang、haproxy、keepalivednode-03192.168.157.135rabbitmq、erlang 2. 关闭三台机器的防火墙 # 关闭…...
网络安全(黑客)零基础自学
网络安全是什么? 网络安全,顾名思义,网络上的信息安全。 随着信息技术的飞速发展和网络边界的逐渐模糊,关键信息基础设施、重要数据和个人隐私都面临新的威胁和风险。 网络安全工程师要做的,就是保护网络上的信息安…...
如何把本地项目上传github
一、在gitHub上创建新项目 【1】点击添加()-->New repository 【2】填写新项目的配置项 Repository name:项目名称 Description :项目的描述 Choose a license:license 【3】点击确定,项目已在githu…...
跳跃游戏【贪心算法】
跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。在这里插入图片…...
vue2+element-ui 实现下拉框滚动加载
一、自定义滚动指令。 VUE.directive( el-select-loadmore: { bind(el, binding) { const SELECTWRAP_DOM el.querySelector(.el-select-dropdown .el-select-dropdown__wrap) SELECTWRAP_DOM.addEventListener(scroll, function () { /*…...
探索AIGC人工智能(Midjourney篇)(二)
文章目录 利用Midjourney进行LOGO设计 用ChatGPT和Midjourney的AI绘画,制作儿童绘本故事 探索Midjourney换脸艺术 添加InsightFaceSwap机器人 Midjourney打造专属动漫头像 ChatGPT Midjourney画一幅水墨画 Midjourney包装设计之美 Midjourney24节气海报插画…...
01-Flask-简介及环境准备
Flask-简介及环境准备 前言简介特点Flask 与 Django 的比较环境准备 前言 本篇来介绍下Python的web框架–Flask。 简介 Flask 是一个轻量级的 Web 框架,使用 Python 语言编写,较其他同类型框架更为灵活、轻便且容易上手,小型团队在短时间内…...
【Git游戏】远程分支
origin/<branch> 远程分支在本地以 origin/<branch>格式存在,他指向上次和远程分支通过时的记录 git checkout origin/<branch> 会出现HEAD分离的情况 与远程通讯 git fetch —— 从远端获取数据(实际上将本地仓库中的远程分支更新…...
Day07-ElementUI
Day02-ElementUI 一 菜单设计 1 静态菜单 a 在components文件夹中新建一个组件Menu.vue <template><div class="menu-wrap"><el-menuclass="el-menu-vertical-demo"background-color="#031627"text-color="#fff"ac…...
【Go 基础篇】Go语言中的defer和recover:优雅处理错误
Go语言以其简洁、高效和强大的特性受到了开发者的热烈欢迎。在错误处理方面,Go语言提供了一种优雅的机制,即通过defer和recover组合来处理恐慌(panic)错误。本文将详细介绍Go语言中的defer和recover机制,探讨其工作原理…...
4.15 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?
目录 HTTP 的 Keep-Alive TCP 的 Keepalive 总结: HTTP的Keep-Alive,是应用层(用户态)实现的,称为HTTP长连接; TCP的Keepalive,是由TCP层(内核态)实现的,…...
如何在VSCode中将html文件打开到浏览器
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
怎么查询网站有没有做网站地图/iis7站长工具
成就DBA职业生涯 转自:网络许多年来,我在不同的新闻组上花费了很多时间与那些想知道如何得到数据库管理员(DBA)的工作或者如何成长为一名DBA的IT人进行交谈,现在他们有了工作。这些年来许多人针对如何达到这个目标提出…...
上海做网站cnsosu/谷歌官网网址
面试中也经常被问到的热点: JVM 模型图: JVM的技术体系: 类加载器 运行时数据区 执行引擎 总体流程 GC算法 基础算法 分代管理 年轻的GC 年老的GC 常用的GC算法...
杭州网站怎么做seo/互联网宣传推广
show inter statusshow inter status errshow errdisable recoveryerrdisable detecterrdisable recovery cause ?(config)#no errdisable detect cause allerrdisable recovery interval 300(config-if)#no keep当出现err-disabled状态后,首先要做的,是找出引起该状态的根源,…...
厦门建设局长是谁/移动网站优化排名
进程:一个正在执行的的应用程序; 线程:进程中的一条执行单元,执行路径; 并行:同一时刻,多个指令在多个cpu上同时执行; 并发:同一时刻,多个指令在一个cpu上…...
城乡建设委员会官方网站/社交网络推广方法
深圳公司年报时间为每年的1月1日至6月30日,在此期间企业可以自行登录年报公示系统提交年报信息,到期未申报年报的企业,深圳市市场监督管理局在7月初发布行政决定告知公告企业补申报年报,公告之日起10日内补报的不会被纳入异常&…...
用于做网站的软件/网络推广方法有几种
在使用JavaScript显示消息或者传递字符数据的时候,经常会碰到数据中夹杂单引号()或者双引号("),这种语句往往会造成JavaScript报错。对此一般采用/或者/"的解决。 例如: [javascript] view plaincopy Alert(…...