和人类一样,编程语言也会经历生老病死。百年之后,C++还在吗?会是什么样子呢?
诞生于上世纪80年代的C++,正处在壮年,作为一门集面向过程、面向对象、函数式、泛型和元编程等多种编程范式的复杂编程语言,辉煌了30多年,在全球有约450万名左右的拥护者。
C++既融合了C语言的灵活性和可扩展性,也继承了Simula的移植性和继承性。从最初的C with class,经历了从C++98到C++20多次标准化改造,给人们留下了兼容、稳定、实用的印象。
所以,要回答这个问题,首先要看向C++之父Bjarne Stroustrup设计C++的初衷。
C++简史
C++编程语言的历史可以追溯到1979年,当时Bjarne Stroustrup正在做他的博士论文。Stroustrup使用的语言是Simula,这是一种主要为模拟设计的语言,也是支持面向对象编程范式的第一种语言。
令他意外的是:他开发的模拟器使大学大型计算机瘫痪了,甚至没有达到真实的模拟负载!尽管Simula语言对于大型软件开发非常有用,但运行起来太慢了。出于必要,他找到了一台小型实验计算机Cambridge CAP,并使用BCPL(C语言的祖先)为它重写了模拟器。但他知道,BCPL虽快得多,但它过于低级的特性,使其不适于大型软件的开发。
Stroustrup得出一个结论:不仅需要一种具有灵活和可扩展类型系统的语言,更需要一个在任何地方都能高效运行的系统。Simula的类、类层次结构和强静态类型检查是组织代码和管理复杂性的主要手段;而BCPL跨平台移植性很好。如果把这些特性结合起来,能不能得到自己想到的语言呢?
之后,他开始致力于开发“带有类的C语言(C with Classes)”,顾名思义,它是C语言的超集。他的目标是在C语言中加入面向对象的编程,C语言因为其可移植性而广受欢迎,而且不会牺牲速度或底层功能。除了C语言的所有特性之外,该语言还包括类、基本继承、内联、默认函数参数和强类型检查。
Stroustrup开发的第一个带有类的C编译器叫做Cfront,它是从一个叫做CPre的C编译器派生出来的,作用是将带有类的C语言转换为普通C语言的程序。值得注意的一点是,Cfront主要是用带有类的C语言编写的,这使得它成为一个自托管的编译器(可以编译自己的编译器)。Cfront后来在1993年被抛弃,因为很难将新特性集成到它里面。尽管如此,Cfront对未来编译器的实现和Unix操作系统产生了巨大的影响。
1983年,该语言的名称从带类的C正式更名C++。“++”是C语言中的一个递增变量的运算符。Stroustrup为C++加入了很多新的特性,其中包括虚函数、函数名和运算符重载、参考、常量、用户可控制的自由空间存储区控制、改良的类型检查,以及新的双斜线(//)单行注解风格。
C++的第一个商业版本在1985年发布,那时,C++还没有正式标准化,StruouStrut引用了《C++程序设计语言》来作为重要参考。直到1998年,C++标准委员会终于发布了C++的第一个国际标准ISO/IEC 14882:1998,也被称为C++ 98。
至此,一门集面向过程、面向对象、函数式、泛型和元编程等多种编程范式的复杂编程语言——C++正式成为当今主流程序设计语言中的一员,并且30多年来不断加入新特性、新功能,从C++98一路到如今的C++20,以其灵活和通用性,满足了千万程序员的开发需求。
30年沉淀——最复杂的语言
如果10分满分,我对C++的了解是7分。——Bjarne Stroustrup
有一个专属于C++的梗,即当你自称“精通C++”时,你一定还处于学习的愚昧之峰。
你是在愚昧之峰还是开悟之坡?
C++有着许多独立于其他语言的特性,但随着语言成熟度、兼容性以及稳定性而来的,是语言的复杂性。
从C++98开始,标准的制定对开发产生了很大的影响。C++标准库:流I/O程序库、标准模板库也包括在内。
2003年,委员会对其1998年标准报告的多个问题作出了回应,并相应地对其进行了修订。修改后的语言被命名为C++ 03。
2005年,C++标准委员会发布了一份技术报告(称为TR1),详细说明了他们计划添加到最新c++标准中的各种特性。这个新标准被非正式地称为c++ 0x,一些编译器开始为新特性添加实验性的支持。
2011年中期,新的c++标准(称为c++ 11)完成。Boost库项目对新标准产生了相当大的影响,其中一些新模块直接从相应的Boost库派生而来。一些新特性包括正则表达式支持、一个新的c++库、一个标准的线程库、一个新的循环语法(提供功能类似于某些其他语言foreach循环、新的容器类),以及更好地支持数组初始化列表和可变模板。
2014年,C++14作为C++11的一个小扩展发布,主要提供漏洞修复和小的改进。C++14的主要特性可以分为三个领域:Lambda函数、constexpr和类型推导。C++14带来的另一个类型推导方面的改进是decltype(auto)语法,它支持使用与auto同样的机制计算给定表达式的类型。C++14中的其他改变包括可以声明变量模板,支持使用0b或0B前缀来声明二进制字面常量。
2017年,C++ 17基于C++11,简化了该语言的日常使用,使开发者可以更简单地编写和维护代码。此次更新加入了UTF-8 字符文字、折叠表达式 (fold expressions)、内联变量 (inline variables)、在 if switch 语句内可以初始化变量、结构化绑定 (Structured Binding)以及类模板参数规约 等特性。
最近一次更新是在2020年,C++20 的提升幅度要比 C++11 更大,其中的概念(Concepts)和模块(Modules)会给开发者带来全新的感觉。Stroustrup觉得再过几年,Concepts 与 Modules 会重要到让大家都觉得不可或缺。
C++经历了从C++98到C++20的多次标准化改造,这30年来,它一直被被业界公认为最复杂的编程语言之一。
不老的秘诀
在编程的世界里,很多语言来了又走,而C++却屹立了30多年,并在21世纪仍保持强劲势头。
Bjarne Stroustrup的理念是,一种语言不应该只能实现设计者想得到的功能,它必须有能力做得更好。这种追求“更好”的理念,也让C++在30年里经久不衰。
伴随C++长盛不衰的,还有一本畅销了20余年、引领百万程序员进入C++世界的经典图书——《C++ Primer Plus》。这本书出版至今已更新六代,其中文版累计销售突破30万册,并首次支持C++11新标准,获得了计算机出版联合会1991年度最佳‘How-to"计算机图书奖提名。
作者: [美] 史蒂芬·普拉达(Stephen Prata)
C++ Primer Plus 第6版 中文版(异步图书出品)
作者Stephen Prata掌握了秘诀——保持更新。1992年,本书第一次出版,名字叫《The Waite Group's C++ Primer Plus》。那个时候,大家都以《The C++ Programming Language》作为C++作为入门。为了在C++市场上具有竞争力,该书覆盖了标准模板库、最新的面向对象编程技术以及以及你必须掌握的C++基础。
1995年,该书第二版发布,并更名为《C++ Primer Plus》,涵盖了所有升级和新的添加到ANSI C++,如模板、异常和实时识别(RTTI)。作者Stephen Prata假定读者没有任何C语言基础,用幽默的讲解方式和作为大学教授的经验,提供了一个权威的、用户友好的C++编程指南。
1998年,随着C++ 98标准发布,《C++ Primer Plus》做出了相应的更新,推出了第三版,并逐步加入案例、代码和数字,并辅以总结,复习问题,给出练习和解释的答案。
2001年,第4版《C++ Primer Plus》介绍了ANSI C++标准,并将示例程序丰富至上百个。友好的语气、简洁的程序和每章结尾的复习练习,让初学者可以立即上手,编写自己的程序。
2004年,《C++ Primer Plus》第5版出版。在C++03标准发布后,又掀起了学习C++的高潮。为了让大家更好地学习和理解C++,作者在不改动章节布局的前提下,新增了大量插图和表格,以阐明一些不容易用语言描述清楚的概念。帮助读者通过真实的、实际的例子从底层来学习学习C++编程,并通过章节末复习问题和练习编程练习来巩固知识。
2011年,《C++ Primer Plus》第6版出版,首次支持C ++ 11标准,并专辟一章介绍了C++11新增的功能。《C++ Primer Plus》吸收了另一本畅销书的成功理念,教你如何理解和使用这种用途广泛的语言:▲对何时使用某些特性,例如何时使用公共继承来建立is-a关系,提供了概念方面的指导。▲阐释了常用的C++编程理念和技术。▲提供了大量的附注,如提示、警告、注意等
在IT技术圈有句俗话,“追新不追旧”。历经20余年,6次改版,中文版累计销售突破30万册,《C++ Primer Plus》经受住了时间的考验,像C++一样经久不衰。
当Stroustrup博士畅想未来五年C++的发展时,他表示,C++将在现有基础上实现进一步的完善,来满足更高标准的应用需求。
也许你选择C++的原因是必须为一个C++项目提供技术支持,或者只是打算使用C++编写新的代码,不论理由是什么,这个决定都是非常明智的。未来,C++在底层开发的优势将会越来越不可或缺。
因此,想入门C++的同学,人邮君给大家推荐《C++ Primer Plus 第6版 中文版》这本经典的入门教程。
购买2020版买一得四:1本纸质书+1本e读版电子书+1份思维导图学习路径+1个在线编程练习环境。
内容简介
本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐述了 C++的基本概念和技术,并专辟一章介绍了C++11新增的功能。
《C++ Primer Plus(第6版)中文版》分18章,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑运算符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出、C++11新增功能等内容。
适合人群
《C++ Primer Plus(第6版)中文版》针对C++初学者,从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要求读者有C语言方面的背景知识。
《C++ Primer Plus(第6版)中文版》可作为高等院校教授C++课程的教材,也可供初学者自学C++时使用。
配套资源
本书的配套资源丰富,除了附录文件和源代码,还有配套的习题答案。
C++ Primer Plus 第6版 中文版习题解答(异步图书出品)
《C++ Primer Plus(第6版)中文版习题解答》共分为18章,每一章的主题与《C++ Primer Plus(第6版)中文版》完全一致。每章开篇采用思维导图的方式列出本章的知识点,然后对每章的重点内容进行了梳理总结,最后则对每章中的复习题和编程练习进行了分析并给出了解答思路,确保读者在彻底夯实理论知识的同时,进一步提升实际编程能力。
C++语言入门经典教程:C++ Primer Plus 第6版 中文版+
希望对大家有所帮助!
本文转载自异步图书
参考资料
【1】History of C++
http://www.cplusplus.com/info/history/
【2】'We need better balance between theory and practice', Bjarne Stroustrup, Father of C++,
https://yourstory.com/2013/12/bjarne-stroustrup-interview?utm_pageloadtype=scroll