tomcat先生
码龄9年
关注
提问 私信
  • 博客:126,702
    问答:2,195
    128,897
    总访问量
  • 20
    原创
  • 103,191
    排名
  • 150
    粉丝
  • 0
    铁粉
  • 学习成就

个人简介:一个屌丝程序员的人生

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2016-04-30
博客简介:

qq_34841911的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    218
    当月
    0
个人成就
  • 获得199次点赞
  • 内容获得23次评论
  • 获得212次收藏
创作历程
  • 23篇
    2024年
  • 3篇
    2023年
  • 3篇
    2022年
  • 1篇
    2021年
  • 3篇
    2018年
  • 1篇
    2017年
成就勋章
TA的专栏
  • java开发
    4篇
  • 大数据
    3篇
  • 集群
    1篇
  • flink
    1篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

346人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

改进rust代码的35种具体方法-类型(二十三)-避免通配符导入

对于主要使用模块来划分代码的 crate,也可能会从内部模块进行通配符导入。然而,另一个常见的例外情况是,通配符导入是有意义的。这两个观察结果的结合让人担心,对依赖项的不间断性更改可能会破坏您的代码:如果依赖项添加一个与您已经使用的名称相冲突的新符号,会发生什么?虽然理论上同样的担忧也适用于这种情况,但在实践中,这样的前奏模块可能会被精心策划,更高的便利性可能超过未来问题的小风险。语句从另一个板条箱或模块中提取命名项目,并使该名称无需条件即可在本地模块的代码中使用。不幸的是,仍然有冲突可能发生的情况。
原创
发布博客 2024.06.15 ·
420 阅读 ·
4 点赞 ·
0 评论 ·
4 收藏

改进rust代码的35种具体方法-类型(二十二)-最小化可见度

Rust允许将代码元素隐藏或暴露给代码库的其他部分。本项目探讨了为此提供的机制,并就应在何时何地使用它们提出建议。
原创
发布博客 2024.06.15 ·
977 阅读 ·
17 点赞 ·
0 评论 ·
13 收藏

改进rust代码的35种具体方法-类型(二十一)-熟悉Cargo.toml版本使用

“如果我们承认SemVer是一个有损的估计,只代表可能变化范围的子集,我们可以开始将其视为一个钝器。Rust的软件包管理器Cargo允许根据语义版本控制(semver)自动选择Rust代码的依赖项。Cargo.toml向cargo表明这种依赖性可以接受的semver版本范围。"1.2.3""^1.2.3""=1.2.3""~1.2.3""1.2.*"这些规范允许的示例如下表所示。在选择依赖版本时,Cargo通常会选择所有这些semver范围组合的最大版本。由于语义版本化是cargo。
原创
发布博客 2024.06.01 ·
1120 阅读 ·
12 点赞 ·
1 评论 ·
29 收藏

改进rust代码的35种具体方法-类型(二十)-避免过度优化的诱惑

仅仅因为Rust允许您安全地编写超酷的非分配零复制算法,并不意味着您编写的每个算法都应该是超级酷的、零复制和非分配的。”-trentj这本书中的大多数项目都旨在帮助现有程序员熟悉Rust及其成语。然而,这个项目是关于一个问题,当程序员偏离另一个方向太远,痴迷于利用Rust的效率潜力时,可能会出现这个问题——以牺牲可用性和可维护性为代价。
原创
发布博客 2024.06.01 ·
999 阅读 ·
22 点赞 ·
0 评论 ·
10 收藏

改进rust代码的35种具体方法-类型(十九)-避免使用反射

从其他语言来到Rust的程序员通常习惯于将反思作为工具箱中的工具。他们可能会浪费很多时间试图在Rust中实现基于反射的设计,却发现他们所尝试的事情只能做得不好,如果有的话。这个项目希望通过描述Rust在反思方面做什么和不做什么,以及可以使用什么来节省探索死胡同所浪费的时间。反思是程序在运行时检查自己的能力。具有全面反思支持的编程语言对这些问题有广泛的答案。具有这种反射支持水平的语言也往往是动态类型语言(例如、Ruby),但也有一些值得注意的静态类型语言也支持反射,特别是java和。
原创
发布博客 2024.05.24 ·
883 阅读 ·
13 点赞 ·
0 评论 ·
15 收藏

改进rust代码的35种具体方法-类型(十八)-不要惊慌

对于库代码,最好的替代方法是通过返回带有适当错误类型(Item 4)的Result,使错误成为其他人的问题。然而,对机器的持续警惕是另一回事:在您的持续集成系统中添加检查,以发现新的、可能恐慌的代码要可靠得多。责任总有止点,一个有用的经验法则是,恐慌是可以的!Rust的panic机制主要是为程序中不可恢复的错误而设计的,默认情况下它会终止发出panic的线程。即使在库代码中,在很少遇到错误的情况下也是如此,并且您不希望用户不得不使用.unwrap()调用来丢弃他们的代码。然而,外表可能是欺骗性的。
原创
发布博客 2024.05.24 ·
995 阅读 ·
30 点赞 ·
0 评论 ·
18 收藏

改进rust代码的35种具体方法-类型(十七)-谨慎在并行运行使用共享状态变量

即使是最大胆的共享形式,在Rust中也是安全的。——官方文档将Rust描述为能够实现"无畏并发",但这个项目将探索为什么(可悲的是)仍然有一些理由害怕并发,即使在Rust中也是如此。此项目特定于共享状态并行性:不同的执行线程通过共享内存相互通信。线程之间的共享状态通常会带来两个可怕的问题,无论所涉及的语言如何:数据竞赛僵局。
原创
发布博客 2024.05.22 ·
1100 阅读 ·
7 点赞 ·
0 评论 ·
14 收藏

改进rust代码的35种具体方法-类型(十六)-避免编写unsafe代码

考虑启用unsafe_op_in_unsafe_fn检测,以便在执行不安全操作时需要显式的unsafeblock,即使这些操作是在本身不安全的函数中执行的。如果您想做一些明显不符合Rust约束的事情,请浏览标准库,看看是否有现有功能可以满足您的需要。因此,从表面上看,这个项目的建议是微不足道的:如果你只是在Rust中编写C代码,为什么要转到Rust?的地方是被迫的,例如,当您需要通过外函数接口(FFI)与其他语言编写的代码进行交互时。代码:对于低级库代码,或者当您的Rust代码必须与其他语言的代码接口时。
原创
发布博客 2024.05.22 ·
1026 阅读 ·
29 点赞 ·
0 评论 ·
15 收藏

改进rust代码的35种具体方法-类型(十五)-借用检查器

Rust 中的值有一个所有者,但该所有者可以将值借出到代码中的其他位置。这种借用机制涉及创建和使用参考文献,遵守监管规则借用检查器。在幕后,这使用了相同类型的指针值,这些值在C或C++ 代码,但带有规则和限制,以确保避免 C/C++ 的罪恶。&valuenullptrf(value)ff(&value)valueconstvalueC/C++ 指针和 Rust 引用之间最重要的区别由术语表示借用:您可以获取某个项目的引用(指针),但您必须将其归还。
翻译
发布博客 2024.04.26 ·
100 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

改进rust代码的35种具体方法-类型(十四)-了解生命周期

生命周期从根本上与堆栈相关,因此需要快速介绍/提醒。当程序运行时,它使用的内存被分为不同的块,有时称为段。其中一些块是固定大小的,例如保存程序代码或程序全局数据的块,但其中两个块 –堆和堆栈——随着程序运行而改变大小。为了实现这一点,它们通常排列在程序虚拟内存空间的两端,因此一个可以向下增长,另一个可以向上增长(至少直到你的程序耗尽内存并崩溃)。在这两个动态大小的块中,堆栈用于保存与当前执行的函数相关的状态,特别是其参数、局部变量和临时值,保存在堆栈帧。当调用函数时f()
翻译
发布博客 2024.04.26 ·
96 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(十三)-使用默认实现来最小化所需的特征方法

因此,请遵循标准库的示例,通过添加具有默认实现(以及适当的特征边界)的方法,为实现者提供最小的 API 界面,同时为用户提供方便且全面的 API。关于具有默认实现的特征方法的最终观察是,即使在特征的初始版本发布之后,也可以安全地将新方法添加到特征中。如果该特征的实现具有更优化的方法来确定迭代器是否为空,则它可以。:即使实现者不幸已经在具体类型中添加了同名的方法,这也是正确的,因为具体方法(称为。该特征的实现者只需实现前者,并免费获得后者的全部。,表明只有当涉及的类型实现特定特征时,该方法才可用。
翻译
发布博客 2024.04.25 ·
39 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(十二)-通用方法,而不是重复造轮子

有关具体类型的信息在转换为特征对象时丢失。),它将指向底层具体项的指针与指向vtable的指针相结合,而vtable又包含所有特征实现方法的函数指针。第一个是实际的考虑:如果生成的代码大小或编译时间是一个问题,那么特征对象会执行得更好(如本项开头所述)。描述了使用特征来封装类型系统中的行为,作为相关方法的集合,并观察到有两种方法可以使用特征:作为。然而,如果存在不同特征的多个不同组合,很明显,这种方法的组合迅速变得笨重。),那么在新代码中实现特征的项目只能通过特征对象调用,因为没有源代码可以单态化。
翻译
发布博客 2024.04.25 ·
58 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(十一)-RAII模式的Drop特征

这是一种编程模式,其中值的生命周期与一些额外资源的生命周期完全相关。1:这也意味着RAII作为一种技术,主要仅在具有可预测销毁时间的语言中可用,这排除了大多数垃圾收集的语言(尽管Go的。在Rust中,内存指针的这种行为内置在语言中,但RAII的一般原则对其他类型的资源仍然有用。这大致类似于上面的最终C++示例,但在Rust中,这导致略微奇怪的缩进,但为了增加安全性和寿命精度,这是值得的。在对RAII模式的使用进行了宣传后,对如何实施它的解释是有序的。代码中的内存管理仍然有用,但这(大多)超出了本书的范围。
翻译
发布博客 2024.04.23 ·
80 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(十)-使用回数变换而不是显式循环

卑微的循环经历了一段越来越便利和越来越抽象的漫长旅程。语言(C的前身)只有,但随着C的到来,通过数组索引进行遍默的常见场景随着forC++的早期版本允许将循环变量声明嵌入for大多数现代语言进一步抽象了循环的概念:循环的核心功能通常是移动到某个容器的下一个项目,跟踪到达该项目所需的物流(index++或++it)大多是一个无关紧要的细节。该项目一旦这些概念可用,它们显然非常强大,以至于它们被迅速改装成那些还没有它们的语言(例如,每个循环都被添加到Java1.5和C++11中)。
翻译
发布博客 2024.04.22 ·
109 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(九)-熟悉引用和指针类型

对于一般的编程来说,引用是一种间接访问某些数据结构的方法,与任何拥有该数据结构的变量分开。在实践中,这通常作为指针实现:一个数字,其值是数据结构内存中的地址。现代CPU通常会对指针施加一些限制——内存地址应该在有效的内存范围内(无论是虚拟还是物理),并且可能需要对齐(例如,4字节的整数值只有在其地址是4的倍数时才能访问)。然而,更高级别的编程语言通常在其类型系统中编码更多关于指针的信息。在包括Rust在内的C衍生语言中,指针有一种类型,指示指向内存地址预计存在哪种数据结构。
翻译
发布博客 2024.04.22 ·
164 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(八)-复杂类型使用构建器

通过使用宏,剩余的样板可能会进一步减少,但如果你走这条路,你还应该检查是否有现有的板条箱(特别是thederive。对于任何风格的构建器模式,样板代码现在局限于一个地方——构建器——而不是每个使用底层类型的地方都需要。然后,构建器类型可以配备辅助方法,以填充新生项目的字段。,其中包含构建项目所需的信息。这保证了代码的安全,但确实导致了比理想更冗长的样板代码。添加新字段的更改需要对构建结构的每个地方进行更新。,那么构建器需要有足够的状态,以便能够在每次调用。为构建器调用的最终方法消耗构建器并发出构建项。
翻译
发布博客 2024.04.22 ·
122 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(七)-拥抱新型模式

描述了元组结构,其中struct的字段没有名称,而是用数字(self.0)引用。。新类型模式的最简单用途是指示,而不是其正常行为。为了说明这一点,想象一个将向Mars发送卫星的项目。这是一个大项目,所以不同的小组构建了项目的不同部分。Rust包括一个类型别名然而,类型别名实际上只是文档;它们是比之前版本的文档注释更强的提示,但没有什么能阻止在预期aPoundForceSeconds值的地方使用Ruh-roh再一次。这就是新类型模式有帮助的地方。
翻译
发布博客 2024.04.22 ·
99 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(六)-了解类型转换

与该语言的其他功能(上一篇)一样,在不同用户定义类型的值之间执行转换的能力被封装为标准特征——或者更确切地说,作为一组相关的通用特征。From:这种类型的项目可以从T类型的项目构建。TryFrom:这种类型的项目有时可以从T型项目构建。Into:这种类型的项目可以转换为T型项目。TryInto:这种类型的项目有时可以转换为T型项目。鉴于之前中关于在类型系统中表达事物的讨论,发现与Try...变体的区别并不奇怪,唯一的特征方法返回一个Result,而不是一个有保证的新项目。
翻译
发布博客 2024.04.22 ·
100 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(五)-熟悉标准特征

Rust通过一系列描述这些行为的细粒度标准特征,将其类型系统的关键行为方面编码在类型系统本身。对于来自C++的程序员来说,其中许多特征似乎很熟悉,与复制构造函数、析构函数、相等和赋值运算符等概念相对应。与C++一样,为您自己的类型实现许多这些特征通常是一个好主意;如果某些操作需要您的类型需要这些特征之一,并且它不存在,Rust编译器将为您提供有用的错误消息。实现如此大量的特征可能看起来令人生畏,但大多数常见的特征可以通过使用自动应用于用户定义的类型。
翻译
发布博客 2024.04.22 ·
118 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

改进rust代码的35种具体方法-类型(四)

标准Error特征不需要您,因此更愿意为您的错误类型实现它。在处理异构底层错误类型时,请决定是否需要保留这些类型。如果没有,请考虑anyhow在应用程序代码中包装子错误。如果需要,请将它们编码在枚举enum并提供转换。考虑使用thiserror来帮助解决这个问题。anyhow考虑使用板条箱进行方便、惯用的错误处理。这是你的决定,但无论你决定什么,请在类型系统中进行编码。
翻译
发布博客 2024.04.22 ·
85 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多