彻底明白编译型和解释型、动态语言和静态语言区别

探索

编译型和解释型的区别

先来看看编译型语言定义:

编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码 (二进制)。

再来看看解释型语言的定义:

解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。

咋看一眼,还是一脸懵逼。下面打个比方:

  • 编译型相当于用中英文词典(翻译器)将一本英文书一次性翻译(编译)成一本中文书。以后查看直接就是中文了。可想而知,以后读书(运行)会非常非常方便。
  • 解释型相当于用中英文词典(翻译器)将一本英文书读一段翻译一段(解释)中文。以后查看时还是需要重新翻译。这样效率会低一些,必须依赖解释器,但是跨平台性好。
扩展

编译型和解释型的定义是对立存在的,但也可以在一个语言中同时存在。比如 java 语言同时兼有编译型和解释型特点。整个流程如下:

将源代码(.java 文件)编译生成字节码(.class 文件),再通过 JVM(java 虚拟机)运行生成机器指令,由机器运行机器码。注意,此处生成机器语言前的操作是解释型,每次运行都要重新解释。因此,此处表明 java 是解释型
但是,部分 JVM(java 虚拟机)有一种 JIT(Just in time)机制,能够将部分已经解释翻译的常用机器指令保存。下次不需要解释,直接运行即可。此时 java 是编译型

因此,现在用编译型和解释型区分语言是行不通的。

动态语言和静态语言

我们常说的动态语言和静态语言,其实是指动态类型语言和静态类型语言。先来看看动态类型语言:

动态类型语言,是指数据类型的检查是在运行时做的。用动态类型语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。

再来看看静态类型语言的定义:

静态类型语言,是指数据类型的检查是在运行前(如编译阶段)做的。

小结:
  • 动态类型语言的优点是不需要写多种数据类型的代码,代码相对简洁一些,方便代码阅读。缺点是不方便调试,代码命名也容易混淆;
  • 静态类型语言的优点是方便调试,代码相对规范。缺点是需要写很多数据类型相关的代码,代码不够简洁。

参考资料:

百度百科:编译型语言
百度百科:解释型语言
知乎:Java 是编译型语言还是解释型语言?
IBM:深入浅出 JIT 编译器
逛博:编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的区别

本文均为作者原创,未经允许和授权,不得转载,违者必究!

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
编译语言解释型语言是两种常见的程序设计语言执行方式,它们的主要区别和特点如下: 1. **编译语言(Compiled Languages)**: - **编译过程**: 在程序被编写后,先通过编译器将其转换为机器代码或目标代码,这一过程是静态的,生成的可执行文件可以直接运行,无需每次运行都重新编译。 - **执行速度**: 由于转换成的是直接可执行的指令,所以编译语言通常有更快的运行速度。 - **错误处理**: 编译阶段发现的错误(如语法错误)会在编译时报告,程序一旦编译成功,就相对稳定。 - **优点**: 可执行速度快,启动响应快,适用于对性能要求高的应用,如操作系统、游戏等。 - **缺点**: 学习曲线较陡峭,如果改动代码,需要重新编译才能看到效果。 2. **解释型语言(Interpreted Languages)**: - **执行过程**: 当程序运行时,逐行或逐语句解释并执行,不需要预先编译。 - **运行速度**: 相对于编译语言解释型语言的执行速度通常较慢,因为它们需要在运行时进行解释。 - **动态性**: 代码修改后立即生效,迭代开发速度快。 - **错误处理**: 错误通常在运行时才发现,反馈及时但调试可能更复杂。 - **优点**: 开发效率高,易于调试和迭代,常用于脚本、网页开发等场景。 - **缺点**: 性能较低,对于大、高性能的应用可能不是最佳选择。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值