编译器与解释器和透明器

时间:2016-08-31 10:00:08

标签: compiler-construction language-agnostic interpreter transpiler

在我参加的reactJs会话期间,演示者使用术语转换器进行一些代码转换/移植。在计算机系统/机器上将语言代码转换为可运行的形式时,我总是使用和听到编译器和解释器这两个术语。对我来说,Transpiler对我来说是全新的。有人可以帮助我理解一个Transpiler与编译器或解释器的不同之处以及为什么它真的需要它?

6 个答案:

答案 0 :(得分:22)

编译器 - 将代码编译为较低级别的代码。

示例:

  • "Developer code" - > "Machine code"
  • PHP - > C
  • Java - > bytecode

Transpiler - 将代码编译为相同级别的代码/抽象。

示例:

  • "Developer code" - > "Another developer code or version"
  • JavaScript ES2015+ - > JavaScript ES5

口译员 - 解释代码,而不是与上述两个相同的类/联盟/上下文。

示例:php.exe

  • “您在index.php内的PHP代码/脚本” - > “结果为html或就像纯index.html

答案 1 :(得分:21)

正如本Wiki article中所提到的,它是一种编译器,它将源代码从一种编程语言转换为另一种编程语言。源代码可能是某种语言不再使用,或者不支持最新的硬件/软件改进,或者是程序员的方便/偏袒。

VB6到VB.NET转换器可以被认为是一个Transpiler。我可能会将 COBOL转换为C#/ C ++ / Java 工具作为转换器。

答案 2 :(得分:18)

当您使用像CoffeeScript,TypeScript(您将其命名)等JS预处理器转换为纯JavaScript时,通常会将其称为“转换”。 但它确实不是JS专有的东西。它适用于所有类型的编程语言。大多数情况下,它只是称为编译。

  

透明是用于编写源代码的特定术语   用一种语言转换成另一种语言   类似的抽象级别

根据https://www.stevefenton.co.uk/2012/11/compiling-vs-transpiling/

所以你的案例

  • '编译' JSX => JavaScript (和HTML),我认为与上面的定义相符。
  • 因此可以称之为“转化”。虽然称它为“编译”。也没关系。

另一个例子:

  • CoffeeScript / TypeScript / ... whatEverScript .. => JavaScript ,反之亦然。

答案 3 :(得分:6)

我一直building such tools since the 1980s

我们称他们为“来源program transformation systems”。

这个词很好,AFAICT,约45年。这个想法可以追溯到那之前;请参阅Val Schorre的Meta II Compiler-compiler work了解这个想法的1963年版本。

现在我们有了这个新名词;几年前我开始看到它。它什么都没有增加,但听起来很神秘而且很酷。这就是牧师建立自己价值的方式;他们为旧观念创造了新的词汇。

答案 4 :(得分:2)

根据定义翻译器翻译器的一种特殊形式。

编译器将高级源代码转换为较低抽象级别的代码。通常,但并非必须如此,编译的目标是机器代码。即,可以直接由CPU执行的代码。编译器还可以生成字节码,它是对机器代码的模拟,但后来被所谓的虚拟机(即Java字节码和Java VM)解释。但是,术语编译器可以用于将代码转换为不是机器可执行代码的另一种编程语言的语言。明显的区别是编译器降低了抽象级别。

翻译器将源代码从一种编程语言转换为相同或不同抽象级别的另一种编程语言。请注意,如果源代码也是机器代码,则结果可以是机器代码。

Traspiler 与翻译器非常相似,但是专门在相同抽象级别的编程语言之间转换源代码。请注意,编程语言的不同之处在于它们抽象的内容。不同的抽象级别,特别是因为它们适用于作为抽象支持的不同概念。因此,转换(翻译)通常是在相似之间,而不是相同的抽象级别。

答案 5 :(得分:2)

编译器-它充当人与计算机之间的接口,用于将人类的理解语言转换为机器的理解语言。

编译器类型

  • 本机代码编译器: 该编译器仅用于为相同类型的平台编译源代码。这种类型的编译器生成的输出只能在其自身运行的相同类型的计算机系统和操作系统上运行。
  • 交叉编译器: 该编译器用于为各种平台编译源代码。用于为可在多个平台上使用的嵌入式系统制作软件。
  • 从源到源编译器: 将 HLL (高级语言)或源语言转换为 LLL (低级语言)或机器语言。
  • 翻译器: 将 HLL (高级语言)转换为另一种HLL