You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
9.5 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 结束语|工业 4.0 时代C 语言还有哪些应用场景?
你好,我是于航。
首先,恭喜你完成了整个专栏的学习!今天是这门课中必学内容的最后一讲了,很荣幸能陪你一起走完这三个多月的 C 语言学习之旅。
其实,这趟“旅程”于我而言要更漫长一些:从去年 9 月底开始筹备这个专栏,到 12 月初课程上线,再到今天更新结束,时间跨度接近半年。这个过程也促使我对自己已有的知识体系进行了一次重新梳理。还要特别感谢那些经常在评论区提出问题、分享经验的同学,与你们的交流,让我在知识积累和认知广度上都获益良多。
在这场旅途的“终点”,想跟你聊点不一样的东西。就先从对“起点”的回顾开始吧。
## “新视角”与“旧语言”
去年 9 月份的时候,得知极客时间想要出一门有关 C 语言的课程,我当时还是有点惊讶的。毕竟,与 Rust 和 Go 这类新兴语言相比C 语言似乎显得有些基础和平常。我们知道,很多编程语言都是以 C 语法为原型来进行设计的,它们选用了同 C 类似甚至完全相同的语法形式,并且还进行了多方面的改进。虽然 C 这门语言是我在工作中使用最多的语言之一,但我还是有些担心:一些同学会不会认为 C 语言早已没什么“有特色”的内容,不值得学习了呢?
带着些许疑虑,我和这门课的编辑同学进行了大量前期调研。在调研的过程中,我们发现还是有不少同学对 C 语言感兴趣的。并且我们还发现,很多同学想要学习 C 语言,其实也是希望能通过这门抽象层次较低、贴近底层硬件的语言,来更好地理解计算机系统的底层运作机制。基于此,我对这门课的课程定位和设计思路进行了一些调整,把课程重点从对 C 基本语法的讲解,改为了**从底层****视角****去****观察****C 这门编程语言的实现细节**。于是,就有了你现在看到的《深入 C 语言和程序运行原理》。
虽然之前担心过有些同学认为“C 不值得”,但我自身还是对 C 语言非常有信心的。我在开篇词里说过,时至今日的 C 语言仍然“老当益壮”。而今天我要说的是C 语言不仅在过去和现在发挥重要作用,它在未来也同样会发光发热。
## C 语言未来的发展方向是什么?
我们能够明显地观察到,如今的 C 语言已“今非昔比”,它跟我们在大学课堂上一板一眼学习的 C89 标准早已有了很大区别。C99、C11乃至 C17 标准中加入的新特性,保留了 C 语言原本“贴近底层硬件”的性质,不会对机器代码做过多抽象,同时进一步提升了开发者使用 C 语言的生产效率。
当前的 C 语言仍处在不断进化的过程中。ISO 标准委员会并不希望为 C 语言增加过多新特性,变动的重点在于**保证 C 语言基本特征(易用、高性能、贴近硬件)的同时,进一步修复语言中的遗留问题**,让它用起来更方便。
C17 标准之后的下一代 C 语言标准是 C2x 标准,它预计会在 2023 年发布。目前已经有很多修改草案被纳入到该版本中,这里我列出了其中一些比较重要的改动:
* 将 alignas、alignof、bool、true、false 等变为关键字(易用性);
* 增加预处理条件指令 #elifdef#elifndef(易用性);
* 十六进制数字支持使用分隔符(易用性);
* 更好地支持为数组类型使用 `const` 关键字(易用性);
* 提供带溢出检查的、支持泛型的数学运算函数(易用性);
* 移除 K&R 形式的函数声明(遗留问题修复);
* 标准化 `typeof` 运算符(新特性);
* C 标准库中新增 strdup 与 memccpy 等函数(新特性);
* ……
从这些改动中,你可以对 C 语言的未来发展方向有一个基本感知。可以看到,大多数 C2x 中的新提案都是为了增强 C 这门语言的易用性,而并不会对语言本身做过多封装。这使得 C 语言变得更加易用,同时 ABI 也保持着稳定,可以说是兼顾了灵活性、高效性和兼容性。
随着 C 标准的发展C 语言也被更多地应用在生产项目中。比如就在不久之前Linux 之父 Linus Torvalds 宣布,他希望尽快将 Linux 内核使用的 C 语言标准从 C89 升级至 C11。你可以点击[这个链接](https://lore.kernel.org/lkml/20220308215615.14183-4-arnd@kernel.org)来了解更多信息。
![图片](https://static001.geekbang.org/resource/image/e9/b4/e92d2624a6573daa57f571d4efce35b4.png?wh=1640x522 "相关话题的邮件讨论截图")
C 语言仍在不断进化并且伴随着新生事物的出现它的应用领域也正变得越来越广。随着“第四次工业革命”的快速展开这一点将越发凸显。接下来我们就来看看C 语言在工业 4.0 时代的应用场景。
## C 语言与第四次工业革命
第四次工业革命也被称为工业 4.0,或 4IR。这个概念最早起源于 2011 年德国政府的一个高科技战略项目。随后,世界经济论坛创始人兼执行主席 Klaus Schwab 于 2015 年对其进行了推广,并强调了 4IR 对整个产业的影响。
4IR 在前三次工业革命(蒸汽时代、电气时代、数字时代)的基础上,进一步强调了“工业智能”的重要性。它的具体表现是:**利用智能化技术,大幅降低人在整个工业生产链中的参与程度,以尽可能做到智能的自动化生产。**这一过程涉及到的技术领域主要包括人工智能、大数据、(工业)物联网、虚拟现实、云计算、机器人,等等。而这些不同技术之间的无缝协作,便成为了这场革命决胜的关键。
现在,让我们从宏观走向微观,仔细看看上面所说的具体技术,你会发现其中的每一项都少不了 C 语言的“参与”。
我们都知道,用于支持计算机正常运行的底层系统软件大多基于 C 语言构建这里就不再赘述。而除此之外我们首先得承认的是C 语言仍然是物联网、机器人这两个应用领域内的首选编程语言。
物联网与机器人编程需要软件能够直接与相关硬件通信,而 C 语言的低抽象层次正使得开发者可以灵活控制代码编译产物做到对硬件的精准控制。同时C 语言还有较高的运行时性能,这意味着对于同样的任务,开发者可以选用功耗相对更低的芯片。无论是从节能环保还是降本增效的角度来看,这都可以说是双赢。
在工业 4.0 时代基于“统一计算设备架构Compute Unified Device ArchitectureCUDA”编程模型等技术进行的高性能 GPU 计算,成为了推动虚拟现实、自动驾驶汽车,甚至是区块链等领域发展的关键技术点。而这类技术在设计时,也都默认提供了基于 C 语言的编程接口。可以看到C 语言在需要与硬件直接打交道的场景中,仍发挥着重要作用。
不仅如此为了进一步提升算法执行效率C 语言在人工智能领域也有着重要应用,比如 TensorFlow 等框架就为 C 程序提供了相应的专用接口。而在大数据和云计算领域Oracle、PostgreSQL、Apache、Nginx 等高性能数据库和服务器软件也均由 C 语言编写。基于 C 语言开发的各类框架为高性能的数据处理和计算提供了保障。
总之,在工业 4.0 时代,无论你是否直接使用 C 语言编码,都会在无形当中直接或间接地与 C 语言打交道。
## 写在最后
在这门课的最后,我想说的是:希望这一趟“不一样的 C 语言之旅”能让你有所收获。同时,结课并不意味着学习之旅的终结,而应该是你继续探索的新起点。
还记得我在[春节策划一](https://time.geekbang.org/column/article/484220)里提到的“飞轮学习法”吗?这里,再回想一遍其中的两个学习基本原则吧:第一,由点成线再成网地构建自己的知识体系;第二,不断地重复获取和咀嚼知识,让学习的飞轮转起来。
希望这门课可以帮助你把一些之前就了解过的“单点知识”联系起来,基本建立起一个关于 C 语言的知识网络。那么,接下来你要做的就是继续深入了解相关知识,并进行大量实践。这样,就能在已构建的“面”的基础上加深“点”,让知识网中的各个点互通有无。
正如[《现代操作系统》](https://book.douban.com/subject/27096665)一书中所说,“在计算机的历史中,每个新物种,无论是硬件还是软件,似乎都要经过它们前辈的发展阶段”。互联网技术的变化日新月异,似乎每一个新技术的出现,都在重复那些老技术之前已经走过的路。但也正是那些经历了时间的考验,仍稳定不变的技术理论体系,在支撑着这个世界的快速变化和发展。因此,如果你能通过 C 语言,从基础层面了解程序是如何工作的,并深入理解计算机系统的底层运作机制,那么就能更好地拥抱这个不断变化的世界,更快地理解并掌握新技术。
最后的最后,我还给你准备了一个[调查问卷](https://jinshuju.net/f/wi5O17)。题目不多,大概两分钟就可以填完,主要是想听一下你对这门课的看法和建议。期待你的反馈!
[![](https://static001.geekbang.org/resource/image/c5/cb/c5948bfa733fbbd183f01194cfd878cb.jpg?wh=1142x801)](https://jinshuju.net/f/wi5O17)