网站首页 > 技术文章 正文
其实这个不是简单说哪个好,哪个不好或者说哪个不如哪个的问题,一个语言只是一个基础,它的广泛应用与成功都需要一个复杂的生态,如果要比较的话咱们来比较C++、Rust、Java和C#,Java和C#都是带GC的语言,而且这几个语言我都大量地用过。
在讨论之前先声明我也不是C++的黑,恰恰相反,我是C++的粉,在Windows、Linxu、AIX上都有大量的开发,当时做运营商的业务监控系统,要跨这么多平台,性能要压缩到极致,只能用C/C++。但是C++动不动就Core Dump真的很头痛的,因为在服务器上挂了人家不让你在服务器上进行DEBUG,而且调试也只能在控制台上调试,尤其是多线程一挂连在哪个线程挂的可能都很难定位,对这种BUG的修正需要大量时间和精力;一旦出现了野指针,程序还没挂,但数据偶尔就不对,这种情况是最难定位的。
所以,当看到Rust的内存安全,连Panic都可以把栈给打出来的时候,那种眼前一亮的感觉,就好比见到了救世主一样,写了两年Rust之后C++都不想碰,真的是回不去。内存安全是一方面,还有就是Cargo的包管理,太省事儿了。很多人吐槽Rust编译速度慢,但C++的工程大了重新编译的话速度也很慢,所以大工程一定要拆成几个工程,都得通过分代码库来解决编译慢的问题。开发Rust那帮人原来就是写C++的,为什么这么热衷于Rust,因为深受C++的折磨,想创造一种拯救系统开发程序员的新语言,我认为Rust有这种潜力,现在Rust已经被Linux的内核支持越来越好了,这就是希望。
不能简单地说C++不如Rust,在应用生态、程序员的数量上,C++是绝对绝对的优势;而Rust的各种库都还不健全、不成熟,这就影响到了Rust的普及,尤其在国内,哪个公司敢上来都用Rust,一旦有人离职,再找Rust程序就难上加难,这是个系统问题,必须要考虑的。Rust很多软件库还不成熟,一旦在生产环境使用,可能面临巨大风险。Rust也有它的缺点,它对面向对象支持不完整,以前的OOD的思想应用起来有些不顺畅,但问题不大;Rust的语法与C++差别较大,要从C/C++转过来需要一段时间来适应;unwrap的处理确实感觉很难看很难看。
再说带GC的语言,Java、C#之所以搞个虚拟机,其实就是要解决内存管理的问题,这个与Rust设计借用机制来解决内存问题是一样的,Rust的方案是在没有性能损耗的情况下的一种内存安全解决机制,而GC语言是牺牲了性能的情况下的一种解决方案。这两种解决方案也各有优缺点,带Java、C#的方案降低了门槛,初级程序员也不会犯内存管理的错误导致系统不可用,但GC还会带来性能抖动的问题,这对于时间敏感和高并发的场景也是致命的,所以现在有些大厂已经用Rust来写核心的高并发系统以解决这些问题;而Rust的入门门槛就比较高,但一旦掌握了,它的收益也非常明显。Java、C#安全让计算机来解决内存管理的问题(当然,C#也支持自己管理),而Rust选择强制让程序员自己管理好内存,只要能编译通过,基本就可以保证不再出内存问题。
总结下,C++在OOD、性能和灵活性上都做到了极致,Java、C#在内存安全、编码效率上也做到了极致,而在性能上有所牺牲;Rust在内存安全、性能、编码效率、灵活性上做了一个平衡,是最均衡的一个。
存在即合理,Java被广泛应用的企业系统的开发,足以说明了它的成功,但在高并发、高性能方面还需要借助C、Rust的辅助;C#在Windows应用开发方面占有绝对的份额,但在跨平台方面,还是C更多一些;今后在跨平台应用、系统开发、嵌入式等方面可能越来越多地见到Rust,而C可能会越来越少,但在相当相当长的时间内不会消失,或者是在很长一段时间内还将保持着其强大的江湖地位。
未来,Google如果真的解决好了与C++库互操作的问题,Rust一下就起飞了。
猜你喜欢
- 2025-09-01 C语言重要吗?_c语言重要吗计算机专业
- 2025-09-01 2024 年顶级 C# 面试问题和答案_c#面试题及答案2020
- 2025-09-01 C#调用C++编写的DLL需要通过P/Invoke机制实现
- 2025-09-01 掌握 C# 和 .NET:常用术语与概念_c#.net教程
- 2025-09-01 C++ .NET与C# .NET:谁才是.NET开发的“真香”选择?
- 2025-09-01 为什么有人一直喜欢 C 而不喜欢 C++?
- 2025-06-08 深入理解C#,首推这六本书(c#入门经典书籍)
- 2025-06-08 C语言有何意义(c语言的含义)
- 2025-06-08 Java、C语言、C++、Python等编程该选哪一个
- 2025-06-08 C#调用C++常用的两种方式(c#调用c++库 对象)
- 最近发表
-
- C语言重要吗?_c语言重要吗计算机专业
- 2024 年顶级 C# 面试问题和答案_c#面试题及答案2020
- C#调用C++编写的DLL需要通过P/Invoke机制实现
- 掌握 C# 和 .NET:常用术语与概念_c#.net教程
- C++ .NET与C# .NET:谁才是.NET开发的“真香”选择?
- 是C++好,带GC的Java、C#好?还是Rust好?
- 为什么有人一直喜欢 C 而不喜欢 C++?
- Python定时任务,三步实现自动化_python定时任务,三步实现自动化
- (三)Java基础知识复习(异常处理)_java异常处理规则(新手必看)
- 情人节脱单秘诀,程序员表白的情话大盘点!| CSDN 博文精选
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)