编译型语言和解释型语言,动态语言和静态语言的区别

编译型和解释型的区别

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

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

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

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

下面打个比方:

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

扩展

编译型和解释型的定义是对立存在的,但也可以在一个语言中同时存在。比如Java语言同时兼有编译型和解释型特点。整个流程如下:
将源代码(.java)文件编译生成字节码(.class文件),再通过JVM(java虚拟机)运行生成机器指令,由机器运行机器码。
:此处生成机器语言前的操作是解释型,每次运行都要重新解释。因此,此处表明Java是解释型。
但是,部分JVM(java虚拟机)有一种JIT(Just in time)机制,能够将部分已经解释翻译的常用机器指令保存。下次不需要解释,直接运行即可。此时Java是编译型。
因此,现在用编译型和解释型区分语言是行不通的。

编译型语言
优点
1.编译型语言最大的优势之一就是其执行速度。用C/C++编写的程序运行速度要比用Java编写的相同程序快30%~70%.
2.编译型程序比解释型程序消耗的内存更少。
缺点
1.编译器比解释器要难写得多
2.编译器在调试程序时提供不了多少帮助
3.可执行的编译型代码比相同的解释型代码要大许多
4.编译型程序是面向特定平台的因而是平台依赖的
5.编译型程序不支持代码中实现安全性,大部分病毒是使用编译型语言编写的
6.由于松散的安全性和平台依赖性,编译型语言不太适合开发因特网或者基于Web的应用

解释型语言
优点
1.解释型语言提供了极佳的调试支持
2.解释器比编译器更容易实现
3.解释型语言最大的优势之一是其平台独立性
4.解释型语言也可以保证高度的安全性,这正是互联网应用所迫切需要的
5.中间语言代码的大小比编译型可执行代码小很多
缺点
1.解释型语言存在一些严重的缺点。解释型应用占用更多的内存和CPU资源
2.由于解释型应用的decode-fetch-execute(解码-抓取-执行)的周期,它们比编译型程序慢很多

动态语言和静态语言

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

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

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

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

小结:

  • 动态类型语言的优点是不需要写多种数据类型的代码,代码相对简洁一些,方便代码阅读。缺点是不方便调试,代码命名也容易混淆。
  • 静态类型语言的优点是方便调试,代码相对规范。缺点是需要写很多类型相关的代码,代码不够简洁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值