🎨
Notes
  • 持续更新中...
  • articles
    • browser
      • 深入理解现代浏览器 - 导航
      • 深入理解现代浏览器 - 架构
      • 深入理解现代浏览器 - 交互
      • 深入理解现代浏览器 - 渲染器进程
    • dsa
      • DSA - 并查集
      • DSA - 哈希表
      • DSA - AVL 树
      • DSA - 二叉树
      • 快速选择
      • Big O 算法复杂度
      • DSA - 栈和队列
      • DSA - 前缀树 Trie
      • DSA - 图
      • DSA - 链表
      • DSA - 递归
    • typescript
      • TypeScript 学习笔记 - 任意属性 (Indexable Types)
      • 力扣的 TypeScript 面试题
      • TypeScript 学习笔记 - as const
      • TypeScript 学习笔记 - infer
    • network
      • Internet Protocol (IP)
      • 计算机网络基础
      • 如何分辨同源和同站
      • DNS 如何查询 IP 地址?
    • vue
      • Nuxt.js 入门
      • 从零实现一个 Mini Vue
      • 从零实现一个简单的 VDOM 引擎
      • 从零实现一个响应式状态管理
    • sorting
      • 排序 - 归并排序
      • 排序 - 冒泡排序
      • 排序 - 选择排序
      • 排序 - 计数排序
      • 排序 - 插入排序
    • compile
      • Compiler and Interpreter
      • Just-In-Time (JIT) Compilers
      • 编译流程
    • others
      • 什么是上下文无关语法
      • 如何在终端打印出有颜色的字
    • dev-ops
      • github-actions
        • GitHub Action 简介
        • GitHub Actions for CI
    • workflow
      • 用 Node 写一个 cli
      • 如何规范 git commit 信息
      • 如何监听 git hooks
      • 如何规范代码风格 - prettier
      • 如何发布一个 npm package
      • 如何规范代码质量 - eslint
    • design-pattern
      • 代理模式
      • 单例模式
      • 策略模式
    • security
      • 点击劫持
      • CSP 内容安全策略
    • javascript
      • 尾调用优化
      • 4种常见的内存泄漏及解决方法
    • unit-test
      • Test Vuejs Application - Chapter 2
      • Test Vuejs Application - Chapter 1
      • Vue Unit Test Intro
    • performance
      • HTTP 缓存
      • 如何优化图片资源
Powered by GitBook
On this page
  • A Story And Simile
  • 如果这个翻译官叫 Compiler 的话:
  • 如果这个翻译官叫 Interpreter 的话:
  • Diffs

Was this helpful?

  1. articles
  2. compile

Compiler and Interpreter

两者的相似点是,它们都像一个翻译官,负责把程序员们写的高级语言翻译成电脑 CPU 可以读懂的机器语言。

A Story And Simile

假设你在宇宙闲逛的时候,飞船突然出了故障迫降在一个外星球上了,幸运的是,你知道怎么修复,不过,你不会用那个星球的工具。还好,这个星球上的外星人很热心愿意帮助你,而且,他们刚好有一个人懂地球话。于是,你拿出了纸笔,把修复飞船的步骤一一写下来,然后交给负责翻译的外星人翻译官。

如果这个翻译官叫 Compiler 的话:

  1. 他会拿出另一张纸,把你写的步骤全部翻译好并写到这张纸上,然后把两张纸都递给你,他就走了;

  2. 你再去找负责修飞船的工人,把翻译好的操作步骤交给他;

  3. 工人拿到翻译好的操作步骤后一顿操作把飞船修好;

在这个过程中,一旦 compiler 完成了翻译的工作,你写的那张纸就没什么用了,无论你去找哪个工人来修飞船,你都只需要把翻译好的纸给他就行。

不过,如果修理过程中飞船突然炸了,你很难知道是哪一个操作步骤出了问题,因为你读不懂外星语,compiler 也早就走了。

如果这个翻译官叫 Interpreter 的话:

  1. 他会带着你和你写的那张纸,去找负责修飞船的工人;

  2. 他先看一句你写的操作步骤,把这一句翻译给工人听,工人听到翻译后进行操作;

  3. 他看下一句,翻译,工人操作,直到把所有步骤翻译完;

在这个过程中,interpreter 全程都拿着你写的那张纸,如果第一个工人不会修,你们得去找第二个工人,然后 interpreter 还得重头再翻译一遍。

不过好处是,如果修理过程中飞船突然炸了,你可以知道是哪个操作步骤导致的,然后你就可以纠正这个步骤,interpreter 也可以重新开始帮你翻译。

Diffs

Compiler

Interpreter

objective

准备一份稍后执行的代码

即时执行代码

返回值

返回编译好的代码,一个 .exe 程序

返回程序的返回值

工作频率

只工作一次,之后需要执行程序的时候直接运行 .exe 就行

每次执行程序的时候都需要工作

系统兼容

交出来的是编译好的代码,之后代码在各个不同的系统中运行时与 Compiler 都无关了,所以程序员需要负责写出能兼容不同系统的代码

Interpreter 会跟着源码到各个系统中,所以是 Interpreter 来负责想办法编译出兼容不同系统的代码

速度

debug

PreviouscompileNextJust-In-Time (JIT) Compilers

Last updated 4 years ago

Was this helpful?