在寻找差异时,我遇到了以下定义:
编译是获取用一种语言编写的源代码并转换为另一种语言的总称。
Transpiling是一个特定术语,用于获取用一种语言编写的源代码并转换为具有相似抽象级别的另一种语言。
我了解什么是抽象。
但是在上面的定义中“相似的抽象水平”是什么意思?以及如何找到一种语言的抽象水平?
在寻找差异时,我遇到了以下定义:
编译是获取用一种语言编写的源代码并转换为另一种语言的总称。
Transpiling是一个特定术语,用于获取用一种语言编写的源代码并转换为具有相似抽象级别的另一种语言。
我了解什么是抽象。
但是在上面的定义中“相似的抽象水平”是什么意思?以及如何找到一种语言的抽象水平?
Answers:
您上面引用的定义对于初学者而言太笼统,无法完全理解,因此让我将其简化为我们实际看到的内容。
编译器:是一个笼统的术语,用于描述采用一种语言编写的源代码并生成某种其他语言的(或多个)输出文件的程序。实际上,我们主要使用该术语来描述诸如gcc之类的编译器,该编译器以C代码作为输入,并生成二进制可执行文件(机器代码)作为输出。
编译器也称为源到源编译器。因此,从本质上讲,它们是编译器的子集,它们将源代码文件带入并以某种其他语言或同一语言的不同版本转换为另一个源代码文件。输出通常是人类可以理解的。此输出仍必须通过编译器或解释器才能在计算机上运行。
转译器的一些示例:
现在,它们的意思是“相似的抽象水平”:正如我所说的那样,它可以编译/编译为源文件,因此可以说汇编语言也是源文件,因此gcc也是编译器。因此,这种论点就是这种类似级别的抽象无效。
将语言分为低级,中级和高级的概念基于它们从机器/体系结构的实际工作中提供的抽象级别。
诸如汇编之类的较低级语言非常接近处理器体系结构,即针对不同处理器具有不同的指令。在使用C / C ++ / Java / JavaScript时,请将所有这些内容抽象化以提供更多抽象。
因此,编译器会编译为一种语言,该语言在抽象方面更接近于您使用的语言(或者在中低阶语言阶梯中更接近该语言的级别)。
希望这可以帮助!
这是一种描述性的回答方式
如果您将抽象层视为此示例:
(1) CPU-level (actual logic gates on the CPU)
(2)machine code
(3)assembly code
(4)[C/C++, JVM/bytecode]
(5)[JavaScript, Python]
编译器进入较低级别(较低数量)。编译器以相同的编号从一种语言(或一种语言的版本)切换到另一种语言。
javac
为编译器。
我大体上同意tapanandand的回答,但是...
单词是“造”的,因此它们是有目的的。而且这也随着时间而改变。
现在,我们倾向于使用transpiler来指定编译器,该编译器将代码转换为与源代码“更相似”的其他代码,而编译器可能会这样做。当在同一个上下文中同时提及这两个词时,通常用于区分这两个词(再次主要是暗示必须至少再次编译一次翻译语言)
因此,一切都是非常主观的。在撰写本文时:
因此,现在很少使用转堆了,只能将两个编译器区分开。
它可能会作为概念消失,因为编译要比它复杂得多(相同/更高/更低的语言,版本等),并且这个词似乎不再有用(“编译器”现在无处不在)
例如:TypeScript(Microsoft的JavaScript超集,具有类型安全检查功能)可以转换为JavaScript代码,该代码可以在不同类型的浏览器上运行。
https://zh.wikipedia.org/wiki/Microsoft_TypeScript “ Microsoft TypeScript是Microsoft开发和维护的一种开源编程语言。它是JavaScript的严格语法超集,并为该语言添加了可选的静态类型。
TypeScript是为开发大型应用程序而设计的,并可以编译为JavaScript。[5] 由于TypeScript是JavaScript的超集,因此现有的JavaScript程序也是有效的TypeScript程序。TypeScript可以用于开发JavaScript应用程序,以用于客户端和服务器端(Node.js)执行。”