织梦cms传播公司网站模板,网站的管理页面,直播网站建设书籍,网站服务公司官网点击蓝字关注我们因公众号更改推送规则#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络#xff0c;侵删数以百计的 C/C 替代品将会出现#xff0c;但 C/C 将永远与我们同在#xff01;每个 CPU 都带有一种称为 ISA#xff08;指令集架构#xff…点击蓝字关注我们因公众号更改推送规则请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络侵删数以百计的 C/C 替代品将会出现但 C/C 将永远与我们同在每个 CPU 都带有一种称为 ISA指令集架构汇编的电路语言。ISA 程序集是一种硬件语言由基本数据操作、数学计算和结构化编程即 jmp的操作组成。但是为每个计算需求编写汇编代码无疑是耗时的因此过去的程序员发明了对人类友好的语言和编译器。计算机科学家先驱 Dennis Ritchie 为 Unix 操作系统的研发需求实现了 C 语言。在这段时期整个计算机技术领域都在进行基础的最初建设所以几乎所有的程序员都使用 C 语言来构建早期的计算程序比如编译器、操作系统、数据库软件和网络程序。后来C 扩展了 C 语言保留了 C 语言的性能特点一门具有更多开发人员特性的新的编程语言诞生了。在 21 世纪 20 年代程序员实现了 C/ C 的备选品如 Go、D、Rust 和 Carbon它们具有 C/ C 从未提供的各种特性。但这些语言仍然只是 C/ C 的备选品而不是替代品原因如下1C 和 C 是基础语言如果我们追根溯源当今活跃在我们生命中的每一款计算机程序总会发现它们诞生自 C 或 C。想想你现在在做什么你可能在谷歌 Chrome 上读到这篇文章Chrome 开源浏览器 (Blink 渲染引擎、V8 和浏览器应用程序) 是用 C 写的。假如你在 GNU/Linux 上运行 ChromeLinux 内核是用 C 写的。MySQL最流行的关系数据库管理系统是用 C/ C 写的。所有流行的操作系统都为内核函数提供了核心 C 或 C API。即使存在稳定的 C/ C 替代方案许多程序员仍然喜欢用 C 或 C 进行系统编程。在大多数情况下程序员选择 C 是因为它是与操作系统级 API 通信的最佳语言。例如谷歌用 C 编写了 Flutter 引擎Flutter 引擎使用 C/ C 应用 GTK 库函数截图由作者提供数十年来计算领域的大多数核心组件都使用 C/ C 作为实现语言C/ C 语言也长期维持着语言语法的标准。打造 C/ C 的替代品就像在所有的建筑工程完工之后改变房子的地基。2C 和 C 完全控制我们所写的内容在编写源代码时C/ C 可以自由地处理程序资源。例如C/ C 允许你直接分配 / 释放用于存储数据元素的物理内存。C/ C 提供了一种使用本机操作系统级线程的方法而不是像 Go 那样管理单独的并发运行时。C/ C 没有提供自动内存管理 (垃圾回收) 特性因此程序员应该谨慎有效地防止内存泄漏。看看 Meta 的 Folly 库源代码是如何实现手动内存管理策略的Meta 的 Folly 库使用了手动内存管理功能自动内存管理和内存处理的限制无疑是使语言变得现代、高效和更抽象的好方法但是这些特性会在语言运行时产生性能开销并降低程序员的自由度。C 和 C 不限制内存访问提供手动的内存管理操作让程序员按照自己的意愿控制程序从而把自由给了程序员。当你用 C/ C 编写程序时你的源代码将有效地执行你指示的操作就是这样。3C 和 C 确实又快又高效一个特定程序的效率取决于两个主要因素程序员使用的算法的时间复杂度和二进制程序的效率。毫无疑问我们可以控制算法的复杂性因为我们可以通过更新源代码来改变它们。另一方面二进制文件是编译器生成的因此我们无法轻易从这方面提高效率。但是我们可以选择一个能够生成快速有效的二进制文件的编译器。GNU 编译器生成特定于平台的二进制文件而不嵌入专用的运行时环境。C 编程执行模型使用 crt0 汇编指令段中定义的最小启动代码。看看下面的例子Linux 上的 crt0 部分在 C 语言中 main 函数之前执行的启动代码C 无疑是一门复杂的语言但它不像 Python 和 Golang 那样提供更高的抽象。此外它还为你提供了一种使用首选标准语言版本 (即 C 14) 进行编译的方法。因此自现代 C 特性使 C 开发复杂化以来你可以只使用 C 中最小的特性。C 已经有 30 多年的历史了并且从早期计算时代开始就对其性能进行了优化。4C 和 C 是学术友好型语言程序员编程通常始于职业生涯的不同阶段。一些程序员在他们上学的时候就使用第一台计算机设备学习编程。然而大多数程序员都是在大学期间提高他们的编程技能的。幸运的是几乎所有的大学都是为了让学生有机会学习计算机程序如何与硬件组件一起工作而开始教授了 C 语言编程。我写了以下文章来进一步解释计算机程序是如何与硬件连接的编写优化代码前需要知道的 5 件事https://levelup.gitconnected.com/5-things-to-know-before-you-write-optimized-code-3ca424110db1这些事实有助于您以优化的性能给硬件和程序员留下深刻印象https://levelup.gitconnected.com/5-things-to-know-before-you-write-optimized-code-3ca424110db1后来大多数大学教授 C 的数据结构和算法基础知识而不使用 C 的复杂部分。大学生通常在学习了与算法相关的课程后就会进入竞争激烈的编程领域。大多数有竞争力的程序员都喜欢 C因为它速度快内置的最优数据结构可用性高语法少。Rust 无疑是一种很好的语言具有内存安全、高性能和内置特性但是 Rust 语法对于第一次编写代码的开发人员并不友好。对于工业用途来说如果你的团队希望获得类似 C 语言的最小的高效代码和类似 python 的开发环境Go 是一种很好的语言。但是对于学术用途来说Go 的抽象太过简单并且不能与传统的伪代码保持一致所以学术讲师永远不会用 Go 来替代 C/ C。下面的文章解释了为什么每个程序员都应该用 C 语言开始编程为什么每个开发人员都应该使用 C 语言开始编程https://shalithasuranga.medium.com/why-every-developer-should-start-programming-with-c-39b3a87392bf你可以从任何一种语言开始编程——但是从 C 开始有更多的好处https://shalithasuranga.medium.com/why-every-developer-should-start-programming-with-c-39b3a87392bf5现代替代方案仍然需要 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 语言为什么每个程序员都应该在他们的职业生涯中学习 Chttps://levelup.gitconnected.com/why-every-programmer-should-learn-c-during-their-careers-959e1bc2ea68掌握 C 并不是一件容易的事但是一旦你做到了你将获得无价收益https://levelup.gitconnected.com/why-every-programmer-should-learn-c-during-their-careers-959e1bc2ea686结语以前的程序员在 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 编写了整个现代计算机历史。如果你年满18周岁以上又觉得学【C语言】太难想尝试其他编程语言那么我推荐你学Python现有价值499元Python零基础课程限时免费领取限10个名额▲扫描二维码-免费领取戳“阅读原文”我们一起进步