多学一门“外语”,和计算机畅快的“聊天”
摘要:北京时间20191203关于【多学一门“外语”,和计算机畅快的“聊天”】的具体情况和说明,让www.gzkingde.cn新闻频道的以图文形式为您慢慢道来。
“计算机语言”,很多人第一次听到这个词语的时候,也许会不太理解这个词语具体指的是什么。难道计算机还会像人类一样会说话吗?事实上它们之间不仅会“说话”,而且还会跟人类“聊天“。我们平时说的普通话,各地的家乡话、各个国家的语言是人与人之间沟通的桥梁,而计算机语言就是人们与计算机之间沟通的桥梁。通过对计算机说它们能听懂的语言,我们才能让它们更好的为我们服务。
众多计算机语言
计算机技术飞速发展的几十年间,计算机语言的种类层出不穷,到目前为止已经有成百上千种计算机语言了。计算机语言也被称为编程语言,从这个名字上也可以看出来是由人来通过特定的语法规则和字符来”编“写成一个一个程序。而这些程序会被计算机执行,由此实现了人们对计算机的精细控制。
编程语言可分为三大类,分别是机器语言、汇编语言和高级语言。
机器语言
机器语言是机器直接可以识别的语言,中间不用经过任何的”翻译“,所以这种语言运行起来速度也是最快的。大家都知道计算机只识别0和1,所以需要将想要计算机执行的操作用0和1来表达出来。指挥计算机的每一步的具体操作就是一条”机器指令“,一个程序就是由许多条机器指令组成的。
计算机的世界里只有0和1
一条指令是让CPU去执行一个最基本步骤,比如从内存中取出一个数。所以一条指令需包含一个操作码,这个操作码就规定了CPU需要执行的具体操作。
仅仅只有操作码还不够,CPU知道了这条指令的具体操作(从内存中取一个数的动作),但是从哪里取数字CPU无从知晓,所以一条完整的指令还需要包含一个操作数的地址。机器指令 = 操作码 + 操作数。
机器语言会被CPU直接执行
尽管机器语言被执行起来速度是很快的,但是如果想把程序用机器语言编写出来并不是一件容易的事,因为整个程序只有0和1两个字符组成,一旦有一个位置的字符不对,整个程序运行起来的效果将会是天差地别,所以这是一个十分细致、极为繁琐的事情,程序员不仅要考虑程序怎么编写,同时还要时刻注意不能发生错误。因此,机器语言也被归类为一种低级语言。在这种情况下,人们提出了程序设计自动化、用程序产生程序的想法。汇编语言
由于机器语言的繁琐,导致了汇编语言的诞生。汇编语言保持了机器指令的结构,都有操作码和操作数。但是为了方便编写,采用了便于记忆的符号来代替操作码,用地址符号代替了操作数的地址。例如:加、减、乘、除、取数、送数分别用+、-、*、/、<、>六个符号表示,用A、B、C三个字母表示三个内存单元。于是,汇编的代码可表示为:< A #取A地址单元中的数到寄存器+ B #寄存器中的数加上B中的数,结果放回寄存器+ C #寄存器中的数乘上C中的数,结果放回寄存器> A #将寄存器中的数送到A地址单元中
(示例中每行#后面的文字是写给程序员自己看的注释,起到记录作用,计算机不会理会#后面的内容)
十六进制程序与汇编代码一一对应
由于计算机并不认识加减乘除这些符号,所以不可能会执行这个程序。人们会事先提供给计算机一个特殊的程序,这个程序会将这些指令翻译成为由0和1组成的机器指令。这些用符号表示的指令就是”汇编语言“,那个把汇编指令翻译成机器指令的程序被成为”汇编程序“。把汇编指令翻译成机器指令的这个过程被成为”汇编“。相信有些人听说过”反汇编“这个词语,其实”反汇编“就是”汇编“的逆向过程,也就是将机器指令翻译成汇编指令,”反汇编“通常用于破解程序。
用IDA工具反汇编
用汇编语言写出的程序,一般说来也保持着同机器指令一一对应的关系,不过中间要夹带许多给汇编程序的”伪指令“。这些”伪指令“不会进入最终的程序中,但是会影响存储分配、程序的分块和链接等。
虽然汇编语言比机器语言要便捷易用了很多,但是现阶段用汇编语言设计程序的人越来越少了,只有少部分的专业程序员还在采用。越来越多的人加入了高级语言的大家庭中,高级语言更接近了人类语言,编写效率得到了大大的提升。高级语言
高级语言的诞生
一台计算机使用了极其复杂的技术,也可不能只存在一种语言,通常会有多种语言。如果想要和计算机更加流畅无障碍的沟通,需要掌握多种高级语言才好,好在计算机语言比人类的自然语言简单易学很多,而且只要掌握了一种高级语言,再去学习其他的高级语言将会十分轻松。
现如今,高级语言的种类繁多,虽然学习高级语言不是一件很难的事情,但是也不可能,也没有必要掌握全部的高级语言。根据自己将要使用高级语言的用途来选择合适的语言是一个明智之举。
现在很流行的高级语言
在科学计算、数据库检索和管理、行政和商业管理、发展软件系统等不同领域,都有着表现优异的语言。科学计算中,数值计算和非数值计算也使用不同的语言。20世纪50年代后期,欧洲学者为数值计算语言标准化做出了重大贡献,推出了ALGOL语言的标准。这种语言的构造经过较为认真的数学论证,它的功能也比较完备,但是“讲”起来有些晦涩难懂,很不直观。
同一时期在大西洋的另一端,IBM公司自己公司的计算机设计了一种数值计算语言,名叫FORTRAN。FORTRAN相比于ALGOL更加的平铺直叙,夹带着若干硬性约定,包含着不少可能出“副作用”的欠缺,但熟练的程序员可以高效地用FORTRAN解决实际问题。
高级语言的“王者”
在之后的30年里,FORTRAN凭借着它的实用性打败了ALGOL,在科学计算领域中占有重要地位。但是在20世纪70年代初期,美国的贝尔实验室设计出了一种数据结构丰富而指令风格更接近机器语言的C语言和用C语言编写的UNIX操作系统。随后,C语言在科学计算中逐渐占据了上风,经过50年的发展,直到现在还依然被人们广泛的使用着。
C语言和Unix之父——丹尼斯·里奇
科学计算的另一类语言
为了用计算机进行公式的解析推导,人们发展了另一批语言,像早期贝尔实验室分别在1964年、1966年和1968年推出的ALPAK和ALRTAN、REDUCE。1970年代IBM公司的FORMAC和SCRATCHPAD、对后来有过很大影响的MACSYMA、1971年在欧洲联合核研究中心发展的SchoonShip,以及1980年的Maple、1988年的Mathematica等。
杰拉德·特·胡夫特
计算机解析推导现在通称为“计算机代数”。很多计算机代数语言的发展与理论物理有着密切的关系。SchoonShip的设计者之一维特曼是一名荷兰理论物理学家,而他的学生胡夫特就实用这一工具计算了量子场论中的费曼图,他们俩因此获得了1999年的诺贝尔物理学奖。
高级语言按工作方式可分为编译型语言和解释型语言。
编译型
很多高级语言都属于编译型语言,它们的代表就是C/C++。用户必须先按照语法规则编写出“源代码”,然后调用相应的“编译程序”。这时编译程序会读取加载源代码,对用户编写的代码进行一系列的语法检查和优化等工作,然后编译程序会根据源代码产生一份用汇编语言表示的“中间结果”,紧接着根据这个“中间结果”会生成一份可供机器执行的机器指令,这个机器指令的集合被成为“目标程序”,也就是我们可以直接运行的程序了。
C语言的编译过程
解释型
从古老的Basic语言到现在大名鼎鼎的JavaScript语言,他们都属于解释型语言。解释型语言不需要某个特殊程序对用户编写的源代码进行编译出一个“中间结果”,也就是汇编的代码。而是由“解释程序”读入一句执行一句。具体过程是有一个特殊的“解释器”程序,它会将源代码或者源代码编译出的中间代码即时解释成“机器指令”。
不同点之一
从执行速度上看,编译型语言通过编译之后会生成一份可供机器直接运行的“目标程序”,执行效率较高。而反观解释性语言却要在每次执行的时候都要翻译一次,所以运行效率比较底下。
其实这个运行速度问题是在原来计算机性能差的情况下会有比较明显的区别,在现如今计算机强大运行性能前提下,它们运行的效率已经在不断缩小,也可以说是解释型语言的解释器依靠现代计算机的高性能,性能已经能够媲美编译型语言了。
不同点之二
可能有些读者会思考,既然解释型语言在过去要明显比编译型语言速度慢,那么它产生的意义是什么呢?其实它有一个优点是编译型语言自叹不如的,那就是跨平台性好。
编译型语言编译出来的目标程序既然能够直接让CPU运行,可以认为这个结果与CPU完美符合,那么换了一个不同的运行环境,比如换操作系统和某些硬件之后,这个目标程序显然不能符合新的运行环境,导致无法运行,所以用编译型语言编译出的程序一旦换了运行环境就需要拿出源代码,在新的运行环境上从新编译一遍。小程序还好,可能几分钟就会重新编译出来,有些比较大的程序,动辄编译几个小时,实在是很不方便。
反观解释型语言,在不同的运行环境中安装的是不同的解释器,解释器会根据当前运行环境的特点将读取的源代码翻译成当前环境的机器指令并执行。
不过现在计算机语言的发展,并不会把一个语言是编译型或者是解释性划分的这么清楚。许多计算机上备有“编译Basic语言”,个别计算机上配有“会话FORTRAN”,还有介于编译和解释之间的Java语言。
既有编译又有解释的Java
计算机语言随着计算机的技术,还在飞速发展中,种类越来越丰富,新的语言也越来越简单易用。现在大家日常使用过程中,不仅有“老牌大哥”C,C++等,Java、Python等“新贵”也越来越受到大家的欢迎。
(部分图片来源于网络,如有侵权请及时联系删除)