Rust语言的难点在哪里?

体娱   2024-10-02 16:37   山东  

很多人都研究过Rust,很多人也都铩羽而归,包括我!

我还写过一篇文章来痛批Rust,就是下面这篇:

Rust语言到底有没有未来?
但是,在文章下面,却神奇地出现了一条评论:
“其实Rust并不难。。”
但是,我的感觉就是,你TMD的真是啥都敢说,如此的放肆!
你们知道的,赞美总是很容易让人忘记,而“侮辱”总是让人难以释怀!
在某个时刻,我就在想,有没有一种可能-“Rust其实真的不难,难的是需要承认自己是个菜鸡!
一想到这个,我就像曹操在赤壁之战后的某个夜晚一样深入了沉思,劳资战胜了袁绍,统一了北方,为什么在孙权这里这么失败!

学过了这么多编程语言,在Rust这里却碰壁了!

为什么?

想了一段时间,我的脑袋里面蹦出了一个词-“GC”,也就是垃圾收集,内存自动分配和回收!

我最近的经历,其实都是在写应用软件,搞SQL,搞Crud。

大部分场景里面,Java、C#、Go都提供了GC选项,而且不止如此,在不需要考虑内存问题的基础上,他们还提供了Springboot应用框架、Mybatis数据Orm层、Log4j内存访问日志。

如果说原来的C/C++等需要自己管理内存的语言是手动档汽车,那么上面这些编程语言+框架的组合就不只是自动档汽车那么简单,那简直就是一艘飞机了。

中间隔了很多层,已经无法达到短时间就能掌握的程度。

而“短时间就能掌握”,恰恰是已经掌握一种编程语言去看另外一种语言的常态。

这也是大部分学Rust感到挫败的原因!

克服这个难点,我最近也有了一些心得!

那就是需要从一个C++/C语言的使用者来看看Rust的问题!

Rust和C/C++对待内存的看法实际上就只有一个,C/C++默认的“=”操作是Copy指针,而Rust则是Move指针。

当用=来进行操作的时候,譬如

s1=s2

在Rust里面,s2就是获得了s1里面内容的所有权,而s1则没有了权力,再使用它就会报错!

在C里面,s2和s1则是指向同一个位置的不同指针。

默认“=”的语义,就是Rust和C系语言的不同之处!

但是,如果想要Copy怎么办呢?

Rust在语言内部有了Copy和Move两个trait接口,只要你实现了Copy,就可以实现Copy!

但是,为了基础类型(如int、float)变量使用类型的方便,他们默认实现了Copy。

这个就是Rust的大坑。

当其他语言的人来学Rust,一般都从基础变量类型开始,写个HelloWord,来个a=5,这个时候,Rust并没有什么不同。

当他们开始稍微前进一步,需要高级一点操作的时候,Copy/Move系统就开始运行了,报错就开始了!

那些人,如果我一样,看着屏幕,看着那些洋文,心想“这TM不都是基本操作,这破笔语言怎么不行啊?”

然后去百度一下,“哦哦,原来是这样。。”

改正了,可以运行了!

过了一阵,我擦,怎么又报错了,再改!

在耐心被消耗殆尽的时候,就会上公众号,写一篇文章:

Rust语言到底有没有未来?

发泄一下情绪,给自己找个理由,傻缺语言,狗都不用,我更不用了,弃坑!

我想,这就是Rust与我而言的一个坑-Copy/Move系统。

当然,我最近已经进行了反思,思考了几个问题:

1、如果我写一个C语言,在主main里面malloc了一个内存,但是在子函数里面free了,系统会怎样?

2、我如何保证不同的变量在函数之间,其内存不被释放。

3、如何保证内存在释放之后,还不被再次释放?

想到了这些问题,瞬间我似乎对Rust的内存管理问题有了一些新的体会!

我是明月,
继续学习Rust中!

明月三千
将进酒,杯莫停。与君歌一曲,请君为我倾耳听。荔枝成为linux大师!
 最新文章