C语言的历史
1、ALGOL语言
ALGOL ,为算法语言(ALGOrithmic Language)的缩写,是计算机发展史上首批产生的高级程式语言家族。当时还是晶体管计算机流行的时代,由于ALGOL语句和普通语言表达式接近,更适于数值计算,所以ALGOL多用于科学计算机。
ALGOL 58:
1958年,ACM小组(美国计算机协会)和以当时联邦德国的应用数学和力学协会(GAMM)在苏黎世把他们关于算法表示法的建议综合为一,是一种编程语言,被命名为IAL(国际代数语言,International Algebraic Language),后来改称Algol 58。ALGOL家族的第一个成员。
ALGOL 60:
图灵奖获得者:艾伦.佩利(Alan J.Perlis)在巴黎举行的有全世界一流软件专家参加的讨论会上,发表了"算法语言Algol 60报告",确定了程序设计语言Algol 60。Algol60语言的第一个编译器由Edsger W. Dijkstra来实现。1962年,艾伦。佩利又对Algol 60进行了修正。
Algol 60引进了许多新的概念如:局部性概念、动态、递归、巴科斯-诺尔范式BNF(Backus-Naur Form)等等。
Algol 60是程序设计语言发展史上的一个里程碑,它标志着程序设计语言成为一门独立的科学学科,并为后来软件自动化及软件可靠性的发展奠定了基础。
2006年3月1日,国际计算机协会(ACM)宣布彼得.诺尔为2005年A.M.图灵奖的获得者。这个奖项是由于诺尔在定义Algol 60这种程序设计语言方面的先驱性工作而颁发给他的。Algol 60是许多后来的程序设计语言,包括今天那些必不可少的软件工程工具的原型。
诺尔博士在1960年是具有极高影响的《算法语言Algol 60报告》的主编。这份报告的优雅、一致和连贯使他声名鹊起,并被认为是创造了这种算法语言的强大功能和简易性的重要贡献者。这份报告先驱性地使用了BNF范式(Bcakus-Naur-Form)用以定义程序设计语言的语法。BNF现在是定义一种计算机语言的标准方式。诺尔还因为他对于编译设计的贡献、以及在计算机程序设计方面的技巧与实践而受到表彰。
计算科学诞生的标志,2002年,前图灵奖得主Edsger Dijstra把Algol 60的发展描述为“一个绝对的奇迹”,标志着他所说的“计算科学”的诞生,因为Algol 60首次显示了自动计算能够并且应当成为学术关注的主题。 Algol 60的发展是一群极具天赋的人才的工作成果,其中包括几位以后的图灵奖获得者。
在Algol 60报告出版之前,计算机语言是通过说明性的使用手册和编译代码本身而非正式地定义。这个报告通过使用BNF来定义语法,并用精心选择的说明文字定义语义,从而简洁、有力而又清晰。17页长的Algol 60报告展示了对优雅清晰的语言的完美定义,这种语言可用于计算机之间交流,也可用于人类之间交流。这种语言精心地做到不依赖于任何特定的计算机的属性。这种新的语言对于编译程序作者是一个很大的挑战。诺尔博士继续和他人合著了《GIER Algol 编译程序》(丹麦开发的晶体管电子计算机被称为GIER),这是第一批能够完全准确地处理语言的强大过程机理的编译程序之一。
2、CPL语言,高级语言
3、BCPL语言,CPL的简化版本
1967年英国剑桥大学的 Matin Richards对CPL语言做了简化,推出了 BCPL (the Basic Combined Programming Language)语言。
BCPL最早被用做牛津大学的OS6操作系统上面的开发工具。后来通过美国贝尔实验室的改进和推广成为了UNIX上的常用开发语言。
BCPL有些类似于Fortran,也是典型的面向过程的高级语言。BCPL的语法更加靠近机器本身,适合于开发精巧,高要求的应用程序,同时对编译器的要求也不高。BCPL也是最早使用库函数封装基本输入输出的语言之一,这使得他跨平台的移植性很好。BCPL的代码用小写字母书写,有别于同时代的BASIC和PASCAL。BCPL对于字符串的支持很差,这种缺点一直延续到了他的后代中,BCPL的内存管理也很糟糕,不过幸好在他的后代中这个缺点被改掉了。BCPL程序从一个主函数中开始,功能模块可以添加在各个函数中,函数支持嵌套和递归。BCPL本身并没有被使用太长时间,这是因为他的后代们实在太强大了。
4、B语言,BCPL的简化版本
1970年美国贝尔实验室的 Ken Thompson 以 BCPL 语言为基础,又作了进一步的简化,设计出了很简单的而且很接近硬件的 B 语言,这个名字取自BCPL中的第一个字母。并用B语言写出了第一个 UNIX 操作系统。但 B 语言过于简单,功能有限。B语言使用的时间更短。
5、C语言,B的加强版本
三年后,1972年至1973年间,贝尔实验室的 D.M.Ritchie 在 B 语言的基础上设计出了 C 语言(取BCPL的第二个字母)。C语言即保持 BCPL 语言和 B 语言的优点(精练、接近硬件),又克服了他们的缺点(过于简单,数据无类型等)。又重新用C语言实现了unix,现在的BSD和unix和苹果系统都是原来的unix系统。C几乎具有低级语言的面向硬件、可以位操作、语法自由、编译工具丰富、运行速度快、关键字少、应用异常灵活的过程编程语言的集大成者。但是依旧拦不住编程思想的进步,面向对象编程才是大潮。
C语言的特点:
1、C语言是一种小型编程语言,只有32个关键字;
2、C语言具有强大的内置函数库;
3、C语言是一种方便移植的编程语言;
4、C语言 执行效率高速度快;
5、C语言提供了结构化编程所需要的所有构造
6、C语言 提供了系统编程的构造,适用于系统编程
7、C语言提供了指针,大大增强了编程的灵活性,加强了抽象编程的能力
8、C语言提供了递归功能适用于解决棘手的问题
9、C语言具有顽强的扩展能力,从数据类型到数据操作到编程思想
A、C语言是一种强类型语言
B、C语言非常相信编程者的能力,可以完全编程
C、C语言编程能够实现用户的任何需要
D、C语言能够和其他语言一起进行混合编程
E、C语言编程工具异常丰富
F、C语言分阶段编译,大大提高了编程的灵活性
6、C++语言,C的面向对象版本
而C语言和C++则在日后成为了最流行的高级语言。前者是面向过程的王者语言,后者是面向对象编程语言的垫脚石,太复杂了,后来很快被java超越,现在被python碾压了。后来,也许还有其他的黑马,目前C++还需要努力,不管怎么说,现代的操作系统和编译器或者虚拟机总还是要C语言实现的,C语言已经成功的在时代发展的过程中留下了自己的深深的印记。
C语言的历史的更多相关文章
- C语言的历史及个人拙见
C语言是一个无限广阔的世界,你刚开始睁眼看它的时候以为视线的尽头就是边界,但当你慢慢走去,才发现天外有天.这或许就是江湖传说只有C才有真正高手的原因,或许我们也可以反过来说:C没有高手——因为没有人能 ...
- JavaScript 语言的历史
说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.诞 ...
- java基础学习总结一(java语言发展历史、jdk的下载安装以及配置环境变量)
最近一段时间计划复习一下java基础知识,使用的视频课程是尚学堂高淇老师的,上课过程中的心得体会直接总结一下,方便以后复习. 一:计算机语言的发展 1:机器语言,最原始的语言,主要有“01”构成,最早 ...
- Java基础学习总结一(Java语言发展历史、JDK下载安装以及配置环境变量)
最近一段时间计划复习一下java基础知识,使用的视频课程是尚学堂高淇老师的,上课过程中的心得体会直接总结一下,方便以后复习. 一:计算机语言的发展 1:机器语言,最原始的语言,主要有“01”构成,最早 ...
- [转]C++语言的历史和标准化
转:https://blog.csdn.net/lemonrabbit1987/article/details/48222339 1979年4月,贝尔实验室的Bjarne Stroustrup(本贾尼 ...
- UVa 1671 语言的历史——判断两个DFA是否等价
题意 一个DFA可以用一个5元组 $((Q, \sum , \delta , q_0, F))$ 表示,其中 $Q$ 为状态集,$\sum$ 为字母表,$\delta$ 为转移函数,$q_0$ 为起 ...
- Java基础笔记(1) 语言 JAVA的历史 Java的搭建环境
本文除了搭建是重点,其他的都当阅读小说一样去看就好了,不想看可以直接抓住重点,我会改变颜色勾出重点! 英语是人与人交流沟通的重要方式之一.JAVA:是人与计算机沟通交流重要方式之一.我们除了用java ...
- Java学习1 - java 历史
Sun的Java语言开发小组成立于1991年,其目的是开拓消费类电子产品市场,例如:交互式电视,烤面包箱等.Sun内部人员把这个项目称为 Green,那时World Wide Web还在图纸上呢.该小 ...
- 【转】从Go、Swift语言出发
Google于2009年第一次提出了Go的构思,Facebook在去年春天引入了Hack,随后不久Apple也发布了其Swift语言. 在战争中,胜利者写历史书:在科技中,赢的公司都在写编程语言.互联 ...
随机推荐
- vue混入 (mixin)的使用
混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项. 使用示 ...
- JQuery里input属性赋值,取值prop()和attr()方法?
一.赋值的时候 如果是<input type="checkbox" checked>这样的只有属性名就能生效的属性 推荐prop,即:$('input').prop(' ...
- React Native 开发豆瓣评分(一)环境搭建&配置模拟器
详细可参考 官方文档,这里进记录一些重要过程. 安装环境 下载 Android Studio 选择 Custom 进行安装: Android SDK Android SDK Platform Perf ...
- zabbix推送内存监控单应用shell
利用top方式获取指定第三方的内存使用率 #!/bin/bash process=$1 if [ ! -z $process ];then cd /zabbix/zabbix-agent/script ...
- nexus3上传jar包
1.选择仓库位置 2.填写jar包信息 3.查看上传的jar包信息 上传成功. 4.maven的settings.xml完整配置 <?xml version="1.0" en ...
- rabbitmq rabbitmqadmin基本操作
一.下载管理命令 http://192.168.56.12:15672/cli/rabbitmqadmin 二.上传到mq对应服务器并添加权限 chmod +x /usr/locat/sbin/rab ...
- ElasticSearch 连载二 中文分词
ElasticSearch 连载二 中文分词 上一章ElasticSearch 连载一 基础入门 对Elastic的概念.安装以及基础操作进行了介绍. 那是不是有童鞋会有以下几个问题呢? 什么是中文分 ...
- Codeforces Round #519 D - Mysterious Crime
题目 题意: 在m组数,每组有n个数(数的范围1-n)中,找到某些序列 使它是每组数的一个公共子序列,问这样的某些序列的个数? 思路: 不难想出答案ans是≥n的. 创立一个next数组,使每组中第i ...
- JavaScript 隐式原型(_proto_)与显示原型(prototype)
作者:苏墨橘链接:https://www.zhihu.com/question/34183746/answer/59043879来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- vscode安装依赖报错 TypeError: zipfile.readEntry is not a function
错误原因是npm的版本太高,需要把5.x的版本换回4.x的 npm install npm@4 -g 或者 cnpm install npm@4 -g 详见:https://github.com/Mi ...