https://www.gravatar.com/avatar/4d675e65920d5b1eca1f5b9079ea3bf5?s=240&d=mp

Ramen's Box

Rust 的包装类型

对于一门对内存控制足够精细的语言来说,值类型与引用类型的区别是十分重要的:值类型通常意味着较低的拷贝成本,通常来说,这样的类型被分配在栈上(当然,对于 C/C++ 来说,我们可以在堆上直接分配一个值类型对象,如 int),而引用类型则通常分配在堆上,我们需要用一个包装过的对象去维护。

在 Rust 中,值类型和引用类型的界限在语言上提供了很明确的区分,而为了避免 C/C++ 中用户可以不受限制使用裸指针的情况,Rust 将很多裸指针操作都包在了 unsafe 块内,用户使用时必须对这种行为有足够的认知。当然,当用户需要使用指针,或者说引用类型的时候,Rust 也提供了 7 种包装类型来帮助用户更好的管理堆上的内存。

然而,Rust 官方教程和文档对这 7 种包装类型的介绍有很多容易混淆之处,同时网上的很多文章也已经完全脱离了最新版 Rust 的功能描述(如很多文章仍然描述 Cell 只接受实现了 Copy 的类型),导致很多初学者学习时容易产生迷惑和误用。这篇文章是我在复习 Rust 时重新学习包装类型相关时做出的笔记,希望能更好的帮助大家理解 Rust 的包装类型。

本文写作时的 Rust 版本为 Stable Channel 1.48.0。

Educational DP 题解

这篇文章已经咕了一年了,原先的前言已经完全脱离时代了,在第一版到最终成文的期间过去了很多事情,趁现在毕业前夕有点时间迅速把坑给填了,也算是给大学和竞赛生涯画个句号吧。

这次的刷题对象是 AtCoder 的 Educational DP Round。从简单到困难的问题都有,倒挺适合我这种不会 DP 的人的。

我的题解习惯是不贴代码的,所以下面所有的都是关于题目的讲解和方程的推导,要看代码参考Github或者提交页面

拥抱 IPFS

在最近博客的例行维护(更换主题修复 post)过程中,我偶然读了这篇文章。之前就对 IPFS 有点兴趣,这次花了点时间去看了一下相关知识,发现最近的 IPFS 生态完善了许多,我就花了点时间迁移了整个工作流。这篇文章就是过程中的一些记录。

From gcd to RSA

这篇文章是有个朋友要选一门数学素养课,涉及到的内容其实并不复杂,就心血来潮的写了这篇文章梳理一下从小学数学到理解 RSA 需要的基础知识。阅读这篇你只需要有基础的阅读能力即可。

这篇文章只是一篇简单的 Walkthrough,如果对其中的某个定理想有更深入的研究,请复制到搜索引擎,网上会有更详细和严谨的资料。同时感谢龙二的审稿。

Google Kick Start 2019 Round C 题解

趁着今年退役,打了不少的比赛。而上个周末,更是两天打了五场比赛,结果搞得头晕眼花。

Kick Start 是知名的谷歌校招轮,去年本身水平就不足,所以瞎打了一下,最后成绩也比较不好看。而今年算是稍微有了一点实力,所以就有时间就跟着打。

这一轮的题目实际上比较经典然后偏实现一点,就让我这个代码手捡了个漏。最后补题这场也比 AB 两轮简单,所以赶快趁着新鲜写一下题解。