点击上方“C语言与CPP编程”,选择“关注/置顶/星标公众号”
6 Q. `1 r2 V$ Y, T% K) L干货福利,第一时间送达!, i1 y; @5 b" W5 p n
* M4 }3 Z1 N# k4 w% |
kgspnerfhma64027651428.png
5 N0 a! A; T8 l9 Y0 |
整理 | 郑丽媛6 b0 P) U) Y/ J( V0 r# c) L0 X# F
在本月的 TIOBE 榜单中,出现了历史性一幕:C++ 史上首次超越 C,跃升至榜单第二,仅次于 Python——这是 C++ 在此榜单中的历史最高位,亦是 C 语言的历史最低位。
! d. }: T* e' G
h1h4jee1gw164027651528.png
2 O" O( w' z8 e6 @6 U
iprivl50jif64027651628.png
: @$ q; l4 p; G3 H/ h, R* Q( ?2 B根据本月榜单数据可以看出,C++ 和 Python 是唯二市场占比超过 10% 的编程语言,而 C++ 与 C 语言相差 0.8%。虽然差距看似不大,但从 C 语言近一年来持续下滑的占比趋势来看,此次 C++ 登上榜二或许并不意外。
+ Z z+ t1 ^4 k- w. a
fh4kvngocvw64027651728.png
: Q P( o: W: i! d
一、C++ 的发展历程
' ], ~# i# {( I4 g n- v. R8 g自 C++ 诞生之初,它就被誉为更好的面向对象的 C 语言版本。想到这一点,TIOBE CEO Paul Jansen 感慨道:在诞生 39 年后,C++ 终于打败了 C 语言。
+ U2 I0 B. P$ `$ B8 c% V& o# x" _事实上,早期并没有“C++”这个名字,而是叫做 C with Classes,即”带类的 C“,出现背景是为了解决计算机性能飞速提高下,C 语言逐渐难以应对中大型软件的编写。/ T- Y4 u9 P- s( S8 i; A
在 1979 年,C++ 之父 Bjarne Stroustrup 以 C 语言为背景,又以 Simula(具备利于大型软件开发的特点)思想为基础,到贝尔实验室开始从事把 C 语言改良为 C with Classes 的工作,并将其用于自己的 Unix 内核开发工作中。当时的 C with Classes,还只是作为 C 语言的一个扩展和补充,目的是提高开发效率。
2 x7 D( e2 [ ~; R4 M/ y3 i: ]# ?到了 1983年,C with Classes 正式改名为 C++,并加入了新的特性,包括虚函数、函数名和运算符重载、参考、常量、改良的类型检查等等。整体来说,C++ 主要是在 C 语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。, x! ]5 ^% @' S0 X$ @
纵观 C++ 的发展历程,大致可分为三个阶段:5 X& y+ @7 B/ l
(1)第一阶段从 1979 年到 1995 年。这个阶段的 C++,基本上是传统类型上的面向对象语言,凭借着接近 C 语言的效率逐渐为人所知,慢慢应用到工业界中,并在工业界占据了相当大的份额。9 Q# G# m- [: C# v. w. W; e
(2)第二阶段从 1995 年到 2000 年。这一阶段的 C++ 新增了标准模板库和 Boost 等程序库,于是泛型程序设计在 C++ 中占据了越来越多的比重。不过 Java、C# 等语言出现和硬件价格的大规模下降,导致 C++ 受到了一定冲击,但仍有着广泛应用。" E. }% f! T; H9 f9 `0 u
值得一提的是,由于这时 C++ 还没有统一标准,各个编译器都有自己的不同实现,因此 ANSI(美国国家标准学会)在 1989 年成立了 C++ 标准委员会以建立 C++ 标准,并在 1998 年推出了 C++98 标准——这是 C++ 的第一个官方标准,让不同编译器和平台之间的差异得以统一,由此提高了代码的可移植性和稳定性。
/ F& J" c! M- i0 F+ D& ]) ^(3)第三阶段便是从 2000 年至今。得益于 Loki、MPL(Boost)等程序库为代表的产生式编程和模板元编程,C++ 的发展达到了一个新高峰。这些新技术和原有技术的融合,使得 C++ 成为当今主流程序设计语言中最复杂的一员。
+ }- ?( [7 h0 |' O$ @6 P- c对于本月 C++ 跃升至第二,TIOBE CEO Paul Jansen 提到:自 2011 年以来,C++ 就展开了新生,每三年更新一次。“虽然大多数编译器和工程师都无法跟上这一步伐,但能看到这种语言不断发展,也算是一种成功。”6 v8 x( s* _! j# e- v
如今,C++ 作为一种被广泛使用的编程语言,在嵌入式系统、游戏开发和金融交易软件等领域都有大量应用。它支持多重编程范式,包括过程化程序设计、面向对象程序设计、泛型程序设计和函数式程序设计等。
' c, Y5 ?$ C* B1 \1 q5 L二、Go 和 Rust 也刷新自身纪录8 n8 g% [% c# s/ K0 X* s
除了 C++ 首度超越 C 语言,本月榜单中还有 2 个编程语言也达到了名次新高:Go 首次排名第 7,第 17 位的 Rust 也刷新了自身历史新高。$ O* @0 U; c6 q- m( `
曾在 2015 年掉到百名开外(第 122 名)的 Go 语言,自开始严格遵循每半年一次的发布周期,以及由 Go 编写的 Docker 和 Kubernetes 变得流行后,如今它已被用于许多软件领域,如后端编程、网络服务和 API 等。自今年 2 月首次进入 Top10 后,Go 一直稳定在前十。得益于 Rust 在系统编程领域的出色表现,近年来它被越来越多的开发者关注和支持。作为一种静态强类型的编程语言,Rust 最大的特点便是解决了其他语言所面临的冗长编程和内存管理问题。不仅能保证高性能,还能降低内存泄漏和安全漏洞的风险,Rust 的这些特点使它成为开发需要高可靠性和高性能的系统应用程序时的最优选之一。
' J |; m$ O5 Z! b' u2 N
8 K( u) V! R/ x
s3yrj1xzhy464027651828.png
" t- @8 z% t7 t" b: `此外,附上 Top 10 编程语言 TIOBE 指数走势(2002-2024):) L p7 Q/ `7 x5 B. F
31fx42nsvvb64027651928.png
3 j: j2 e2 N* \; b9 l
正如上文所说,如今的 C++ 已在嵌入式系统、游戏开发和金融交易软件等领域都有大量应用,而随着 C++ 语言的演变,也逐渐演化出相应的标准程序库,其中所引入的程序库中最重要的便是标准模板库(STL),这也几乎是每一位 C++ 程序员绕不开的课题。
2 n0 \4 J. V& E' s——EOF——你好,我是飞宇,本硕均于某中流985 CS就读,先后于百度搜索、字节跳动电商以及携程等部门担任Linux C/C++后端研发工程师。
6 |" I$ ]+ [2 m0 }$ _& C最近招聘季快到了,身边很多小伙伴都在摩拳擦掌、跃跃欲试,很多都打算看看新机会,这里推荐一个好朋友阿秀开发的互联网大厂面试真题解析网站,支持按照行业、公司、岗位、科目、考察时间等查看面试真题,有意者欢迎体验。+ Z+ w" G7 u' `% k" K
如果你明天就要面试了,那我建议你今晚来刷一刷这个网站,说不定就能遇到你明天的面试原题,目前已经有不少人在面试中遇到原题了,具体可以看下链接:字节跳动后端研发岗面试考察题目Top10、面试中局部性原理还真有用!' K1 U$ y* }# K$ ~
gthzznwao4464027652028.png
u" f, k1 F, \8 u3 s1 L
网址:https://top.interviewguide.cn/
7 ?5 f' ~3 }" Y1 c) o; W同时,我也是知乎博主@韩飞宇,日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。
3 R( h/ v* ]* w7 M我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。
+ X! Z1 Y% R# T/ w( d# z
pznwyv031o364027652129.png
) t! `/ [; T/ H" Y9 |* B. d欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会。
7 ~. o9 m8 U' f$ e/ K2 v# k2 y
6 J- E# S8 F* b) s
mqd1tqr43vd64027652229.png
; S( x# [9 L0 `% X7 y加个微信,打开另一扇窗' Z) y5 e4 ^8 {4 P# g; f
bfskz54zr1i64027652329.gif
|