C++历史上首次超越C

发布时间:2024-06-10  

每个时间段,总有不同编程语言领先其它语言,前些年一直是C和Java领先,而最近几年,则是Python和C++。


根据最新公布的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, 、模板元编程等知识,或是各种语法组合出来的奇技淫巧。


总之,归结起来,也有另外一层原因,难度不是问题,需求和薪水才是最主要问题。

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>