决战Python之巅(一)

前言

其实今天已经是报班学习的第三天了,但正式学习也是从昨天开始的。今天特意问了下老师,是否需要写博客呢,老师特意发语音教育了我一发。So今天在学习之前,先把昨天学习的只是复习一下吧(是一边听着Alex的鸡汤一边写的Orz)。

知识回顾

昨天一共学习了6个课时,其中最长的一个是Alex的开班介绍,一节长达80多分钟的鸡汤(我决定以后学不下去了就回去听听他的鸡汤,然后再奋发向上)。
剩下的5个课时介绍了一下编程语言,那这篇我就将介绍一下我所学习到的——什么是编程语言。

编程语言

编程语言是一种可以让人与计算机交流的语言,实质上来讲是我们对计算机发出的指令,通俗点来说,就是程序猿敲的代码(当然不是程序猿也可以敲),也称为“计算机语言”。
编程语言有很多种,但大致上可以给它们分为3大类,哪3大类呢?
1.机器语言
2.汇编语言
3.高级语言(也是我们现在用的比较多的语言)

(介绍之前,给大家介绍一部电影,卷福演的《模仿游戏》,讲的是“计算机之父”-艾伦·图灵的故事,有兴趣的可以去看看。)

1.机器语言

机器语言,也是最早的编程语言,由简单的0和1组成。机器语言是运行速度最快的编程语言(注意:是运行速度),电脑的CPU可直接解读的(它只能识别这种语言)。
因为只由简单的0和1组成,所以用这种语言写起程序来,特别烦,特别慢,这也就是它的缺点:开发速度慢;另外,一串全都是0和1的代码,第一眼看上去论谁应该都看不出来这句代码到底要干嘛?所以,机器语言的第二个缺点:可读性差。下面是一些机器语言的示例:

1.指令部份的示例
0000 代表 加载(LOAD)
0001 代表 存储(STORE)
...
2.暂存器部份的示例
0000 代表暂存器 A
0001 代表暂存器 B
...
3.存储器部份的示例
000000000000 代表地址为 0 的存储器
000000000001 代表地址为 1 的存储器
000000010000 代表地址为 16 的存储器
100000000000 代表地址为 2^11 的存储器
...
4.集成示例
0000,0000,000000010000 代表 LOAD A, 16
0000,0001,000000000001 代表 LOAD B, 1
0001,0001,000000010000 代表 STORE B, 16
0001,0001,000000000001 代表 STORE B, 1

如果后面不加解释,不了解它的人第一眼看上去大概只是0和1吧。事实上现在大概存在着多至100000种这样的机器语言的指令,除非你…一目十行过目不忘,一般人不可能全都记下来。
这样敲代码肯定十分痛苦,所以早期机智的人们想到了一个办法,既然机器语言的可读性这么差,那么是否可以给它们加个标记,这个标记就代表着对应的这条机器语言的指令,看到这个标记就能知道这条指令大概是干嘛的。这就是汇编语言。

2.汇编语言

汇编语言,官方的(其实就是百度啦)解释是:

汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

汇编语言是一种比较低级的语言(只比机器语言高级一点点,机器语言是最低级的),优点同机器语言:运行速度快,缺点也一样:开发效率低。虽然可读性上有了一点提升,但实际上并没有用=。=
照例,给大家看一下示例:

DATAS SEGMENT
BuF DB 1,2,3,4,^^^^^^^,100
BuF2 DW ?
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,OFFSET BuF
MOV CL,100
MOV AX,0
KK: ADC AX,[SI]
INC SI
LOOP KK
MOV BuF2,AX
MOV AH,4CH
INT 21H
CODES ENDS
END START

(网上Copy来的,有错的请指出来,反正我也看不太懂)
这段代码只做了一个简单的事情,1到100求和。
很烦吧…巨烦…
像我们这种向往自由的人类,怎么可能用这种语言嘛?(其实还是懒…),所以,一种开发效率更高的语言——高级语言,应运而生。

3.高级语言

作为向往自(lan)由(duo)的人类,发明了一种写起来容易,读起来方便的编程语言——高级语言。
之前我们讲过,计算机CPU只能读懂0和1的机器语言,那么高级语言它能读懂嘛?答案是肯定不能。所以,高级语言到最后还是会被“翻译”成机器语言,但是这个“翻译”过程就不需要我们操心了…我们只需要操心我们写的代码是不是有问题就行。

计算机语言具有高级语言和低级语言之分。而高级语言又主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。编写的程序称之为源程序。

高级语言——>低级语言,这中间有一个“翻译”的过程,而这个“翻译”过程又有所区别。我就用Alex的例子来讲:有两个中国作者甲和乙,他们各自写了一本书,有一天有两位外国朋友A和B来书店买书,A看上了甲的书,B看上了乙的书,但这两个外国朋友刚来中国不久,还读不懂中文,为了把自己的书卖出去,甲和乙分别请了一个翻译。甲和他的翻译说,我给你3个月时间,你把这本书翻译出来给这个外国朋友A。乙和他的翻译说,我想尽快让外国朋友等3个月,你这样,现在我读一句你翻译一句给外国朋友B听。为了卖书,甲和乙各自用了各自的方法。甲让翻译用三个月把整本书翻译成英文给A,乙当场读一句翻译一句给B。
在计算机语言中,我们将使用甲的方法的语言称为:编译型;将使用乙的方法的语言称为:解释型。这两种类型的官方定义是:

编写编译程序
编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如.exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了,因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
解释型语言
解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。比如解释性Basic语言,其专用的解释器在执行Basic程序时,会逐条读取解释每个语句,这个其实就是一个编译过程,然后再执行。一般来说,现有的解释性语言都是采用的逐行解释一句,执行一句这样的方式来构建的。这样解释性语言每执行一次就要翻译一次,效率比较低。

其实跟我讲的差不多啦,编译型语言(作者甲)通过一个编译过程(翻译三个月)将程序(书)编译为机器语言的文件(英文版的书);解释型语言(作者乙)运行时逐行将程序解释成机器语言(一句一句翻译成英文)。
所以,编译型和解释型的区别就体现出来啦:
编译型语言:运行速度快;
解释型语言:跨平台性好;
Q1:为什么运行速度快?
A1:因为运行之前已经将高级语言“翻译”成机器语言,运行时实际上运行的是机器语言,是CPU能够直接识别的,所以速度快。而解释型语言需要运行一句“翻译”一句,速度当然慢啦。
Q2:什么是跨平台?为什么跨平台性好?
A2:大家都知道windows吧,除了windows还有很多其他的系统,比如Linux、mac OS等,这就是不同的平台。世界上程序猿千千万,用的系统也五花八门,如果你在windows上写了个程序人家想要在Linux上直接用,不需要改任何东西,这就需要跨平台性足够好。那为什么说解释型语言跨平台性好呢?上面说过,解释型语言运行时逐句“翻译”的,“翻译”时解释器(翻译官)会根据自身的平台“翻译”成本平台可用的语言,而编译型语言编译后生成的机器语言文件只能在本平台上使用,放到其他平台上会有问题,需要去修改代码(作为向往自(lan)由(duo)的人来说,加班是不可能的,这辈子都不可能加班的…真香)。
像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等都是解释语言。
当然,我这里写的编译型和解释型的区别只是部分的,更多的我就不细说,大家可以自己去探索。

小结

Anyway,这些都是一些非常基础的基础知识,都是需要牢记的。这里我给大家小结一下:
编程语言可以分为三大类:机器语言汇编语言高级语言

机器语言由简单的0和1组成,是最底层的语言,运行速度最快
汇编语言是用了标记的机器语言。
高级语言相对于机器语言更为人性化,可读性好开发效率高高级语言又分为:解释型编译型编译型运行速度快解释型跨平台性好

猜你喜欢

转载自blog.csdn.net/qq_33267875/article/details/84453469