学习、工作中,我们经常会听到这样一句话“Python只是脚本语言…云云”,
当我第一次听到时,脑子里浮现了一串问号,
脚本语言?什么是脚本语言? Python不是解释型语言吗? 哎,不还有编译型语言吗? 哇,乱糟糟
在这里简单梳理一下,不会深入到“术”、“道”的层面,只是理清基本概念,明白 what
无论是脚本语言、解释型语言、编译型语言等都属于计算机编程语言,下面就来看看计算机编程语言的
发展历程和分类,计算机编程语言从最初的**机器语言–>汇编语言/低级语言–>高级语言:
- 机器语言(Machine Language)
**计算机的硬件作为一种电路元件,它的输出和输入只能是有电或者没电,也就是所说的高电平和低电
平,所以计算机传递的数据是由“0” 和“1”组成的二进制数,所以说二进制的语言是计算机语言的本质。**
计算机发明之初,人们为了去控制计算机完成自己的任务或者项目,只能去编写“0”、“ 1”这样的二进制
数字串去控制电脑,其实就是控制计算机硬件的高低电平或通路开路,这种语言就是机器语言,即二进
制指令代码,也就是第一代编程语言.
- 汇编语言(Assembly Language)
既然机器语言不好用,怎么办,于是人们对机器语言进行了升级和改进,用一些容易理解和记忆的字
母、单词来代替一个特定的指令,形成了我们常说的汇编语言,即用助记码表示特定计算机的机器语言
指令,也就是第二代编程语言.
执行时,借助汇编器(Assembler),把汇编语言程序翻译成机器语言.
-
高级语言(由于早期计算机行业的发展主要在美国,因此一般的高级语言都是以英语为蓝本,英语!英语!英语!很重要,看报错、看官方文档、看原版书籍…)
-
编译型语言
-
解释型语言
-
不难想象,使用机器语言、汇编语言(本质上,仍然是单纯面向特定机器语言),其中一个关键问题便是
———— 程序的可移植性
就好比,Windows系统和Mac系统各有一套二进制指令集,Windows上写好的二进制码显然没办法拿到
Mac上用,反之亦然.
经过…,最终诞生了一系列高级编程语言,如C、C++、Java、Python…,这一系列高级编程语言可以
简单分为一开始提到的编译型语言和解释性语言,其中Java是比较特殊的一种编程语言,下面会详细说
明.
先以一张图来简单了解一下编译型语言和解释型语言.
![image-20230423004410125](https://dlsfivy-image.oss-cn-beijing.aliyuncs.com/markdown-image/Python-202304230044276.png)
- 编译型语言
通过编译器(Compiler)将源代码编译成机器语言的文件(如*.exe文件)再执行.
一般需经过编译(Compile)、链接(Linker)这两个步骤. 编译是把源代码编译成机器码,链接是把各个模块
的机器码和依赖库串连起来生成可执行文件.
优点:编译器一般会有预编译的过程对代码进行优化;运行时不需要编译,执行效率高;可以脱离语
言环境独立运行等
缺点:编译之后如果需要修改就需要整个模块重新编译;可移植性差等
代表语言:C、C++等
- 解释型语言
解释型语言无需翻译,通过解释器(Interpreter),解释性语言在运行程序的时候逐行读取、逐行解释
(Interpret)、逐行运行.
优点:良好的平台兼容性;修改代码的时候直接修改就可以,可以快速部署,不用停机维护等
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言等
代表语言:Python等
- Java
为什么Java单独拿出来说呢,来看Java程序从源文件创建到程序运行经历的两大步骤
-
编译. Java源文件通过编译器编译成二进制的字节码,即
.class
文件. -
解释运行.
.class
文件通过Java虚拟机解释运行.
所以Java程序的运行过程既有编译也有解释.
- 脚本语言(Script Languages)
关于脚本语言,网上众说纷纭. 个人觉得,站在自身当前的高度、当前的角度,来决定思考的深度.
尽善尽美,而非十全十美.
脚本语言有严格/官方定义吗,至少我没看到,或者说我没看到能够明确脚本语言边界、包含/所属关系并
被绝大多数人认同的定义.
进一步,明确这些有意义吗,好像没有,没意义的事情为什么要做.
截取“百度百科”的一段说明:
是不是可以通俗的来说,
脚本语言指那些比较简单,语法没有那么严格,通常以文本(如ASCII)保存,直接解释执行的编程语言.
回到最初的的问题,Python是脚本语言吗?
毋庸置疑,Python是解释型语言. 从运行方式看,脚本语言可以同于解释型语言,那说Python是脚本语
言也是没问题的,我想大部分人会说Python是脚本语言,主要也是基于Python的通俗易懂和解释运行.
参考:
- https://zhuanlan.zhihu.com/p/37721614
- https://zhuanlan.zhihu.com/p/111763425
- https://zhuanlan.zhihu.com/p/461684569
- https://zhuanlan.zhihu.com/p/571097954
- https://blog.csdn.net/czh500/article/details/120380407
- https://blog.csdn.net/Scrat_Kong/article/details/82918786