学习心得:rust 就是 c 语言的升华版

本文探讨了Rust、C、C++在函数参数传递上的差异,指出Rust的语法简洁且功能完备,弥补了C语言的不足,而C++的调用形式显得混乱。Rust的struct实现类似于C语言,但更高效。此外,Rust的泛型机制使其在面向对象编程和泛型编程方面展现出超越C++的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文讨论比较了rust、c、c++ 函数参数传递语法特点,分析了 rust 语法机制的合理性和简洁性。

1. rust 就是 c 语言

1.1 函数调用传参:传值

看代码,这段程序与 c 语言机制完全相同。

fn foo(x: i32) {}

fn main() {
	let x = 123;
	foo(x);
}

我们再看看复合数据类型:

struct T {
	a: i32,
	b: i32,
}

fn foo(x: T) {}

fn main(){
	let x = T{a:1, b: 2};
	foo(x);
}

这个调用方法与 c 语言完全一样,参数采用传值方式。

1.2 函数调用传参:传地址

上述代码改成传递变量地址的方式,虽然函数声明与 c 语言稍有区别,但运行机制完全一样。

struct T {}

fn foo(x: &T) {}

fn main(){
	let x = T{};
	foo(&x);
}

1.3 c++ 语法,更透明,还是更混沌?

下表给出了三种传参方式的 rust、c、c++ 声明方式。

传参方式rust 声明c 声明c++ 声明
传值fn foo(x: T)void foo(T x)void foo(T x)
只读引用fn foo(x: &T)-void foo(const T *x), void foo(const T &x)
读写引用fn foo(x: &mut T)void foo(T *x)void foo(T *x), void foo(T &x)

下表给出了三种传参方式的 rust、c、c++ 调用方式。

传参方式rust 调用c 调用c++ 调用
传值foo(x)foo(x)foo(x)
只读引用foo(&x)-foo(x), foo(&x)
读写引用foo(&mut x)foo(&x)foo(x), foo(&x)

可以看出,

  • c 语言表达能力不足,不能提供只读引用,rust 弥补了其不足。
  • c++ 的调用形式无法表达传参类型,表达混乱。
  • rust 的函数声明和调用形式完全一一对应,语法、语义简单明了。

2. rust OOP:就是 c 语言 struct

在选择"爱情"还是“上床”来表达自己的想法时,c++ 选择了前者,而 rust 非常诚实地选择了后者。

下面代码,实现了类 T 的方法,本质上是 c 语言的实现方式,没有采用 c++ 的虚表。 rust 的没有浪费内存资源和时间资源,可取的和 c 语言同样的编程效率。当然,rust 提供了类似 c++ 风格的语法糖,所以下面程序展示了两种方法的调用形式,本质还是 c 语言模式的。

作为三十多年经验的 c++ 老油条,我都不敢说自己对 c++ 的 class 有多全面了解。但是,对于 rust 程序员来讲,你明白 struct 是咋回事,你就懂的一切了!

struct T {}

impl T {
  fn do_something(&self) {}
}

fn main(){
	let x = T{};
	//c 风格的调用,T 就是一个 struct,没啥神奇的!
  	T::do_something(&x);
  	//c++ 风格调用,看起来像个 class,其实还是 struct,忘掉构造、析构、封装、继承、多态、...
	x.do_something();
}

3. 泛型编程,实现 c 语言到 rust 的升华

真正能让 rust 能超越 oop 的是泛型机制和类型系统。此处不多讲了,以后专门讨论。

原创不易,如有帮助,请点赞、关注、收藏,谢谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许野平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值