扯淡!C语言怎么可能被淘汰呢?

“第一门编程语言学C靠谱吗?”

“C还有未来吗?”

“我应该考虑学C吗?”

“C太老了吧!”

你是否也听过类似的话语?

听说过无数次,有些是面对面的交谈,而有些来自某个论坛。

虽然答案无非是“取决于具体情况”,但以我的拙见,学习C编程是非常宝贵的经验。

我想通过这篇短文向你展示C伟大的一面。

01

C的精神

首先,我想引用文档C99RationaleV5.10中的一句话:

C89委员会始终将保留C的传统精神作为主要目标。C的精神体现在很多方面,但其本质在于社区对C语言所依赖的基本原则的看法。C的精神可以总结为以下几个方面:

  • 相信程序员。

  • 不阻碍程序员完成任务所需的工作。

  • 保持语言短小精悍。

  • 仅提供一种操作的方法。

  • 保持高速,即使无法保证可移植性。

下面,我将进一步讨论上述几点。

02

中级编程语言

编程语言可以大致分为两个级别:低级和高级。

低级语言靠近硬件,比低级语言更接近 CPU 的就只有电流了。这些语言又分为为机器码和汇编两种。前者是原始数据流,通常是二进制数据。为了便于人类使用,通常我们以“可读”的十六进制形式进行处理。

第二代语言汇编在机器码之上提供了一层抽象。这些语言大部分是人类可读的符号(包括符号地址)、操作码、地址、数字常量、字符串等的映射。而且每个处理器各有不同。

相较而言,高级语言提供了哪些抽象?根据维基百科:

与低级编程语言相比,高级语言使用了自然语言元素,更易于使用,而且还可以自动化(甚至完全隐藏)计算机系统中的重要领域(例如内存管理),从而简化程序的开发过程,而且也比低级语言更易于理解。编程语言提供的抽象数量决定了其“高级”程度。 

简而言之:低级语言=更加靠近机器,高级语言=更加人性化。

C 是高级编程语言,但在 C 刚刚创建的时候,大多数功能仍然是通过低级的汇编完成的。因此,与其他广泛使用的语言相比,C 拥有更底层的抽象级别,因此我喜欢将其称为“中级编程语言”。

你可以轻松地将 C 代码编译成汇编(而不是二进制代码),并检查 CPU 执行的指令,在这个过程中C语言不会加入太多语言特有的代码。

此外,如果有需要,流行的 C 编译器还提供了更低级的选项,允许你使用内联汇编完全掌控 CPU。纵观编程领域,能够做到这一步的编程语言可谓少之又少。

03

简 洁

低级语言的编程难度很高。不是因为这些语言过于复杂,而是因为这类编程很容易出错,因此需要投入更多精力、记忆和心思。

C 是中级编程语言,因此“根据定义” C 语言编程更加容易。但令人惊讶的是,与高级语言相比,C 语言的学习非常简单。为什么?因为 C 语言的语法非常简单,还有结构化的范例。循环、函数、结构、指针、变量、类型等核心基础知识的学习都非常容易。大约只需一周的努力学习即可入门。剩下的就是数学和计算机科学理论了。

但是,不要误会我的意思!如果想完全掌握 C 语言,你需要付出大量的努力!事实上,学习任何东西都需要付出大量的努力!

04

快速、轻量级

与其他语言(例如 Java )相比,标准 C 库很小,所以你完全可以记住所有的功能。虽然有些功能应该在很久以前就弃用了,但是 C 语言的性能仍然非常出色。

如果连 libc 都觉得太大怎么办?即便你完全不用 libc 也没有关系。只要不包含括任何头文件即可,甚至连简单的 printf() 都不使用。你可以将其替换成其他库。

C 语言非常成熟,重视对内存的管理,拥有内联汇编、少量抽象,且语言没有过度膨胀,因此程序员能够很好地控制程序。

因此,C 语言成为了 OS 内核(Linux、Windows NT 或 macOS 的 XNU 等)以及其他语言(例如 Python)的理想选择。这也是为什么 C 在嵌入式系统上如此受欢迎的原因,因为嵌入式系统不允许浪费任何资源。

05

无所不在=可移植性

你能否想到任何没有 C 编译器的重大平台?除了有些只运行汇编的平台,我从未听说过没有 C 编译器的平台。高端游戏 PC、NASA 航天器、售票机等各种平台都使用了 C 编程。真的是无所不在,C 软件遍布全世界。

如上所述,对于围绕在我们日常生活中的微控制器和其他形式的嵌入式系统来说,C 语言是主流选择。

你听说过FFI吗?事实证明,许多编程语言都可与 C 兼容。

你不必担心是否可在某些工作中使用 C 语言,99%的情况下你都可以使用 C!(尽管这并不意味着你应该在所有工作中都使用 C……)。尽管 C 语言的代码并非100%可移植,但你可以成为可移植的程序员。

06

影响力

C 语言直接或间接地影响了无数语言,比如 C 、Java、Go、D、Rust、Perl,甚至是 PHP 和 Python。

显然,学习这些语言的时候,你并不需要 C 的知识,有时甚至还不能使用C的最佳实践。

然而,我认为记住编程语言的根源很重要。而且,如果你熟悉 C,那么就会有一些优势,尤其是 C 的学习。

07

丰富的库

我怀疑以上对于 C 语言的快速、轻量级、中级编程语言、汇编等方面的讨论,可能会给你一个错误的想法:你需要实现所有的功能。虽然 C 确实没有 Java中的 linkedHashMap 或其他功能(如垃圾收集器),但 C 语言也不至于那么落后。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何正确运用计算机技术,如何正确认识与运用计算机网络技术.doc

如何正确认识与运用计算机网络技术如何正确认识与运用计算机网络技术摘要:正如每个人所见,在中国当前的形势下,从小培养计算机网络技术人才还是个薄弱环节。作为中小学计算机网络技术教师的我们必须在透彻了解本校或本地区学生对计算机网络技…

google账号解除游戏绑定_附方法!关于物联卡手机号的绑定与解绑

我们在使用物联卡时第一步都知道绑定手机号,只有绑定了手机号我们才能进行正常的充值、续费、查询等日常操作,当我们不再使用这些物联卡时,你知道怎么解绑吗?今天,我们以中国移动物联卡为例,咱们来看一下移…

elasticsearch原理_花几分钟看一下Elasticsearch原理解析与性能调优

基本概念定义一个分布式的实时文档存储,每个字段 可以被索引与搜索一个分布式实时分析搜索引擎能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据用途全文检索结构化搜索分析VS传统数据库传统数据库提供精确匹配ES提供精确匹配全文检索…

spark wai_WAI-ARIA对自动完成小部件的支持

spark wai在这篇文章中,我想讨论一个AutoComplete小部件的可访问性。 在您键入该字段时,通常会使用“自动完成”窗口小部件提供建议。 在当前的工作中,我基于Twitter的Typeahead (一个灵活JavaScript库)实现了JSF组件&…

快速学习C语言的途径,让你少走弯路!

1标准C语言能干什么?坦白讲,在今天软件已经发展了半个多世纪,单纯的C语言什么都干不了。标准C语言库只提供了一些通用的逻辑运算方法以及字符串处理,当然字符串在C语言看来也是一种操作内存的方法,所以单纯的C什么都做…

计算机基础教育学,计算机基础教育教学改革与创新

计算机基础教育教学改革与创新伴随《国家中长期教育改革和发展规划纲要(2010-2020)》的颁布,我国计算机基础教育进入一个新的发展阶段,对计算机基础教育"面向应用、能力导向、注重素质"指导思想的深入研究和实践是深化计算机基础教育教学改革的切入点。下面是小编搜集…

南京python基础教程_南京Python课程价格

1.每个算法模块按照“原理讲解→分析数据→自己动手实现→特征与调参”的顺序。 2.“Python数据清洗和特征提取”,提升学习深度、降低学习坡度。 3.增加网络爬虫的原理和编写,从获取数据开始,重视将实践问题转换成实际模型的能力,…

neo4j 嵌入式_在嵌入式Neo4j中使用Neo4j浏览器

neo4j 嵌入式有时,您有一个应用程序以嵌入式模式使用Neo4j,但还需要使用Neo4j Web浏览器来处理图形。 由于一次最多只能从一个进程访问数据库,因此在嵌入式Neo4j应用程序运行时尝试启动Neo4j服务器将不起作用。 WrappingNeoServerBootstrapp…

C语言学习趣事_你不知道的C语言应用

一、引我一直不明白“文人相轻”是什么意思,也许就是说:文人清客之间互相瞧不起的事情吧。但对于我来说,文人相轻就是表示:无知者无畏。无论你的某一方面的语言学的怎么样,怎么样的牛逼,你可以眼光狭窄&…

微信小程序销毁某一注册函数_微信小程序云开发API 删除一条记录

Document.remove删除一条记录函数签名如下:function remove(options: object): Promise参数说明options 为必填参数,是一个如下格式的对象,如传入 success、fail、complete 三者之一,则表示使用回调风格,不返回 Promis…

html打开显示脚本错误,IE浏览器显示脚本错误怎么解决?IE浏览器脚本错误解决方法图文教程介绍...

只要一打开网页,就会弹出一个“当前页面的脚本发生错误”提示框,如下图,不论按“是”或者“否”,当打开其它网页时,又会弹出一个这样的“脚本错误”提示框,这样的问题该如何解决呢。出现这样的情况&#xf…

jenkins 新手入门安装失败_树莓派安装jenkins,安安静静做个持续集成打包机

对于java程序来说,手动发布服务端是耗时和无聊的,jenkins很好地解决了这个问题,闲着也是闲着就在树莓派上装个jenkins帮我们打包发布吧。这次我们需要安装三个软件:jdk:编辑java程序必要的。maven:maven结构…

java开发C编译器:结构体的解析和执行

用java开发C语言编译器结构体是C语言中,最为复杂的原生数据结构,它把多种原生结构结合在一起,形成一个有特点含义的数据结构,要实现一个完整的C语言编译器或解释器,就必须要拥有对结构体的解析能力,本节&am…

mysql查询会话池_用户会话,数据控件和AM池

mysql查询会话池最近,有人问我有关应用程序模块池的有趣问题。 众所周知,AM池包含用户会话引用的应用程序模块实例,这允许会话在后续请求时从池中获取完全相同的AM实例。 如果应用程序中有多个根应用程序模块,则每个模块都将拥有…

vc 控制台添加托盘显示_和硕县塑胶托盘塑料周转筐多少钱、延安塑料物流箱

他们正是利用了消费者的这种心理,往产品里添加一部分碳酸钙等重物质,不仅仅降低了他们的生成成本也极大的提高了产品自身重量,消费者却被蒙在鼓里。物流与采购联合会托盘专业委员会于2002年9月对北京、天津、上海、广州四大城的300余家生产、…

重庆理工大学国际学院计算机图形学试题,哈尔滨理工大学-第一学期考试试题答案B卷考试.doc...

哈尔滨理工大学-第一学期考试试题答案B卷考试考试科目 计算机图形学 考试时间:120分钟 试卷总分100分题 号一二三四五六总分得 分评卷教师一、选择题(在每个小题四个备选答案中选出一个正确答案,填在题末的括号中)(本大题共5小题,…

用python画大白_[Python][可视化]matplotlib基础入门

Python包matplotlib画图入门,以折线图为例。 在使用之前,导入matplotlib包,设置中文字体 import matplotlib.pyplot as plt %matplotlib inline plt.rcParams[font.family] [Microsoft YaHei] plt.rcParams[axes.unicode_minus] False PS&a…

apache.camel_使用Apache Camel 2.14的轻松REST端点

apache.camelApache Camel 最近发布了一个新版本 , 其中一些新功能由我的同事Claus Ibsen博客发布 。 您确实应该检查他的博客条目并深入研究更多细节,但是我一直希望尝试的功能之一是新的REST DSL 。 那么,这是什么新的DSL? 实…

C语言和图形界面编程打造——浪漫的表白程序

谁说程序员不浪漫???来来来一起打造一个浪漫的表白程序,配上好听的音乐,瞬间高大上。下面,发下代码吧,昨天的愤怒的小鸟推箱子版本的没发,今天发这个,,&#…

ei eo eq什么意思_EI源刊是什么意思

EI源刊是什么意思?EI检索分为两种,一种是会议论文检索,一种是期刊论文检索,这两种检索的价值和地位是不同的,也由此引出了EI源刊的概念,EI检索包括JA类型和CA类型,JA是期刊论文检索,CA是会议论…