C语言的起源

1940年代,最早的开始,编程语言是机器语言,用0/1表示的、计算机能直接识别和执行的一种机器指令的集合。最早的编程方式,就是给纸带打孔或者卡片机打孔。机器语言直接与硬件沟通,极具针对性,但是非常难于理解和编写。

为了解决这个问题,汇编语言被发明了。它使用助记符号来代替机器语言中的二进制代码,使得程序员可以更容易地理解和编写程序。汇编语言经过汇编编译器将其编译为机器码,由计算机执行。汇编语言是机器相关的,即一种汇编语言只能在特定的计算机硬件上运行,这大大限制了其可用性。

1950年代高级语言开始出现。为了探索一种适于国际通用的编程语言,1958年由ACM(美国计算机协会)和GAMM(德国应用数学和力学协会)的代表们在苏黎世会议上提出国际代数语言(International Algebraic Language,IAL) ,后定名为ALGOL 58,即算法语言。1960年5月的巴黎会议上,发表了"算法语言Algol 60报告",确定了程序设计语言Algol 60,并且迅速成为科学和研究计算的主要语言。Algol 60是程序设计语言发展史上的一个里程碑,它标志着程序设计语言成为一门独立的科学学科,并为后来软件自动化及软件可靠性的发展奠定了基础。

1963年英国剑桥大学推出了CPL(Combined Programming Langurage)语言。CPL语言在ALGOL 60 的基础上接近硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的马丁·理查兹(Matin Richards)开发了BCPL,即 “Basic Combined Programming Language”。BCPL 作为一个简洁的编译器写作语言而开发的,它的目的是为操作系统和编译器的开发提供便利,同时保持语言的可移植性。它在编程语言设计中树立了简约和可移植性的原则,对后续程序设计影响较大。

在1969年,Ken Thompson和Dennis Ritchie等人开始在DEC的PDP-7计算机上开发UNIX系统,最初UNIX是用汇编语言编写的。

为了让UNIX可移植到不同的硬件平台上,1970年Ken Thompson将BCPL简化成了新的B语言,并用它来重新编写了UNIX。但B语言存在一些局限,例如对非PDP-11计算机的移植性和效率问题。为了克服这些限制并更好地利用在PDP-11上出现的更复杂数据类型,1972-1973年丹尼斯·里奇(Dennis Ritchie)开始设计C语言。取了BCPL的第二个字母作为这种语言的名字,也算上ALGOL、BCPL、B的一种延续。

他在B语言的基础上增加了数据类型和其他在结构化编程中有用的特性。到1973年,UNIX操作系统的内核及其主要组件都用C语言重写了,这一改动显著提高了UNIX的移植性。

C跟随着UNIX系统的一起传播。1978年,Brian Kernighan 和 Dennis Ritchie 合著了《C程序设计语言》(The C Programming Language),是C语言的权威指南,被称为 K&R C。C语言的第一个官方标准化努力发生在1983年,由美国国家标准协会(ANSI)进行,并于1989年发布了第一个标准ANSI C。之后,国际标准化组织(ISO)也采纳了这个标准,并且还在此后多次更新了C语言的标准。

C语言的特点包括高效、灵活、功能强大和紧凑,它提供了对硬件的紧密控制能力,同时仍然提供足够的抽象以编写可读的程序,这些特性使其成为开发系统软件(如操作系统和编译器)的首选语言。

C语言影响了众多后续的编程语言,比如C++、Objective-C、Java和C#等,是软件开发历史上一个里程碑式的创新。

在2024年最新编程语言统计中,C语言挺立在第二的位置。纵观编程语言的历史,C语言一直排在第一或第二的位置,可见其地位。
在这里插入图片描述
在这里插入图片描述

TIOBE编程语言排行榜: https://www.tiobe.com/tiobe-index/

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

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

相关文章

企业微信会话存档:大文件拉取、加密、上传

承接之前的文章企业微信会话存档sdk报错:A fatal error has been detected by the Java Runtime Environment 在之前的那篇文章结尾,我说发现了系统另外一个隐含的bug:企业微信会话存档拉取媒体文件是分片拉取,我的处理方式有问题…

IP地址如何保护网络安全

面对网络攻击时,仅依靠常态化的网络安全防御系统已捉襟见肘,如联合使用IP地址数据可以形成多元化的安全解决方案,全面监控网络活动,发现潜在威胁,制定有针对性的应对措施。 网络攻击追踪 当网站或应用遭受DDoS等网络攻…

Helm 简介:Kubernetes 的包管理器

简介 将应用程序部署到 Kubernetes(一个功能强大且流行的容器编排系统)可能会很复杂。设置单个应用程序可能涉及创建多个相互依赖的 Kubernetes 资源,例如 pods、services、deployments 和 replicasets,每个资源都需要编写详细的…

基于YOLOv8的暗光低光环境下(ExDark数据集)检测,加入多种优化方式---DCNv4结合SPPF ,助力自动驾驶(一)

💡💡💡本文主要内容:详细介绍了暗光低光数据集检测整个过程,从数据集到训练模型到结果可视化分析,以及如何优化提升检测性能。 💡💡💡加入 DCNv4结合SPPF mAP0.5由原始的0.682提升至…

在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程

一、前期准备: 1.安装VMware 虚拟机软件(不在讲解,可自行去下载安装)。官网:https://customerconnect.vmware.com/cn/downloads/details?downloadGroupWKST-PLAYER-1750&productId1377&rPId111471 2.下载iso…

【AWS】step-functions服务编排

文章目录 step-functionsState machine typeStandard workflowsExpress workflows design skillsError handlingsaga Transaction processing控制分布式系统中的并发性 收费 作为AWS Serverless无服务器的一个重要一环 使用step-functions方法将 AWS 服务链接在一起 step-funct…

用python编写爬虫,爬取二手车信息+实验报告

题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88805518使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件,再run all就行 注意事项 可能遇到的bug 暂无,有的话私信我

如何决定K8S Pod的剔除优先级

在Kubernetes(k8s)中,当节点资源面临压力时,如何决定Pod的优先级是一个关键问题。在Kubernetes 1.8版本之后,引入了基于Pod优先级的调度策略,即Pod Priority Preemption。这种策略允许在资源不足的情况下&a…

iOS平台如何实现低延迟RTSP转RTMP推送?

技术背景 好多开发者都知道我们有Windows、Android、Linux平台的RTSP转RTMP推送模块,实际上,iOS平台我们也有,并在2016年就已发布。我们都知道,一个好的RTSP转RTMP推送模块,需要足够稳定的前提下,还要低延…

Unity 接口、抽象类、具体类对象的配合使用案例

文章目录 示例1:接口(Interface)示例2:抽象类(Abstract Class)示例3:结合使用接口与抽象类示例4:多接口实现示例5:抽象类与接口结合 在Unity中使用C#编程时,接…

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同?

制作耳机壳的UV树脂和塑料材质在以下几个方面存在区别: 硬度与耐磨性:UV树脂具有较高的硬度和耐磨性,能够有效保护耳机内部零件,延长耳机使用寿命。而塑料材质相对较软,容易受到磨损。透明度与光泽度:UV树…

JAVA中的单例模式->懒汉式

一、步骤 1.构造器私有化>防止直接new private Cat(String name) {System.out.println("构造器被调用");this.name name;} 2.类的内部创建对象 private static Cat cat; 3.向外暴露一个静态的公共方法。getInstance public static Cat getInstance(){if (cat…

es6模块化导入导出与commonjs模块化(nodejs导入导出)详解——导出export

博主的桌面工具软件已经正式开发,获取方式: 可以关注我的小程序【中二少年工具箱】获取。(若小程序更新有延迟,或关注小程序后续功能,可先收藏小程序) 通过下载链接 百度网盘: 链接:https://p…

【SpringBoot】application配置(5)

type-aliases-package: com.rabbiter.cm.domaintype-aliases-package: 这个配置用于指定mybatis的别名,别名是一个简化的方式,让你在Mapper xml 文件中引用java类型,而不需要使用使用完整的类名。例如,如果你在 com.rabbiter.cm.d…

pymunk初步:设置重力

文章目录 官方示例可视化 官方示例 pymunk是一款2D物理引擎,在游戏开发中十分有用。安装过程无坑 pip install pymunk下面举出官网的一个案例,来简述pymunk的使用流程 import pymunkspace pymunk.Space() space.gravity 0,-981body pymunk.Body() …

Vue组件通信的方式

文章目录 props 父传子$emit 子传父事件总线&#xff08;Event Bus&#xff09;使用Vuex\Pinia状态管理库使用provide/inject props 父传子 父组件向子组件传递数据&#xff1a;通过props属性将数据从父组件传递给子组件。 <template> <div> <child-compone…

邮件群发系统怎么用呢?专业的邮件群发器?

邮件群发系统哪个比较好&#xff1f;邮件营销系统的效果怎么样&#xff1f; 在现代商业活动中&#xff0c;邮件群发系统已成为企业营销的重要工具。那么&#xff0c;邮件群发系统究竟如何使用呢&#xff1f;接下来&#xff0c;蜂邮EDM将为您详细解析邮件群发系统的使用方法。 …

股市反转数据分析

20240206是一个很好的股市反转数据分析的样本。因为之前的1月份2月前3个交易日也就是2月1日&#xff0c;2月2日和2月5日基本都是大跌。数据记录如下&#xff1a; 指数名称指数代码收盘价 [日期] 20231229 [单位] 元收盘价 [日期] 20240205 [单位] 元区间涨跌幅上证指数000001.…

深度学习图像分类相关概念简析+个人举例3(CNN相关补充,附详细举例代码1)

【1】激活函数&#xff08;Activation Function&#xff09;&#xff1a;在深度学习&#xff08;CNN&#xff09;中&#xff0c;激活函数用于引入非线性性质&#xff0c;帮助模型学习复杂的关系。常见的激活函数有ReLU、Sigmoid和Tanh等。 &#xff08;1&#xff09;ReLU激活函…

Godot 游戏引擎个人评价和2024年规划(无代码)

文章目录 前言Godot C# .net core 开发简单评价Godot相关网址可行性 Godot(GDScirpt) Vs CocosGodot VS UnityUnity 的裁员Unity的股票Unity的历史遗留问题&#xff1a;Mono和.net core.net core的开发者&#xff0c;微软 个人的独立游戏Steam平台分成说明独立游戏的选题美术风…