写点什么

2012,C++,学,还是不学?

  • 2012-02-06
  • 本文字数:1875 字

    阅读完需:约 6 分钟

珠三角技术沙龙组委会成员、发起人之一赖勇浩近期的一篇博客引起社区内热烈讨论。他在其中认为:C++ 是2012 年不宜进入的三个技术点之一;其他两个是: ActionScript/MXML , 线程

赖勇浩对于“不宜进入”的定义是:

如果你现在不是这三个技术点的专家,并且手上没有使用这三个技术点的项目,进入这三个技术点仅为技术储备,那么就“不宜进入”。

至于为什么不宜进入,赖勇浩认为根本原因在于:

标准化过程中的超长流程,一次次将 C++ 推向深渊。

接下来,赖勇浩首先回顾了 20 世纪 90 年代:

其实在 90 年代,计算机的运算能力有限,市场上非常需要一款性能较高、抽象较强的编程语言,C++ 获得了成功,但它标准化的时间过长,造成各种编译器有各自互不兼容的“方言”,成了它的第一个软肋。

然后,赖勇浩又指出:“C++ 在 21 世纪的第一个十年里仍然地位稳固”,其原因在于:“Linux 和 MacOS X 大获成功,在这两个平台上 C++ 都是非常有竞争力的编程语言,C++ 自然水涨船高。”

但是,赖勇浩提出开发效率成为阻挡更多人采用 C++ 的另一个因素:

但随着 web2.0 和 web app 概念的兴起,以及 CPU 的主频进一步提升,服务器端编程语言渐渐地对执行效率不再敏感,而是更在意程序员的开发效率,众多的脚本语言开始蚕食 C++ 的市场份额⋯⋯新兴的贵族是动态语言。面对动态语言在开发效率上的强劲挑战,C++ 社区除了在 2003 年对 C++98 做了小小的 patch,基本上睡着了,完全没有应对之策,哦不,连应用的姿态都没有。

在赖勇浩看来,

进入 21 世纪的第二个十年,⋯⋯在这个十年,我们需要这样的编程语言: 1. 能充分利用现代 CPU 的计算能力,不仅仅是多个核心,更是巨大的 L1/L2/L3 Cache、超线程等;
2. 能够大量减小异步 I/O 的性能提升的同时带来的副作用:异步编程的复杂性以及对可维护性的伤害

两句话其实也可以压缩为一句:需要有更好的并发模型的语言。

上述主要针对服务器编程领域,在桌面和移动领域,赖勇浩认为:

rust 会进入桌面开发,google go 肯定会顺道啃一口。而移动设备方面,⋯⋯编译型语言加脚本的模式就会占大头⋯⋯C++ 还是前景堪忧。

最后,赖勇浩的总结是:

回首 C++ 的 30 年,展望它的未来,总结起来可能就是:标准化流程拖死人了。如果不是 15 年不能标准化,java/c# 的搅局可能不会出现;如果在 2005 年能够应对动态语言……如果云时代有更好的并发模型……

对于赖勇浩的观点,知乎上有人提出质疑,知名 C++ 程序员陈硕做出了回应,他认为:

C++ 目前坚守的阵地:服务端基础架构(例如淘宝 OceanBase 是 C++ 写的),PC 客户端的 3D 游戏(DirectX 是提供 COM/C++ 接口),某些嵌入式上的 (准 / 软) 实时程序,其他 Java/C#/Python 未能涉足的领域(会遇到 C 的抵抗)。如果你正好在这几个领域,我看不出有担心的必要。

陈硕还指出:

C++ 目前仍然是最快的语言(见 google language benchmark 论文和 shootout.alioth.debian.org/ )。如果你的应用领域确实在乎这个性能⋯⋯那么 C++ 仍然是不二之选。

技术博客酷壳的博主陈皓对此次讨论也发表了一篇博客《Why C++ ? 王者归来》,他在其中引用了 Herb Sutter 的一次演讲,Herb Sutter 是 Exceptional C++ C++ Coding Standards 的作者、ISO C++ 委员会的主席、C++/CLI 首席架构师、Microsoft 的软件架构师。这次演讲是 C++ and Beyond 2011 上的一次公开演讲。

陈皓在文中摘取了本次演讲的幻灯片,并做了一些注释和内容提要。 他首先指出:

为什么 C++?因为 Performance per $,也就是说 performance 就是钱,这个分成三个方面,

  • 耗电,芯片的耗电量,移动设备的耗电量,家用电脑的耗电量都和钱有关系。
  • 资源,家用电脑和移动设备上的处理器资源有限,因为要让一般消费者买的起。
  • 体验,在更小的设备上会有更好的体验,有更好的体验就可以挣更多的钱。

此后,他也回顾了 C++ 的历史,并借助幻灯片中的一张表格指出:

如果把我们的对编程语言的需求总结为四个:效率,灵活,抽象,生产率。那么,C 语言玩的是前两个,而 C++ 玩的是前三个,Java 和 C#玩的是后两个(抽象和生产率) 任保一种设计都不可能让你什么都要的,这就是 Trade-Off——什么事都需要交换的。

接下来,陈皓从移动设备、数据中心两个角度,说明了 C++ 的性能效率的重要性,同时还指出:

当然,不是 C++ 不注重 开发效率,看看 C++0X 的标准引入了多少东西我们就知道了。但是本质上,C++ 还是致力于性能和抽象的完全平衡

目前仍在进行的 2011 InfoQ 读者年度深度调查中,有超过 30% 参与调查的读者主要使用的语言是 C 和 C++,也欢迎正在阅读本文的您参与调查,告诉我们您使用哪些语言,同时也可以在文后留下您对本次讨论的想法。

2012-02-06 01:597616
用户头像

发布了 479 篇内容, 共 172.2 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

微服务-技术专题-微服务进程间通信

码界西柚

微服务 分布式架构 5月日更

如何提升工作效率

wangwei1237

工作效率 文化 大历史理论

【LeetCode】整数反转Java题解

Albert

算法 LeetCode 5月日更

限时白嫖!腾讯内部员工培训Java资料,网友:大厂就是不一样

牛哄哄的java大师

Java

网络攻防学习笔记 Day3

穿过生命散发芬芳

5月日更 网络攻防

白嫖福利!阿里P7大神梳理的Java数组详细知识点,太实用了

飞飞JAva

Java

Redis-技术专题-Redis分布式锁实现方案

码界西柚

redis 分布式锁 5月日更

我与 InfoQ 写作平台的这些事

xcbeyond

个人成长 1 周年盛典 InfoQ 写作平台 1 周年 5月日更

网络攻防学习笔记 Day2

穿过生命散发芬芳

5月日更 网络攻防

模块三作业

c

架构实战营

多家银行增设数字金融部 架构调整背后透露出哪些信号?

CECBC

银行

通向未来的十二个趋势

CECBC

人工智能

【音视频】弱网下的音视频通讯

Bob

音视频 直播技术

区块链如何推动人力资源和薪酬管理体系变革?

CECBC

人力资源

数字化转型能力成为中国纺织服装业未来发展的核心动能

CECBC

纺织面料

3.5 Go语言从入门到精通:标准输入输出fmt包

xcbeyond

Go 语言 5月日更 fmt包

把复杂留给自己,简单留给用户

石云升

5月日更

OAuth 2.0 了解了,OAuth 2.1 呢?

Zhang

OAuth 2.0 认证授权 OAuth 2.1

【JS】作用域(入门篇)

德育处主任

JavaScript 大前端 Web js

顺序一致性(Sequential Consistency)

UNDEFINED

sequential consistency Java Concurrency distributed system

自己在 InfoQ 平台的期冀——共同成长

liuzhen007

1 周年盛典

H5和WebRTC实时通讯方案的不同

liuzhen007

5月日更

未来5年或将出现颠覆型区块链应用,资产通证化将重构实体经济

CECBC

区块链

【LeetCode】砖墙Java题解

Albert

算法 LeetCode 5月日更

软件开发不同阶段的命名风格

顿晓

5月日更 命名 风格

清华学霸!用18行代码讲解Java接口,程序员:果然厉害,学到了

牛哄哄的java大师

Java 接口

让 Go 代码跑上移动端

Rayjun

Go 语言 gomobile

别再傻傻分不清AVSx H.26x MPEG-x了

LoveYFan

音视频

第八大洲环游记(一):平流层上的非洲故事

脑极体

高级研发工程师都有哪些特点?【超级准】

liuzhen007

技术人生 工作体会 程序猿

算法训练营 - 学习笔记 - 第四周

心在飞

2012,C++,学,还是不学?_编程语言_郑柯_InfoQ精选文章