爱收集资源网

C/C++不可或缺,你了解吗?

网络整理 2023-09-28 23:03

数以百计的 C/C++ 替代品将会出现,但 C/C++ 将永远与我们同在!

每个 CPU 都带有一种称为 ISA(指令集架构)汇编的电路语言。ISA 程序集是一种硬件语言,由基本数据操作、数学估算和结构化编程(即 jmp)的操作组成。但是,为每位估算需求编撰汇编代码无疑是历时的,因此过去的程序员发明了对人类友好的语言和编译器。

计算机科学家先驱 Dennis Ritchie 为 Unix 操作系统的研制需求实现了C语言。在这段时期,整个计算机技术领域都在进行基础的最初建设,所以几乎所有的程序员都使用 C 语言来建立初期的估算程序,比如编译器、操作系统、数据库软件和网路程序。后来,C++扩充了 C 语言,保留了 C 语言的性能特性,一门具有更多开发人员特点的新的编程语言诞生了。

在 20 世纪 20 年代,程序员实现了 C/ C++的备选品,如 Go、D、Rust 和Carbon,它们具有 C/ C++未曾提供的各类特点。但这种语言依然只是 C/ C++的备选品,而不是替代品,原因如下:

C 和 C++是基础语言

如果我们追根溯源现今活跃在我们生命中的每一款计算机程序,总会发觉它们诞生自 C 或 C++。想想你如今在做哪些,你可能在微软 Chrome 上读到这篇文章,Chrome 开源浏览器(Blink 渲染引擎、V8 和浏览器应用程序)是用 C++写的。假如你在 GNU/Linux 上运行 Chrome,Linux 内核是用 C 写的。MySQL,最流行的关系数据库管理系统,是用 C/ C++写的。所有流行的操作系统都为内核函数提供了核心 C 或 C++ API。

即使存在稳定的 C/ C++代替方案,许多程序员一直喜欢用 C 或 C++进行系统编程。在大多数情况下,程序员选择 C++是因为它是与操作系统级 API 通信的最佳语言。例如,谷歌用 C++编撰了Flutter引擎:

#3:b:3:c:b:3:9:d:2:1:a:a:e:1:5:0:d:5:3:3:8:9:2:1:d:f:3:7:7:c:a:0#

Flutter 引擎使用 C/ C++应用 GTK 库函数,截图由作者提供

数十年来,计算领域的大多数核心组件都使用 C/ C++作为实现语言,C/ C++语言也常年维持着语言句型的标准。打造 C/ C++的替代品如同在所有的建筑工程竣工以后改变房屋的地基。

C 和 C++完全控制我们所写的内容

在编撰源代码时,C/ C++可以自由地处理程序资源。例如,C/ C++容许你直接分配/释放用于储存数据元素的物理内存。C/ C++提供了一种使用本机操作系统级线程的方式,而不是像 Go 那样管理单独的并发运行时。C/ C++没有提供手动显存管理(垃圾回收)特性,因此程序员应当慎重有效地避免内存泄漏。看看 Meta 的 Folly 库源代码是怎样实现自动内存管理策略的:

#7:5:1:8:f:4:a:e:f:0:f:0:9:1:4:0:a:4:6:7:4:3:6:1:9:e:a:4:b:8:3:0#

Meta 的使用了自动内存管理功能

自动内存管理和显存处理的限制无疑是使语言显得现代、高效和更具象的好方式,但是这种特点会在语言运行时形成性能开支,并增加程序员的自由度。

C 和 C++不限制显存访问,提供自动的内存管理操作,让程序员根据自己的意愿控制程序,从而把自由给了程序员。当你用 C/ C++编撰程序时,你的源代码将有效地执行你指示的操作,就是这样。

C 和 C++确实又快又高效

一个特定程序的效率取决于两个主要诱因:程序员使用的算法的时间复杂度和二进制程序的效率。毫无疑问,我们可以控制算法的复杂性,因为我们可以通过更新源代码来改变它们。另一方面,二进制文件是编译器生成的,因此我们难以轻易从这方面提升效率。

但是,我们可以选择一个才能生成快速有效的二进制文件的编译器。GNU 编译器生成特定于平台的二进制文件,而不嵌入专用的运行时环境。C 编程执行模型使用crt0汇编指令段中定义的最小启动代码。看看下边的事例,Linux 上的 crt0 部分:

#6:5:e:e:7:d:3:3:a:e:4:8:6:0:4:3:6:b:d:6:2:b:2:0:7:e:c:4:b:9:b:5#

在 C 语言中 main 函数之前执行的启动代码

C++无疑是一门复杂的语言,但它不像Python和Golang那样提供更高的具象。此外,它还为你提供了一种使用首选标准语言版本(即 C++ 14)进行编译的方式。因此,自现代 C++特点使 C++开发复杂化以来,你可以只使用 C++中最小的特点。C++已经有 30 多年的历史了,并且从初期估算时代开始就对其性能进行了优化。

C 和 C++是学术友好型语言

程序员编程一般源于职业生涯的不同阶段。一些程序员在她们念书的时侯就使用第一台计算机设备学习编程。然而,大多数程序员都是在学院期间提升她们的编程技能的。幸运的是,几乎所有的学院都是为了让中学生有机会学习计算机程序怎样与硬件组件一起工作而开始院长了 C 语言编程。我写了以下文章来进一步解释计算机程序是怎样与硬件联接的:

编写优化代码前须要晓得的5件事

这些事实有助于您以优化的性能给硬件和程序员留下深刻印象

后来,大多数大学教授 C++的数据结构和算法基础知识,而不使用 C++的复杂部份。大学生一般在学习了与算法相关的课程后,就会步入竞争激烈的编程领域。大多数有竞争力的程序员都喜欢 C++,因为它速度快,内置的最优数据结构可用性高,语法少。

Rust 无疑是一种挺好的语言,具有显存安全、高性能和外置特点,但是 Rust 语法对于第一次编撰代码的开发人员并不友好。对于工业用途来说,如果你的团队希望获得类似 C 语言的最小的高效代码和类似 python 的开发环境,Go 是一种挺好的语言。但是,对于学术用途来说,Go 的具象太过简单,并且不能与传统的伪代码保持一致,所以学术讲师永远不会用 Go 来取代 C/ C++。

下面的文章解释了为何每位程序员都应当用 C 语言开始编程:

为什么每位开发人员都应当使用C语言开始编程

你可以从任何一种语言开始编程——但是从C开始有更多的益处!

现代代替方案依然须要 C,它们专注于不同的目标

如前所述,所有 POSIX 操作系统和非 POSIX 操作系统(即 Windows)都提供了一个 C 库来处理内核操作,因此从 C/ C++调用内核特点很容易,因为我们不需要编撰特定于语言的绑定或第三方包装器。一些操作系统甚至预先包含 GNU C/ C++编译器和调试器来推动 C/ C++的开发。如果我们使用 Rust 和 Go,需要特定于语言的第三方绑定来与操作系统 API 通信。现代代替语言依然提供了调用 C 代码的方式。例如,Go 提供Cgo特点来调用 C 代码。

几乎所有的 C/ C++替代方案都力求用与 C++截然不同的语言句型来提供缺乏的 C++特点。

如果程序员在找寻 C/ C++的取代方案,他们一般会期望一个平稳且历时较少的迁移过程。

此外,他们也不期望学习一门新语言来为她们不喜欢的 C/ C++特点找到解决方案。

程序员们针对低层次编程用例设计和改进了 C 语言,没有一种现代语言是完全针对 C 语言的目标而创建的。C++使 C 语言更具有未来感,并自低级编程阶段进行了提高。Rust、Go、D 和 Carbon 都是 C/ C++的备选品——而不是替代品,这些备选品都有自己的未来目标。

下面的文章解释了为何每位程序员在她们的职业生涯中都须要学习 C++语言:

为什么每位程序员都应当在她们的职业生涯中学习C++

掌握C++并不是一件容易的事,但是一旦你做到了,你将获得无价利润

结语

以前的程序员在 C/ C++进化时期书写了我们的计算机历史。他们用 C 和 C++建立操作系统内核、编程语言、数据库系统、移动操作系统和网络软件。多亏了 C/ C++,现在几乎所有的现代 Web 服务都能工作。例如,最流行的 Web 服务器软件,如 Apache HTTP 和 Nginx,就是使用 C/ C++作为实现语言。以前的程序员几乎用 C/ C++编撰了所有流行的内部网络浏览器和网络软件组件。Web 开发人员喜欢选择 Java 和 Node.js 用于 Web 服务,但 Java 和 Node.js 都是因 C/ C++而至的。

一些程序员觉得像 Rust、Go、D 和 Carbon 这样的流行语言可以取代 C/ C++。同时,一些程序员考虑使用这种语言作为 C/ C++的备选品,认为它们在未来可能替代 C/ C++。这些现代语言是为特定的目的和需求而设计的——而不是替代 C/ C++。

微软创建了TypeScript,但我们一直使用 JavaScript。Jetbrains 创造了 Kotlin,但我们一直使用 Java。数以百计的 C/ C++备选品出现了,但程序员仍将使用 C/ C++,因为重画面向 C/ C++的计算机历史是不现实的。这并不意味着 C 和 C++是最好的语言——在个别方面(例如复杂性、内存安全性等),备选语言可能比 C/ C++更好,但它们难以步入 C/ C++的领域,因为原先的程序员用 C 和 C++编撰了整个现代计算机历史。

感谢你的阅读。

原文链接:

译者介绍:冬雨,小小技术宅一枚,现从事研制过程改进及质量改进方面的工作,关注研制、测试、软件工程、敏捷、DevOps、云计算、人工智能等领域,非常愿意将美国新鲜的 IT 资讯和深度技术文章翻译分享给你们,已翻译出版《深入敏捷测试》、《持续交付实战》。

现在c语言用什么软件
上一篇:创意网名,特殊符号尽情展现 下一篇:没有了
相关文章