首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Rust碎碎念
Praying
创建于2021-05-13
订阅专栏
专注Rust编程技术~,翻译/分享Rust相关技术博客
等 64 人订阅
共58篇文章
创建于2021-05-13
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
【译】Rust中的Sizedness (四)
即使一个trait是对象安全的,仍然存在sizeness相关的边界情况,这些情况限制了什么类型可以转成trait对象以及多少种trait和什么样的trait可以通过一个trait对象来表示。 传递一个&String到一个期望接收参数类型是&dyn ToStr…
【译】Rust中的Sizedness (三)
最常见的切片是字符串切片&str和数组切片&[T]。切片的好处在于许多其他类型能够强制转换成切片,所以利用切片和Rust的自动类型强制转换(Type coercions)能够让我们写出灵活的API。 类型强制转换(type coercions)可以在几种情况…
【译】Rust中的Sizedness (二)
Rust中的Sizedtrait是自动(auto)trait和标记(marker)trait。 自动trait是能够为满足某些条件的类型自动实现的trait。标记trait是标记一个类型拥有某种特定属性的trait。标记trait没有任何trait项,比如方法,关联函数,关联常…
【译】Rust中的Sizedness (一)
Sizedness是Rust中需要理解的最重要的概念中最不起眼的一个。它经常以微妙的方式贯穿于众多其他的语言特性之中,并且仅以"x doesn't have size known at compile time"这种每个Rustacean都熟悉的错误信息的方式出现。在本文中,我…
【译】Rust中的Move、Copy和Clone
move 和 copy 是 Rust 中的基础概念。这对于来自 Ruby、Python 或 C#等垃圾回收语言的程序员来说可能是完全陌生的。这些术语在 C++中也确实存在,但它们在 Rust 中的含义却有微妙的不同。在本文中,我将解释对值进行 move、copy 和 clone…
【译】使用Rust测试ARM和X86内存模型(二)
我们将要讨论的程序是构建于存储一个指针值是跨线程原子操作这一概念之上的。一个线程将要使用自己拥有的一个可变对象来执行某项任务。一旦它结束了那项任务,它将会以一个不可变的共享引用来发布该任务,使用一个原子指针写入工作完成的信号并且允许读线程使用数据。 如果我们真的想要测试X86的…
【译】使用Rust测试ARM和X86内存模型(一)
苹果公司最近宣布,他们将要把笔记本和桌面电脑从Intel x86 CPU 迁移到自研的ARM架构的CPU。我认为是时候来看一下这两者之间那些会对使用Rust工作的系统程序员有影响的区别了。 ARM架构的CPU不同于X86 CPU的很重要的一点是它们的内存模型。这篇文章将会讨论什…
mut a:&T 和a:&mut T的区别
先来看 mut a : T和mut a : &T的区别,这个应该比较简明,即前者中a是T类型变量的可变绑定,后者中a是T类型不可变引用的可变绑定。(如果对引用的概念还比较模糊,可以参考公众号中翻译的一篇文章:《Rust 中的引用》) 这里的a是可变的,意思是a可以重新…
【翻译】 Rust中的String和&str
当你开始Rust的学习之旅后,很可能遇到需要使用字符串的场景,但是编译器却无法让你的代码通过编译,因为有一部分代码,看起来像字符串,事实上却又不是。 你可以在这里运行代码。只要点击Run按钮就可以看到编译输出。 幸运地是, Rust编译器很友好地告诉了我们问题所在。很明显,这里…
【翻译】Rust中的引用
如果你已经读过我们的文章Rust’s Ownership或者如果你已经写过一些程序并且想知道what’s the difference between String and &str,你就应该知道Rust中有个引用的概念。引用让我们能够对像函数这类事物,给出 引用是对内存中的另…
【翻译】细谈Rust的所有权
你是否想学习Rust并且总是听到有关所有权(Ownership)和借用(Borrowing)的概念,但是你不能完全理解它到底是什么。所有权十分重要,理解这个概念对于初学Rust来讲是有很大好处的,并且这也能让你在实现程序的过程中避免很多编译错误。 在我们之前的文章中,已经从Ja…
【翻译】在stable版本Rust里追踪调用函数的源码位置
在本文中,我将介绍一种特性用以追踪某个函数的调用位置。我是在某个Rust项目里偶然遇到了这种不得不去追踪函数调用位置的需求。Rust是有这种特性的,但是在stable版本无法使用。所以我实现了一个名为trace_caller的crate并引入trace这一过程属性宏(proce…
【翻译】Copy-On-Write是不是优化?
几年前,我读到了一篇关于C++的很特别的博客。这是我第一次接触到技术博客的概念。它使我在教育体系(如陈旧的经典课程,练习,坐在教室里听老师讲课)之外接触到了完整的软件开发的概念。直到今天,那都是我最喜欢的博客之一,这也使我有了想要写出属于自己的博客的强烈愿望。 这篇博客是Her…
【翻译】半小时快速了解Rust(四)(完结)
闭包(Closures)只是能够捕获上下文(context)的Fn,FnMut或者FnOnce类型的函数。 它们的参数是在一对竖线(|)里用逗号隔开的名称列表。它们不需要大括号(curly braces),除非你想写多个声明(statement)。 一个FnMut被调用的时候需…
【翻译】半小时快速了解Rust(三)
Rust里有切片(slice),切片是对多个连续元素的引用。 上面不是魔法。索引操作符(foo[index])被Index和IndexMut两个traits重载。 ..语法只是range字面量。Ranges是定义在标准库的一些结构体。 但是上面的代码合法只是因为[1,2,3,4…
【翻译】半小时快速了解Rust(二)
一些方法也会造成panic。例如,Option类型可以包含某些东西或者什么也不包含。如果在它上面执行unwrap()操作,当它什么也不包含的时候,就会panic(译者注:这里panic感觉保留原词比较好,翻译成恐慌感觉怪怪的,打架了理解意思就好)。 如果包含的是一个错误,那么它…
【翻译】半小时快速了解Rust(一)
一个人为了更好地掌握一门编程语言,不得不去进行大量的阅读。但是如果你都不知道代码的意思,又怎么能进行大量阅读呢? 在本文中,我将尽我所能去剖析尽可能多的Rust代码片段并解释其中包含的符号和关键字的含义。 如果你声明了一个变量但是要在后面对它进行初始化,编译器就会阻止你在这个变…
Rust中的const常量与static变量
定义常量时变量的命名规则一般是全部大写(如***NUM***),非强制,但是会有warning。 常量可以在任意作用域进行定义,而定义的常量贯穿整个程序的生命周期。在编译的时候,编译器会尽可能将其内联到代码中,所以在不同地方对同一常量的引用并不能保证引用到相同的内存地址。 常量…