Rust运算符重载

运算符重载是一种允许程序员定义或改变运算符行为的特性,许多编程语言都支持运算符重载,特别是在面向对象编程和泛型编程中,比如C++、C#、Kotlin、Swift等语言,这些语言还支持同名的函数重载。

Rust支持运算符的重载,但是不支持函数重载,因为Rust提供了更强大的编译期范型的支持,函数重载这种容易出现歧义的语法特性就被rust抛弃了。

Read More

Rust智能指针类型

引用类型RustC++
普通引用&T
独享引用Box<T>std::unique_ptr
共享引用(引用计数)Rc<T>std::shared_ptr<const T>
共享可变引用Rc<RefCell<T>>std::shared_ptr<T>
多线程共享引用Arc<T>
弱引用Weak<T>std::weak_ptr<T>

所有权、借用与变量的生命周期

在 Rust 中,所有权(ownership)、借用(borrowing)和生命周期(lifetime)是其内存安全和并发模型的核心概念。它们一起确保了在编译时捕获大部分内存错误,如空指针或悬挂指针。

我们可以通过代码示例和内存模型图来说明这些概念。

Read More

Rust错误处理

Rust的错误处理机制和其他语言有很大的不同。

在C++、C#、Java、Javascript、Python等语言中,通常使用throw抛出异常或者返回成功的值。外部调用的地方使用try/catch进行捕获,除了C++没有finally关键字外,C#、Python、Java、Javascript等语言都有基本一致的异常处理逻辑。像Java有三类异常:不可恢复的Error(如OutOfMemoryError、StackOverflowError)、受检异常(如IOException)、运行时异常(如NullPointerException)。特别是运行时异常由于隐式传递,运行在线上服务器经常出现令人头疼的问题。

Read More

Rust入门

近十年来,golang、Swift、Kotlin、Typescript等新兴编程语言异军突起。在系统编程领域也出现了Rust和Zig等语言。

栈上分配的内存在函数出栈后就直接被回收了,堆上的内存需要手动回收,而且由于堆上分配和释放内存需要与操作系统交互。所以一般来说,栈上分配回收速度会比较快,堆上分配回收速度会稍慢一些。但是栈上分配内存要求结构体对象等类型的大小是编译期就知道的,所以无法分配动态大小的内存;堆上分配就没有这个约束。

Read More

标记语言的历史

说起编程语言,大家都知道,C、C++、Java、Python、C#,对编程语言了解的深的,可能还能说出1957年就被发明的Fortran,Fortran语言仍是美国学术界使用的编程语言,至今仍在编程语言排行榜霸榜前十。

但说起标记语言,大家可能就知道一个HTML,在互联网上文章写得多的可能还知道Markdown,我这个网站的文章都是用Markdown写的。由于Markdown不支持内嵌外部代码,这几天找到了Spring也在用的Asciidoc准备作为开源库的文档标记语言。正好了解到标记语言的发展历史,就写篇文章聊聊。

Read More