随笔分类 - Rust
programming language
摘要:Rust 的内存安全性保证使其难以意外地制造永远也不会被清理的内存(被称为 内存泄漏(memory leak)),但并不是不可能。Rust 并不保证完全防止内存泄漏,这意味着内存泄漏在 Rust 中被认为是内存安全的。这一点可以通过 Rc<T> 和 RefCell<T> 看出:创建引用循环的可能性是
阅读全文
摘要:内部可变性(Interior mutability)是 Rust 中的一个设计模式,它允许你即使在有不可变引用时也可以改变数据,这通常是借用规则所不允许的。为了改变数据,该模式在数据结构中使用 unsafe 代码来模糊 Rust 通常的可变性和借用规则。不安全代码表明我们在手动检查这些规则而不是让编
阅读全文
摘要:大部分情况下所有权是非常明确的:可以准确地知道哪个变量拥有某个值。然而,有些情况单个值可能会有多个所有者。例如,在图数据结构中,多个边可能指向相同的节点,而这个节点从概念上讲为所有指向它的边所拥有。节点在没有任何边指向它从而没有任何所有者之前,都不应该被清理掉。 为了启用多所有权需要显式地使用 Ru
阅读全文
摘要:async/.await可以让出当前线程的控制权而不是阻塞,当前线程等待某个操作完成时允许其他代码执行。 有两种使用方式:async fn和async,每个返回执行future特性的值。 1 // `foo()` returns a type that implements `Future<Outp
阅读全文
摘要:1. rust为什么没有继承? 继承和组合是面向对象编程中两种常见的代码重用方式 继承: 优点: 它可以实现代码的重用,从父类继承的属性和方法可以在子类中直接使用。 继承链的扩展。通过继承可以构建继承链,使得子类可以继承祖先类的所有属性和方法,从而提高代码的可扩展性和可维护性。 继承和组合都可以实现
阅读全文
摘要:dyn是trait对象类型的前缀 dyn关键字用于强调相关trait的方法是动态分配的。要以这种方式使用trait,它必须是“对象安全”的。Rust 没有继承,引入了一个概念特征对象。 特征对象定义 如 UI 组件定义一个特征: pub trait Draw { fn draw(&self); }
阅读全文
摘要:1。智能指针 box 最简单直接的智能指针是 box,其类型是 Box<T>。box 允许你将一个值放在堆上而不是栈上。留在栈上的则是指向堆数据的指针。除了数据被储存在堆上而不是栈上之外,box 没有性能损失。不过也没有很多额外的功能。它们多用于如下场景:当有一个在编译时未知大小的类型,而又想要在需
阅读全文
摘要:1. 手动绑定 C 库 在调用 C 库时,需要重新在 Rust 中对该 C 库中的数据类型和函数签名进行封装. 2. 将Rust编译成库 为了能让rust的函数通过ffi被调用,需要加上extern "C"对函数进行修饰。但由于rust支持重载, 所以函数名会被编译器进行混淆,就像c++一样。因此当
阅读全文
摘要:1.Rust简介 Rust是一门系统编程语言,无GC(垃圾回收)且能保证内存安全、并发安全和高性能而著称。自2008年开始由Graydon Hoare私⼈研发,2009年得到Mozilla赞助,2010年⾸次发布 0.1.0 版本,⽤于Servo引擎的研发,于2015年5⽉15号发布 1.0版本。2
阅读全文