C++之父Bjarne Stroustrup: 简单的表述方式才是最优的方案(图灵访谈)

C++创始人Bjarne Stroustrup简介 他在20世纪80年代早期开发了C++,并在之后的几十年中对其进行了不断发展和推进。Bjarne StroustrupC++的设计和发展做出了巨大贡献,并通过不断改进语言的标准,使其成为一个广泛使用的编程语言。总结起来,Bjarne StroustrupC++编程语言的创始人,他的工作对于现代软件开发和计算机科学领域具有重要意义。C++编程语言最初是作为C语言的扩展而诞生的,旨在提供更多的抽象和更强大的编程工具。它结合了面向过程编程和面向对象编程的特性,并引入了许多新的概念,如类、继承、多态和模板。 阅读详情

2016年的最后一天,图灵访谈给各位小伙伴儿献上特大彩蛋!借用Bjarne大师的话“趁你还足够年轻的时候,喜欢上某些学科,选择具有挑战性和感兴趣的工作并养成良好的习惯!”,预祝你们在2017年找到新的方向!

访谈嘉宾:

Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)

1982年,贝尔实验室(美国AT&T公司)的Bjarne Stroustrup博士在c语言的基础上引入并扩充了面向对象的概念,发明了新的程序语言C++。之所以被命名为C++,是为了表达该语言与c语言的渊源关系。Bjarne Stroustrup博士因此被尊称为“C++语言之父”。

之后,面向对象的编程思想开始席卷整个开发领域,标准模板库(STL)和微软的VC++平台推波助澜,C++开始流行起来。可以说,C++对整个软件开发及IT业的贡献,不言而喻。

C++仍在它擅长的领域发挥着不可或缺的作用。作为C++之父,Bjarne Stroustrup也一直致力于C++标准的改进和推广,其著作《C++编程语言》《C++的设计和演化》和《C++加注参考手册》等已成为C++学习的经典读物。

这里写图片描述

访谈内容:

英文版

除了作为编程技术大师为人熟知以外,Bjarne还有很多至理名言被大家广泛引用。在观看之前的访谈时,我也被您发人深思和辩证的思维所折服。如何做到将自然语言和编程语言运用如此得体的高度呢?

我想要直接而简洁地表达观点,虽然并不总能成功,但这值得一试。记住,当你写代码的时候,并不仅仅是给编译器看的。相反,代码的“消费者”包括所有阅读和维护代码的人。如果你的代码丑陋不堪、难以理解,它将无法运行甚至造成巨大的维护问题。因此,无论是代码还是“普通文本”,其目的都是清晰地表达观点,帮助其他人理解这些想法。写作是一种缕清思路的方法——对自己和他人来讲,都是。

我记得,您曾经讨论过人们对C++的误解(要理解C++,首先要学习C语言;C++是一种面向对象的语言;可靠的软件需要垃圾回收机制;为了提高效率,必须编写低级代码;C++只适合大型复杂的程序)现在,他们的偏见有所改观吗?

一些人了解了,还有很多人没有。这些谬见普遍充斥于网络上、文章和教科书里,通常被理所当然地接受——即便没有证据支撑仍然被当作事实陈述。所以,很难进行反驳。相信这些谬见的人并不认为自己对C++持有偏见,他们认为自己是进步的,甚至因为这些观点变得优越。

我想借此机会,鼓励大家花点儿时间(重新)审视下自己的观点,同时简单陈述下我自己的一些观点。如果想从技术角度了解详细的论证过程,请参考我的相关论文和书籍。

要理解C++,必须首先学习C语言。不是的,如果你本身已经是一名程序员了,完全可以直接进入类设计和使用各种库。如果你刚开始接触某种语言,能够处理低级的编程问题,可以依赖C++的强类型检查和各种库更容易、更快速地掌握基础知识。编程新手在使用低级工具(诸如指针、数组、malloc()或free()、cast、宏)的时候,总是会遇到麻烦,没有理由让他们遭受这些问题及复杂性。复制或比较C语言里的字符串对于编程新手来说是痛苦、单调乏味的。

当然了,不了解指针、数组、自由存储管理(动态内存管理、堆)等方面的知识,就不能在C++上有所建树,但可以之后再学习,等掌握了编程常识和C++基础以后再学习。基于这样的想法,我为大学新生(一年级学生)设计了一套课程并编写了相应的课本:http://www.stroustrup.com/programming.html 。效果很好。

C++是一种面向对象的语言。不是的,对于大多数包含继承性的传统意义上的OO来说,不是这样的。C++确实支持面向对象编程技术,也相当优秀,但这并不是C++的全部。现代C++,包括大部分的ISO C++标准库,更多地不再遵循这种模式。C++开始使用简单的具体类型和独立函数,并且仅在应用程序域采用分层架构、需要运行时调用的时候才使用运行时多态性。大多数受欢迎的C++应用程序使用了很多技术,并不仅仅是传统的面向对象技术,有时候甚至根本没有采用面向对象技术。

可靠的软件需要垃圾回收机制。不是的,GC有时会阻碍可靠性的达成。GC并不能消除所有的内存泄漏,不能解决非内存资源的管理问题。泄漏套接字、文件句柄、线程和锁,可能比内存泄漏更容易让系统停止。支持可靠性的最好办法是,找到应对资源管理和错误处理的方法,比如C++提供的RAII (Resource Aquisition Is Initialization, 资源获取即初始化)。我目前正在研究这种方法,为资源安全和类型安全的C++提供一套全面的系统:Http://www.stroustrup.com/resource-model.pdf 。核心观点是保证没有泄漏,使垃圾收集器没有必要存在。在不影响程序员用代码简单、直接地表达想法的前提下,保证没有泄漏确实很难,但不是没有可能。

为了提高效率,必须编写低级代码。不是的,现代C++十分擅长低级优化和不同抽象层次间的优化,多少数量的代码都无法跟这种能力相比,特别是现代架构具有深度缓存层次结构和配有大幅度指令调序的优化器的情况下。从更高的层面说,人类无法通过直接使用线程和锁,得到最优化的结果,所以我们需要更高级的模型和算法,获得正确性、可靠性、可预测性和原始性能。当关于机器、数据或算法的一些观点被证明是毫无根据的时候,摆弄bit、byte和指针这些基础会变得可悲。举个列子,看一下我和别人合著的这篇文章(http://www.stroustrup.com/improving_garcia_stroustrup_2015.pdf .)。文章通过去掉精心设计的优化,提高了spec-mark程序的性能。最后生成的程序变得更精简、更清洁、易于维护、可扩展,而且没有副作用。关于零开销抽象(zero-headed abstraction)的问题,我已经谈了很多。最近,我还看到了很多负开销抽象(negative-headed abstraction)的示例:通过简化适当的抽象获得最优化程序。

C++只适合大型复杂的程序。不是的,除非你认为一两页代码的量就算是大型、复杂的项目。要知道,任何有影响的程序都需要用到一个或更多个库。这适用于每一种语言。不用任何库,单凭光秃秃的语言,对于编程人员来讲是痛苦的也是徒劳的。

在讨论C++或是(更糟地)下定结论时,随随便便地坚持某种谬见,不加思考,只能说明懒惰。之前,我也写了一篇澄清这些谬见的文章:www.stroustrup.com/Myths-final.pdf 。

**C++并非静止不前的。标准委员会很快就将宣布C++17的新增特征。您认为哪些特征是值得期待的?** C++17新增了很多小的改进,对于每一个程序员来说都值得期待,但不要指望特别重大或是颠覆性的改进出现。预计在2017标准发布后,这些新增特征随即可以在所有主要的编译器里应用。事实上,大多数C++17的特征已经能用了。 新增特征不一定对所有人有帮助,大多是为了特定群体的需要而完善C++或是标准库的。你可以在搜索引擎里输入C++17找到新增特征的详细列表,不过,我会在这里简要谈几点我所喜欢的特征: 1. 结构化绑定:使用C++17,我们可以打破结构,为结构成员命名。例如:


     map<int,string>mymap;  
     //...  
     auto[iter,success]=mymap.insert(value);  
     if (success)f(*iter);  

对于map<int,string>insert()返回pair<mymap<int,string>::iterator,bool>,现在我们可以命名两个返回值并直接使用,而不用创建一个pair对象,再访问它的成员。

对于循环控制,这一点特别有用:

 for(const auto&[key,value]:mymap)  
      cout<<key<<”->”<<value<<’\n’;

我们用std::variant 让union的显式使用变得冗余。现在,我们可以


     variant<int,double>v;       //可以是int或是double  
     v=12;  
     auto i=get<int>(v);         //i 变成了12  
     auto d=get<double>(v);      //会抛出bad_variant_access异常

2.对于之前没有定义求值顺序的情况,现在,多数情况下是可以定义的。例如

count<<f(x)<<””<<g(y)<<’\n’;

可以保证输出g(y)的值之前先输出f(x)的值。在C++17之前,f(x)g(y)是可以交错的,这容易产生bug和混乱。

3.到2020年,我们将看到进行了重大改进的C++20。例如,

  • 概念——显著简化、更好指定的泛型编程
  • 模块——更好的模块化、更快的编译
  • 协程——更加简单、快速的生成器和pipeline
  • ——简单、更快、更灵活的网络
  • 新版STL——更快、更简单、更灵活的算法和range

这并不是科幻小说里的幻想,很多特征已经开始在某些领域应用了。问题是,ISO C++标准委员会能否通过。

是否可以用某个新增的特征为例,向我们展示一下该特征是如何符合C++的演化原则(直接硬件访问;零开销抽象;静态类型)的?

提高硬件访问能力和低级代码的性能,是一项需要付出长期努力的任务。有些努力是看得见的,有些不容易看得到。

  • 我们一直在努力提高编译时的计算能力,constexpr是这方面的典范。使用constexpr,我们可以指定一个函数在编译时取值,如果用常量表达式作为参数的话。同样,我们也可以确保编译时就完成某项计算工作。

     constexpr int isqrt(int n)     //对于常量参数,能在编译时求值 
     {  
         int i=1;  
         while(i*i<n) ++i;  
         return i-(i*i!=n);  
     }  
     constexpr int s1=isqrt(9);    //s1是3  
     int x;                        //不是常量  
     //…  
     constexpr int s2=isqrt(x);    //编译时,出错  
     count<<weekday{jun/21/2016}<<’\n’; //星期二  
     static_assert(weekday{jun/21/2016}==tue);  

Constexpr配合使用const可以有效地提高性能,减少代码大小,并有可能把数据直接嵌入代码段中,或存储在 ROM 中。因为“你不能对常量创造某个竞争状态”,所以有助于并发系统。

  • 另一个不太明显的例子是,C++17确保多数情况下的复制省略。它让我们可以从函数中方便地得到值。例如

     T compute(S a)
     {
         return complicated_computation_yielding_a_T(a);
     }
     T t=compute(s);

这里没有副本!能让我们从指针和动态内存中解脱出来,因为在现代的硬件访问中,间接和动态内存越来越昂贵(相对地)。如果和之前讲到的结构化绑定结合使用,会更有趣

     pair<T,T2>compute(S a,S2 b)
     {
         return{ comp1(a,b),comp2(a,b) };
     }

     auto[foo,bar]=compute(s,s2);

同样,这里不需要复制。

在过去的二十年里,模板一直被认为是零开销抽象的,得到了迅猛的发展。它被广泛复制于其它的编程语言中,但通常并不灵活,也不如C++模板运行时的效率。但是,模板基本上会提供编译时的duck typing,而不是基于检查接口的程序;它们会在之后的实例化阶段进行类型检查。因此,模板的迅猛发展导致了相当复杂的编程技术问题。我们需要让泛型代码更接近于非泛型代码,更容易编写,更易于编译器检查同时不影响或限制表达性。

Constexpr 函数的功能包括:不再需要模板就可以得到编译时计算的值。如果你只需要某个类型的值,函数就能很好地表达。使用constexpr,编译时函数就能像其它函数一样,类型检查也能像其它函数的一样(不同于宏技巧或是传统模板的元编程)。

“概念”是支持模板接口规范的语言特征。遗憾的是,它没能成为C++17的新增特征,但作为ISO 技术规范已经应用于GCC6.2了。概念可以解决模板的很多问题。考虑一下标准库函数advance()的简化版,它允许迭代器向前移动n个元素。假如我们需要两个版本,一个用于列表之类的东西,每次移动一个元素、操作n次;一个可以直接移动n个元素:

     template<Input_iterator Iter>
     void advance(Iter p,int n){while (n--)++p;}

     template<Random_access_iterator Iter>
     void advance(Iter p,int n){p+=n;}

也就是说,如果参数是一个随机访问的迭代器,使用第二种快速的版本;否则,使用第一个慢版本。

     void(vector<int>::iterator pv, list<string>::iterator pl)
     {
         advance(pv,17);          //fast
         advance(pl,17);          //slow
     }

这是优化后的快速方案,我用短短几分钟就能向新手解释清楚。它跟“传统模板编程”不同,在编写方式和检查方式上都不同。如果愿意,我甚至可以进一步简化advance的定义:

 void advance(Input_iterator p, int n){while(n--)++p;}
 void advance(Random_access_iterator p, int n){p+=n;}

这完全符合我们谈论代码的方式,任何一个新手也会相当合理地这样认为。

最近,我写了一篇文章(www.stroustrup.com/good_concepts.pdf)详细解释了concept的观点。

某种程度上讲,C++对专家更友好,只有少数的专业人士才能很好地掌握C++。如何减少初学者的困难呢?

“只有少数的专业人士能够很好地掌握C++”夸大了C++的难度,因为确实有数以百万的程序员用C++编写出了优秀的系统。但坦白说,很多C++代码并不符合专业质量的要求,我们还能做得更好。

C++让编程专家很容易编写出复杂、高性能、低资源消耗的代码,但不足以成为广大普通程序员喜爱的语言,它需要简化。

我努力说服ISO C++标准委员会的专家还有许多的编程教师,说明我们需要不断的努力,开发和讲授更简单的方式,不能仅仅专注于最优化和最聪明的技巧。通常情况下,简单的表述方式才是最优化的方案,“聪明”的技巧对于读者、维护人员、优化器来说可能是一种负担。在谈论用代码表达思想的时候,我大多会用“聪明”表示“太复杂”。最好把聪明用在分析问题和找寻根本办法上。

“用简单的方案解决简单的事情。”之前,C++98 标准模板库采用for语句来控制循环执行:

 for(vector<int>::iterator p=v.begin();v!=v.end();++p)
     cout<<*p<<’\n’;

在C++11中,我们使用range-for-statement :

 for(auto x:v)
     cout<<x<<’\n’;

意思是“输出 v 中的所有成员 x”。auto表示“让 x 具有初始化器的类型,在这里,也就是 v 的元素类型”。

语言特征和标准库中的组件并不能很好地处理复杂性问题。所以,我开始制定一些指导准则,帮助大家更好地使用C++。我的这一做法也得到了其他人的支持,目前我们正在一起开发名为“C++核心准则”的项目,以及工具支持的相关问题。你可以到麻省理工开源项目下找到相关准则:https://github.com/isocpp/CppCoreGuidelines 。指导准则试图帮助程序员识别那些次优、容易出错的表达方式,最终编写出可读性强、易于维护、简单高效、类型安全和资源安全的代码(http://www.stroustrup.com/resource-model.pdf)。这并不是狂妄的想法!

这并不仅仅是为编程专家设计的。无论是专家还是初学者,都应该了解运用工具支持检测问题的观点。工具支持的早期版本可以在Visual Studio,Clang tidy和其他地方找到。

事实上,我们制定的指导准则已经受到了很多中高级编程人员的欢迎,他们把指导准则当作阅读材料,学习如何更加高效地使用C++11和C++14。每一个准则都有基本原理的支持,同时提供了正反面的代码示例。

Guidelines Support Library的未来发展规划是怎样的?未来是否会像标准模板库一样,由主要的编译器支持或是提供?

核心准则的目的是提供一种进一步利用C++的方式,可以用来回答“未来5年代码是什么样”的问题。利用C++11和C++14已经能够很好地编写代码了,但程序员个体忙于业务,没有时间来评价新的工具,所以指导准则和工具支持就显得很有必要。

具体的支持有两种形式:

  • 弥补ISO 标准库不足的GSL
  • 帮助执行准则、提供准确性保证的静态分析工具

GSL很小(也就十几种类型和函数),主要目的在于避免程序员直接使用C++当中最棘手、最不安全的部分。比如,C++里有一种not_null 类型确保指针不是nullptr,和span类型把(pointer, size) pair传递给函数。

关于GSL在GCC、Clang和微软的实现,可以参见GitHub上麻省理工学院下的开源项目:https://github.com/Microsoft/GSL 。考虑到兼容问题,我们正在努力实现GSL的标准样式规范。

核心指导准则是ISO标准委员会部分成员和其他外部人士共同执行的项目,它不是标准委员的工作。虽然我们已经向标准大会申请并希望某些GSL进入标准库,但现在它们还是各自独立的。

相比较其他程序员,高技能的程序员具有哪些品质?接触编程学习较早,更加刻苦努力……

保持好奇心,愿意终身学习下去;面对困难时,坚持不妥协;不止在编程方面,设计和电脑方面的基础知识也必须坚实;乐于和系统用户进行有效的沟通。

编程学习没有“最佳年龄”或“最晚年龄”之说。如果你没有在10岁、20岁或是30岁的时候开始接触编程,这并不会影响你成为伟大编程大师的可能。我20岁才开始编程!重要的不仅是成为一名编程人员,你还要对自己设计的程序有感觉,你要了解相关学科、领域的知识经验。我认识的一些优秀编程人员并不是计算机科学专业出身的:有学习数学的、工程的、历史的、化学的、生物的,甚至还有哲学的。我认为,真正重要的是,趁你还很年轻的时候,能够喜欢上某些学科,选择具有挑战性和感兴趣的工作并养成良好的习惯。

我并不认为一味地刻苦努力,所有成绩拿A就是正确的方法。许多优秀的程序员是非常全面的人才,遗憾的是,并不是所有的。

面对那些坚持“我不想知道如何弹钢琴,只想知道如何像霍洛维茨一样演奏”,急于寻求成功秘方的人,您的建议是?

霍洛维茨一生都在练习钢琴演奏;如果你也想成为编程界的霍洛维茨,就要决心用一辈子的时间去练习和学习。记住,“台上一分钟,台下十年功。”霍洛维茨第一次公开演出之前,花了很多年的时间来练习。应该有15年的时间都在练习。

要成为一名优秀的编程人员,你不需要是世界级的天才,也不用15年的编程学习,就可以开发出实际的应用程序。但我建议你,在把自己的编程成果展示给别人看之前,需要花时间认真地学习和练习编程。

我确信,霍洛维茨是从手指练习开始的,选择专门为初学者编写或是简单的曲目练习。他没有一开始就选择李斯特的《匈牙利狂想曲》,没有人上来就选择最难的曲目。我猜想,很少有人在缺乏坚实基础知识的情况下能达到高水平的成就。可以奔跑,但要在学会中低水平的技能(走路)之后。


更多精彩,加入图灵访谈微信!

这里写图片描述

C++语言之父 Bjarne Stroustrup 简介 图BS先生在他的办公室,这是他的个人网站上的相片 许多重要人物之所以成名,或者是因为其改变了历史或者是因为其创造了历史,Bjarne Stroustup先生,C++之父,属于后者;归结个人成功的原因,理由可能有多种,但他只有浅显的两个一点点:他比多数人天真和理想主义那么一点点;比多数人花在解决问题上的时间多一点点。 BS先生,1950年生于丹麦港口城市奥尔胡斯市,1975年在奥尔胡斯大学毕业,1... 阅读详情

相关推荐

大模型的实践应用31-基于通义千问大模型改进台风和海浪预测研究,利用机器学习与通义千问结合的思路实现对台风和海浪预测分析

通义千问大模型是阿里巴巴云推出的一款大规模语言模型,旨在通过强大的自然语言处理能力提供更广泛的服务。从最初的构想到如今的广泛应用,通义千问的发展见证了人工智能领域尤其是自然语言处理技术的巨大进步。自发布以来,通义千问不断迭代升级,不仅在规模上实现了飞跃式的增长,在性能方面也得到了显著提升。本次研究尝试将通义千问强大的自然语言处理能力与经典的时间序列预测算法相结合,旨在提高对未来天气状况预测的精度。具体来说,首先使用通义千问生成高质量的文字描述来增强特征表达力;

微学AI的博客 890

C++之父Bjarne Stroustrup:程序员在数学上付出的努力,永远也不会白费

1979年诞生的C++已迈入“不惑之年”,如今却依旧在主流编程语言中占据重要一席。

《程序员》官方BLOG 2万+

全新YOLOv11一文弄懂 | YOLOv11网络结构解读 、yolov11.yaml配置文件详细解读与说明、模型训练参数详细解析 | 通俗易懂!入门必看系列!

本文全面介绍了YOLOv11目标检测算法,包含网络结构解析、yaml配置文件详解及训练教程。YOLOv11通过改进的C3k2f模块、SPPF和C2PSA注意力机制等创新设计,在COCO数据集上实现了比YOLOv8更优的性能。文章详细解读了yolov11.yaml配置文件的参数设置、主干网络(backbone)和头部网络(head)结构,并提供了完整的训练代码示例和参数说明。训练部分涵盖了模型选择、参数设置及优化技巧,包括epochs、batch size、学习率等关键参数的调整建议。最后总结了YOLOv11

Ai缝合怪、助力小伙伴高效发论文 3万+

【人物传记】C++之父-比雅尼·斯特劳斯特鲁普

与许多沉浸在理论世界的计算机科学家不同,斯特劳斯特鲁普是一个“工程师中的思想者”。他的战场在编译器的前端,在标准委员会的会议室,在堆积如山的缺陷报告和提案里。他不仅创造了一种语言,更定义了一种语言演进的模式——在数十年的漫长时间里,在无数开发者的期待与抱怨中,小心翼翼地掌舵,既不沉没,也不偏航。今天,C++仍然是全球最受欢迎的编程语言之一,支撑着操作系统、游戏引擎、数据库、高频交易系统、自动驾驶、航天器等关键领域的核心代码。

不问归期的博客 716

C++之父-Bjarne Stroustrup

C++之父-Bjarne StroustrupALNG Bjarne Stroustrup博士,C++语言的设计者和最初实现者,现任AT&T实验室的大型程序设计研究部的主管。1950年出生于丹麦,先后毕业于丹麦阿鲁斯大学和英国剑桥大学,at&t大规模程序设计研究部门负责人,at&t 贝尔实验室和acm成员。1979年,stroustrup开始开发一种语言,当时称为"c with class",后来

移动互联网改变生活,高效配对交易创造财富 3639

C++ 之父 Bjarne Stroustrup : 简单表述方式才最优方案

2016 年的最后一天,图灵访谈给各位小伙伴儿献上特大彩蛋!借用 Bjarne 大师的话“趁你还足够年轻的时候,喜欢上某些学科,选择具有挑战性和感兴趣的工作并养成良好的习惯!”,预祝你们在 2017 年找到新的方向! Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 1982 年,贝尔实验室(美国 AT&T 公司)的 Bjarne Stroustrup 博士在 C 语言的基础...

Harrytsz的博客 1338

[英文版]C++之父Bjarne Stroustrup: 简单表述方式才最优方案

本文仅用于学习和交流的目的,不得用于商业转载。非商业转载请注明作译者、出处,并保留本文的原始链接:http://www.ituring.com.cn/Article/273874 2016年的最后一天,图灵访谈给各位小伙伴儿献上特大彩蛋!借用Bjarne大师的话“趁你还年轻的时候,能够喜欢上某些学科,选择具有挑战性和感兴趣的工作并养成良好的习惯!”,预祝你们在2017年找到新的方向! Gue...

TuringInterview的博客 1311

GAMES 图形学系列笔记(十一)

作业详解:明确了第一次作业的目标——实现 glTF 模型的骨骼动画、PBR 材质渲染,并通过额外通道实现色调映射。对象创建:学习了 Vulkan 创建 Buffer、Image、Pipeline 等核心对象的通用模式和具体步骤。流程定义:理解了 Render Pass 和 Framebuffer 如何定义渲染目标和流程。内存管理:探讨了 Vulkan 复杂的内存类型系统,并介绍了使用 VMA 库和 Staging Buffer 策略来简化管理并提升数据上传效率。命令记录。

龙哥盟 42

本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)的主页

最近在看《C++ primer plus》,里面有讲到Bjarne Stroustrup的主页,但是可能是因为年代过于久远(15年买的书),链接已经挂了(http://www.research.att.com/-bs/)。还是想要了解相关的趣味知识,于是在网上查找了很久才找到新的主页,即https://www.stroustrup.com/

qq_45038079的博客 1150

C++ 之父 Bjarne Stroustrup简单表述方式才最优方案

本文仅用于学习和交流目的,不得用于商业目的。非商业转载请注明作译者、出处,并保留本文的原始链接:http://www.ituring.com.cn/art... 访谈嘉宾 Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 1982年,贝尔实验室(美国AT&T公司)的Bjarne Stroustrup博士在c语言的基础...

weixin_34233856的博客 682

C++三部曲|C++编程核心思想

| 导语 C++ 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一,C++发明人Bjarne Stroustrup 一开始没想到 C++ 会获得如此大的成功,他说:“C++ 的成功显然令人惊讶。我认为它的成功取决于其最初的设计目标,就是高效硬件使用,再加上强大的抽象机制,以及它根据来自实际使用情况的反馈进行谨慎的发展”。C++编程语言走到今天已经有将近40年的历史了,但它依然是...

极客重生 1398

C++ 之父 2024 年末重磅演讲 | 重新认识 C++:跨世纪的现代演进

作者 | 《新程序员》编辑部出品 | CSDN(ID:CSDNnews)12 月 5 日,美国国家工程院、ACM、IEEE 院士、C++ 之父 Bjarne Stroustrup 在「2024 全球 C++ 及系统软件技术大会」上发表了题为《重新认识 C++:跨世纪的现代演进》的演讲。屏幕上,演示文稿的第一页就令人印象深刻:“C++ 几乎可以实现我们所期望的一切!”从构建操作系统到开发高性能游戏引...

AI科技大本营 668

本贾尼-斯特劳斯特卢普(Bjarne Stroustrup)1950年出生于丹麦

本贾尼-斯特劳斯特卢普(Bjarne Stroustrup)1950年出生于丹麦,先后毕业于丹麦阿鲁斯大学和英国剑桥大学。在完成学业后,斯特劳斯特卢普曾任AT&T大规模程序设计研究部门负责人,AT&T、贝尔实验室和ACM成员,现任德州农工大学计算机系首席教授。 说起斯特劳斯特卢普,我们不得不提的就是他在1979年开发出的一种在当时被称为“C with Classes”的计算机编程语言,而这一语言

u014798392的专栏 1665

Bjarne Stroustrup的FAQ:C++的风格与技巧

Bjarne Stroustrup的FAQ:C++的风格与技巧翻译:左轻侯(译注:本文的翻译相当艰苦。Bjarne Stroustrup不愧是创立C++语言的一代大师,不但思想博大精深,而且在遣词造句上,也非常精微深奥。有很多地方,译者反复斟酌,都不能取得理想的效果,只能尽力而为。Html格式的文档见译者主页:http://www.wushuang.net如果你对这个翻译稿有任何意见和建议,请

qinghou的专栏 3042

C++之父 Bjarne Stroustrup

人物简介      Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)博士,1950年出生于丹麦,先后毕业于丹麦阿鲁斯大学和英国剑桥大学,AT&T大规模程序设计研究部门负责人,AT&T、贝尔实验室和ACM成员。1979年,B. S开始开发一种语言,当

编程之路 3451

Bjarne Stroustrup 语录

 Bjarne Stroustrup 语录:一、致读者  1. 在编程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示。让程序的结构尽可能地直接反映这些思想:  ★.如果你能把“它”看成一个独立的概念,就把它做成一个类。  ★.如果你能把“它”看成一个独立的实体,就把它做成某个类的一个对象。  ★.如果两个类有共同的界面,将此界面做成一个抽象类。  ★.如果两个

prochsh的专栏 810

c++之父:Bjarne Stroustrup

ALNG Bjarne Stroustrup博士,C++语言的设计者和最初实现者,现任AT&T实验室的大型程序设计研究部的主管。著有《C++程序设计语言(1985年第1版,1991年第2版,1997年第3版,2000年特别版)、《The Annotated C++ Reference Manual》和《C++语言的设计与演化》。Bjarne于1950年生于丹麦美丽的港口城市奥尔胡斯市,在奥尔胡斯

sky的专栏 1638

C++ Primer Plus 知识的讲解

c++primer plus

zhyjhacker的博客 500

从丹麦的旧GIER到C++之父Bjarne Stroustrup ,未来属于理想者

Bjarne创造C++的初衷是为了实现高效使用硬件与强大抽象机制的结合。当时,他想用通信系统构建一个多计算机系统,这个通信系统可以是共享内存,也可以是网络。他需要编写底层接近硬件的代码,如内存管理器、进程调度程序和设备驱动程序,同时也需要软件分离组件以便它们以良好方式进行通信。而在当时,没有一种语言能够胜任这样的多计算机系统开发需求,于是他在C语言的基础上引入并扩充了面向对象的概念,发明了C++,这个结果是他付出众多时间与打磨的甘甜果实。

敖行客 Allthinker的博客 1505

基于STM32单片机的三相交流电的相序保护的设计.pdf

基于STM32单片机的三相交流电的相序保护的设计.pdf

上一篇: 《算法新解》作者刘新宇:我只是想打开那些黑盒子,告诉人们里面有什么。
下一篇: 程序媛冯怡:我想给大家展示一种可能性(图灵访谈)
TuringInterview
博客等级 码龄10年 9粉丝 5原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值