开篇

简介

本系列博客是在本人读完 郭神 的 《第一行代码(第三版)》 之后所写,主要目的是为了巩固所学的有关知识。
我会尽量把文章写的通俗易懂一点,但由于之前没有正儿八经的写过博客,写的不好请大家见谅!

编译型语言 和 解释型语言

话题来自 Page 31.

学过《编译原理》的同学都知道,计算机是 不能理解和直接执行高级程序语言 的,它只能直接理解 机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机可以执行的形式,也就是 机器指令码。而这种转换的方法有两种:

  1. 通过 编译器 翻译
  2. 通过 解释器 执行

由此 高级语言 也分为 编译型语言解释型语言
前者 运行速度 快,后者 跨平台性 好。

后面会对这一条进行解释。

1. 编译型语言

使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。

特点

在程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如 .exe 格式的文件,以后要再次运行时,直接使用编译结果即可,如直接运行 .exe 文件。因为只需编译一次,以后运行时不需要编译,所以 编译型语言执行效率高。

总结

  1. 一次性编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
  2. 与特定平台相关,一般无法移植到其他平台;
  3. 现有的 CC++Objective 等都属于编译型语言。

2. 解释型语言

使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在 执行时 才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。

特点

解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。

总结

  1. 解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;
  2. 只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
  3. PythonJavaScript 等属于解释型语言。


编译型语言 由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像 C/C++Pascal/Object Pascal 等都是编译语言。
而一些网页脚本、服务器脚本及辅助开发接口程序对速度要求不高、对不同系统平台间的兼容性有一定要求,通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

这里保留一个问题: Maude 属于 哪种语言?

3. 关于 Java

Java 和其他的语言不太一样。因为 Java 针对不同的平台有不同的 JVM,实现了跨平台。所以 Java 语言有一次编译到处运行的说法。

  1. 你可以说它是编译型的:因为所有的 Java 代码都是要编译的,.java 文件不编译就什么用都没有。

  2. 你可以说它是解释型的:因为 Java 代码编译后不能直接运行,它需要在 JVM 上的解释运行。

  3. 但现在的 JVM 为了效率,都有一些 JIT 优化。它又会把 .class 的二进制代码编译为本地的代码直接运行。

推荐以下文章 《什么是JIT》,其中 编译的时间开销 和 编译的空间开销 俩节 应该可以让你对 JIT 有清楚的认识。

KID不务正业的程序员 认为,Java 是 解释型 的语言,因为虽然 Java 需要编译成 .class 文件,但是并不是所有机器都可以识别 .class,最终还是需要 JVM 充当解释器 进行解释才能在各个平台执行。所以可以说 Java 即是编译型的,也是解释型的,但假如非要归类的话,从概念上的定义,恐怕 Java 应该归到解释型语言中。

个人理解:并不是所有人的电脑都可以执行 .class 文件的,该文件需要 JVM 进行解释。所以 Java 属于 编译-解释-编译 型,由于 最终的 JIT 优化并不是必须执行的,而 JVM 解释是必须执行的,所以属于 解释 型。

参考文献

KID不务正业的程序员-什么是编译型语言和解释型语言?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值