用比喻来明编译型语言和解释型语言的区别:
假设你要理解一本书(源代码)将转化为一篇演讲稿(机器代码)。
编译型语言类似于你将整本书翻译成一篇演讲稿。你需要在事先对整本书进行翻译,将其转化为一份完整的演讲稿。一旦你完成了翻译工作,你就可以直接使用演讲稿进行演讲,每次演讲时都无需再次翻译整本书。编译过程只需要进行一次,后续的执行过程可以直接使用已编译的机器代码进行。
解释型语言类似于你逐行地阅读书籍并即席演讲。你不需要事先翻译整本书,而是在演讲时边读边演讲。每当你阅读一行并理解其含义时,你立即将其转化为口头表达。你可以即时根据需要进行解释和调整。因此,解释型语言的代码在运行时被逐行解释和执行,而不是事先进行整体的编译。
为什么会诞生解释型语言,解释型语言诞生之初最大的需求是什么
1.简化开发和调试过程:解释型语言的一个主要目标是提一种更快速、更灵活的开发和调试环境。与编译型语言相比,解释型语言无需预先编译,可以直接执行代码,节省了编译时间。这使得开发者能够快速进行代码修改和测试,加快了开发周期。
2.跨平台性:从解释型语言到机器语言,解释型语言有解释器这一步,这让解释型语言可以在不同的操作系统上运行,而无需对源代码进行修改或重新编译,提高了代码的可移植性。
3.动态特性和灵活性:解释型语言通常具有动态类型、动态内存管理和灵活的语法。解释型语言的动态特性使得代码的编写更加直观和灵活,没有了编译型语言的声明赘述,方便快捷地进行代码修改和调试。
到这我有个疑问,为什么多了解释器就能实现跨平台了呢,难道解释器不也是生成二进制代码供操作系统阅读吗?原来,解释型语言会针对不同的系统做不同的解释器,就python而言,python官方针对不同平台(比如 Windows、macOS、Linux )开发了不同的解释器。在不同的系统上就用该系统的解释器去解释,达到了python代码一样,却可以适应生成不同操作系统所需的二进制代码的目的。又举一个不太恰当比喻来解释:解释型语言,解释器与操作系统之间的关系就像乐曲,指挥家与乐团的关系,你用中文写了一章乐谱(代码)想要给乐团(操作系统)演奏——而不同的乐团国籍不同,拥有的乐器类型也不同(有的乐团用琵琶、唢呐,有的乐团用钢琴、萨克斯),你用中文写的乐谱乐团读不懂,所以就训练了一批专门会读中文的指挥家(解释器)来指挥不同的乐团。从而使你的乐谱奏出了动听的音乐。