扫码打开虎嗅APP
本文来自微信公众号:电子工程世界 (ID:EEworldbbs),作者:付斌,题图来自:视觉中国
根据最新公布的2024年6月TIOBE编程指数来看,C++历史上首次超越C,从第三上升至第二名,排名仅次于Python。
诞生39年,终于超过C
C++在TIOBE索引中最新排名提升到第二名。省流版排名如下:
Python排名第一:占比15.39%,本月上升2.93%;
C++排名第二:占比10.03%,本月下跌1.33%;
C排名第三:占比9.23%,本月下跌3.14%;
Java排名第四:占比8.40%,本月下跌2.88%;
C#排名第五:占比6.65%,本月下跌0.06%;
Go从第十四上升至第七:占比1.93%,本月上升0.93%;
Rust从第二十上升至第十七:占比1.17%,本月上升0.26%。
在C++诞生之初,便被誉为更好的面向对象的C版本。早在去年就有程序员称,“C++即将超越C”,但直至今日,也就是C++诞生后39年后才真正击败了C。由于C语言下降更为严重,反而导致了C++超越C语言,首度登上TIOBE排行榜排名第二的位置。
C++主要优点在于其性能和可扩展性。从2011年起,C++开启了新生,每三年发布一次重大更新。尽管大多数编译器和大多数工程师都无法跟上这一步伐,但看到语言的发展被认为是一种成功。
不过,C++也存在缺点,它的风格特征丰富,由于历史悠久,C++的目标一直是向后兼容。仅举几个领域的例子,C++在嵌入式系统、游戏开发和金融交易软件中大量使用。
另据2024年6月PYPL编程指数来看,Python依然一骑绝尘,R、Dart、VBA、Abaq、Perl、Haskell的占比都有一定提升。
“有对象”的C++,还在进化
要说C和C++有什么区别,可能有人说就是“有对象”(面向对象)和“没对象”(面向过程)的区别。
从C++98到C++17到C++23再到C++26,C++有大的颠覆,也有为未来布局的核心语言特性。
C++标准遵循3年开发周期,并以发布年份命名。在临发布的一年前,C++会进入“功能冻结期”(feature freeze),即版本开发进入半稳定状态,不再添加重大功能及特性,着重于修复各种BUG。
也就是说,直到2025年初,C++23都会加入新功能。
简单回顾一下C++标准的进程,其中C++98、C++11、C++20属于比较有颠覆性的标准:
C++98:20世纪80年代末,Bjarne Stroustrup和Margaret A.Ellis合著了“Annotated C++Reference Manual”(注释版C++参考手册,简称ARM)。这本书定义了C++的功能,同时也是第一个C++标准C++98(ISO/IEC 14882)的基础。C++98有几个关键特性:模板、包含容器和算法的标准模板库(STL)、字符串和IO流;
C++03:得到了一项微小的技术修正,Technical Report 1(简称TR1)推出,是由C++标准化委员会成员建立的boost项目,在社区中,包括C++98在内的C++03被称为传统C++;
C++11:被称为现代C++,许多特性从根本上改变了C++的编程方式。如,C++11引入了TR1组件,还有移动语义、完美转发、可变模板或constexpr等特性。使用C++11,还获得了内存模型作为基础的线程模型以及线程API;
C++14:更像C++11标准基础上的查漏补缺,引入了读写锁、泛化的lambdas和泛化的constexpr函数;
C++17:有两个突出的特性——并行的STL和标准化的文件系统。大约80个STL算法可使用执行策略执行。boost对C++17也产生了重大的影响,从boost中获得了文件系统以及3种新的数据类型:std::optional、std::variant和std::any;
C++20:这一代革新程度不亚于C++11,包括四个重要特性:Ranges(范围库),Coroutines(协程),Concepts(概念)以及Modules(模块);
C++23:已经完成,并进入了最终投票阶段,C++23更像延续的一代。它提供了一种小巧但影响深远的核心语言特性——this的推导,类似于Python,在成员函数定义中明确地传递隐式传递的this指针。同时,C++23库还将新增很多有意思的特性。这个版本,开发者褒贬不一,有人认为它比Python差远了,有人则愿意给C++23一个机会,现在C++有了模块、概念等新特性,他开始考虑C++23是否值得用于新项目。
现在,大家现在都在向C++20和C++23靠拢,不过有57%的C++98/03用户不打算转移到其它C++标准。此外,值得一提的是,目前,已经有37%的嵌入式开发者和39%的游戏开发者已经开始使用C++20了。
今年C++23的使用率应该会有很大提升,因为最新语言发布后一年使用率都会急速上升:C++17在2017年以12%的使用率开始,2018年达到18%;C++20在2020年以12%的使用率开始,2021年达到18%;C++23在2023年以10%的使用率开始,今年有望冲击16%的使用率。
嵌入式,该用C++吗?
都说C++太难了,那么,在嵌入式界,C++到底好用不好用,实际情况如何?
在嵌入式Linux领域,C++非常好用。就比如说,5千行代码的GuiLite就是由C++编写,而用C实现,至少需要几万行才能实现相同的效果。同时虽然用函数指针可以实现C++的所有特性,但会大大降低代码的可读性。可以说,在嵌入式Linux领域,C++绝对是应用层主力之一。
而在单片机领域,之所以C++不太流行,是因为之前主流flash容量在64KB~256KB左右,容量限制导致泛型编程和STL等很难运用在开发中,很明显C++更显得笨重。而且,也没有迫切需求从C换成C++,毕竟应用层更重要的是业务,语言特性太多反而容易让业务逻辑变得混乱。
现实情况就是,C++本身难,但在嵌入式应用或工业界中也没使用特别难的语言特性,不过嵌入式人才本来就少,能用C++且不出幺蛾子的就更少了。
在工业界,C++大多数情况只使用STL封装的vector,map以及算法等方便开发,封装些模板函数或者类帮助复用,而非移动语义、模板偏特化、lambda、模板元编程等知识,或是各种语法组合出来的奇技淫巧。
总之,归结起来,也有另外一层原因:难度不是问题,需求和薪水才是最主要问题。
参考文献
[1]EEWorld论坛:https://bbs.eeworld.com.cn/thread-1284425-1-1.html
[2]EEWorld论坛:https://bbs.eeworld.com.cn/thread-1284385-1-1.html
[3]Coders驿站:https://mp.weixin.qq.com/s/s5sPpz3CkcIApyDhqMFErQ
[4]Qt教程:https://mp.weixin.qq.com/s/evUoZwaHq4841gHZoyFNwA
[5]程序员吾真本:https://mp.weixin.qq.com/s/z2J_oAArAYLXt3pKmVN_QA
[6]知乎:https://www.zhihu.com/question/374663834
本文来自微信公众号:电子工程世界 (ID:EEworldbbs),作者:付斌