上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 79 下一页
摘要: dyn是trait对象类型的前缀 dyn关键字用于强调相关trait的方法是动态分配的。要以这种方式使用trait,它必须是“对象安全”的。 与泛型参数或植入型特质不同,编译器不知道被传递的具体类型。也就是说,该类型已经被抹去。因此,一个dyn Trait引用包含两个指针。一个指针指向数据(例如,一 阅读全文
posted @ 2021-10-09 12:37 johnny_zhao 阅读(8868) 评论(0) 推荐(0) 编辑
摘要: Rust并没有继承,因为在 Rust 设计目标中,零成本抽象是非常重要的一条,它让 Rust 具备高级语言表达能力的同时,又不会带来性能损耗。因此我们通过其它方法来实现类似继承的功能。为了展示如何实现这一点,这里将创建一个图形用户接口(Graphical User Interface)工具的例子,它 阅读全文
posted @ 2021-10-08 12:30 johnny_zhao 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 对象包含数据和行为 The Gang of Four,它是面向对象编程模式的目录。它这样定义面向对象编程: 面向对象的程序是由对象组成。一个对象包含数据和操作这些数据的过程。这些过程通常被称为方法或操作。 在这个定义下,Rust是面向对象的:结构体和枚举包含数据而impl块提供了在结构本和枚举之上的 阅读全文
posted @ 2021-10-07 23:35 johnny_zhao 阅读(343) 评论(0) 推荐(0) 编辑
摘要: Rust的并发模型中一个有趣的方面是:语言本身对并发知之甚少。我们之前讨论的几乎所有内容,都属于标准库,而不是语言本身的内容。由于不需要语言提供并发相关的基础设施,并发方案不受标准库或语言所限:我们可以编写自已的或使用别人编写的并发功能。 然而有两个并发概念是内嵌于语言中的:std::marker 阅读全文
posted @ 2021-10-07 17:15 johnny_zhao 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 虽然消息传递是一个很好的处理并发的方式,但并不是唯一一个。再一次思考一下Go编程语言文档中口号的这一部分:“不要通过共享内存来通讯” 通过共享内存通讯看起来如何?除此之外,为何消息传递的拥护者并不使用它并反其道而行之呢? 在某种程度上,任何编程语言中的通道都类似于单所有权的,因为一旦将一个值传送到通 阅读全文
posted @ 2021-10-07 01:04 johnny_zhao 阅读(538) 评论(0) 推荐(0) 编辑
摘要: 一个日益流行的确保安全并发的方式是消息传递(message passing),这里线程或actor通过发送包含数据的消息来相互沟通。这个思想来源于Go编程语言文档中的口号:“不要通过共享内存来通讯;而是通过通讯来共享内存。” ("Do not communicate by sharing memor 阅读全文
posted @ 2021-10-04 18:15 johnny_zhao 阅读(768) 评论(0) 推荐(0) 编辑
摘要: 在大部分现代操作系统中,已执行程序的代码在一个进程(process)中运行,操作系统则负责管理多个进程。在程序内部,也可以拥有多个同时运行的独立部分。运行这些独立部分的功能被程序为线程(threads)。 将程序中的计算拆分进多个线程可以改善性能,因为程序可以同时进行多个任务,不过这也会增加复杂性。 阅读全文
posted @ 2021-10-02 11:30 johnny_zhao 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 内部可变性 (Interior mutability) 是Rust中的一个设计模式,它允许你即使在有不可变引用时也可以改变数据,这通常是借用规则不允许的。为了改变数据,该模式在数据结构中使用 unsafe 代码来模糊Rust通常的可变性和借用规则。 通过RefCell<T>在运行时检查借用规则 不同 阅读全文
posted @ 2021-09-30 12:11 johnny_zhao 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 对于智能指针模式来说第二个重要的trait是Drop,其允许我们在值要离开作用域时执行一些代码。可以为任何类型提供 Drop trait 的实现,同时所指定的代码被用于释放类似于文件或网络连接的资源。我们在智能指针上下文中讨论Drop是因为其功能几乎总是用于实现智能指针。例如,Box<T>自定义了D 阅读全文
posted @ 2021-09-29 12:54 johnny_zhao 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 实现 Deref trait 允许我们重载 解引用运算符 (dereference operator) * (与乘法运算符或通配符相区别)。通过这种方法实现Deref trait 的智能指针可以被当作常规引用来对待,可以编写操作引用的代码并用于智能指针。 通过解引用运算符追踪指针的值 常规引和是一个 阅读全文
posted @ 2021-09-29 00:06 johnny_zhao 阅读(200) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 79 下一页