提问人:RBT 提问时间:8/31/2016 最后编辑:RBT 更新时间:10/7/2022 访问量:20370
编译器 vs 解释器 vs 转译器
Compiler vs Interpreter vs Transpiler
问:
在我参加的 ReactJS 会议期间,演示者使用了一个术语转译器来描述一些代码转换/移植。过去,我听说过编译器和解释器这两个术语。我曾在将用户编写的语言代码转换为计算机系统上的可运行形式时使用过。Transpiler 对我来说是新的。转译器与编译器或解释器有何不同,为什么需要它?
答:
正如这篇 Wiki 文章中提到的,它是一种将源代码从一种编程语言转换为另一种编程语言的编译器。源代码可能使用某种不再使用的语言,或者不支持最新的硬件/软件进步,或者根据程序员的方便/偏袒。
VB6 到 VB.NET 转换器可以被认为是一个转译器。我可能会将 COBOL 到 C# / C++ / Java 工具视为转译器。
评论
我们称它们为“源到源程序转换系统”。
该任期任期为AFAICT服务了大约45年。这个想法可以追溯到很久以前。参见 Val Schorre 的 Meta II 编译器-编译器工作,了解这个想法的 1963 版本。
现在我们有了这个新术语;几年前我开始看到它。它什么也没增加,但听起来很神秘和酷。祭司就是这样建立他们配称的;他们为旧思想发明了新词汇。
评论
它通常被称为“转译”,当你使用JS预处理器(如CoffeeScript、TypeScript)将代码翻译成纯JavaScript时。 但这真的不是 JS 独有的东西。它适用于所有类型的编程语言。大多数情况下,它只是称为编译。
转译是编写源代码的特定术语 在一种语言中,并转换为具有类似抽象级别的另一种语言。
根据 https://www.stevefenton.co.uk/2012/11/compiling-vs-transpiling/
因此,就您而言:
- 'compile' JSX => JavaScript(和 HTML),我认为这与上面的定义相匹配。
- 因此,它可以称为“转译”。虽然称它为“编译”也可以。
另一个例子:
- CoffeeScript / 打字稿 / ...whatEverScript..=> JavaScript,反之亦然。
评论
编译器 - 将代码编译为较低级别的代码。
例:
"Developer code"
->"Machine code"
PHP
->C
Java
->bytecode
Transpiler - 将代码编译为相同级别的代码/抽象。
例:
"Developer code"
->"Another developer code or version"
JavaScript ES2015+
->JavaScript ES5
解释器 - 解释代码,而不是与上述两个在同一类/联盟/上下文中。
例:php.exe
- “你的PHP代码/脚本里面” -> “结果为或只是像纯
index.php
html
index.html
"
评论
源到源编译器在以大致相同的抽象级别运行的编程语言之间进行转换,而传统编译器则从高级编程语言转换为较低级别的编程语言。
来源 : 维基百科
- 编译器 - 将源代码从高级语言转换为高级语言。
示例:C编译器(C到机器码),JDK的javac工具(java到字节码) - Transpiler - 一种编译器,在相同抽象级别的源代码之间进行转换。
示例:Babel(ES6+ 到 ES5) - 您可以使用它来编写 ES6 代码,同时仍然支持 IE 11 及以下版本等较旧的浏览器。
根据定义,转译器是一种特殊形式的翻译器。
编译器将高级源代码转换为较低抽象级别的代码。通常,但不一定,编译的目标是机器代码。也就是说,可以由CPU直接执行的代码。编译器还可以生成字节码,这是对机器代码的模拟,但后来由所谓的虚拟机(即 Java VM 的 Java 字节码)解释。然而,术语编译器可以应用于将代码转换为另一种编程语言的工具,该语言不是机器可执行代码。编译器的显着区别在于它降低了抽象级别。
Translator 将源代码从一种编程语言转换为具有相同或不同抽象级别的另一种编程语言。请注意,如果源代码也是机器代码,则 result 可以是机器代码。
Transpiler 与 translator 非常相似,但专门在相同抽象级别的编程语言之间转换源代码。请注意,编程语言在抽象内容上存在很大差异;抽象级别不同,特别是当它应用于它们作为抽象支持的不同概念时。因此,转换(转介)通常是在相似的,而不是相同的抽象级别之间。
评论
编译器 - 它充当人与计算机之间的接口,用于将人类理解语言转换为机器理解语言。
编译器的类型
- 原生代码编译器: 编译器仅用于为相同类型的平台编译源代码。这种类型的编译器生成的输出只能在与编译器本身运行的相同类型的计算机系统和操作系统 (OS) 上运行。
- 交叉编译器: 用于为不同种类的平台编译源代码的编译器。用于为可在多个平台上使用的嵌入式系统制作软件。
- 源到源编译器: 将HLL(高级语言)或源语言转换为LLL(低级语言)或机器语言。
- 转译器: 将 HLL(高级语言)转换为另一个 HLL
评论