Comprehensive Rust(简体中文) 202412实现 Unsafe Trait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 30.7 安全 FFI 封装容器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 30.7.1 解答 . . . . . . . . (rustc)。你还将获得 rustup,这是一个命令 行实用程序, 你可以用它来安装不同的编译器版本。 安装 Rust 之后,你应当配置你的编辑器或 IDE 以开始使用 Rust。大多数编辑器使用了 rust-analyzer。 它为 VS Code、Emacs、Vim/Neovim 及其他许多编辑器提供了自动补全及定义跳转的功能。同样也可 以使用 RustRover IDE。 • 在 Debian/Ubuntu 上,你也可以通过 中生成经过优化的 发布 build。 7. 可以通过修改 Cargo.toml 为项目添加依赖项。当运行 cargo 命令时,系统会自动下载和编译缺 失的依赖项。 尽量鼓励全班学员安装 Cargo 并使用本地编辑器。这能使他们拥有常规的开发环境,让工作变得更加轻 松。 19 第 I 章 第一天:上午 20 第 3 部分 欢迎来到第一天 今天是学习 Comprehensive Rust 的第一天。我们会涉及很多内容:0 码力 | 359 页 | 1.33 MB | 10 月前3
Rust 程序设计语言 简体中文版 1.85.0interface,API)文档! 文本编辑器和集成开发环境(Integrated Development Environments, IDE) 本书不会假设你使用何种工具来编写 Rust 代码。几乎任何文本编辑器都可以搞定!然而,很 多文本编辑器和集成开发环境(IDE)内置了 Rust 支持。你总是可以在 Rust 官网的工具页面 找到很多相对流行的编辑器和 IDE 列表。 离线使用本书 在一些示例中,我们将会使用标准库之外的 Rust,是时候来编写第一个 Rust 程序了。当学习一门新语言的时候,使用该语 言在屏幕上打印 Hello, world! 是一项传统,我们将沿用这一传统! 注意:本书假设你熟悉基本的命令行操作。Rust 对于你的编辑器、工具,以及代码位 于何处并没有特定的要求,如果你更倾向于使用集成开发环境(IDE),而不是命令 行,请尽管使用你喜欢的 IDE。目前很多 IDE 都在一定程度上支持 Rust;查看 IDE 文档以了解更多细节。Rust system,VCS)。可以通过 --vcs 参数使 cargo new 切换到其它版本控制系统(VCS),或者不使用 VCS。运行 cargo new --help 查看可用的选项。 请自行选用文本编辑器打开 Cargo.toml 文件。它应该看起来与示例 1-2 中代码类似: 文件名:Cargo.toml [package] name = "hello_cargo" version = "0.10 码力 | 562 页 | 3.23 MB | 22 天前3
Rust 程序设计语言简体中文版则作为外部依赖项。本章将会涵盖所有这些概念。对于一个由一系列相互关联的包组成 的超大型项目,Cargo 提供了 “工作空间” 这一功能,我们将在第十四章的 “Cargo Workspaces” 对此进行讲解。 我们也会讨论封装来实现细节,这可以使你更高级地重用代码:你实现了一个操作后,其他的 代码可以通过该代码的公共接口来进行调用,而不需要知道它是如何实现的。你在编写代码时 可以定义哪些部分是其他代码可以使用的公共部分,以及哪些部分是你有权更改实现细节的私 有 函数或结构体,你可以将其放入一个模块。 149/600 Rust 程序设计语言 简体中文版 父模块中的项不能使用子模块中的私有项,但是子模块中的项可以使用它们父模块中的项。这 是因为子模块封装并隐藏了它们的实现详情,但是子模块可以看到它们定义的上下文。继续拿 餐馆作比喻,把私有性规则想象成餐馆的后台办公室:餐馆内的事务对餐厅顾客来说是不可知 的,但办公室经理可以洞悉其经营的餐厅并在其中做任何事情。 slices 都是 UTF-8 编码的。 新建字符串 很多 Vec 可用的操作在 String 中同样可用,事实上 String 被实现为一个带有一些额外保 证、限制和功能的字节 vector 的封装。其中一个同样作用于 Vec和 String 函数的例子 是用来新建一个实例的 new 函数,如示例 8-11 所示。 # fn main() { let mut s = String::new(); 0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust 语言学习笔记一般用于条件编译, # 类似于`#[cfg(feature = "go-faster")]`。 go-faster = [] # 此 feature 依赖于 bcrypt 软件包, # 这样封装的好处是未来可以对 secure-password 此 feature 增加可选项目。 secure-password = ["bcrypt"] # 此处的 session 字段导入了 cookie Box::into_raw(Box::new(3)) as *mut c_void) }; 6.3.1.3 封装 unsafe,暴露安全接口 作为一个库作者,对外暴露不安全接口是一种非常不合格的做法。在做 c 库的 rust binding 时,我们做的最多的将是将不安全的 c 接口封装成一个安全接口。 通常做法是:在一个叫 ffi.rs 之类的文件中写上所有的 extern 块用以声明 ffi ("result is {:?}", result); } 所以,如果我们要对一个数据进行安全的多线程使用,最通用的做法就是使用 Arc> 或者 Arc >进行封装使用。 6.5.3 Cell 与 RefCell Rust 通过其所有权机制,严格控制拥有和借用关系,来保证程序的安全,并且 这种安全是在编译期可计算、可预测的。但是这种严格的控制,有时也会带来 0 码力 | 117 页 | 2.24 MB | 1 年前3
夏歌-使用Rust构建LLM应用培养更广泛的 Rust 开发 围绕 LLM 生态封装相应的 Rust 框 架,让开发者能够使用简单的 Rust 写 应用 如何用 Rust 实现的 构建和部署 AI 相关工作流的 serverless 平台 • 上传 Rust function ,平台负责将 Rust 编译成 Wasm ,并运行在 WasmEdge 安全容 器中 • 平台封装了一些常用 LLM 和 SaaS 的 API ,并发布成了0 码力 | 36 页 | 38.31 MB | 1 年前3
简谈 Rust 与国密 TLS - 王江桐IP 核的形 式存在于芯片中 卡证类、票务类、支付与通卡类 应用 Sm9 GM/T 0044-2016 ISO/IEC 10118-3:2018 标识密码算法:签名 校验,密钥交换,密 钥封装与加解密 非对称 加密 128 是 TLCP,适用于新兴应用的安全保 障(云、智能终端、物联网), 系统可以提供身份标识 ZUC GB/T 33133-2021 3GPP TS 35.221 Cryptography),非对称加密,标识加密将用户的标识 (如微信号、邮件地址、手机号码、QQ 号等)作为公钥,省略了交换数字证书和公钥过程,使得 安全系统变得易于部署和管理。提供签名校验,密钥交换,密钥封装与加解密功能。由于以上用 例,可以用于网络安全密码协议,如SSL/TLS。 • 保证数据机密性、真实性和完整性。 • 在商用密码体系中,SM9 主要用于用户的身份认证,据新华网公开报道,SM9 的加密强度等同于0 码力 | 44 页 | 3.70 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版我们可以将数据结构与算法类比为拼装积木,积木代表数据,积木的形状和连接方式等代表数据结构, 拼装积木的步骤则对应算法。 1. Q & A Q:作为一名程序员,我在日常工作中从未用算法解决过问题,常用算法都被编程语言封装好了,直接用就 可以了;这是否意味着我们工作中的问题还没有到达需要算法的程度? 如果把具体的工作技能比作是武功的“招式”的话,那么基础科目应该更像是“内功”。 我认为学算法(以及其他基础科目) 100 。图 6‑2 以 key 学号 和 value 姓名为例,展示了哈希函数的工作原理。 图 6‑2 哈希函数工作原理 以下代码实现了一个简单哈希表。其中,我们将 key 和 value 封装成一个类 Pair ,以表示键值对。 // === File: array_hash_map.rs === /* 键值对 */ #[derive(Debug, Clone, PartialEq)] 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。 2. 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1. 。 图 7‑16 二叉搜索树 7.4.1 二叉搜索树的操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变量 root ,指向树的根节点。 1. 查找节点 给定目标节点值 num ,可以根据二叉搜索树的性质来查找。如图 7‑17 所示,我们声明一个节点0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.1.0 Rust版100 。图 6‑2 以 key 学号 和 value 姓名为例,展示了哈希函数的工作原理。 图 6‑2 哈希函数工作原理 以下代码实现了一个简单哈希表。其中,我们将 key 和 value 封装成一个类 Pair ,以表示键值对。 // === File: array_hash_map.rs === /* 键值对 */ #[derive(Debug, Clone, PartialEq)] 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1. 。 第 7 章 树 hello‑algo.com 156 图 7‑16 二叉搜索树 7.4.1 二叉搜索树的操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变量 root ,指向树的根节点。 1. 查找节点 给定目标节点值 num ,可以根据二叉搜索树的性质来查找。如图 7‑17 所示,我们声明一个节点 + 1; } } 2. 节点平衡因子 节点的平衡因子(balance factor)定义为节点左子树的高度减去右子树的高度,同时规定空节点的平衡因子 为 0 。我们同样将获取节点平衡因子的功能封装成函数,方便后续使用: 第 7 章 树 hello‑algo.com 167 // === File: avl_tree.rs === /* 获取平衡因子 */ fn balance_factor(node:0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.0.0 Rust版100 。图 6‑2 以 key 学号 和 value 姓名为例,展示了哈希函数的工作原理。 图 6‑2 哈希函数工作原理 以下代码实现了一个简单哈希表。其中,我们将 key 和 value 封装成一个类 Pair ,以表示键值对。 // === File: array_hash_map.rs === /* 键值对 */ #[derive(Debug, Clone, PartialEq)] 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1. 。 第 7 章 树 hello‑algo.com 155 图 7‑16 二叉搜索树 7.4.1 二叉搜索树的操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变量 root ,指向树的根节点。 1. 查找节点 给定目标节点值 num ,可以根据二叉搜索树的性质来查找。如图 7‑17 所示,我们声明一个节点 1; } } 2. 节点平衡因子 节点的「平衡因子 balance factor」定义为节点左子树的高度减去右子树的高度,同时规定空节点的平衡因 子为 0 。我们同样将获取节点平衡因子的功能封装成函数,方便后续使用: 第 7 章 树 hello‑algo.com 166 // === File: avl_tree.rs === /* 获取平衡因子 */ fn balance_factor(node:0 码力 | 383 页 | 17.61 MB | 1 年前3
秘猿先锋-文愿-Axon 应用链框架的 Rust 开发实践指令前插入对指标的操作 (inc 等) 4. 重新打包成 Rust 代码并编译,得到增加埋点的可执行文件 ■ LLVM IR 插入监控埋点 ■ 优点: 1. 高度灵活 2. 零运行期成本 3. 封装性好,使用方便 ■ 缺点: 1. 学习曲线高 2. 可移植性差 3. 调试难度大(Cargo expand) 过程宏(元编程) ■ 过程宏 async_wait 的展开 metrics_rpc0 码力 | 32 页 | 3.63 MB | 1 年前3
共 16 条
- 1
- 2













