主页 > imtoken钱包哪个版本好 > 编译型语言和解释型语言的区别

编译型语言和解释型语言的区别

imtoken钱包哪个版本好 2023-09-25 05:08:38

我们编写的源代码是人类语言,我们很容易理解; 但对于计算机硬件(CPU)来说,源代码就是天书,根本无法执行。 计算机只能识别某些特定的二进制指令,这些指令必须在程序真正运行之前进行转换。 源代码被转换成二进制指令。

所谓二进制指令,又称机器码,是CPU能够识别的硬件级“代码”。 简单的硬件(比如古老的单片机)只能使用几十条指令,而强大的硬件(PC 和智能手机)则可以使用数百条指令。

但是,究竟什么时候将源代码转换成二进制指令呢? 不同的编程语言有不同的规则:

简单理解,编译器就是一个“翻译工具”,类似于把中文翻译成英文,把英文翻译成俄文。 然而,翻译源代码是一个复杂的过程,大致包括五个步骤:词法分析、句法分析、语义分析、性能优化和可执行文件的生成,其中涉及复杂的算法和硬件架构。 解释器与此类似。 有兴趣的读者请参考《编译原理》一书,本文不再赘述。

Java和Java是相当奇怪的存在。 它们是半编译和半解释的语言。 需要先将源代码转换为中间文件(字节码文件),然后在虚拟机中执行中间文件。 Java引领了这一趋势,其初衷是在跨平台的同时兼顾执行效率; C#是后来的追随者,但C#一直停留在Windows平台上,在其他平台上的作用不大。

5d3b6675c9947f0ccbc1b0358ea9442f.gif

图1 编译型语言和解释型语言的执行流程

那么,编译型和解释型语言的特点是什么? 它们之间有什么区别?

比特币概念股票代码_比特币开源代码 java_比特币源代码编译

编译语言

对于编译型语言,在开发完成后,需要将所有源代码转换为可执行程序,例如Windows下的.exe文件,其中包含机器码。 只要我们有一个可执行程序,我们就可以随时运行它而无需重新编译,即“一次编译,无限次运行”。

运行时,我们只需要编译生成的可执行程序即可,不再需要源代码和编译器,编译后的语言无需开发环境即可运行。

编译型语言一般不跨平台,即不能在不同操作系统之间随意切换。

编译型语言不能跨平台有两种方式:

1)可执行程序不能跨平​​台

可执行程序不能轻易跨平台理解,因为不同的操作系统对可执行文件的内部结构有完全不同的要求,彼此不兼容。 不能跨平台是理所当然的事,能跨平台就奇怪了。

比如Windows下的可执行程序在Linux下是不能用的,Linux下的可执行程序在Mac OS下是不能用的(虽然都是类Unix系统)。

比特币开源代码 java_比特币源代码编译_比特币概念股票代码

另外,同一操作系统的不同版本不一定兼容。 例如,x64 程序(Windows 64 位程序)不能在 x86 平台(Windows 32 位平台)上运行。 但是反过来一般也是可行的,因为64位的Windows对32位的程序有很好的兼容性。

2)源码不能跨平台

不同平台支持的函数、类型、变量等可能不同,基于一个平台编写的源代码一般不能在另一个平台编译。 下面以C语言为例进行说明。

【例1】在C语言中,如果要暂停程序,可以使用“sleep”函数。 Windows平台下函数为Sleep(),Linux平台下函数为sleep()。 第一个字母的大小写不同。 其次,Sleep()的参数是毫秒,sleep()的参数是秒,单位不一样。

以上两个原因导致使用暂停功能的C语言程序不能跨平​​台,除非在代码层面做兼容处理,非常麻烦。

【例2】虽然不同平台的C语言都支持long类型,但是不同平台long的长度是不一样的。 比如Windows 64位平台下的long占4个字节,Linux 64位平台下的long占8个字节。 字节。

我们在Linux 64位平台上写代码的时候,把0x2f1e4ad23赋值给一个long类型的变量是完全没问题的,但是这样的赋值在Windows平台上会造成数值溢出,导致程序运行结果错误。

恼人的是,这样的错误通常不容易被发现,因为编译器不会报错,我们也记不住不同类型的取值范围。

比特币概念股票代码_比特币开源代码 java_比特币源代码编译

解释语言

对于解释型语言,每次执行程序时,都需要同时进行转换和执行。 用到的源代码转换成机器码,不用的不做处理。 每次执行程序可能会用到不同的函数,此时要转换的源代码也不同。

因为程序每次执行都需要重新转换源代码,所以解释型语言的执行效率先天低于编译型语言,甚至存在一个数量级的差距。 计算机的一些底层功能,或者说关键算法,一般都是使用C/C++来实现的,而解释型语言只在应用层使用(比如网站开发,批处理,gadgets等)。

在运行解释型语言时,我们总是需要源代码和解释器比特币源代码编译,所以它离不开开发环境。

当我们说“下载程序(软件)”时,不同类型的语言有不同的含义:

与编译型语言相比,解释型语言几乎是跨平台的,“一次编写,到处运行”真实存在,而且比比皆是。 那么,为什么解释型语言可以成为一个快速的平台呢?

感谢翻译!

我们所说的跨平台是指跨平台的源代码,而不是跨平台的解释器。 解释器用于将源代码转换为机器代码。 它是一个可执行程序,不能跨平台。

比特币开源代码 java_比特币源代码编译_比特币概念股票代码

官方需要为不同的平台开发不同的解释器。 这些解释器必须能够遵守相同的语法、识别相同的功能并执行相同的功能。 只有这样比特币源代码编译,相同的代码在不同平台上的执行结果是一样的。

你看,解释型语言之所以能跨平台,是因为有解释器这个中间层。 在不同的平台下,解释器会将相同的源代码转换成不同的机器码,解释器帮助我们屏蔽了不同平台之间的差异。

关于蟒蛇

Python是典型的解释型语言,因此运行Python程序需要解释器的支持。 只要在不同的平台上安装不同的解释器,你的代码就可以随时运行,不用担心任何兼容性问题。 写,到处跑”。

Python支持几乎所有常见的平台,如Linux、Windows、Mac OS、Android、FreeBSD、Solaris、PocketPC等,你编写的Python代码无需修改即可在这些平台上正确运行。 也就是说,Python的可移植性很强。

总结

我们在下表中总结了编译型和解释型语言的区别:

类型原则优缺点

比特币概念股票代码_比特币源代码编译_比特币开源代码 java

编译语言

通过一种特殊的编译器,将所有的源代码一次转换为特定平台(Windows、Linux等)执行的机器码(以可执行文件的形式)。

一次编译后,无需编译器即可运行,运行效率高。

便携性差,不够灵活。

解释语言

一个特殊的解释器根据需要临时将部分源代码转换为特定平台的机器码。

跨平台好,通过不同的解释器,将同一份源代码解释成不同平台下的机器码。

一边执行一边转换,效率很低。