您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

编程语言是怎样从机器语言进化到面向对象的?

时间:2020-09-10 14:04:51  来源:  作者:

机器语言

这个问题应该从机器语言是怎么工作说起的。

在计算机的太古宙时代,在制造一台计算机之前,首先要做的是为它建造一座能够容纳它的大房子。然后还要配接上水电资源,因为它运行起来就要耗费半座城市的电能,散热也得跟上。

而能够操纵这样的由电子管组成的怪兽的人,则是看起来低调神秘的科学怪人,他们在一卷纸带上打上不规则的孔,送入机器,然后等着这台怪兽一阵轰鸣之后在纸带上输出结果。

而这样的机器也仅能进行算术运算,那些穿孔纸带组成的神秘符号,就是机器语言。

下面看一段机器语言的代码吧:

 A10010
 8B160210 01D0 A10410

要是有谁一眼就能说出它的功能,那么请接受我双膝跪地顶礼膜拜。如果看不明白,也没关系,后面语言越高级越容易看明白。

上面的每一条语句就是CPU可执行的一条指令。CPU常被比喻成计算机的大脑,因为指令的计算最终是由它来完成的。

而指令通常包括运算和赋值,往往单条指令的动作都是简单的,只做一件事情。我们通过把多条指令按顺序排列让CPU执行,以此来实现复杂的逻辑。

编程语言是怎样从机器语言进化到面向对象的?

 

汇编语言

可想而知,如果要这样写代码,人类还怎么进步?于是科学家们就做了一下改进,让代码好懂了些,这就有了汇编语言。

将上面机器的代码翻译成汇编语言:

 mov AX, X
 mov DX, Y add AX, DX
 mov Z, AX 

在这里我们可以看到,神秘的字母和数字组合转化成了有意义的单词和字母了。学过汇编语言的同学们自不必说,没学过的也可以大略猜测到,mov应该就是move的缩写,是搬运、赋值;add就更好理解,加法。

而汇编的特点是它虽然比机器语言更好理解了些,但它和机器语言也是逐条对应的。要想实现复杂的逻辑控制,写出来的代码仍然很不好理解。

科学家们再一次对编程语言进行了改进,而这一次则是飞跃。

 

高级语言

诞生于1957年的Fortran,以及1960年左右发布的COBOL,被认为是最早的计算机实用编程高级语言。它们相对于汇编语言的改进在于,语句不再和机器指令对应,而是更接近自然语言。

所以高级语言中的“高级”二字,并不是说新的编程语言有多么先进,而是说它们在系统中处于更高一级的抽象。高级语言的代码更适合于人类编写与阅读了。

例如前述的机器语言和汇编语言代码,如果用Fortran语言写出来,就是这样:

 Z = X + Y

怎么样?即使不懂编程,也能看出来是什么意思吧,这类似一个数学算式了。当然,在计算机语句里,这是一条赋值语句,和数学语境中的等式还是有所不同的。

而高级语言需要通过编译器,将文本符号翻译成机器可以执行的指令集。编译的过程一般分为四个过程,分别是预处理、编译、汇编、链接,最后得到可执行文件。

可以使用近似于自然语言的方式写程序,这显然有助于编程技术的推广,也推动了计算机的普及和软件的快速发展。

可是编程的效率提高之后,另一个问题也随之而来。那就是代码缺少规范,只要能实现功能,大家可以随心所欲地写代码。尤其是对goto语句的滥用,导致代码混杂扭曲,因此这样的代码也被称为“面条式代码”。

当软件需求进一步膨胀时,这样的编程效率又跟不上发展了。由此在20世60年代爆发了软件危机。1968年北约在联邦德国的国际学术会议上正式提出了这个名词。

软件危机的意思就是说,大家照这样去写代码,那么再过几十年,全人类都去当程序员也生产不出实际需要的软件来。确实有点危言耸听,但我们知道现在并没有出现那么骇人的景象,这都要感谢科学家们在编程思想上的进步。

 

结构化编程

同样是在1968年,荷兰计算机科学家Dijkstra在写给ACM通讯的一封信中,声明应该在程序中废除goto语句,只需要使用三种基本结构就可以完成所有的程序功能。

这封信就是著名的“GoTo letter”,由这封信开始掀起了结构化编程的浪潮,Dijkstra也因为他在计算机技术上的卓越贡献,在1972年获得了图灵奖。

编程语言是怎样从机器语言进化到面向对象的?

Dijkstra老爷子

Dijkstra提出的三种基本程序结构,分别是顺序、选择、循环。

顺序 就是从第一条语句开始,直到执行至最后一条语句结束,中间每一条语句都要被执行到。

选择 则是根据条件判断,程序决定执行相应的语句。

循环 则是判断条件,重复执行语句。

上世纪七十年代,诞生于贝尔实验室的C语言是最知名的结构化编程语言。同时C语言也是使用最广泛的编程语言。

时至今日,得益于物联网的快速发展,在IOT技术栈中占有重要地位的C语言,又在TIOBE编程语言排行榜上大放异彩。对于一门存在了四十多年的编程语言来说,这不能不说是一个奇迹。

C语言因其简洁的语法,同时具备对系统底层的操作能力,成为编写操作系统及底层服务的最佳选择。

软件危机终究还是没有爆发,人类也从单机时代进入了互联网时代。人们又需要开发起来更快、还要更好用的编程语言了。

面向对象编程

面向对象编程的英文是Object Oriented Programming,下文中简称其为OOP。一般来说,支持OOP的语言都包含三个特性,即封装、继承和多态。

其实最早的面向对象编程语言是Simula 67,它诞生于1967年。在当时,OOP所要求的三个特性,Simula 67就都具备了。

所以面向对象技术还真不是我们遇到危机时才发明出来的,而是早已存在,但在60年代时太过超前而并没有被普及开来。

直到互联网和PC兴起,快速产品化的要求催使人们去寻找更适合的方法。语法像自然语言已经远远不够了,编程语言最好还能符合人类的自然思维过程,而OOP包含的三个基本特性,正好满足了这个要求。

如今我们在学习面向对象编程语言时,老师都会通过现实世界打比方。例如定义一个类就相当于画好了一张汽车设计图,所有的细节都隐藏在私有方法中,对外只公开操作方法,包括启动和停止等。

通过类,就能派生出一个实例,也就是一辆实际可以开的车。你调用公开的方法就能开车上路了,而且不用关心它内部是如何运作的。你只要能把奥迪开起来,那么宝马你也能开。

JAVA、C#、php等语言正是在这样的背景下兴起,它们上手简单,一名新人经过短期培训就能上岗工作。这降低了软件开发的门槛,也让互联网企业具备了快速拓展业务的能力。

C++语言在早期因其包罗万象的特点,曾被大神Linus痛批。但在C++ 11发布之后,C++被注入了许多现代编程语言的元素,也被称为Morden C++。如今C++已经大量应用在游戏引擎、人工智能、大数据等领域的基础组件构建中。

当进入移动互联网时代之后,编程语言发展更加快速,但都会具备面向对象的三个基本特性。

在终端,苹果公司推出的编程语言就有Objective C、Swift。以谷歌为主导的Android平台则使用java、C/C++、Kotlin。

编程语言不断推陈出新,但只要是支持OOP特性的,对程序员来说就可以快速上手工作。这可能也是中国在移动互联网时代拥有诸多优秀企业和应用的原因吧。

 

结语

纵观编程语言的发展,可以清晰地观察到,它是朝着对人越来越友好的方向的。从便于识别,到易于阅读,再到符合自然思维习惯。

编程语言前进的每一步,都是为了让人在使用这种工具时,能够更有效率地实现功能,达成目标。在一个阶段被满足之后,快速兴起的需求又会推动编程语言走向下一个时代。

可以推测,基于人工智能技术的辅助,编程技术将不再需要经过大量专业学习才能掌握。任何人只要具备逻辑表达的能力,就能生产出符合自己需要的软件产品。

这样的设想在现在看来可能是太美好了一些,因为有科学家认为完全不需要人工干预就不太可能,因为机器无法处理所有的细节。

我也很好奇,在未来编程语言会是什么样呢?



Tags:编程语言   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
什么编程语言最好?这是个能让各路程序员吵翻天的话题,每种语言都有自己的拥趸,全球现在找出三五十种编程语言都不是问题,热门的至少也有20种,先不说这些语言好用与否,它们的性能也...【详细内容】
2022-07-01  Tags: 编程语言  点击:(29)  评论:(0)  加入收藏
转自:https://www.jdon.com/61280 本文分析了来自 5,508 个软件工程职位列表的数据,以帮助您找出哪些编程语言的薪水最高。 我们分析了RemoteOK(世界上最大的工作委员会)上 5k...【详细内容】
2022-06-30  Tags: 编程语言  点击:(27)  评论:(0)  加入收藏
出品|开源中国文|叶子2015 年的 5 月 15 日,Mozilla 发布了 Rust 1.0。 走近Rust Rust 是通用的编译器型编程语言,设计准则为“安全、并发、实用”,支持函数式、过程式以及面向...【详细内容】
2022-05-16  Tags: 编程语言  点击:(49)  评论:(0)  加入收藏
1 语言先来说一下什么叫语言吧,以及语言的功能。我们用来交流的工具叫语言,通过这个工具,你可以和你想交流的人进行一番的交流,这就叫语言;它只是一个用来交流的工具而已。它的功...【详细内容】
2022-03-30  Tags: 编程语言  点击:(76)  评论:(0)  加入收藏
近日,Rust和Swift资深专家Aria Beingessner发布的一篇文章《C 不再是一种编程语言》在Hacker News上引起了热烈讨论。原文链接: https://gankra.github.io/blah/c-isnt-a-lang...【详细内容】
2022-03-25  Tags: 编程语言  点击:(121)  评论:(0)  加入收藏
为什么编程对黑客很重要?在了解黑客的最佳编程语言之前,您必须了解编程在黑客中的重要性。 必须了解编码:黑客攻击涉及破坏协议和利用网络;因此,作为一名黑客,您需要了解您所关注...【详细内容】
2022-02-23  Tags: 编程语言  点击:(137)  评论:(0)  加入收藏
本文是“2021 InfoQ 年度技术盘点与展望”系列文章之一,由直播内容整理而成,重点聚焦编程语言领域在 2022 年的核心趋势展望,希望能帮助你准确把握 2022 年编程语言领域的核心...【详细内容】
2022-01-29  Tags: 编程语言  点击:(114)  评论:(0)  加入收藏
即使在安全技术取得进步之后,网络犯罪仍在不断增加。据统计,网络犯罪每分钟给企业造成约 290 万美元的损失。主要是因为新技术不断涌现,难以维护安全。随着网络威胁的增加,网络...【详细内容】
2021-11-04  Tags: 编程语言  点击:(157)  评论:(0)  加入收藏
作为程序员吃饭的工具,编程语言之间也形成了某种鄙视链,各大论坛里弥漫着剑拔弩张的气氛,众口难调。也难怪有很多初学者会有疑惑,为什么会有这么多编程语言,我到底应该学什么语言...【详细内容】
2021-06-29  Tags: 编程语言  点击:(198)  评论:(0)  加入收藏
JavaScript是Web开发中最简单的面向结果的语言之一。该语言使数据的处理和计算成为一种方便。它还有助于将视觉效果添加到屏幕上。它是一种同时用于客户端和服务器端应用程...【详细内容】
2021-06-25  Tags: 编程语言  点击:(186)  评论:(0)  加入收藏
▌简易百科推荐
1. 前言了解响应式编程,首先我们需要了解函数式操作和Stream的操作,下面我们简单的复习一下喽。1.1 常用函数式编程函数式接口中我们先来回顾一下Java中的函数式接口。常见的...【详细内容】
2022-07-15  二哥学Java    Tags:编程   点击:(1)  评论:(0)  加入收藏
在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastify 构建一个 Full-stack 应用程序。在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastif...【详细内容】
2022-07-12  qaseven    Tags:全栈   点击:(9)  评论:(0)  加入收藏
好的软件开发网站有哪些?做软件开发哪些网站能提供帮助呢?这些很多做软件开发的小伙伴都会问到的问题。007出海全球社交流量导航网站,整合了多方出海跨境网站资源,为你介绍出海...【详细内容】
2022-07-08  Chuhai007    Tags:软件开发   点击:(10)  评论:(0)  加入收藏
我们用monkey做压力测试后,会保存一个monkey日志,那如果想快速的分析日志中有哪些异常,我们可以用批处理工具进行快速的筛查,我们一起来看看吧。先编写个小脚本,然后修改为bat后...【详细内容】
2022-07-08  溪流涌动    Tags:monkey   点击:(13)  评论:(0)  加入收藏
白盒测试落地实践分为两个大方向,一个是静态分析,一个是动态分析,当然啦,也可以叫做静态测试和动态测试。那我们如何高质量保效率的做好白盒测试呢?Parasoft已经为您准备好了成熟...【详细内容】
2022-07-08  Parasoft中国    Tags:白盒测试   点击:(11)  评论:(0)  加入收藏
Altium Designer 自带脚本功能的开发项目,可以调用官方AD API接口对原理图或者PCB进行自动操作,本文主要分享开发的流程,和一些基本的概念信息,本文介绍的脚本工具例子可以用在P...【详细内容】
2022-07-07  电子工程师伟哥    Tags:Altium Designer   点击:(21)  评论:(0)  加入收藏
一、目录介绍 前置知识点 NIO Netty 的核心组件 Channel Callback Future 和 Promise 事件和 ChannelHandler Hello World二、前置知识点1、NIO首先我们需要回顾一...【详细内容】
2022-07-06  架构师jickly    Tags:聊天系统   点击:(16)  评论:(0)  加入收藏
1.事件流事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解,提升开发实践中对事件运用的灵活度。2.捕获和冒泡捕获阶段是【从父到子】的传导过程,冒泡阶...【详细内容】
2022-07-06  金乾坤    Tags:API   点击:(13)  评论:(0)  加入收藏
刷盘策略CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略:public class CommitLog { public CompletableFuture<PutMe...【详细内容】
2022-07-06  Java码农之路    Tags:RocketMQ   点击:(16)  评论:(0)  加入收藏
最近读了本好书-《深度学习推荐系统》,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家。 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体...【详细内容】
2022-07-05  InfoQ    Tags:推荐系统   点击:(22)  评论:(0)  加入收藏
站内最新
站内热门
站内头条