Compiler construction 编译与传输

Compiler construction 编译与传输,compiler-construction,abstraction,transpiler,Compiler Construction,Abstraction,Transpiler,在寻找差异时,我遇到了以下定义: 编译是将用一种语言编写的源代码转换成另一种语言的通用术语 Transpiling是一个特定的术语,用于将用一种语言编写的源代码转换成具有类似抽象级别的另一种语言 我明白什么是抽象 但在上述定义中,“相似的抽象层次”是什么意思?我们如何在语言中找到抽象的层次 这里有一种描述性的回答方式 如果您认为抽象层就是这个示例: (1) CPU-level (actual logic gates on the CPU) (2)machine code (3)assembly

在寻找差异时,我遇到了以下定义:

编译是将用一种语言编写的源代码转换成另一种语言的通用术语

Transpiling是一个特定的术语,用于将用一种语言编写的源代码转换成具有类似抽象级别的另一种语言

我明白什么是抽象


但在上述定义中,“相似的抽象层次”是什么意思?我们如何在语言中找到抽象的层次

这里有一种描述性的回答方式

如果您认为抽象层就是这个示例:

(1) CPU-level (actual logic gates on the CPU)
(2)machine code
(3)assembly code
(4)[C/C++, JVM/bytecode]
(5)[JavaScript, Python]

编译器转到较低的级别(较低的数字)。transpiler以相同的数字从一种语言(或语言版本)切换到另一种语言。

下面是一种描述性的回答方式

如果您认为抽象层就是这个示例:

(1) CPU-level (actual logic gates on the CPU)
(2)machine code
(3)assembly code
(4)[C/C++, JVM/bytecode]
(5)[JavaScript, Python]

编译器转到较低的级别(较低的数字)。transpiler从一种语言(或一种语言的版本)切换到另一种语言,切换次数相同。

您上面引用的定义太笼统,初学者无法完全理解,因此让我将其简化为我们实际看到的内容

编译器:是一个总括术语,用于描述一个程序,该程序使用一种语言编写的源代码,并使用其他语言生成一个(或多个)输出文件。 在实践中,我们主要使用这个术语来描述编译器,比如gcc,它接受C代码作为输入,并生成二进制可执行文件(机器代码)作为输出

传输编译器也被称为源到源编译器。因此,本质上,它们是编译器的一个子集,它接收源代码文件并将其转换为另一个源代码文件,使用某种其他语言或同一语言的不同版本。输出通常是人类可以理解的。该输出仍然必须经过编译器或解释器才能在机器上运行

Transpiler的一些示例:

  • :将C/C++转换为JavaScript
  • :将ES6+代码传输到ES5(ES6和ES5是不同版本或不同代的JavaScript语言)
  • 现在,他们所说的“相似的抽象层次”是什么意思: 正如我所说的,它将编译/传输到源文件,可以说汇编语言也是源文件,因此gcc也是一个传输程序。所以,这个论点就是这个类似的抽象层次所无效的

    将语言分为低级、中级和高级的概念是基于它们从机器/架构的实际工作中提供的抽象级别

    较低级别的语言(如汇编语言)非常接近处理器体系结构,即针对不同的处理器有不同的指令。当使用C/C++/Java/JavaScript时,将所有这些抽象化,提供更多抽象

    因此,transpiler编译成的语言更接近于您在此抽象中开始使用的语言(或者更接近于该语言在中低级-高级语言阶梯中的级别)


    希望这有帮助

    您上面引用的定义过于笼统,初学者无法完全理解,因此让我将其简化为我们实际看到的内容

    编译器:是一个总括术语,用于描述一个程序,该程序使用一种语言编写的源代码,并使用其他语言生成一个(或多个)输出文件。 在实践中,我们主要使用这个术语来描述编译器,比如gcc,它接受C代码作为输入,并生成二进制可执行文件(机器代码)作为输出

    传输编译器也被称为源到源编译器。因此,本质上,它们是编译器的一个子集,它接收源代码文件并将其转换为另一个源代码文件,使用某种其他语言或同一语言的不同版本。输出通常是人类可以理解的。该输出仍然必须经过编译器或解释器才能在机器上运行

    Transpiler的一些示例:

  • :将C/C++转换为JavaScript
  • :将ES6+代码传输到ES5(ES6和ES5是不同版本或不同代的JavaScript语言)
  • 现在,他们所说的“相似的抽象层次”是什么意思: 正如我所说的,它将编译/传输到源文件,可以说汇编语言也是源文件,因此gcc也是一个传输程序。所以,这个论点就是这个类似的抽象层次所无效的

    将语言分为低级、中级和高级的概念是基于它们从机器/架构的实际工作中提供的抽象级别

    较低级别的语言(如汇编语言)非常接近处理器体系结构,即针对不同的处理器有不同的指令。当使用C/C++/Java/JavaScript时,将所有这些抽象化,提供更多抽象

    因此,transpiler编译成的语言更接近于您在此抽象中开始使用的语言(或者更接近于该语言在中低级-高级语言阶梯中的级别)


    希望这有帮助

    我基本上同意塔帕那和答案,但是


    定义 词语是“造”出来的,所以它们是有目的的。这也会随着时间而改变

    我们现在倾向于使用transpiler来指定一个编译器,该编译器将代码翻译成与源代码“更相似”的其他代码,这就是编译器可能做的。当在同一上下文中提到这两种语言时,通常使用And来区分这两种语言(同样,这主要意味着一种transfile语言必须至少编译一次)


    例子 所以一切都很主观。在撰写本文时:

    • 来自Java世界,我可以调用CoffeeScript/TypeScript Transpiler来描述生成的代码不再有效