[Python学习日记-1] 编程语言介绍与分类
编程语言介绍与分类
一、编程语言介绍
编程语言它本质上跟人类语言是一样的,是一种人类与计算机之间沟通的工具,人类的语言是为了人与人沟通,而编程语言是为了人与计算机沟通。计算机本质上就是电流和一堆硬件组成,而其中的信息是通过晶体管由高低电压来表示不通信号、字符、代码等等不同的信息的,即高电压代表1,低电压代表0。
01000001 65 A
01100001 97 a
# 中间都需要通过ASII编码表进行查询
01000001就是机器语言,是直接跟硬件打交道的,但是这样对于人类来说太难接受了,正常人都无法读懂这是什么意思,然后人们就发明了汇编语言,就想下面所举的例子play_m代表的二进制码。
play_m指令的二进制码:1111
在这里可以看得出,其实汇编语言就是给一些常用的二进制码进行了一些归类,并用一些人类看得懂的字符表达了出来。但是这种语言的便捷性和沟通效率还是不太高, 就像下面的代码一样,这么一大堆代码只是在屏幕打印一句“Hello, World!”。但是这种语言还是有人使用的,主要是硬件厂商、嵌入式开发这种需要和硬件直接打交道的在使用,普通程序员很少会接触到。普通程序员主要接触到的都是高级语言,而Python就是其中一种高级语言。
section .data ; 数据段声明
message db 'Hello, World!',0xA ; 要输出的字符串
len equ $ - msg ; 字符串长度
section .text ; 代码段声明
global _start ; 指定入口函数
_start: ; 在屏幕上显示一个字符串
mov edx, len ; 参数三:字符串长度
mov ecx, msg ; 参数二:要显示的字符串。将字符串的地址保存到寄存器ebx中
mov ebx, 1 ; 参数一:文件描述符(stdout)
mov eax, 4 ; 系统调用号(sys_write)
int 0x80 ; 调用内核功能
; 退出程序
mov ebx, 0 ; 参数一:退出代码
mov eax, 1 ; 系统调用号(sys_exit)
int 0x80 ; 调用内核功能
二、编程语言的分类
汇编语言和机器语言是一种低级语言,是与计算机硬件直接相关的语言。它们使用计算机指令的二进制代码表示,对程序员来说较为复杂和难以理解。高级语言是相对于低级语言而言的,它更接近于自然语言,更容易阅读和理解。高级语言提供了一系列的语法和结构,让程序员能够更方便地编写程序,如C、Java、Python等。总的来说高级语言是对底层硬件的各种指令做了封装。
高级语言的构建可以说是在低级语言的基础上的,本质原理就是人类编写了代码(高级语言) ——> 翻译 ——> 翻译成机器语言,然后在让计算机执行。在这里根据翻译方式的不同就产生了两个流派,即编译型语言和解析型语言。
编译型语言:
人类代码 ————> 一次性把代码给翻译官(编译器)————> 汇编 ————> 机器语言
编译型语言代表:C、C++、Golang
编译型语言的优点:执行速度快
编译型语言的缺点:跨平台可移植性差,编译型语言的执行依赖于底层的硬件和操作系统。因此要了解编译型语言的缺点要先了解硬件的分类,硬件我们通常指的是CPU,为什么呢,因为计算机的所有指令都是由CPU来发送的,所以我们想要计算机帮我们干活那就一定要和CPU沟通。CPU也分为两大阵营,一边是以Intel和AMD为代表的复杂指令集(例如一个动作,多个指令共同完成),他们拥有着高性能的同时也存在着高功耗;另一边是以ARM为代表的精简指令集(例如一个动作,只需要一个指令完成),主要用于手机、平板等设备,他们主要的特性就是低功耗。除了硬件还有软件,软件这里指的是操作系统,即Windows、Linux、Mac。所以说从硬件层面来看,编译型语言在Intel的电脑上能执行,而去到了ARM的设备上就无法执行了,因为他们不是同一套指令集,更像是人类所说的不同语种;从软件层面来看, Windows、Linux、Mac这三个系统都是使用C语言编写的,所以说你的C语言程序在这三大平台上同时运行是没有太大问题的,不过不同系统的一些细节语法需要调整,更像是人类所说的方言。
解析型语言:
人类代码 ————> 边执行边翻译,陪同翻译(解释器/虚拟机)————> 汇编 ————> 机器语言
解析型语言代表:Python、PHP、Java、Ruby、C#
解析型语言的优点:跨平台好,人类程序员只需要和翻译打交道,而翻译精通多国语言
解析型语言的缺点:解析型语言是一种边执行边翻译的语言,在这里翻译是需要时间的,这样会影响执行速度,相对于编译型语言来说速度会慢,由于计算机的发展这种慢人已经无法感知到了,而这种慢只是计算机理解的慢,例如1ms和10ms的差别,大多数情况下,语言的快慢使我们人类感知不到的,不过在一些数据量巨大的程序(百度搜索引擎)当中还是会优先使用编译型语言去写。