自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

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

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

2024-05-24 17:51:32 452

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

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

2024-05-24 17:35:52 500

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

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

2024-05-22 17:52:40 997

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

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

2024-05-22 17:13:02 952

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

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

2024-04-26 11:24:28 25

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

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

2024-04-26 10:27:04 10

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

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

2024-04-25 16:16:16 4

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

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

2024-04-25 15:51:09 10

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

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

2024-04-23 14:13:56 13

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

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

2024-04-22 18:02:59 17

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

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

2024-04-22 17:24:14 18

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

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

2024-04-22 16:58:14 15

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

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

2024-04-22 15:21:14 25

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

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

2024-04-22 15:05:36 22

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

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

2024-04-22 14:50:28 12

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

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

2024-04-22 12:05:06 18

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

后者允许对失败时的错误消息进行个性化处理,但无论哪种情况,生成的代码都更短、更简单——错误处理委托给.unwrap() 后缀 (但仍然存在)。然而,即使只有一个字符,类型系统仍然在工作,确保涵盖相关类型中表达的所有可能性——让程序员专注于主线代码路径,而不会分心。设计软件来应对故障路径是困难的,其中大部分是基本的复杂性,任何句法支持都无法帮助——特别是决定如果操作失败会发生什么。例如,考虑一个可选地包含一些数据的结构。不必要的第一种情况是,只有值是相关的,并且没有值(以及任何相关错误)可以忽略。

2024-04-22 11:52:56 1130

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

本书的第一部分涵盖了围绕Rust类型系统的建议。这种类型系统比其他主流语言更具表现力;它与或等“学术”语言有更多的共同点。其中一个核心部分是Rust的enum类型,它比其他语言中的枚举类型更具表现力,并且允许。Rust类型系统的另一个核心支柱是trait类型。特征大致等同于其他语言中的接口类型,但它们也与Rust的泛型)相关联,以允许在没有运行时开销的情况下重新使用接口。

2024-04-22 11:23:12 72

翻译 改进rust代码的35种具体方法-简介(一)

改进rust代码的35种具体方法-简介

2024-04-22 10:23:06 13

原创 meilisearch 相关问题

明明把数据提交到meilisearch,但是没有显示,接口返回的状态是:enqueued

2023-12-11 13:13:11 1013

原创 rust unresolved import‘xxx‘

rust unresolved import'xxx'

2023-12-11 12:47:17 894

原创 mac rust安装diesel-cli 以安装mysql为列子

但是我还有一个问题,报的错误是缺clang的库,也安装了。这个是因为mac没安装mysql的驱动库。根据官方以 mysql 为例子。默认安装所有数据库的支持。

2023-11-23 15:01:36 569

原创 笔记本或者台式机安装kali操作系统

物理机、磁盘安装kali操作系统

2022-09-11 01:13:02 5139 5

原创 Java oss批量文件下载

Java oss批量文件下载

2022-06-09 17:25:09 1124

原创 Docker方式部署TiDB

Docker方式部署TiDB

2022-06-09 17:15:09 1662 2

原创 解决springcloud gateway 3.X跨域问题

我之前报的错误:When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "al

2021-11-08 13:56:58 697

原创 flink的DataSet算子讲解

本文是已官方文档 为基础进行个人解释,有错误地方还望多多包涵:https://ci.apache.org/projects/flink/flink-docs-release-1.3/api/scala/index.html#org.apache.flink.api.scala.DataSet首先启动flink集群模式,再启动./start-scala-shell.sh remote master ...

2018-03-05 06:35:37 6313 2

原创 关于 flink 执行SocketWindowWordCount程序报错 :Job execution failed.

我自个第一次执行flink 的SocketWindowWordCount 程序是,报一个:Caused by: org.apache.flink.runtime.jobmanager.scheduler.NoResourceAvailableException: Not enough free slots available to run the job. You can decrease the

2018-01-28 16:03:55 6668 4

原创 zookeeper java.net.ConnectException: 拒绝连接 (Connection refused)

这几天学习spark集群,需要用到zk,但是我配置集群的时候,在执行./zkServer.sh start-foreground的时候,日志报这样的错误  java.net.ConnectException: 拒绝连接 (Connection refused)。看到网上很多解决方案: 1)防火墙没关导致通讯失败,无法连接到其他节点上,我在反复检查之后确认防火墙已全部关闭,所以这个方

2018-01-25 19:50:37 88900 8

原创 Java实现敏感词过滤

敏感词、文字过滤是一个网站必不可少的功能,如何设计一个好的、高效的过滤算法是非常有必要的.

2017-03-31 17:13:52 568 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除