D8 - 你不知道Combo : 甜点用一杯 Mojito 解释 直译器、编译器

前言

吃了前菜、主餐,没有饭後甜点怎麽可以呢!
你不知道 Combo 套餐系列最後一道,以一杯 Mojito 解释 JavaScript 到底是 Compiled 编译 还是 Intepreted 直译语言?

图片来源 CLEANPNG

直译器 Interpreter编译器 Compiler

介绍 JavaScript 时会称它为 直译语言 Interperted Language,但在前几章解释引擎解读程序码的行为时,明明是先进行了编译的动作,那这样还算直译语言吗?

先说说,其实电脑是无法直接阅读 JavaScript 的,需要引擎透过某种方式来翻译成电脑看得懂的语言,方式有两种,可以透过 直译器 Interpreter 或是 编译器 Compiler 进行翻译,使用编译器翻译的语言就称为编译语言,直译器翻译的语言则是直译语言。

比较一下两者是怎麽进行翻译的
让我用调制一杯 Mojito 来告诉你什麽是 直译器 Interpreter编译器 Compiler
(参考自 JavaScript — is it Compiled or Interpreted?

制作一杯 Mojito

Mojito 需要的材料有:

· 白兰姆酒 45ml
· 新鲜柠檬汁 30ml
· 薄荷叶 8~10 小片
· 糖或糖浆 30ml
· 苏打水

来看看两位 Bartender 编译器 及 直译器 怎麽制作

编译器:首先扫描过一次菜单,看看需要哪些材料,准备白莱姆酒 45ml、挤出柠檬汁、摘几片薄荷叶、糖浆 30ml,最後苏打水也准备好,一切材料都摆放在桌上,现在可以拿出杯子,将材料通通倒入混合,结束。

直译器:我的做法就不一样了,直接拿出杯子,然後依照菜单一个步骤一个步骤进行,第一个从柜子上拿出莱姆酒倒入杯中,再来需要柠檬,於是走到冰箱拿出柠檬,切片挤出柠檬汁倒入,接着走到阳台取薄荷叶,捣碎放入,再依序是糖浆、苏打水,最後还需要一小片薄荷叶装饰,再走到阳台,摘下,放上,完成。

看得出两位调制上的差异吗

编译器花较久的前制期在准备材料,但开始调制後只需将材料混合,制作时间比较快!

直译器很快开始制作,没有进行前置作业,马上就从第一步开始执行,但制作上花比较久的时间,重复做同样的步骤,如走到阳台摘取薄荷叶。

好的,看到这里是不是有点概念了
不要告诉我你学到的只是 Mojito 的调制步骤

JavaScript 到底是 Compiled 还是 Intepreted 语言?

好的,具备以上概念後可以来解答了
答案是:JavaScript 是 Interpreted Language !

让我们再仔细来看看 Wikipedia 内的直译器介绍,重点已帮您画起来,目光放到第 3 点

JIT (Just-in-time)Compilation 名为 即时编译 的一种技术

简单来说,这个技术结合了传统编译器的速度与传统直译器的灵活度,更动态的进行编译的动作,因此适用在动态的程序语言,被主流浏览器像 V8 等采用。
V8? 就是被应用在 Chrome 和 Node.js 环境的那位 JavaScript 引擎大大

Stanford 的一份 JavaScript 介绍文档中也提到 JavaScript 就是个直译语言,浏览器使用 JIT 技术转译成电脑可解读的代码。

我想,若要比喻的话,JIT 应该就是位知道要把麻烦的东西准备好,像是摘好薄荷叶,然後可以边调边看菜单的肖连 bartender 吧

结语

你不知道 Combo 系列终於结束啦~~ 我的中秋假期都泡在这 (ಥ_ಥ),但找资料的过程又重新厘清一些以前模模糊糊的知识点,尤其是直译器与编译器,Mojito 那篇比喻文太对我胃口,立马决定点心就是你了!!

希望这个份量满满的 Combo 有符合各位的胃口 (90度鞠躬)
/images/emoticon/emoticon41.gif

Reference:

JavaScript — is it Compiled or Interpreted?
编译语言 - Wikipeida
直译语言 - Wikipeida
直译器 - Wikipedia
编译器 - Wikipedia
V8 engine - Wikipedia
JIT Compilation
Stanford.edu
JavaScript Just In Time compilation - StackOverflow
[调酒教学] Mojito 莫希托 -清凉系饮品的不败经典 - 认真找了 Mojito 的比例来举例,是不是该试试
A crash course in just-in-time (JIT) compilers - 另外推荐这篇文章,以电影 Arrival 异星入境  与外星人沟通的过程来解释直译器与编译器,还附有手绘图,也是超级可爱又好懂哦!


<<:  【设计+切版30天实作】|Day9 - 把Bootstrap预设的Carousel新增变化

>>:  [Day 8] 阿嬷都看得懂的替 HTML 标签穿上行内样式

[Day 30]-【STM32系列终章之不负责任地说再见】

开头就是要先放个大大的LOGO才爽!(误XD 终於完赛啦!这是第一次成功完赛,能成功完赛真的是高兴...

Day 21 资料宝石:【Lab】RDS架构 建立自己的第一台云端资料库 (上)

今天我们将开始进行 RDS Lab 练习,架构自己的第一台云端资料库。由於此章节非常大,我将会分成...

DAY12 - 档案类的物件关系厘清(1) - File, FileList, Blob

前端网页若要取得一个档案,大家可能第一个画面就是下面这个UI吧!是利用<input type=...

[27] 30 天从 Swift 学会 Objective-C:Swift friendly 的 Unavailable 与 convenience init

物件导向的设计中,关於建构物件的方式我们成为建构器(constructor),这关系到物件使用的方式...

javascript 防疫自学日记 day 1

自学coding长跑开始! 我要每天花两个小时自学~~~ 先整理学习资源—— 分成四part:(会一...