知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技  > 软件

C++衰落?编程语言的终结(误

发表时间:2022-03-24来源:网络

序:编程语言的最终发展我们是很难预见的,因为我们不知道我们会遇到什么样的问题,更不知道要以何种方式解决。毕竟历史是螺旋上升的,编程语言的发展也是曲折不可能一步到位的。但是至少在下一个世代,将是Rust语言的主场。

C++:廉颇老矣?

相信大部分人开始学习的第一个语言基本是C,之后开始接触C++,但即使没有使用过,也听过他的鼎鼎大名。最初的C++可谓是意气风发,踌躇满志,大有取代C语言的的优势,在无限风光的时期收获了无数的拥趸,以至于目前为止大量的专业软件是使用C++编写的,OOP思想影响了众多语言,甚至一度让人们觉得C++将是语言的终结,同时认为觉得C++是专业软件大型项目的终极解决方案。那么我们例举分析一下C++的处境:

1. 三大主流编译器:gcc,clang,vc都是c++编写的

2. 浏览器chrome:C++,Firefox:C++ & Rust

3. 语言后端:nodejs/v8:C++,jvm:C++,.net core:C++

4:众多领域内专业软件,多媒体软件基本都是C++

就目前来看C++依旧占据主导地位可是:目前Linux,Windows主流操作系统内核依旧是C语言。虽然同为系统级语言,但是C++经过几十年的长足发展依旧未撼动C语言的基本盘。

同样问题也出在第3点,既然C++众多的特性和黑科技,以及无与伦比的性能,为什还需要其他语言,为其他语言做嫁衣?

首先一点是由于C++的特性众多,开发软件的风格和接口不能很好的兼容,由于缺乏有效的包管理,让这个劣势被放大了。C++新标准的制定也逐渐不被大众报以希望。

以及内存难以管理方面的劣势,引出下一个话题Java、Golang一众改良派语言。

Java:改良派的春天?

严格的来说,这里的JAVA应该是一众基于字节码的虚拟机。而不是一种特定的语言,比如运行在jvm上的语言还有scala,kotlin。

JAVA与C++谁优谁劣的争论经久不衰,JAVA作为改良派杰出的代表,拿手好活就是跨平台的运行环境,GC垃圾回收,JIT运行时编译甚至是AOT技术。虽然字节码或者脚本语言运行中间过程以及GC耗时,但是经过优化和jit仍然达到了C++等同数量级的运行水平,加上不在关心内存后开发效率的提升,让绝大多数应用场景可以接受,例如服务器后端,Android移动应用和相当的跨平台专业软件也或多或少引入JAVA。

因此成为了挑战并取代C++的第一梯队语言。然而即便如此,JAVA仍旧无法填补特别是在浏览器实现、编程语言的运行时领域的真空。JAVA可以自举编译器,但是没办法自举jvm。

Golang:特立独行的土拨鼠,可以编译的Python

想取代C++的语言已经屡见不鲜了,这个一定程度上表明了大家的不满。Golang也直言不讳的说自己要取代C++,也被认为和那些无数铩羽而归的语言一样,终将面对失败。虽然golang是我非常喜欢的语言之一,有一说一它确实做不到取代C++!

Golang压根不支持动态链接库,只支持静态链接的单个可执行文件,也就导致无法胜任各种模块组件组成的大型复杂项目,例如office这类软件的实现。优势是非常容易部署扔一个可执行文件就可以了!

作为第一个成功的编译成机器码并支持垃圾回收的语言,性能虽然不能超越但也可以比肩C++。对并发编程的支持和各类多线程的无脑化封装,以及各种无脑的语法糖,在垃圾回收的加持下一定会让你在熟悉了语法之后欲罢不能,直呼这就是Python!

总的来说,Golang虽不能胜任C++在领域专业软件的地位,但是凭借能够快速开发出功能,并且性能在一定程度上优于JAVA的优势,在服务器后端领域占据了大量市场。

(Golang由于和JAVA的分代GC策略不同,在高频次申请释放上Golang不占优势,如二叉树。手动维持管理内存块性能会追平C++,这里不要争论了。)

Rust:千呼万唤使出来

上面例举了JAVA,和golang两门具有代表性的语言。语法上,都是用了具有特色并且统一的语法风格以及编程方式。Golang极端到甚至没有警告,不统一的风格,有歧义就是错误。Rust也才用了同样的思路,这大大降低了不同程序员之间合作的难度,这也是历史的趋势之一。

Rust和Golang的年龄相仿,语法上甚至有意相似之处,但是核心的思想在相反的道路上越奔越远。Rust的内存管理完全采取了编译器管理的方式,每一块内存的创建和使用都必须有明确的开始和结束的位置。因此创造了所有权的概念,当适应了所有权和引用这样的方式编程之后,内存管理问题也已经离我们而去了。

Rust和Golang一样都引入了包管理,也一定程度上依赖Github,相对于Golang,Rust的代码组织模式更加成熟,也可以生成动态链接库,并且提供和C/C++一致的二进制兼容,为逐步取代C/C++代码提供了良好的基础。

零开销抽象是Rust一创新大特色,虽然有些地方会有些繁琐,比如某些循环。你可能怀疑它生成了我们看不见的东西并做了不必要的检查,其实大部分生成的代码与C并无异。整体而言Rust并不啰嗦,试了几个工程练手代码量甚至比golang还要少一点。

Rust语言不再相信人类这种会犯错误的生物,只有在完成所有的检查之后才会编译通过。也因此编译时间会很长,但适应Rust后的心里负担真的非常小。


总结

Rust毕竟没有经过实际项目的锤炼,还需要经过时间进一步的验证才会被大部分人所接受。不得不说,Rust为我们提供了一个非常好的思路和选择,毕竟Linux内核和微软都将Rust作为未来的发展语言,它可能是夺取并瓜分C/C++最后仅有一片阵地的语言了。

视野狭隘就只能迷信井口的一片天是自己看到的,还是希望初学者放弃对某一门语言的迷信,多去尝试新的思想拓宽自己的视野。

如果一种工具让我们的工作效率变高了,资本家并不会让我们的工作变少,工资变多。一方面要放眼未来,提高竞争力,但我们最应该学习的还是无产阶级小红书,团结起来!

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜