解释型语言和解释型语言

发布时间:2022-07-03 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了解释型语言和解释型语言脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

参考:什么是解释型语言

侵删

笔记:

  1. 解释和编译都只是程序从码到运行时的一种动作,跟语言本身无关。c语言,Java,Python等等这些编程语言本质上是一种抽象的定义,包括但不限于符号,语法,输入,输出的定义等等。编译、解释并不是语言的性质,而是运行时实现的性质。可以作这么一个简单的区分:编译型,被实际执行的是你代码对应的机器码;而解释型,被实际执行的是解释器自身的机器码,由解释器来执行你代码的某种中间表示(AST、字节码)。
  2. 解释型语言(英语:InterPReted language),是一种编程语言。这种类型的编程语言,会将代码一句一句直接运行,不需要像编译语言(Compiled language)一样,在运行前经过编译器先行编译为机器码,之后再运行。这种编程语言需要利用解释器,在运行期,动态将代码逐句解释(interpret)为机器码,或是已经预先编译为机器码的的子程序,之后再运行。(wiki)
  3. 理论上,任何编程语言都可以是编译式,或解释型的。它们之间的区别,仅与程序的应用有关。许多编程语言同时采用编译器与解释器来实现,其中包括Lisp,Pascal,C,BASIC 与 Python。JAVA及C#采用混合方式,先将代码编译(编译形)为bytecode,在运行时再进行解释(解释型)。  
  4. 编译和解释本质是等价的,给出一个语言的解释器,可以几乎不花力气地自动得到一个高性能的编译器。接4,PyPy(/ˈpaɪpaɪ/)是一种Python编程语言实现,可用于替代CPython(它是标准实现)。PyPy通常运行得比CPython更快,因为PyPy是一种即时编译器,而CPython是一种解释器。多数Python代码可以很好的运行在PyPy之上,除非代码依赖于CPython扩展,它们在运行于PyPy的时候,要么不工作要么招致一些开销。(解释器到编译器的实现手段)PyPy在内部使用叫做元跟踪的技,它将解释器变换成跟踪即时编译器。因为解释通常比编译器要容易写,但运行得更慢,这种技术可以更容易的产生出编程语言的高效实现。PyPy的元跟踪工具链叫做RPython。(wiki)
  5.  

 

 

参考:编译型语言

侵删

笔记:

  1. 编译型语言(compiled language)指通过编译器(compiler)将源代码编译为机器码(machine code)后运行的语言,例如C、C++;解释型语言(interpreted language)指由解释器(interpreter)直接执行,不需要编译成机器语言,例如 PHP、JavaScript。
  2. Java 是编译型语言还是解释型语言:

    • 为了兼顾跨平台和运行速度,Java 源代码首先会被编译为字节码文件(.class),但并非是机器语言,而是需要在 JVM 上运行,而 .class 文件在 JVM 上是解释执行的。所以 Java 兼具编译型语言和解释型语言的特点。
    • 为了更高的效率,JVM 还引入了 JIT(just-in-time,即时编译)编译器,在 Java 程序运行时进一步编译,转换成高度优化的机器代码。
    • 现在的很多语言以及不能以编译型语言和解释型语言来区分了,因为很多语言都兼具编译型语言和解释型语言的特点。
  3. 待补充

 

参考:程序的编译与解释有什么区别?

侵删

笔记:

  1. 个人理解(1):在运行前,解释型语言也要编译,只不过编译成中间码(反正不是机器码,所以计算机还看不懂中间码),所以在运行时,由解释器负责解释中间码(这样计算机就看得懂被解释后的中间码了)(Java的话运行时还可以用JIT编译器编译成机器码)。
  2. 个人理解(2):在运行前,编译型语言直接被编译成机器码,这样计算机就看懂了,所以在运行时,直接执行机器码就行,因为计算机看得懂机器码。
  3. 一个(编译型)是翻译成machine code,machine去解释,一个(解释型语言)是翻译成bytecode,virtual machine去解释
  4. 传统意义上的所谓编译与解释,区别在于代码是在什么时候被翻译成目标CPU的指令。
  5. 对 C 语言或者其他编译型语言来说,编译生成了目标文件,而这个目标文件是针对特定的 CPU 体系的,为 ARM 生成的目标文件,不能被用于 MIPS 的 CPU。这段代码在编译过程中就已经被翻译成了目标 CPU 指令,所以,如果这个程序需要在另外一种 CPU 上面运行,这个代码就必须重新编译
  6. 对于各种非编译型语言(例如python/java)来说,同样也可能存在某种编译过程,但他们编译生成的通常是一种『平台无关』的中间代码,这种代码一般不是针对特定的 CPU 平台,他们是在运行过程中才被翻译成目标 CPU 指令的,因而,在 ARM CPU 上能执行,换到 MIPS 也能执行,换到 X86 也能执行,不需要重新对源代码进行编译。
  7. 为什么会有虚拟机的存在?这个答案也很简单了,因为那些非编译型语言生成的并不是目标平台的代码,而是某种中间代码。而能够运行这种中间代码的机器并不广泛存在,所以我们在每个不同的平台中用软件模拟出这个假想平台的虚拟机,这个虚拟机执行这种中间代码,而虚拟机负责把代码转换成最终的目标平台上的指令。
  8. 编译型语言在编译过程中生成目标平台的指令,解释型语言在运行过程中才生成目标平台的指令。    虚拟机的任务是在运行过程中将中间代码翻译成目标平台的指令。
  9. 对于Java语言,想让一个 java 程序运行起来,执行引擎(Execution Engine) 的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。简单来说,JVM 中的执行引擎充当了将高级语言翻译为机器语言的译者。
  10.  

脚本宝典总结

以上是脚本宝典为你收集整理的解释型语言和解释型语言全部内容,希望文章能够帮你解决解释型语言和解释型语言所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。