运算符重载是一种允许程序员定义或改变运算符行为的特性,许多编程语言都支持运算符重载,特别是在面向对象编程和泛型编程中,比如C++、C#、Kotlin、Swift等语言,这些语言还支持同名的函数重载。
Rust支持运算符的重载,但是不支持函数重载,因为Rust提供了更强大的编译期范型的支持,函数重载这种容易出现歧义的语法特性就被rust抛弃了。
引用类型 | Rust | C++ |
---|---|---|
普通引用 | &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)是其内存安全和并发模型的核心概念。它们一起确保了在编译时捕获大部分内存错误,如空指针或悬挂指针。
我们可以通过代码示例和内存模型图来说明这些概念。
Rust的错误处理机制和其他语言有很大的不同。
在C++、C#、Java、Javascript、Python等语言中,通常使用throw
抛出异常或者返回成功的值。外部调用的地方使用try/catch
进行捕获,除了C++没有finally
关键字外,C#、Python、Java、Javascript等语言都有基本一致的异常处理逻辑。像Java有三类异常:不可恢复的Error(如OutOfMemoryError、StackOverflowError)、受检异常(如IOException)、运行时异常(如NullPointerException)。特别是运行时异常由于隐式传递,运行在线上服务器经常出现令人头疼的问题。