热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

C++之父Bjarne谈C++在2005年

C++之父Bjarne谈C++在2005年--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
现在我们仍然很难估计C++程序员的数量,但在2003年,IDC报告说有超过300万的全职C++程序员,这个数据还是比较可信的。虽然我不能够精确地计算,但是我所拥有的所有指标都显示,C++在经过前十年(1985-1994)的爆炸性增长之后,后十年(1995-2004)其使用人数一直在稳定地增长。我还没有经历过其增长停止的时期。我猜想,虽然面对竞争产品的有力宣传和肆无忌惮的促销活动,它仍然稳定增长的主要原因在于:在这个时期中C++语言保持着稳定性(stability)。在这些年头中,这种语言的实现有了很大的改善,其类库的数量、质量和复杂程度都有所增长,同时我们对如何使用C++的理解也进一步深入了。但是,1995年D&E中描述的这种语言我们现在仍然在使用。标准的C++拥有足够的特性,它能够适应十年中编程技术和应用程序的增长,其稳定性也允许它实现跟上潮流。

那么,这些C++程序员到底在做什么事情呢?他们在编写哪种类型的应用程序?他们使用了哪种编程风格?我不知道,谁也不会知道。同样,与C++程序员太多了以至于无法估算类似,不同的应用程序领域也太多了,某个人需要掌握的编程风格也太多了。有时候我们会听到别人说"C++应该这样使用"--这样的表述一般都是痴心妄想,它们来自于非常有限的经验。我们在与很多人一起玩"盲人与大象" 的游戏。有些人已经阅读了一百多万行代码,编写了成百上千行C++代码,读过C-vu、C/C++ Users Journal等杂志中的所有文章,读过所有优良的C++书籍和许多劣质的书籍,读过所有的与C++相关的论文,并在C++新闻组中"居住"了很多年。这种人很少,即使是这样,他们也只碰到了其表面。这种人一般都是最后发表简单概括的。实际上,我听到的最简洁和自信的概括(包括正面的和反面的)都来自于那些几乎没有C++经验的人--无知是福。

当我试图理解如何使用C++的时候,我首先考虑下面两个方面:

·应用领域

·程序员(设计师、软件产品公司等)的成熟度

编写实时(嵌入式)系统的程序员与编写专用的数据库业务程序的程序员所关心的内容是不同的,他们与编写高能物理(high-energy physics)应用程序的程序员所处的环境也完全不同。我发现听取新应用领域的程序员的想法并向他们学习是有好处的。

很难存在某种东西跨越所有应用领域都有意义。但是可以说某种东西(跨所有应用领域)是成熟的。从高层次的角度来看,理想的编程语言可以表达为:

1. 在代码中直接地表达概念

2. 在代码中直接地表达概念之间的关系

3. 在独立的代码中表达独立的概念

4. 自由地组合那些表达概念的代码,无论这种组合是否有意义

此处的"概念(concept)"与"想法(idea)"的意思大致相同,并且可以参考我们所命名的任何东西、在设计时出现在黑板上的任何东西、在我们的课本中描述的任何东西,等等。

我"测评"成熟度主要基于人们如何把这些想法应用到产品代码(也就是受现实条件约束的代码)中。如果某些人使用C++的原因主要是把它作为"更好的C",那么他们在(上述的四条中的)第一条就遇到了失败--他们就不能使用类、类层次和参数化(模板)来直接地表达想法以及想法之间的关系。如果某些人坚持把C++仅仅看作是一种面向对象的语言,那么他们在第三和第四条会遇到失败--他们会构造厚重的层次,通过一些不适合的依据把无关的概念绑定在一起,排除内建类型和简单类。

这意味着,即使语言不作进一步改变,也有很多方面有待改善。通过简单地使用自己计算机上已经安装的、作为ISO标准C++一部分的工具,大多数人就可以改善他们的编程效率、减少错误率、提高运行时性能。如果你没有试用过STL,那就试试吧。也许它不能严格地满足你的需求,但是它是标准的,并且演示了 "现代的C++"中的很多关键技术,你可以使用这些技术来解决问题。我曾经指出的教育的题现在更糟糕了:编程教育在很大的程度上无法跟上软件生产方面的变革。由于我最初编写D&E,我成为了一个专家,在一定程度上助长了这种倒退趋势。

那么这些C++程序员到底在做什么呢?这是你可以想到的:"普通的PC业务应用程序"、嵌入式系统、电子商务、游戏、科学计算、网络软件、操作系统、设备驱动程序、移动电话等等。在继续之前,我建议你看看我持续维护的一个小列表 http://www.research.att.com/~bs/applications.html。我个人特别喜欢"冒险和与众不同的"应用程序,它们拥有极端的性能和/或可靠性需求,例如JPL火星漫步者自动驱动系统、MAN B&W巨型船用柴油机引擎控制系统、高度分布式系统(例如多玩家游戏)的ICE下层构造。
推荐阅读
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
author-avatar
ccmmm
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有