<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_27632921的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_27632921</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_27632921]]></copyright><item><title><![CDATA[rust处理非结构化数据最佳实践]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/145146712</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/145146712</guid><author>qq_27632921</author><pubDate>Tue, 14 Jan 2025 20:14:05 +0800</pubDate><description><![CDATA[我们前面介绍的csv数据都是结构化的数据，但是我们日常开发中遇到非结构化数据居多，因此我们怎么处理非结构化数据就非常重要了。]]></description><category></category></item><item><title><![CDATA[怎么实现一个自己的序列化了？]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144974354</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144974354</guid><author>qq_27632921</author><pubDate>Mon, 06 Jan 2025 23:03:30 +0800</pubDate><description><![CDATA[序列化最核心的接口就是Serialize和Deserialize两个，其中Deserialize是反序列化trait，具体的trait定义如下：
给不同类型实现序列化trait
我们可以为不同的数据类型实现对应的trait实现序列化和反序列化，比如说基本类型以及复合类型，比如说我们Vector中存放一个结构体和枚举
例子

最后希望大家多多关注我的公众号：花说编程]]></description><category></category></item><item><title><![CDATA[快来看rust和sqlite搞出事情来了]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144752606</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144752606</guid><author>qq_27632921</author><pubDate>Thu, 26 Dec 2024 20:38:56 +0800</pubDate><description><![CDATA[在我们国内我们日常开发过程中由于都是增删查改的操作，很多时间与数据库打交道，值得一提的是rust也能和数据库连接起来做一些操作，具体怎么做的呢，就是我们今天的话题。我们以sqlite为例，创建sqlite数据库，然后就是数据插入和查询，最后就是事务处理。]]></description><category></category></item><item><title><![CDATA[Srialize序列化你了解吗]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144570029</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144570029</guid><author>qq_27632921</author><pubDate>Wed, 18 Dec 2024 21:26:16 +0800</pubDate><description><![CDATA[前面我们已经介绍了serde的序列化和反序列化的一些知识，从怎么使用Serialize和以及把属性分为容器属性，变量属性，以及字段属性。那么我们如果我们想要更加灵活，根据自己的实际情况来序列化或者反序列化的时候该怎么办呢，这就是我们接下来的目的。刚好色的允许通过手动为我们自己的类型实现Serialize和traits 来完全定制序列化行为。我们先看在Serde框架中关于Serialize和。]]></description><category></category></item><item><title><![CDATA[带你手动实现实现Vec的插入删除和slice]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144239695</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144239695</guid><author>qq_27632921</author><pubDate>Wed, 04 Dec 2024 14:30:53 +0800</pubDate><description><![CDATA[前面我们已经实现了一个基础的Vec了，也就是一个栈。我们可以push和pop，也可以自动清理回收，但只有这些还是远远不够的。特别是我们已经有了一个数组，但是没有slice相关的功能，那么有什么办法能实现slice了，这个也非常的容易就是实现,这样我们的Vec神奇的可以编程了slice。我们只需要使用。它能够为我们正确的处理空slice，等到后面我们完成了零尺寸类型的支持，它们依然可以完美的配合。]]></description><category></category></item><item><title><![CDATA[想下自己动手能实现标准库的Vec那不得飞起啊]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144217052</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144217052</guid><author>qq_27632921</author><pubDate>Tue, 03 Dec 2024 15:56:04 +0800</pubDate><description><![CDATA[我们有时候最好的学习方式就是模仿别人优秀的代码，我们今天就带大家一起实现标准库中的Vec,结合我们之前学的知识串联起来。上一片我们分析了实现一个Vec的布局，本篇我们将继续讨论实现一个Vec的知识，我们知道Vec底层是一个堆分配的数组，因此Vec会有pop和push方法，往往我们Vec中存储的数据后续还要回收，不然一直在哪里占用着宝贵的内存，说不过去的。]]></description><category></category></item><item><title><![CDATA[自己动手实现rust中的vec(二)]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144187024</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144187024</guid><author>qq_27632921</author><pubDate>Mon, 02 Dec 2024 14:08:37 +0800</pubDate><description><![CDATA[我们有时候最好的学习方式就是模仿别人优秀的代码，我们今天就带大家一起实现标准库中的Vec,结合我们之前学的知识串联起来。上一片我们分析了实现一个Vec的布局，本篇我们将继续讨论实现一个Vec的知识，我们知道Vec底层是一个堆分配的数组，因此Vec会有pop和push方法，往往我们Vec中存储的数据后续还要回收，不然一直在哪里占用着宝贵的内存，说不过去的。]]></description><category></category></item><item><title><![CDATA[用rust实现一个贪吃蛇的小游戏]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144074529</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144074529</guid><author>qq_27632921</author><pubDate>Wed, 27 Nov 2024 09:39:17 +0800</pubDate><description><![CDATA[项目结构规划
我们创建三个rs文件分别是:,,qjcq

代码功能解释
这段Rust代码主要用于将游戏逻辑中的坐标转换为屏幕坐标，并绘制游戏中的方块。常量定义:函数 :函数 :函数 :x, y开始转换游戏逻辑坐标为屏幕坐标计算屏幕坐标 gui_x, gui_y调用 rectangle 函数绘制方块结束
详细解释


常量 :函数 :函数 :函数 :x, y开始转换游戏逻辑坐标为屏幕坐标计算屏幕坐标 gui_x, gui_y调用 rectangle 函数绘制方块结束
这是贪吃蛇游戏的上半部分，想要看下半部分点]]></description><category></category></item><item><title><![CDATA[Rust过程宏汇总]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144021632</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144021632</guid><author>qq_27632921</author><pubDate>Mon, 25 Nov 2024 10:53:13 +0800</pubDate><description><![CDATA[rust中除了声明宏以外还有过程宏，过程宏允许在执行函数的时候创建句法扩展，过程宏允许在编译时运行对rust句法进行操作的代码，他可以在消费掉一些rust句法输入的同时产生新的rust句法输出。可以把过程宏想象成从AST到另一个AST的函数映射。过程宏必须在crate类型为proc-macro的crate中定义。]]></description><category></category></item><item><title><![CDATA[我不允许你还不知道宏的这些知识]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/144004136</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/144004136</guid><author>qq_27632921</author><pubDate>Sun, 24 Nov 2024 10:35:00 +0800</pubDate><description><![CDATA[匹配器和转码器,我们还介绍了在宏定义过程中的元变量，重复元等概念，通过这些知识我们能基本的认识宏这个概念，但是我们定义了宏怎么导入到其它文件或者模块中使用了？或者是它的作用域是什么？带着这些问题我们进入今天文章的话题。]]></description><category></category></item><item><title><![CDATA[我还不允许你不知道rust属性的用法，真的太炫了]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143988166</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143988166</guid><author>qq_27632921</author><pubDate>Sat, 23 Nov 2024 10:25:49 +0800</pubDate><description><![CDATA[我们平常在阅读别人的rust代码常常会在结构体或者是函数中出现属性，例如在结构体中我们常见的，这种叫做派生宏辅助属性，还有我们单元测试中会遇到#[test]这个属性，注解在函数中用来标识是个测试函数，当我们x运行cargo test的时候就会被扫描到从而进行测试操作。属性是一种通用的，格式自由的元数据,这种元数据会被编译器或者解释器一句名称，约定，语言和编译器版本进行解释。以开头方式编写，应用于它在其中声明的程序项中。以后面不跟感叹号的开头的方式编写，应用于属性后面的内容。]]></description><category></category></item><item><title><![CDATA[带你手动实现一个属性宏，彻底明白其原理]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143961759</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143961759</guid><author>qq_27632921</author><pubDate>Fri, 22 Nov 2024 09:37:01 +0800</pubDate><description><![CDATA[至此我们成功的实现了一个派生宏属性，并且展示了如何使用我们的自定义属性。我是[花说编程]一个热爱分享rust知识和数据库内核工作者。]]></description><category></category></item><item><title><![CDATA[一文带你实现rust派生宏属性]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143957242</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143957242</guid><author>qq_27632921</author><pubDate>Thu, 21 Nov 2024 23:10:40 +0800</pubDate><description><![CDATA[至此我们成功的实现了一个派生宏属性，并且展示了如何使用我们的自定义属性。最后还是希望大家多鼓励支持我。]]></description><category></category></item><item><title><![CDATA[rust属性知识最全的总结]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143910908</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143910908</guid><author>qq_27632921</author><pubDate>Wed, 20 Nov 2024 14:25:49 +0800</pubDate><description><![CDATA[我们平常在阅读别人的rust代码常常会在结构体或者是函数中出现属性，例如在结构体中我们常见的，这种叫做派生宏辅助属性，还有我们单元测试中会遇到#[test]这个属性，注解在函数中用来标识是个测试函数，当我们x运行cargo test的时候就会被扫描到从而进行测试操作。属性是一种通用的，格式自由的元数据,这种元数据会被编译器或者解释器一句名称，约定，语言和编译器版本进行解释。以开头方式编写，应用于它在其中声明的程序项中。以后面不跟感叹号的开头的方式编写，应用于属性后面的内容。]]></description><category></category></item><item><title><![CDATA[一文带你理解rust中的闭包]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143885458</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143885458</guid><author>qq_27632921</author><pubDate>Tue, 19 Nov 2024 14:50:59 +0800</pubDate><description><![CDATA[z 的声明是有效的，因为闭包的生命周期在区块结束时到期，释放了借用。闭包类型实现 `Send` 和 `Sync` 的规则与普通结构体类型实现这俩 `trait` 的规则一样，而 `Clone` 和 `Copy` 就像它们在 `derived`属性中表现的一样。上面的代码我们实现了一个字符串拼接的闭包功能，首先我们显式的定义了一个方法`f`，它的参数是一个`FnOnce`的闭包类型，接着我们创建一个可变的String类型变量`s`和一个不可变String类型的t，然后调用方法f传入一个闭包实现字符串的拼接。]]></description><category></category></item><item><title><![CDATA[一文带你理解闭包]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143806875</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143806875</guid><author>qq_27632921</author><pubDate>Fri, 15 Nov 2024 20:12:18 +0800</pubDate><description><![CDATA[rust中的闭包在rust中占据很重要的位置，它比函数要灵活，可以捕获外部的变量，可以嵌套在函数中，或者作为函数的参数。闭包的用法灵活多变，因此我们必须要掌握好闭包的知识，无论是在开发还是在阅读开源的代码都是事半功倍的效果。>  闭包可能会捕获其所捕获变量的所有权，这取决于它是如何捕获变量的。5. **迭代器和闭包:** 闭包经常与迭代器一起使用，用于处理集合中的元素。3.**捕获环境变量:** 闭包可以捕获并修改其定义环境中的变量。2.**作为变量存储:** 闭包可以存储在变量中，然后被调用。]]></description><category></category></item><item><title><![CDATA[初识rust中安全和非安全代码以及标准库中的运用]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143742878</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143742878</guid><author>qq_27632921</author><pubDate>Wed, 13 Nov 2024 14:39:20 +0800</pubDate><description><![CDATA[因为如果 Ord 的实现本身是错误的（尽管代码是安全的）将导致未定义行为，所以 `BTreeMap` 内部的非安全代码必须对那些实际上没有做到完整顺序的 `Ord` 保持足够的鲁棒性 —— 虽然完整顺序本身是我们选择 `Ord` 的唯一理由。而对于 `trait` 的声明，`unsafe` 意味着实现 `trait` 的开发者必须查阅 `trait` 的文档以确保 `trait` 的实现符合其安全要求。这时，`BTreeMap` 的内部就可以合理地信任键的类型对于 `UnsafeOrd` 的实现是正确的。]]></description><category></category></item><item><title><![CDATA[深入浅出rust内存对齐]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143688089</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143688089</guid><author>qq_27632921</author><pubDate>Mon, 11 Nov 2024 15:59:55 +0800</pubDate><description><![CDATA[在这个例子中，`AlignedStruct` 使用默认对齐，`u8`、`u32` 和 `u64` 会根据它们的大小自然对齐。由于 `a` 是 `u8` 类型，它后面会有 3 字节的填充，以确保 `b` 是 8 字节对齐的。例如，`u32`、`i32`、`f32` 和指针类型对齐到 4 字节边界；- 由于 `address`、`size` 与 `alignment` 之间存在倍数关系，程序对内存空间的利用会出现冗余与浪费，这些被浪费掉的部分被称为对齐填充 `alignment padding`。]]></description><category></category></item><item><title><![CDATA[rust中的三胞胎姐妹花String，&str和str总是傻傻分不清吗？]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143658925</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143658925</guid><author>qq_27632921</author><pubDate>Sun, 10 Nov 2024 12:25:35 +0800</pubDate><description><![CDATA[在rust开发过程中我们常常会遇到`String`, `&str`  和 `str`三个概念,总是朦胧不清，分不清三者之间的关系以及区别，实际开发过程中总是因为分不清三者之间的用法而郁闷苦恼，今天我带你们就详细的探索三者之间的关系，让你不在朦胧不清，而让你豁然开朗。在这个例子中，`print_first_word` 函数接受一个 `&str` 类型的参数，这意味着它可以接收任何实现了 `Deref` trait 的类型，包括 `String` 和字符串字面量。]]></description><category></category></item><item><title><![CDATA[Rust 中那些让人眼花缭乱的类型转换]]></title><link>https://blog.youkuaiyun.com/qq_27632921/article/details/143626932</link><guid>https://blog.youkuaiyun.com/qq_27632921/article/details/143626932</guid><author>qq_27632921</author><pubDate>Fri, 08 Nov 2024 15:04:30 +0800</pubDate><description><![CDATA[我们根据上面的as转换得出as转换会导致好精度丢失的问题，可能转换的数据和原来的差距比较的大例如：`300_i32 as i8`的结果是`44`是不是和原来的300相差很大啊，那么rust提供了另外一种解决思路就是我们现在讲到的`TryInto 转换`。- 使用`let Foo { x, y } = foo;`解构`foo`，将`foo`的`x`和`y`字段分别赋值给局部变量`x`和`y`。- 创建一个新的`Bar`实例，将`x`赋值给`Bar`的`a`字段，将`y`赋值给`Bar`的`b`字段。]]></description><category></category></item></channel></rss>