解释型语言和解释型语言

解释型语言和解释型语言参考:什么是解释型语言? 侵删 笔记: 解释和编译都只是程序从源码到运行时的一种动作,跟语言本身无关。C语言,Java,Python等等这些编程语言本质上是一种抽象的定义,包括但不限于符号,语法,输入,输出的定义等等。编译、解释并不是语言的性质,而是运行时实现的性质。可以作这么一个简单的区分:编译型

解释型语言和解释型语言

参考:什么是解释型语言?

侵删

笔记:

  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.  

今天的文章解释型语言和解释型语言分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/56481.html

(0)
编程小号编程小号
上一篇 2023-08-26 17:06
下一篇 2023-08-26 17:17

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注