解析性语言与编译性语言优劣对比

高级编程语言分为解析语言和编译性语言,各自代表有Js,python 以及c/c++,golang等,java某种意义上说既是解析语言也是编译性语言。

以下是解析语言与编译性语言的一些优劣对比:

1:效率

      编译比解析方式可能会取得更高的效率。一般情况下,在解析方式下允许程序时,解析程序可能需要反复扫描源程序。例如,每一次引用变量都要进行类型检查,甚至重新进行存储分配,从而降低程序的运行速度。在空间上,以解析方式运行程序需要更多的空间,因为系统不但需要为用户程序分配运行空间还要为解析程序及其支撑系统分配空间。

      在编译方式下,编译程序除了对源程序进行语法和语义分析外,还要生成源程序的目标代码并进行优化,所以这个过程比解析方式需要更多的时间。虽然与仔细写出的机器程序相比,由编译程序创建的目标程序运行的时间一般更长,需要占用的存储空间更多,但源程序只需要被编译程序翻译一次就可以多次运行。因此,总体来说,编译方式比解析方式可能取得更高的效率。

2:灵活性

     由于解析程序需要反复检查源程序。这也使得解析方式能够比编译方式更灵活。当解析器直接运行源程序时,"在运行中"修改程序变得可能,例如增加语句或者修改错误,jvm运行时修改字节码的asm技术与Java Agent(Java 探针)技术等。另外解析器直接在源程序上工作时,它可以对错误进行更加精确地定位 (例如在浏览器对js进行调试)。

3:可移植性

     解析器一般也是用某种编程设计语言编写的,因此只要对解析器进行重新编译,就可以使解析器运行在不同环境中。由于编译和解析方式各有特点,因此现有的一些编译系统既提供编译的方式,也提供解析的方式,甚至将两种方式进行结合。例如java虚拟机的just-in-time(即时编译)技术,在代码第一次运行时进行编译,其后运行时就不再进行编译了。例如,通过javac 将.java源文件编译成.class字节码文件,接下来无需编译直接逐条将字节码解释执行,在解释执行的过程中,JVM同时对程序运行的信息进行收集,在这些信息的基础上,编译器会逐渐发挥作用,它会把字节码编译成机器码,后续直接从codeCache中读取机器码来执行(只有被JVM认定为的热点代码,才可能被编译成机器码)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值