C++ 王者归来:对编程语言的需求总结为四个:效率,灵活,抽象,生产率(C++玩的是前三个,Java和C#玩的是后两个)
因为又有人邀请我去Quora的C2C网站去回答问题去了,这回是 关于 @laiyonghao 的这篇有点争议的博文《2012 不宜进入的三个技术点》ActionScript,Thread 和 C++,C++争议的争议最大。(要我说,.NET比C++更需要慎重进入,呵)。我就在这里回复一下这个问题吧。
正好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C++ 和 C++ Coding Standards 的作者,还是ISO C++ 委员会的Chair,C++/CLI首席架构师,还是Microsoft的软件架构师,他叫Herb Sutter,他的这个演讲视频是 C++ and Beyond 2011上的一次公开演讲,题目是——Why C++? (如果你觉得那里的视频比较慢,你可以看优酷上的视频)(英文听力好的同学可以看一样,因为都没有中文字幕)
我觉得这篇文章就足够可以说明很多问题了,所以,我把Herb的演讲幻灯片截了几页放到这里,并做上一些注释,算是一个演讲内容摘要吧。
1) 为什么C++?因为 Performance per $,也就是说performance 就是钱,这个分成三个方面,
- 耗电,芯片的耗电量,移动设备的耗电量,家用电脑的耗电量都和钱有关系。
- 资源,家用电脑和移动设备上的处理器资源有限,因为要让一般消费者买的起。
- 体验,在更小的设备上会有更好的体验,有更好的体验就可以挣更多的钱。
移动设备上的耗电量相信用过智能手机的人都知道吧,Android手机的耗电量实在是太大了。就算是iPhone在开启Wifi和3G的情况下耗电量也很快。

2)C++的进化分成三个时代:
- 1979 – 1989:研究C的对象能力。主要是为C++做准备
- 1989 – 1999:C++成了主流。
- 1999 – 2009:Coffee-based语言(Java, .NET)出现了,极大的提高了开发生产力。
对于第三个时代,Herb说了很多,他说这个并没有什么错,因为这个时候我们非常关注开发的生产力,这个非常重要,这就是为什么C++一下就失去优势的地方。但是是否这些Coffee-Based的语言可以做任重要的事呢?不行,很多时候,这是一个Trade-Off的事,也就是生产力不是免费的是需要你用别的东西去交换的。

3)第四个时期。
Herb认为,2009-2019是第四个时期,因为我们又喜欢Native Code了,C++从被驱逐后又被请回来了。因为网站的性能越来越是个问题,移动端的设备非常流行。但主要是因为Performance就是钱,因为前面的三个因素,性能影响的是dollar,不尊重性能的公司都会发现花钱的速度太快了。(比如去年大家热炒的京东促销和12306.cn的问题,12306给整个社会造成了巨大的金钱浪费)
Herb把这个时期比做 The Return of the King。(指环王的第三部:王者归来) 性能为王!
这就好像我在“软件开发的三重门”里说的,开垦时代需要的是快和生产力,而开垦完后就得保证其稳定性。

4)Herb还给了一张幻灯片问,“The World is built on ….”,后面例出了多个语言。然后Herb说,世界是由C和C++构成的。

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

6)Herb举了一个微软内的例子,用C++ 和 ATL 来开发IE工具条的报告,意思是你可以用脚本在IE的工具条上加按钮,但是作者建议使用C++,因为用.NET或是脚本有重大的limitation,尤其是性能上的问题。

7)接下来,我们来看看移动设备。
下图中,第一个是iOS,第二个是Android,第三个是WinPhone。Herd说了几个事:
a)比Web APP,人们更喜欢Native的APP,这个在用移动设备上可以得到验证。
b)iOS也好,Android也好,WinPhone也好,他们不是在搞操作系统,而是在搞应用,为的是让智能手机更好。手机就是一个App。
c)这三个手机在第一版出来时都不支持C++,而第二版出来时都支持C++了。因为他们要兼顾性能和一定程度上的开发效率。WinPhone还没有到第二版,让我们拭目以待。(我以前写过一篇调侃Android支持C++开发的文章,这也只是一年前的事,说明C++全面回归了)

8)如果你还是不相信的话,我们可以看看为什么Apple和Google都在搞C++的编译器,因为他们觉得g++性能不行。所以,基于LLVM的编译器正在领导潮流,因为我们关注Natvie Code的性能优化。

9)接下来,Herb说了一下数据中心,你知道数据中心最花钱的是什么吗?三个事:
- 57% 花在了硬件上。
- 18% 花在了配电和降温上。
- 13% 花在了耗电上。
88%的钱花在了硬件和电力上。这可是很大一笔费用啊。(还有人说硬件比软件便宜吗?)我记得我上一个公司的数据中心每年要花的电费就在百万美元以上。

10)昨天在微博上有个笑话,说是某咨询师要求程序员把代码打印出来走查,程序员问是不是要用彩打?哈哈。我说,这至少不环保嘛。消耗太大了。是的,C++是可以省电的,以及于C++之父都在YouTube 说C++是可以减轻全球变暖的问题。哇,C++开始真正造福人类了。

11)我还需要重温一下老大的这句话——
My contribution to the fight against global warming is C++’s efficiency: Just think if Google had to have twice as many server farms! Each uses as much energy as a small town. And it’s not just a factor of two… Efficiency is not just running fast or running bigger programs, it’s also running using less resources.
Bjarne Stroustrup, June 2011
最后一句说的非常好!效率不仅仅只是跑得,跑得多,更是可以使用更少的资源。
12)下面让我们再来看一张表,一张把钱投到哪里的表格,这样我们可以看到一些趋势。
- 70年代80年代,资源不够,主要是把钱投在性能上。
- 80年代到90代,主要是90年代开始有一半的投次到了抽象和生产率上。
- 00年代,完全都在抽象和生产率上。
- 10年代,80%的钱都要回头来解决性能问题。这就是C/C++的王者归来。

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

那么,我们还会觉得C++要被淘汰了,不适合进入了吗?看完这个演讲,你应该有答案的。
后面讲了C++的文艺复兴,你可以在Google 搜索 “C++ Renaissance”看看。另外,该视频的讲议可以在这里下载。
原文网址:http://coolshell.cn/articles/6548.html
http://blog.csdn.net/songjinshi/article/details/7957930
C++ 王者归来:对编程语言的需求总结为四个:效率,灵活,抽象,生产率(C++玩的是前三个,Java和C#玩的是后两个)的更多相关文章
- 对编程语言的需求总结为四个:效率,灵活,抽象,生产率(C++玩的是前三个,Java和C#玩的是后两个)
Why C++ ? 王者归来(转载) 因为又有人邀请我去Quora的C2C网站去回答问题去了,这回是 关于 @laiyonghao 的这篇有点争议的博文<2012 不宜进入的三个技术点>A ...
- 少儿编程崛起?2020年4月编程语言排名发布——Java,C,Python分列前三,Scratch挤进前20
前三并没有什么悬念,依然是Java,C,Python.C与Java的差距正在缩小,不过我们不用担心,在大数据分析领域Java,Python依然都是不可或缺的. 基于图形的基于块的编程语言Scratch ...
- 苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型
一.字符串( String )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的 ...
- 流媒体传输协议之 RTP (上篇)
本系列文章将整理各个流媒体传输协议,包括 RTP/RTCP,RTMP,希望通过深入梳理协议的设计细节,能够给流媒体领域的开发者带来一定的启发. 作者:逸殊 审核:泰一 介绍 RTP,即 real-ti ...
- 【转】IT行业岗位以及发展方向
以下转自https://blog.csdn.net/qq_23994787/article/details/79847270 职业生涯规划的意义 1.以既有的成就为基础,确立人生的方向,提供奋斗的策略 ...
- python基础全部知识点整理,超级全(20万字+)
目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...
- 巩固复习(Hany驿站原创)_python的礼物
Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https://www ...
- Oracle数据库 —— DML完结
时间:2016-8-18 01:17 ----------------------------------------------------------------------------停下休息的 ...
- Performance Monitor2:Peformance Counter
Performance Counter 是量化系统状态或活动的一个数值,Windows Performance Monitor在一定时间间隔内(默认的取样间隔是15s)获取Performance Co ...
随机推荐
- Android, iOS, 各种软件汇总
Android: 长截图:软件叫PPIICC的可以截图之后拼接:有些手机自带截图,比如小米,华为,三星等. 视频:全格式的Kodi XBMC, 一般的:moboplayer, VLC, F蔷:***, ...
- c语言学习笔记(8)——函数
学完c语言的函数可以理解面向过程的语言 函数是c语言的重点 一.为什么需要函数? 1.避免了重复性操作 2.有利于程序的模块化(每一个功能可以用不同函数去实现) 二.什么叫做函数? 逻辑上:能够完成特 ...
- 如何控制WAP网站上输入框的默认键盘类型
百度上对这样的资料介绍很多,基本上都和这个页面是一个意思 http://www.w3school.com.cn/html5/att_input_type.asp : 语法 <input type ...
- Windows10的Ubuntu子系统开启桌面环境
原文:Windows10的Ubuntu子系统开启桌面环境 Ubuntu 优势之一就是桌面环境比较好,所以咱们的子系统当然也不能少了这一环节,本小结开始安装Ubuntu 桌面系统. 安装环境 使用下面指 ...
- CentOS(一) 最小化安装
/etc/sysconfig/selinux 关闭selinux /etc/sysconfig/network-scripts/网卡 设置onboot=yes service network re ...
- C#中的MessageBox消息对话框
关键字:C# MessageBox 消息对话框 在程序中,我们经常使用消息对话框给用户一定的信息提示,如在操作过程中遇到错误或程序异常,经常会使用这种方式给用于以提示.在C#中,MessageBox消 ...
- CentOSserverMysql主从复制集群结构
在配置Mysql数据库主从复制集群时间,以确保: 1.主从server操作系统版本号和位数一致. 2.Mysql版本号一致. 为了保证稳定性,最好server操作系统和Mysql数据库环境一致. Ce ...
- Python多线程 简明例子
综述 多线程是程序设计中的一个重要方面,尤其是在服务器Deamon程序方面.无论何种系统,线程调度的开销都比传统的进程要快得多. Python可以方便地支持多线程.可以快速创建线程.互斥锁.信号量 ...
- Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK
原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- springboot使用logback日志,部署到tomcat不生效问题解决
1.springboot 配置日志方法 使用该方法配置日志,在本地调试可以正常写入日志文件,但是打包发布到tomcat以后日志配置不生效. 2.修改配置 Spring Boot官方推荐优先使用带有-s ...