C++为什么能重夺年度语言?

2023-02-26 15:46:48 浏览数 (1)

Part.1

爷青回

年初依旧很多大新闻,其中一条就是TIOBE把年度编程语言颁给了C 。

我特地上TIOBE看了看,意外发现一件非常有意思的事。TIOBE指数行业内的同学都很熟悉,是全球编程语言流行度的风向标。TIOBE最早始于2001年,但当年并没有选出年度语言,而是得等到2003年。2003年对于C 也是特别的一年,C 在TIOBE上的流行指数一度逼近18%,可谓如日中天,所以毫无悬念,第一届年度语言就是C 。

▲图源:TIOBE官网

不过,这也是C 的顶点。虽然目前还没有听说什么TIOBE“年度语言魔咒”之类的说法,但C 成为年度语言之后一路下滑,到了2017年,C 只剩下不到5%。

这是什么概念?那一年Java的流行指数是14%。

Java号称C --,替代效应明显。然而,有意思的地方来了,当人们开始讨论用什么替代Java的时候,C 居然活了过来,在TIOBE上走出了一条微笑曲线。2022年,C 的TIOBE流行指数上大涨4.6%,这是榜单最大涨幅,19年后再次夺得了年度语言。很多分析文章没有提到的是,目前C 的流行指数重新回到12%,而上一次还是在2005年。

什么叫爷青回,这就叫爷青回。

Part.2

C 为什么衰落

C 有太多问题,太应该衰落了。概括起来也不复杂,就三个字“太复杂”。

C 提供了大量的特性,往好了说写起来非常灵活,特别适合追求最优解的强迫症,往坏了说是严重加重了选择困难症的病情。即使你用了C 十年二十年,一定还能遇到什么地方让你感慨居然还有这么多不了解的地方。从审美的角度来说,C 不够协调统一,从学习的角度来说,C 简直是灾难。

指针就是典型。指针是C 灵活的源泉,指针用得好,C 能玩出花来,但是用不好,C 也能玩出花来,所以,对很多程序员来说,不管是写,是读,还是改,指针都是灾难的代名词。

怎么办呢?献祭灵活性换取易用性和一致性。

譬如Java,Java继承了C 大量的语言特性,同时手起刀落剁掉了指针。Java简化了内存管理操作,有一项重要的机制叫垃圾回收(Garbage Collection),太重要以致有一个著名的梗是说,如果你去食堂吃饭,看到有人吃完收拾盘子的,那是C 程序员,吃完直接走的,那是Java程序员。

这里有个问题。我想自己收拾行不行呢?Java说,对不起,不行,不管你愿不愿意,我都要替你收拾。大家都不用收拾,所以易用。大家都不能收拾,所以一致。这里没有绝对的优劣,不过,后来无论是开发还是管理,都认为Java这种做法更节省头发。

于是,C 连同灾难性的指针一起,似乎只能死于选择太多。

Part.3

C 为什么重新流行

那么,C 为什么重新流行起来了呢?

这确实是个有意思的问题。有人说TIOBE算法不够客观,C 不可能重回2003年。这个说法我只同意一半。毕竟20年过去了,出现这么多要革C 的命的语言,著名的前有D语言后有Rust,就算这些后辈再怎么不给力,总会要分走一些使用者的。

现在C 不仅守住了基本盘,还出现了“回暖”的现象。且不管回暖的力度是不是真的像TIOBE所说的力拔头筹,但回暖本身是毫无疑问。C 肯定是做对了点什么,这才是C 重夺年度语言的新闻背后,最需要我们关注和思考的事情。

那么,C 究竟做对了什么呢?

这不是一个很好回答的问题。网上有一个简单直接的回答:C 一直在更新,不断吸收编程语言的发展成果。譬如C 20,就增加了模块、概念、范围和协程四大特性。不少C er说C 20振奋人心,为这门上了年纪的语言注入了新的活力。

不过,这个说法我同样只同意一半。C 20确实引入了一批非常有用的现代化特性,具备和后辈一争高下的基础。但是,前面也已经说过,C 的根本问题不是在于特性太少,而是在于特性太多,不要说去选择,光是去了解就已经成为了一种负担。

根本原因没有解决,C 究竟凭什么?我的回答是:时代需求使然。

在过去的十几年,Web开发一直处于绝对的支配地位,已经成为我们评价一门编程语言好坏的默认背景。但是,时代已经开始走出被Web支配的日子,区块链、人工智能、元宇宙,且不管这些概念背后到底取得了多少实质性的发展,但要开发这些应用,需求必然会变得空前多样,我们都需要重新选择最合适的开发方式。

而C 最不缺的就是选择。即使到了2023年,能够直接死磕底层,同时又具备现代编程语言特性的编程语言,其实仍然为数不多——C 正是其中之一。如果再加入对语言生态积累的考虑,C 几乎就是唯一的选择。

有一个说法是,无论你要做什么,总能在C 里找到趁手的工具。我想,这才是C 能在这个发展中的时代重夺年度语言的真正原因。

Part.4

C 该怎么学

C 日久弥新,相信许多人都动过学一学C 的念头,但是,C “难学”的名声在外,又让许多人打了退堂鼓。C 之所以让人感觉难学,主要是因为复杂和庞大。复杂是因为C 在设计之初就支持多种范式,而且不断推出新的语言特性提升竞争力,语法越来越复杂。庞大是因为类库,C 之所以生命力如此顽强,另一个重要原因是拥有一套功能强大的庞大类库。

复杂的语法和庞大的类库不但拉高了C 的学习门槛,还拉高了C 教材的编写门槛,

什么人才能广泛地了解这些内容,然后准确地总结成书,还敢打包票说书里的理解都没有偏差呢?还真有这么一个合适人选——Bjarne Stroustrup,没有谁能比C 之父更懂C !Bjarne Stroustrup不仅发明了C ,还通过编写一系列教材打造出一条C 学习路线:

关于作者:

莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

0 人点赞