Nis*_*hto 41 compiler-construction abstraction transpiler
在搜索差异时,我发现了这些定义:
编译是获取用一种语言编写的源代码并转换为另一种语言的通用术语.
Transpiling是一个特定的术语,用于获取用一种语言编写的源代码,并转换为另一种具有相似抽象级别的语言.
我理解抽象是什么.
但是,在上述定义中,"相似的抽象级别"是什么意思呢?我们如何找到语言中的抽象级别?
tap*_*and 65
你上面引用的定义对于初学者完全理解来说太笼统了,所以让我把它简化为我们实际看到的东西.
编译器:用于描述一个程序的总称,该程序采用一种语言编写的源代码,并以其他语言生成(或许多)输出文件.在实践中,我们主要使用这个术语来描述诸如gcc之类的编译器,它将C代码作为输入并产生二进制可执行文件(机器代码)作为输出.
Transpilers也被称为源到源编译器.因此,实质上它们是编译器的子集,它们接收源代码文件并将其转换为其他语言的另一个源代码文件或同一语言的不同版本.输出通常是人类可以理解的.此输出仍然必须通过编译器或解释器才能在计算机上运行.
转发器的一些例子:
现在,它们的意思是"相似的抽象级别":正如我所说它编译/转换为源文件,可以说汇编语言也是源文件,因此gcc也是一个转换器.所以,这个论点就是这个类似的抽象层次无效.
将语言分类为较低,中等和较高级别的概念基于它们从机器/体系结构的实际工作中提供的抽象级别.
像汇编这样的低级语言非常接近处理器架构,即对不同的处理器有不同的指令.在C/C++/Java/JavaScript中,抽象所有这些提供了更多的抽象.
因此,一个转换器编译成一种语言,这种语言更接近你在这个抽象方面开始的语言(或者更接近于中低级语言阶梯中该语言的级别).
希望这可以帮助!
Ara*_*mer 18
这是一种描述性的答案
如果您将抽象层视为此示例:
(1) CPU-level (actual logic gates on the CPU)
(2)machine code
(3)assembly code
(4)[C/C++, JVM/bytecode]
(5)[JavaScript, Python]
Run Code Online (Sandbox Code Playgroud)
编译器进入较低级别(较低数量)。编译器以相同的编号从一种语言(或一种语言的版本)切换到另一种语言。
小智 8
例如:TypeScript(具有类型安全检查的 Microsoft JavaScript 超集)转换为可以在不同类型的浏览器上运行的 JavaScript 代码。
https://en.wikipedia.org/wiki/Microsoft_TypeScript “Microsoft TypeScript 是一种由 Microsoft 开发和维护的开源编程语言。它是 JavaScript 的严格语法超集,并向该语言添加了可选的静态类型。
TypeScript 设计用于开发大型应用程序并转编译为 JavaScript。 [5] 由于 TypeScript 是 JavaScript 的超集,因此现有的 JavaScript 程序也是有效的 TypeScript 程序。TypeScript 可用于开发用于客户端和服务器端 (Node.js) 执行的 JavaScript 应用程序。”