孟岩:什么是高级C++?

与孟岩先生商榷,就C++的一些一般问题的另一些观点 孟岩先生是本人非常尊敬的一位学者,尽管似乎不从事职业的开发工作,但是在C++方面有极深的造诣,在很早的时候就在国内C++技术社区推动真正的C++技术。在长时间的潜伏之后,孟岩兄宝剑再次出手,开始持续更新其在优快云的官方博客。近日,在最新的一篇博客上,他谈到一些关于C++的思考和评论。由于文中设计的点非常广泛,很难在文后的评论中一一论及,所以专门撰此文。就几个问题请教与孟先生。第一个孟岩先生提到的所谓共识是“软件开发方面真正有价值的进步,应当是有利于用户、有利于项目管理、有利于解决领域问题,而不是有利于程序 阅读详情

什么是高级C++?

——软件工业化时代的C++价值观
孟岩
《程序员》杂志社


开门见山

主要论点:
    1. C++本质上是一种重“创新”而轻“生产”的语言,到目前为止仍然是主流语言中最适合技术创新的一个;
    2. 1995年之前,整个软件产业处于“创新为王”的阶段,C++是最适合这个阶段的语言,这是C++红极一时的大背景和根本原因。
    3. 1995年发生了一系列影响深远的事件,软件产业整体上转向工业化,为了支持工业化,创新的重点由技术创新转向体系创新。然而C++没有能够迅速适应这一 变化。
    4. 今天,C++应当准确定位,弥补不足,有针对性地发展,它将仍然是最重要的几种工业级语言之一。


从一本书说起
James Coplien,Advanced C++ Programming Styles and Idioms, Addison Wesley, 1991
—— 市面上唯一一本名副其实的“高级”C++书(Scott Meyers)
 ●面向对象特性的运用和把握
 ●面向对象的程序风格
 ● 动态特征的运用和超越
 ●符号语言模拟
 ●设计模式

    这本书代表了当时专家们对于“高级C++”的理解,换句话说代表了当时C++社群的一个审美价值取向。我们看到了什么?技术、技巧、风格、模式,但没有与 工程相关的东西。更有意思的事情是,这本书的中文版12年后被剽窃出版,此时书中对于C++面向对象能力发挥到了我当时没有想到的程度。这说明即使在 template被广泛应用之前,C++语言的技巧性就达到了如此的高度。然而耐人寻味的是,书中最高深的技巧从来就没有在C++实践中流行过。

另一本书...
Scott Meyers, Effective C++ ,1991年第1版,1998年第二版,2005年第三版。
 ●来自教学经验
 ●最初想开发一个代码扫描工具
 ●包含实际工程建 议
 ●历史上最重要的C++著作之一

    这本书出版的同时,还有一本在C++历史上影响更大的书问世——Scott Meyers的Effective C++。这本书并没有过多地探索语言技巧,而是探讨实践中应当遵循的规则,或者换句话说,探讨怎样在应用这种语言的同时保持软件的质量,提高开发效率。这 本书的内容被整个C++社群熟知并吸收,至今仍在翻新,影响着更多的人。

还是在1991年...
 ●“按照1991年3月C++程序员增长的速度计算,到1996年5月,全世 界每一个人都将成为C++程序员。此后我们将不得不教外星人学习C++。”
 ●问题:当时人们为什么如此疯狂地学习一种新语言?
    答案很有趣:大部分人是盲从。但他们所追随的人并非等闲之辈,几乎所有在AT&T Bell Labs、Sun、Borland、IBM、Microsoft的C语言大师都转向C++(Brain Kernighan,Jon Bentley,Peter van der Linden)。而这些人转向C++,不是因为他们知道Effective C++,而是因为他们知道Advanced C++。什么意思呢?就是说人们转向C++,是因为C++充满了令人兴奋的新技巧和未知的创新空间。


1991年...
 ●5000行C代码可以写一个完整的应用程序,获得数万$的回报;
 ● 一个TSR式的Help程序可以以shareware的方式通过磁盘发行,开发者银行户头里会收到大量汇款;
 ●John Carmark和Michael Abrash正在各自擅长的方向上不断创新。Doom发行后,id获得收入一度超过微软销售额。

C++历史选择中“创新”压倒“生产”
“相信程序员”;
Be an enable language;
Zero overhead;
STL投票的通过;
偏特化的引入
多继承
Generic/Generated/Meta
IOStream 库的设计
Loki/Boost

counted_ptr被否决
可选 GC方案被否决
加入类似delegate的对象方法指针提议未引起关注;
virtual关键字
exception机制
缺 乏Thread, Network, Regex, DB...等标准库
没有ABI规范
孱弱的RTTI

    并不是事后诸葛亮式的谴责,这就是C++的历史选择,无所谓对错。

    C++重创新轻生产,重技巧轻规范,语言上的创新试验直到1996年ANSI C++标准草案落地才结束。直到2001年Modern C++ Design出版,人们还不断地发现新的语言运用技巧。我们每个人都经历过这个阶段,在实践中发现一个问题,想方设法用尽各种语言技巧来克服它,成则欣 喜,败不气馁。我们都曾经相信,C++中一切问题都可以优雅地解决,只有想不到,没有做不到。问题是,从Advanced C++到Modern C++ Design,许许多多令人第一眼看上去无比惊喜的技术,最后在实践中被大范围推广运用的少之又少。C++大师们说这是教育问题,真的是这样吗?

C++社群的价值观
 ●用优雅的技巧解决复杂问题
 ●自己动手,丰衣足食
 ●决不让运 行时效率蒙受半点损失
 ●妙者为王
    “管理一群C++程序员就像放牧一群骄傲的猫。”——B. Moo
    “C++程序员是高速公路上穿着短皮茄克,带着墨镜,抽着雪茄,挥舞着铁链的英勇无畏的摩托骑士。” ——VC产品经理

1995年:转折点
 ●Windows 95问世:GUI时代、保护模式操作系统时代、多线程时代的到来,是推动软硬件规模迅速膨胀;
 ●Netscape Navigator vs. Internet Explorer: Web的兴起将人类一下子拖入互联网时代, 个人与企业应用软件网络化;
 ●Java诞生:提供了网络 时代、跨平台时代优于C++的企业应用软件开发语言;
 ●COM时代到来
 ●Delphi诞生:创新与工程原则平衡的典范;


1995年:C++全盛时代
 ●C++标准草案接近完成,语言基本稳定;
 ●C++工 具大战结束:来自商业竞争的动力消失,MFC获胜;
 ●很多主流软件厂商转向C++,C++开始在大范围内被用于大规模软件开发;
 ●一 切迹象表明,软件产业的重点将有创新转向生产。但是:C++社群在指导思想上并没有发生相应的变化。


我们的历史失误
 ●C++社群从来没有联合起来支持任何一个跨平台的二进制组件标准(如 COM/SOM/CCM)和基础库(如Apache APR、ACE OS Wrapper);
 ●C++社群从来没有联合起来支持任何一个跨平 台的C++虚拟机、解释器、内存检测工具和错误录像工具,也从来没有促成过一个安全的库;
 ●Boost出现于1999-2000年,而在此之前 的跨平台C++库都没有获得广泛的支持;
 ●钟情于用C++语法(无论多么复杂和稀奇古怪)完成所有的任务,却丢掉了老祖宗C语言的看家法宝—— Little Language;
 ●对于风格争论不休,对于明显的技术进步拒不接受,对于很多后来被证明并不实用的技巧趋之若鹜。

    没有跨平台的基础库,就没有跨平台的动态模块加载机制;
    John Spencer夭折的书《The Art of C Programming》,GoF的Interpreter模式;Little Language实际上具有反映计算机本质的一些东西,现在却成了很少为C++程序员所采用和熟悉的工具。

 

2005年,C++的现实处境
 ●在系统编程领域仍然强势;
 ●套装软件主流开发语言之一;
 ● 嵌入式开发领域进展较快;
 ●游戏引擎开发主力;
 ●科学计算方面略有一席之地
 ●遗留项目的维护;
 ●在企业应用开发 领域快速收缩;
 ●Web开发中的影子语言;
 ●从高校主流教学中退潮;
 ●整体水平仍然不高,很多企业急于摆脱;
 ● 最致命的:真正了解和熟练掌握C++的人太少;

案例:1. 国外一家公司花高薪聘人,要么能维护目前百万行规模的代码,要么把它转成Java;
          2. IBM Workplace,项目一开始C++/Java并重,之后C++比重越来越小;
          3. 微软与中国电信合作一个项目,客户端软件本来要用C++写,后来赶到产品化周期太长,改用C#,后发先至。 


问题何在
 ●当前的软件产业发展的主要矛盾——各行各业对软件生产标准化、规模化、高质量要求 与慢节奏、低效率、低质量的软件开发之间的矛盾。
 ●解决这个矛盾的关键:组件化体系,成熟的软件生产工具和环境,不断的创新精神。
 ●C++ 在外部环境已经发生根本变化的近十年时间里,没有抓住这个主要矛盾。


重新评估我们的C++价值取向
    重新评估“高级C++”的现实含义:
        - 简洁有效优于惊世骇俗;
        - 开放灵活优于保守固执;
        - 帮助他人优于凸现自己;
        - 领域创新优于卖弄技巧;


六个建议
 ●学会与现实和谐共处;
 ●尽快面向不同领域建立跨平台构件标准;
 ● 支持各领域已经形成的基础库不断完善;
 ●支持相关工具厂商,迅速完善工具链;
 ●支持动态语言的发展;
 ●面向产业挑战创新发 展;

 

与现实和谐共处
 ●承认C++只适合这个世界的一部分工作,快乐地与其他语言共同协作;
 ●告 别妄自尊大和保守傲慢;
 ●尊重其他社群的专业能力和成绩;
 ●坦率承认C++在很多场合并非理想选择;
 ●在C++擅长的领域 保持锐意。


跨平台构件标准
 ●C++迈向未来的关键技术步骤;
 ●尽可能支持现有的成熟方案;
 ● 在不同尺度的平台上可能需要不同的标准;

 

支持成熟的基础库
 ●基 本组件:STL和Boost(部分)
 ●网络和系统编 程:ACE
 ●分布式计算:ICE
 ●GUI:Qt
 ●Windows:MFC/ATL /WTL
 ●科学计算:MTL

 

完善工具链
 ●C++用的GC;
 ●Code Review工具;
 ●内存错误排查工具;
 ●测试工具;
 ●MDA工具;
 ●文档工具;
 ●持续集成工具;
 ●运行录 像工具 。


支持动态语言
 ●动态语言是软件技术发展的一个重要方向,几年后会成为主流。
 ●目前 几个流行动态语言天生与C/C++具有亲缘关系;
 ●加强对动态语 言的友好性,是C++未来发展的一项重要任务;
 ●从这个角度来看待C++/CLI,我们应该持积极态度;
 ●Little Language问题;


迎接产业新挑战
 ●多核CPU带来根本性挑战,C++有责任挺身而 出,为其他语言铺平前进道路;
 ●安全性问题,C/C++实际上是给整个产业拖了后腿,对此我们应当充分关注,积极改进;
 ●将STL思 想精华发扬光大。

赞同那个Linus,孟岩,云风的关于 C vs C++ 的观点(原来发布在校内网的文章回复里)  孟岩和云风的话说得更加中肯,用C++有比较重的思想包袱,这个我有体会,一点也不假。比如我用OpenCV库(Intel的,做人脸识别的),做了一个C++ Wrapper,其结果是,我80%的时间都花在了如何管理内存的上。比如 operator * 运算符,你得返回一个包含运算结果的矩阵,但是这个矩阵应该存放在哪?1. 栈。坏主意,当 operator * 返回时,你存储的东西已经指向了不可 阅读详情

相关推荐

点云图的学习

一。点云地图拼接 1.1 配置运行环境 首先配置安装opencv3,安装完成后如下图: 然后配置点云图工具pcl,直接使用apt即可安装,安装后如下图: 最后使用点云工具观察点云图: 1.2 原理解析 总的来说由多角度拍摄图片拼接为点云3D图,是通过相机的内参,将像素坐标转化为相机坐标,再通过外参将相机坐标转化为世界坐标系,然后将每张图片的像素绘制填充于同一个世界坐标系下面,形成点云3D图。...

ff_xun的博客 1万+

C++ 标准程序库--序言--孟岩

孟岩译序E 技术书辖市场,历来是春祉战圈。一般来说,同一个技术领域里且会杳那么盘本、十世本、甚至盘十本):Ë位相fl:(的书籍相互撒用竞争b 其中会有一些大师之作脱颗而出,面南背北,黄抱加身,通常还会杳后来者不断挑战,企固且跑到特色赢得自己的一片天地-比如说在算桂与盘据结构牺辑. D.E. Knuth 的那套E 四e Art afO呻uter p1咱阳四"的~>>一至三巷,当...

weixin_30337157的博客 263

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

一个“技术文化人”的片段感悟

<br />三 23一个“技术文化人”的片段感悟2003年我加入优快云,6年之后离开。在2003年之后,我的技术身份就很难界定了。曾经有个朋友称我为“技术文化人”——不以软件开发为生,但整天都在拿软件开发来说事,与这个行业的整体关系可能比任何一个具体的程序员或者架构师都更密切。听上去像是一种恭维,又好像是暗讽,似乎我是站在戏台下面带头起哄的票友。其实在我看来,我与一线技术人的根本区别,在于关注的问题不同:他们关心的如何做好软件,我关心的是如何做好软件人。更确切的说,我关心的问题是,对于一个普通的程序员来说

caozhihong_erp的专栏 948

Windows-Anaconda3+TensorFlow安装教程

测试环境:win10-64位和win7-64位 (系统必须是64位,因为TensorFlow目前只支持64位) 一、安装Anaconda3 1.下载Anaconda3 Anaconda官网链接:link 这里我们选择Windows版本,python3.6-version-64位,如下图所示。 2.下载完成之后,点击安装Anaconda3 注意:安装过程中要选择添加环境变量,如图 待安装完成...

DoctorCuiLab的博客 3086

材料仿真软件:LAMMPS_(8).温度和压力控制

在 LAMMPS 中,温度和压力的控制是通过多种恒温器和恒压器实现的。Nose-Hoover 恒温器和恒压器因其准确性和广泛适用性而被经常使用,而 Berendsen 恒温器和恒压器则因其计算效率高而适用于初步仿真或粗粒化模型。温度重标和压力重标方法虽然简单,但在某些情况下可以快速调整系统的温度和压力。通过选择合适的控制方法,可以根据具体的需求和系统特性来设计和运行分子动力学仿真,从而获得准确和可靠的结果。在实际应用中,建议先进行初步的仿真以确定合适的控制参数,然后再进行细致的仿真以验证结果的稳定性。

kkchenjj的博客 1694

孟岩的c++ 的学习方法,这何尝有不是做人做事的方法呢?

“(孟岩)我主张,在具备基础之后,学习任何新东西,都要抓住主线,突出重点。对 于关键理论的学习,要集中精力,速战速决。而旁枝末节和非本质性的知识内容,完全可 以留给实践去零敲碎打。 “原因是这样的,任何一个高级的知识内容,其中都只有一小部分是有思想创新、有重 大影响的,而其它很多东西都是琐碎的、非本质的。因此,集中学习时必须把握住真正重 要那部分,把其它东西留给实践。对于重点知识,只有集中学习其理...

weixin_34109408的博客 281

逆向分析-SeparationPreview.aip-分色预览-结构分析(一)-x64dbg条件日志打印-命令表达式-PS脚本

从功能上分析,仅显示使用的专色这个功能,并没有触发插件接口。使用X64dbg加载illustrator进程,切换到句柄窗口,在窗口过程中,右键刷新获取界面。在x64dbg中,在UI中可以输入一些条件表达式,能够计算出对应的值,并打印在日志中。常用的,如果非暂停,输出第一个参数。参数二是utf16的指针,utf16@字符串地址,这里的字符串地址为[[ebp-108]]参数一是utf8的,utf8@字符串地址,这里的字符串地址为[ebp-28]从界面上分析,一个颜色列表,及仅显示专色的多选框组成。

插件开发 645

什么是高级C++?

什么是高级C++? ——软件工业化时代的C++价值观 孟岩 《程序员》杂志社 开门见山 主要论点:     1. C++本质上是一种重“创新”而轻“生产”的语言,到目前为止仍然是主流语言中最适合技术创新的一个;     2. 1995年之前,整个软件产业处于“创新为王”的阶段,C++是最适合这个阶段的语言,这是C++红极一时的大背景和根本原因。     3. 199

YYC的专栏 952

【WRF安装】WRF环境配置移植详细说明

【WRF安装】WRF环境配置移植详细说明

WW、forever的博客 819

【电机应用控制】——直流有刷电机&驱动板/编码器介绍&PID算法&实操代码思路

声明:学习笔记来自正点原子B站教程,仅供学习交流!!玩具车、平衡车、无人机、印刷机、打印机、手机振动马达等电机即电动机(motor),也叫作马达,电能转化为机械能。按电源:直流、交流按用途:驱动用、控制用按运转速度:高速、低速、恒速、调速直流电机(有刷、无刷)、舵机、步进电机、伺服电机1、直流有刷电机(Brushed DC Motor,简称BDC)是内含电刷装置的将直流电能转化为机械能的电动机。例如四驱赛车四个马达操控方便、成本低、维护时换电刷即可;

weixin_51658186的博客 2万+

孟岩——什么是高级C++,软件工业化时代的C++价值观

什么是高级C++? ——软件工业化时代的C++价值观 孟岩 《程序员》杂志社 开门见山 主要论点:     1. C++本质上是一种重“创新”而轻“生产”的语言,到目前为止仍然是主流语言中最适合技术创新的一个;     2. 1995年之前,整个软件产业处于“创新为王”的阶段,C++是最适合这个阶段的语言,这是C++红极一时的大背景和根本原因。     3. 1995年发生了一

Maddock的专栏 1156

双馈风机并网系统宽频振荡机理与抑制方法研究

双馈风机并网系统宽频振荡分析与抑制 摘要:本文研究了双馈风机(DFIG)接入弱电网引发的宽频振荡问题。通过建立DFIG并网系统阻抗模型,分析了锁相环带宽、电流环带宽等参数对阻抗特性的影响。研究揭示了DFIG与电网阻抗交互导致交截频率处相位差超过180°的振荡机理。提出基于锁相环优化的阻抗重塑抑制策略,采用电压补偿和陷波器改善系统稳定性。仿真结果表明,该方法能有效降低相位差约10°-168°,显著抑制宽频振荡。代码实现了阻抗建模、稳定性分析和抑制策略验证,为工程应用提供了理论依据。

huanghm88的专栏 319

转载:什么是高级C++?

什么是高级C++? ——软件工业化时代的C++价值观 孟岩 《程序员》杂志社 开门见山 主要论点: 1. C++本质上是...

weixin_30398227的博客 95

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++,而今迈步从头越--第二书店书友会C++爱好者座谈

  主持人: 孟岩:网名myan,优快云著名专栏作家。《C++标准程序库—自修教程与参考手册》,《Design by Contract原则与实践》译者 嘉宾:    陈硕:北京师范大学研究生,全国电子设计大赛一等奖获得者,《C# Primer》译者。 曾毅:微软.NET全球最有价值技术专家,《程序员》杂志社特约编辑。《Visual Studio Magazine2002-2003中文精华合辑

1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

什么是高级C++

<br />整理资料时,发现了《什么是高级C++》这个ppt。这是一个C++发展方向的介绍,个人觉得很不错,把内容贴了出来,同是也可以点击下载 。<br /><br />什么是高级C++?<br />——软件工业化时代的C++价值观<br /> 孟岩<br /> 《程序员》杂志社<br /><br />开门见山<br />主要论点:<br />     1. C++本质上是一种重“创新”而轻“生产”的语言,到目前为止仍然是主流语言中最适合技术创新的一个;<br />     2. 1995年之前,

liziyun537的专栏 494

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

如何学习使用C++一个实用主义者的观点

 <br />最近CoolShell连续发了两篇文字,《如何学习C语言》以及《如何学习C++》。我在twitter发了一些牢骚,因为我也曾经写过一篇《漫谈C语言及如何学习C语言》http://sunxiunan.com/?p=1661 ,文字写的还算用心,可惜反响不是很热烈。<br />最近C++社区最大的新闻,毫无疑问就是最新标准终于Final Draft了,C++2011终于有望实现。<br />可是,谁会关心呢?<br /><br /><br />国内C++译作圈比较出名的就这几个人,刘未鹏PongB

zhuqing_739的专栏 945

一个实用主义者的观点:如何学习使用C++

最近C++社区最大的新闻,毫无疑问就是最新标准终于Final Draft了,C++2011终于有望实现。可是,谁会关心呢? AD:2013大数据全球技术峰会课程PPT下载 国内C++译作圈比较出名的就这几个人,刘未鹏PongBa,自从进入微软以后好像更加关注心智方面的研究,关于C++的文字几乎就没了。孟岩 http://blog.youkuaiyun.com/m...

897371388 88

C++之父Bjarne Stroustrup大会

http://www.zhucheng.biz/seminar/default.aspx 11月19日 会场 活动内容 讲师 09:20 - 09:50 主会场 入场签到 10:00 - 12:00 主会场 Direction for C++0x Bjarne Stroustrup 13:40 - 15:10 主会场 面向目标...

weixin_30343157的博客 137
上一篇: C语言基础
下一篇: 定时关机
BlueSy2008
博客等级 码龄20年 26粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值