Rust 可能取代 C 语言吗?
背景:cpp老手,rust看过两天文档。现在观望中。我实在没找到rust适合的场所。也没有什么必须的平台逼得我要用rust。能用rust写的东西,我用cpp,csharp,java都能写。所以,与其去跟rust的编译器斗,还不如去跟cpp的template斗。rust的内存安全在我看来,是个伪命题。cpp我好多年没用出重大内存bug了,真在乎非常高的内存安全,我选用csharp。除非有啥大的平台,比如苹果那样的,逼我用rust,我想,我恐怕不会主动去用了。2020/02/24更新如下:一个周末没关注,居然这么多人留言,大部分都是不相信cpp能写得没重大内存BUG的。一、首先,当然,也不是倚老卖老,可我真从1997年开始学C/C++,并且一直保持对C++最新进度的关注,并积极引入C++最新用法到项目里。所以,从经验,到应用C++上,都比大部分更不容易出错。二、C++的重大内存BUG,不是内存泄漏。最主要的是野指针,然后是未初始化指针,其次越界。野指针/未初始化指针,在C++11后,严格使用shared/unique ptr,是很难出现的。其次,使用vector替代裸指针,array替代原生数组,借助vector/array自带的越界检查,很多越界在开发期间就发现了。三、在全面使用智能指针的前提下,内存泄漏还是可能发生的。要么规模很小,尚不足引发重大问题,要么规模很大,借助第三方的工具和代码,其实很好定位。感谢现在生活在动辄几个G,加上64位系统的超大的地址空间,内存泄漏可能存在,但从来没给我所在的项目组造成过任何麻烦。有人可能会提长期运行如何如何,不好意思,我主要是写游戏服务器,不存在需要连续运行多长时间的。只要能跑两周不出问题就OK。四、全面开启静态代码分析,且警告当作错误处理,禁止全范围的禁止某个警告;局部屏蔽任何警告均需要报告讨论。一些低级错误都没法通过编译期。五、因为仅一年多写C#去了。所以,就拿倒回去三年的项目为例,整个服务器上线后,迄今只有一起内存越界导致的崩溃,代码还是同事写的。六、直接使用C字符串的机会并不多。现在输入数据基本都是标准的json/xml/ini等,都采用一些现成的开源库,输出基本都是{fmt}库。所以,有人提到因为不安全的函数导致的问题,就更少了。而这个问题,更多是容不容易被黑的问题,还不仅仅止于程序BUG的问题。反而最容易忽视的是一些老的具有线程安全隐患的函数,不过这些函数MSVC均默认警告。