本系列教程目录: MongoDB入门实战教程(1) MongoDB入门实战教程(2) MongoDB入门实战教程(3) MongoDB入门实战教程(4) MongoDB入门实战教程(5) MongoDB 入门实战教程(6) MongoDB入门实战教程(7) 参考资料 唐建法,《MongoDB高手课》(极客时间) 郭远威,《MongoDB实战指南》(图书) 作者:周旭龙 出处:https://edisonchou.cnblogs.com
, a, b, c, d); } 存储在栈中 存储在堆中,也叫 boxed integer boxed integer 被包裹在引用计数器中 整数被包裹在原子引用计数器中,并受到互斥锁的保护 8. 以下是示例代码: let buffer = &mut[0u8; 1024]; // <1> read_secrets(&user1, buffer); // <2> store_secrets(buffer ); read_secrets(&user2, buffer); // <3> store_secrets(buffer); 将一个引用(&)与一个包含 1024 个初始化为 0 的无符号 8 位整数 (u8)的可变(mut)数组([...])绑定到变量缓冲区 用 user1 对象的字节来填充缓冲区 此时,buffer 仍然包含来自 user1 的数据,这些数据可能被 user2 覆盖,也可能不被覆盖 isRsa, SSLBuffer signedParams, uint8_
一、k8s的优点k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。 ③:Submission runner 提交 app 到 k8s 集群,并创建 driver pod。 ④:mutating adminission webhook创建svc,可以查看spark web ui三、Spark on K8s 的优势优势1:它的部署环境非常简单,我们现在使用的是云上托管的 K8s 无论我们使用涉及开源的 K8s 的 cluster-auto scaler 插件,还是某些云商自己实现的基于 K8s 的更高效的扩缩容机制,都可以保证集群能够极快地自动扩缩容。 六、Spark on k8s的挑战挑战1:我个人认为最重要的,就是Shuffle的流程,按照目前的Shuffle方式,我们是没办法打开动态资源特性的。
https://www.gauge.sh/blog/parsing-python-asts-20x-faster-with-rust Rust newtype 终极教程 通过Rust的newtype包装器可以提高类型安全性 这个教程非常全面,推荐阅读: https://www.howtocodeit.com/articles/ultimate-guide-rust-newtypes 微软Surface的UEFI是用Rust /ba-p/4159998 教程 - 使用Rust开发跨平台安全应用 讲解了Rust如何与TS配合。 https://www.firezone.dev/blog/using-tauri Rust 社区统计数据 这个统计各大社交平台上的Rust数据。显示Rust正在快速增长。2个月涨了几%。 https://rust.code-maven.com/rust-update-2024-06-17 --
unsafe Rust 编译器:我不允许!你:我偏要!欢迎来到 Rust 的"法外之地" 引入 学到这里,你可能已经对 Rust 的借用检查器又爱又恨了。 unsafe unsafe trait CanBeDropped {} // 实现 unsafe trait 也需要 unsafe struct MyResource { data: Vec<u8> 实战案例:实现一个简单的 Vec 让我们看看 unsafe 在实际中的应用。 old_layout = Layout::array::<T>(self.capacity / ).unwrap(); dealloc(self.ptr as *mut u8, let layout = Layout::array::<T>(self.capacity).unwrap(); dealloc(self.ptr as *mut u8,
基本概念 match 是 Rust 中的强大模式匹配语法,类似于其他语言的 switch,但功能更强大。它允许你根据变量的值执行不同的代码分支,并且可以匹配复杂的数据结构。 ("Other"), } } 匹配枚举类型 Rust 的枚举和 `match` 搭配非常强大: enum Direction { North, South, East, ("Result: {}", result); 穷尽性检查 Rust 要求 `match` 必须覆盖所有可能情况,否则编译报错。这保证了代码的安全性。 实战例子:Option 和 Result fn main() { let maybe_name = Some("Alice"); match maybe_name { Some ("Error: {}", e), } } 总结 `match` 是 Rust 的模式匹配工具,功能远超传统 `switch`。 可以匹配数字、枚举、结构体、元组等。
但是并发编程的坑太多——数据竞争、死锁、内存泄漏……Rust 以其“零成本抽象”和铁腕借用检查器,化险为夷,让你写出安全、高效的多线程代码。 1. Rust 线程基础:spawn、join 和 move 闭包Rust 的线程在 std::thread 模块中。 实战场景:在游戏服务器中,Arc<Mutex<Player>> 共享玩家状态;或 CLI 工具并行下载文件,Mutex 记录进度条。警告:死锁风险!别在锁内调用另一个锁住的 Mutex。 调试神器:RUST_LOG=debug cargo run,或 gdb 附着。线程,让 Rust 并发如丝般顺滑 Rust 线程不是“可选糖衣”,而是安全并发的基石。 实战中,从小项目起步:试试并行排序日志文件,或构建 mini Web 服务器。Rust 的并发哲学:让编译器抓错,别让运行时崩溃。
基础没有学习的话建议先查看文章学习基础目录:Python开发实战系列教程-链接汇总,持续更新。进行学习。 最近几天感冒中,四肢乏力以及最近比较忙导致,更新较慢。还请见谅。 下篇:Python教程:操作数据库,MySql的安装详解
参考资料 极客时间,胡夕《Kafka核心技术与实战》 B站,尚硅谷《Kafka 3.x入门到精通教程》 作者:周旭龙 出处:https://edisonchou.cnblogs.com 本文版权归作者和博客园共有
新手也能学会的高性能gpu开发,只需要rust和cubel基础知识即可实现,让你的程序简单的使用gpu加速! CubeCL是一个现代化的Rust GPU计算框架,它让编写高性能、可移植的GPU内核变得简单。 简单易用:用Rust写GPU代码,学习曲线平缓 高性能:自动向量化优化,充分利用GPU算力 可移植:同一份代码可运行在WGPU/CUDA等不同后端 类型安全:Rust的类型系统保证代码安全性 提示: 即使没有GPU编程经验,通过本教程你也能快速上手CubeCL! GPU内核编程 与传统GPU编程不同,CubeCL允许直接用Rust编写运算逻辑。
本文是《Rust in action》学习总结系列的第二部分,更多内容请看已发布文章: 一、Rust实战系列-Rust介绍 “主要介绍 Rust 的语法、基本类型和数据结构,通过实现一个简单版 grep 虽然在其它情况下,Rust 可以自动推断生命周期,但引用的生命周期需要程序员指定。使用两个参数('a 和 'b)表示 i 和 j 的生命周期不关联。 8. 在这个意义上,类似于与原始内存数组交互,不同的是,Rust 保证 str 的值是有效的 UTF-8 字符。 = {})", a, sum); } } [1, 2, 3] 表示数组,元素类型由 Rust 推导 [u8; 3] 指定元素类型为 u8,数组长度为 3 [0; 3] 是重复表达式,0 被重复 3 (2)[u8; 3] 和 [u8; 4] 是不同的类型。也就是说,数组的大小会影响类型。
今天咱们就聊聊 Rust 的测试系统——内置的、强大的、让你爱上写测试的神器。 核心概念 Rust 的测试类型 类型 位置 用途 单元测试 源码文件内(#[cfg(test)]) 测试单个函数/模块 集成测试 tests/ 目录 测试整个库的 API 文档测试 文档注释中(///) : # 安装 dotenvy cargo add dotenvy # 创建 .env 文件 API_KEY=test_key // 测试前加载 dotenvy::dotenv().ok(); 实战案例 三剑客 测试要独立:不依赖顺序,不共享状态 文档测试:让文档示例永远正确 下篇预告: 咱们已经学了内存的基础(栈和堆),但 Rust 的内存模型可不止这些。 下篇深入聊聊Rust 的内存模型,看看所有权、借用、生命周期是怎么在内存层面工作的! 参考资料 Testing Chapter Integration Tests
u8, len: usize) -> usize { unsafe { // 将 C 字符串转换为 Rust 字符串 let slice = std::slice _t a, int32_t b); extern size_t rust_process_string(const uint8_t* input, size_t len); int main() { ; size_t len = rust_process_string((const uint8_t*)str, ); printf("String length: %zu\n", len 字符串转换:C 字符串 ↔ Rust 字符串 这是 FFI 中最常见的痛点。C 用 \0 结尾的字节数组,Rust 用 UTF-8 编码的 String/&str。 实战案例:封装 SQLite C 库 让我们看一个真实的 FFI 封装案例——封装 SQLite 的 C API: use std::ffi::{CStr, CString}; use std::os:
在逻辑门上运行Rust 本文将讨论许多话题,从CPU架构设计到历史上的诡异事件。喝一杯吧,接下来就是下坡路了。 所有这些架构的定义特征都不同,主要的特征有 字大小:8、16、31、32、64位,有时更多 设计风格:RISC(指令少,操作简单),CISC(指令多,执行复杂的操作,VLIW(指令长,同时并行做很多事情 Rust验证器(简称Kani,这是我们的开源形式验证工具,可以证明Rust代码的属性)到Tokio的一个例子。 关于 Kani: Kani Rust验证器是一个用于Rust的位精确模型检查器。 Kani对于验证Rust中的不安全代码特别有用,因为许多语言的常规保证不再由编译器检查。 This Week in Rust 456 新一期的 Rust 周报速递发布,快来看看有哪些内容你曾经关注过 :) This Week in Rust 456: https://this-week-in-rust.org
Rust 有卫生宏(hygienic macros),println! 就是它的一个例子。 Rust 字符串是 UTF-8 编码的,可以包含任何 Unicode 字符。 什么是 卫生宏? 标量类型 类型 示例 有符号整数 i8, i16, i32, i64, i128, isize -10, 0, 1_000, 123_i64 无符号整数 u8, u16, u32, u64, u128 同时,上面的类型的宽度如下: iN, uN 和 fN 是 N 位宽, Isize 和 usize是指针的宽度, Char 是 32 位宽, Bool 是 8 位宽。 注意,数组的长度是其类型的一部分,这意味着 [u8;3] 和 [u8;4] 被认为是两种不同的类型。 可以使用字面量给数组赋值。 添加 #,例如{a:#?} Rust String 大致相当于c++中的std:: String(主要区别:它只能包含UTF-8编码的字节,并且永远不会使用小字符串优化)。
构造函数存在于很多语言中,可用于对当前对象在第一次创建时的初始化设置。在 solidity 合约中,也存在对应的构造函数,使用 constructor(){} 对其进行定义。
结构体是一种可以自行定义的数据类型,其结构体内是复合的数据类型结构,当单一数据类型不能满足时可以使用创建所需结构体。
引入 你有没有想过,当你写下一行 let x = 5; 时,Rust 到底把你的 5 放在了哪里? 是随便找个地方塞进去?还是有个精心规划的"小区"? 今天咱们就来扒一扒 Rust 的内存模型,搞清楚你的数据到底住在哪儿,以及为什么 Rust 要这么设计。 Rust 说:"这种小东西,随便复制,不用管我!" "); process_data(&s); // 只是借用 process_data(&s); // 再借一次 process_data(&s); // 随便借 } 实战案例 有没有被 Rust 的所有权转移坑过?评论区聊聊你的"血泪史"! 参考资料 Rust Book - Stack and Heap Rust By Example - Box
,这个要求只有这一次有效,不需要给这个要求取名字 闭包的语法 // 最简单的闭包 let add = |x, y| x + y; // 调用方式 let result = add(, ); // 8 , numbers); // [9, 8, 5, 2, 1] } 看到没?|a, b| b.cmp(a) 这个闭包直接写在 sort_by 里面,不用单独定义函数,多清爽! , name); }; greet(); // Hello, Rust! Box(需要堆分配) fn make_adder_boxed(x: i32) -> Box<dyn Fn(i32) -> i32> { Box::new(move |y| x + y) } 实战案例 参考资料 Rust Book - 闭包 Rust by Example - Closures
Rust 教程 - 函数基础 函数:代码界的"打工人",给啥干啥,干完交活 引入 你是不是已经写过一些 Rust 代码了? 今天咱们就来聊聊 Rust 里的函数,看看它和其他语言有什么不一样,以及为什么 Rust 编译器对函数的"返回值"这么较真。 } 表达式 vs 语句:Rust 的"灵魂拷问" 这是 Rust 新手最容易懵的地方。 ("{}", name); } 实战案例 案例 1:温度转换器 fn main() { let celsius = 25.0; let fahrenheit = celsius_to_fahrenheit 参考资料 Rust Book - 函数 Rust By Example - 函数