刷新
rust学习十四.2、工作空间(workspace)

和大部分语言一样,cargo也可以创建一个工作空间,以便可以包含多个二进制单元和库单元,从而构建较为复杂的工程。 构建这样一个空间空间主要依赖两个手段:Cargo.toml和单元之间的目录结构 从效果上看,rust的Cargo在工作空间上的管理和maven大体相似,但是还不如maven那么的人性化。 ...

rust学习十四.1、编译和发布单元包Crate

本文简要介绍如何编译和发布单元包(crate)。 很可惜的是,找了一会,没有发现可以发布到除了Crates.io之外的地方。 可能是我没有找到,也可能仅仅是因为我本人仅是初学者。希望国内的大学和其它机构能够创建那么一个国内的库,避免哪天封禁后,无处可去。 本文对应相关书籍的第十四章节的第1,2子章节 ...

rust十三.2、迭代器

Iterator(迭代器)是一个比较常见的概念,大部分语言都有。大部分语言实现迭代器的逻辑并没有特别的。 看完了有关内容,作者的意思是:rust的迭代器和匿名函数一样,都是为了提供时下流行的函数式编程。 此二者为rust实现零成本抽象提供了不少的贡献。 本部分概念比较多,如果是编程初学者可能会有点吃 ...

rust十三.1、匿名函数(闭包)

在编译后,所谓的闭包是编译为单独的函数,所以原文的作者也把closure称为函数。 因此,本文也称为函数。这个更好理解的一个概念。 一、概念 在某个程序体内定义的一段代码,具有参数(可选)和程序体,但不具有名称,实现函数作用,这样的代码称为匿名函数(closure)。 匿名函数这个东西,现在各个语言 ...

rust学习十二、一个I/O程序练习

本文内容,基本同原书本,只是稍作了一些改动: 可以输入 --help展示用法 如果文件超过1MB,则会采用逐行查找的方法,避免内存不足 整个程序包含个文件:main.rs,lib.rs 一、代码 闲话少叙,直接上代码。 main.rs /** * 完全模仿书本的例子 * * 运行示例 * cargo ...

rust学习十二、测试

测试从来不是一件简单的事情,我本人深有体会! 书本作者引用了很重要的话:软件测试是证明 bug 存在的有效方法,而证明其不存在时则显得令人绝望的不足 (Edsger W. Dijkstra 在其 1972 年的文章【谦卑的程序员】(“The Humble Programmer”)) 注:Edsger ...

rust学习十一.3、生命周期标记

生命周期,这是在"引用和借用“章节就提到的概念,大意是每个变量具有其作用域范围。 所以,我个人更愿意理解为作用范围。 因为它不像java的变量那样和时间有较为明显的关联,毕竟java的变量会被GC销毁。 一、 生命周期注解概念引入 在原文中,作者是通过两个例子解释生命周期问题 fn main() { ...

rust学习十一.1、泛型(通用类型)

这是和大部分的语言差不多的一个概念,只不过实现上有一些区别而已。 所以,如果学过java,c#,c++,那么这应该很好理解。 虽然如此,还是有不少内容需要记录,只不过内容有一点小多。 注意:这是入门级别内容,只能涉及到一些基本的方面。 一、定义 英文 Generic /generics, 中文翻译为 ...

rust学习十、异常处理(错误处理)

在书籍中,中文译者翻译为错误,这是因为原文是"Error"。 但在很多语言中,都是书写为异常。 一、概述 rust的错误处理与众不同,前文已经提及:大家称为异常,它称为错误。 不可恢复的错误,可以大体称为panic(恐慌)! 太率性了.... 那么我们的问题是:除了一些的确不可处理的异常,rust是 ...

rust学习九.3-集合之哈希映射表

这里介绍的哈希映射表(HashMap)并非是java那样的万用表,限制很大。 不过,话说回来,rust应该是有类似java那样的映射表,不过不是这个哈希映射表。现在先谈论哈希映射表吧。 一、构成和定义 HashMap 是最不常用的,所以并没有被 prelude 自动引用。标准库中对 HashMap ...

rust学习九.2、集合之字符串

按照作者的意思,字符串不是看起来那么简单! 的确,字符串在大部分语言中,都不是看起来那么简单! 字符串的内容看起来很多,又很少! 多是因为涉及到编码、构成、方法(有许多方法)还有字符串切片。 少是因为,其实和java等语言其实没有大的区别。 一、构成 rust的字符串内部是 vec(u8)+方法,看 ...

rust学习九.1、集合之向量

一、纲要 定义 1. new Vec::new(); 2. 采用宏 vec![1, 2, 3]; 操作 0.读取 索引语法或者 get 方法 ,注意索引从0开始. vec[0]或者vec.get(0) vec[i] 不会改变所有权,但如果发生越界,则会导致程序终止 get(i) 返回的是一个Opti ...

rust学习八、包和模块

总体上,也没有什么特别的地方,和其它语言比较起来。 我们可以看懂熟悉的字眼:包括、模块、use、公共等等 如果是英文,则需要知道crate、pub。 本章节对应相关书籍的第七章节. 一、一个rust可执行程序的大体结构 就本章节而言,尚未接触到一个非常复杂的工程结构,据说有什么工作空间。 不考虑工作 ...

使用pgrx开发postgre插件

博主头像 pg插件开发建议在linux环境下进行, windows可以采用虚拟机的方式开发. 安装虚拟机环境 准备虚拟机, 使用的是ubuntu22.04, 太新的版本会依赖拉取有问题 安装开发工具和依赖: ​sudo apt-get update sudo apt-get install -y git cl ...

rust学习七、枚举

枚举是十分特别的类型,是因为和大部分语言中看起来不太一样。 最大的不同之一在于:允许每个成员具有不同的类型的属性 注:本文内容根据<<The rust programmming Language>>有关章节编写 如果没有特别说明,"rust学习"系列基本上都是根据此书编写,不再在后续的篇幅中说明 一 ...

rust学习六、简单的struct结构

rust的struct结构体是一个不错的东西,不像java,后者在17版本左右才可用。 有许多语言都有类似的东西,例如pascal有record。 在rust中,struct大体等于java的class,c#的class。 本文主要根据<<The rust programming language> ...