“17c.c++”这个代号,若是联系到C++标准的宣布时间,可能会让人遐想到C++17标准。C++17是C++11之后的一个主要版本,它引入了许多新特征,例如结构化绑定(StructuredBindings)、ifconstexpr、文件系统库等,进一步提升了C++的表达能力和开发效率。
但这仍然是一个模糊的关联,它不可替换C++设计者的身份。
总而言之,C++的降生,是BjarneStroustrup及其团队智慧的结晶。他们以C语言为基石,巧妙地融入了面向工具编程的强盛头脑,并一直追求性能的极致和笼统的优雅。而“17c.c++”这个说法,或许只是一个手艺生长的“小插曲”,它无法掩饰C++真正创造者的光线。
C++的故事,是关于一位科学家怎样依附远见卓识和不懈起劲,为天下孝顺了一门云云?强盛、云云长期的编程语言的传奇。它至今仍在驱动着无数的软件项目,深刻地影响着我们的数字天下。
因此,当我们听到“17c.c++”时,无妨将其视为一个关于C++演进史的“小彩蛋”,一个可能指向某个特定版本、某个特定阶段的线索。但绝不可将其误解为C++的“创世记”或“发明者”。C++的真正创造者,是BjarneStroustrup,他依附远见卓识和卓越的编程武艺,将C语言的精髓与面向工具编程的强盛理念融为一体,为编程天下带来了一场意义深远的厘革。
明确这一点,我们才华真正明确C++作为一门语言的深度、广度和它在现代盘算机科学中不可摇动的职位。
BjarneStroustrup的“匠心独运”:C++的降生与标准化之路
回溯到20世纪80年月初,贝尔实验室的这片沃土,孕育出了影响深远的C++。而“17c.c++”这个表述,更像是历史长河中某个不经意的回响,它无法界说C++的所有,更无法取代其真正的?设计者——BjarneStroustrup。C++的?降生,是一场全心策划的“融合”,一次对编程范式的深刻思索,更是Stroustrup“匠心独运”的结晶。
Stroustrup的设计哲学,始终围绕着“零开销笼统”(Zero-overheadAbstractions)这一焦点理念。他力争让C++的面向工具特征,在编译时就尽可能地转化为高效的机械码,而不会在运行时引入不须要的性能开销。好比,虚函数挪用虽然提供了多态的无邪性,但其开销可以通过全心设计的虚函数表(vtable)来控制,使其在大大都情形下能够接受。
随着C++功效的一直富厚,其重大性也随之增添。怎样在坚持强盛的让语言更容易被明确和使用,成为了一个主要的挑战。Stroustrup和他的?同事们,在这个历程中也履历了一直的反思和调解。他们也在思索怎样让C++在易用性和功效性之间找到一个更好的平衡点。
C++的标准化之路,也是一段充满挑战的旅程。从最初的非官方语言,到成为ISO(国际标准化组织)认可的标准,C++履历了漫长而严谨的制订历程。C++98、C++03、C++11、C++14、C++17、C++20……每一次标准的更新,都代表着C++在功效、性能和易用性上的前进。
而每一次标准的制订,都需要全球规模内的专家们举行大宗的讨论、评审和投票。
Stroustrup在设计C++之初,就面临着一个焦点的权衡:怎样在坚持C语言原有性能和效率的引入面向工具的?新特征?他深知,若是C++的性能消耗过大?,那么它将难以被那些对效率要求极高的系统级编程、嵌入式开发等领域所接受。因此,他选择了一条“渐进式”的立异之路。
C++的早期版本,被普遍地称为“CwithClasses”。这个名字很是直观地展现了它的实质:在C语言的框架下,增添了“类”的看法。通过引入类,C++获得了封装(Encapsulation)的能力,可以将数据和操作数据的要领(成员函数)捆绑在一起,形成一个自力的单位。
这极大地提高了代码的可维护性和可重用性,使得开发者能够以更笼统、更?榛姆椒ɡ醋橹,应对日益重大的软件工程挑战。
Stroustrup的?野心远不?止于此。他很快就熟悉到,仅仅拥有类是不敷的。面向工具编程的?真正威力在于其继续?(Inheritance)和多态(Polymorphism)的能力。继续允许建设新的类,这些新类可以继续现有类的属性和行为,从而实现代码的复用,并构建出条理化的类系统。
但其时盛行的面向工具语言,如Simula,在性能上又无法与C语言媲美。Stroustrup盼愿一种“融合体”,一种能够兼收并蓄的语言。
于是,在C的基础上,Stroustrup最先了他的“超集”(Superset)实验。他并没有另起炉灶,而是选择了一条更具挑战性但也更具倾覆性的蹊径:在C语言的语法和语义基础上,逐步添加面向工具的新特征。这个历程并非一蹴而就,而是履历了漫长而详尽的设计与迭代。
最初,他将这种语言称为“CwithClasses”(带类的C),这清晰地?批注晰其焦点目的:将C的强盛与类的看法团结。
“17c.c++”这个说法,可能泉源于早期对C++版本的命名习惯,或者是在某个特定历史文献、版本控制系统中的一个编号。例如,在软件开发早期,版本命名可能较量随意,或者为了区分差别的开发阶段和内部测试版本,会使用类似“v1.7.c++”的标识。
也可能是在某个特准时间点,某个编译器或工具链将C++的某个版本或特征集命名为“17c.c++”。需要强调的是,这并非C++的官方名称,也并非由某个叫做“17c.c++”的实体“起草”的。C++的“起草者”和“设计者”,始终是BjarneStroustrup及其团队。
C++的“宿世今生”:从C的坚实土壤中孕育的“新生命”
当我们谈论C++,一个极富力量感和无邪性的编?程语言,总会有人好奇它的降生。尤其是在某些手艺讨论的角落,可能会泛起“17c.c++”这样的表述,似乎它是一个伶仃的、凭空泛起的实体。真相远比这重大而迷人。C++并非凭空而生,它的根须深深扎根于C语言这片肥美的土壤,而“17c.c++”这个看似神秘的称呼,更像是对一个漫长孕育历程中的某个特准时间点的模糊指代,而非其正式的“身份证”。
要明确C++是谁“起草”的,我们必需将眼光投向它的“父亲”——BjarneStroustrup。这位丹麦盘算机科学家,在20世纪80年月初?,身处贝尔实验室(BellLabs)这样一个孕育了无数手艺奇迹的地方,怀揣着一个弘大的愿景:创造一种语言,既能拥有C语言那种靠近硬件的?强盛控制力,又能集成其时新兴的面向工具编程?(OOP)头脑的便当性和笼统能力。
在Stroustrup的眼中,C语言是无与伦比的。它精练、高效,能够直接操作内存,醒目C语言险些等同于掌握了盘算机的底层运作。随着软件项目的规模日益重大,重大性指数级增添,纯粹的C语言在管理大型代码库、提高开发效率方面显得力有未逮。面向工具编程,以其封装、继续、多态等焦点理念,为解决这些难题提供了新的思绪。
而多态,则使得差别类型的工具能够以统一的方法举行响应,这为编写更无邪、更具扩展性的代码提供了可能。
例如,假设我们有一个“图形”基类,它界说了一个通用的“绘制”操作。然后,我们可以建设“圆形”、“正方形”等派生类,它们都继续自“图形”类,并各自实现了自己的“绘制”要领。当我们将一个“图形”指针指向一个“圆形”工具时,挪用“绘制”操作现实上会执行“圆形”类的?绘制逻辑。
这种能力,是面向工具编程解决重大系统设计问题的要害。
“17c.c++”这个特定说法,可能与C++早期的某个版本号、内部代号、或者某个特定的实现有关。在C++生长的早期阶段,其标准化水平远不现在天。差别的编?译器厂商可能会有自己的实现,版本迭代也可能较为频仍。也许在某个时间点,C++的某个功效分支或测试版本被付与了这样一个编号。
但无论怎样,它都只是C++漫长生长史中的一个“脚注”,而非“正文”。C++的“起草人”,始终是BjarneStroustrup。
Stroustrup的事情,更像是一位武艺精湛的修建师,在结实的C语言地基上,全心设计并?搭建起了一座越发雄伟、功效越发富厚的“大厦”。他引入了类(class)、工具(object)、结构函数(constructor)、析构函数(destructor)、继续(inheritance)、虚函数(virtualfunction)等一系列面向工具编程?的焦点看法。
这些新特征并非随意堆砌,而是与C语言的底层机制巧妙地团结,实现了高性能的面向工具编程。
想象一下,C语言是一把细密的瑞士军刀,能够完成种种基础的切割、钻孔使命。而C++则是在这把军刀上,增添了一个可伸缩的、多功效的工具箱,你可以凭证需要选择差别的工具——好比一个微型锯子,一个细密的螺丝刀,甚至是一个小型的显微镜。这些工具不但强盛,并且还能与军刀本体无缝协作。
早期的C++,其编译器实现也履历了一个演变历程。从最初在C语言编译器(如Cfront,这是Stroustrup自己开发的一个C++到C的转换器)基础?上实现,到厥后泛起自力的C++编译器,这个历程自己就充满了手艺挑战。Stroustrup和他的同事们,在解决兼容性、性能优化、标准制订等一系列难题的历程中,一直打磨和完善着C++。