在我参加的一个 reactJS 会议期间,演示者使用了一个术语 transpiler 来进行一些代码转换/移植。在将语言代码转换为计算机系统/机器上的可运行形式时,我一直使用并听说过编译器和解释器这两个术语。转译器对我来说是新的。转译器与编译器或解释器有何不同,为什么真的需要它?
7 回答
编译器- 将代码编译为较低级别的代码。
例子:
"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
”
正如这篇Wiki 文章中提到的,它是一种编译器,可以将源代码从一种编程语言翻译成另一种编程语言。源代码可能是某些不再使用的语言,或者不支持最新的硬件/软件改进,或者根据程序员的方便/偏好。
一个 VB6 到 VB.NET 的转换器可以被认为是一个 Transpiler。我可能会认为COBOL 到 C#/C++/Java工具是一个转译器。
当您使用 JS 预处理器(如 CoffeeScript、TypeScript(您的名字))将代码转换为纯 JavaScript 时,它通常被称为“转译”。但这真的不是 JS 独有的东西。它适用于所有类型的编程语言。大多数情况下,它只是称为编译。
转译是一个特定术语,用于获取以一种语言编写的源代码并将其转换为具有 相似抽象级别的另一种语言。
根据https://www.stevefenton.co.uk/2012/11/compiling-vs-transpiling/
所以在你的情况下:
- 'compile' JSX => JavaScript(和 HTML),我认为它与上面的定义相匹配。
- 因此,它可以称为“转译”。虽然称它为“编译”也可以。
另一个例子:
- CoffeeScript / TypeScript / ...whatEverScript.. => JavaScript,反之亦然。
自 1980 年代以来,我一直在构建此类工具。
我们称它们为“源到源程序转换系统”。
AFAICT,这个术语服务了大约 45 年。这个想法可以追溯到很久以前。请参阅 Val Schorre 的Meta II Compiler-compiler work以了解 1963 年版本的这个想法。
现在我们有了这个新术语;几年前我开始看到它。它没有增加任何东西,但听起来神秘而酷。祭司就是这样确立自己的价值的;他们为旧思想创造新词汇。
源到源编译器在运行在大致相同抽象级别的编程语言之间进行转换,而传统编译器从高级编程语言翻译为低级编程语言。
来源:维基百科
- 编译器- 将源代码从高级语言翻译成低级语言。
示例:C 编译器(C 转机器码)、JDK 的 javac 工具(Java 转字节码) - Transpiler - 一种在相同抽象级别的源代码之间进行转换的编译器。
示例:Babel(ES6+ 到 ES5)——您可以使用它来编写 ES6 代码,同时仍然支持 IE 11 及以下版本的旧浏览器。
根据定义transpiler是一种特殊形式的翻译器。
编译器将高级源代码转换为较低抽象级别的代码。通常,但不一定,编译的目标是机器码。也就是可以直接被CPU执行的代码。编译器还可以生成字节码,它是机器码的模拟,但后来被所谓的虚拟机解释(即 Java VM 的 Java 字节码)。然而,术语编译器可以应用于将代码转换为另一种不是机器可执行代码的编程语言的工具。编译器的显着区别在于它降低了抽象级别。
翻译器将源代码从一种编程语言转换为具有相同或不同抽象级别的另一种编程语言。请注意,如果源代码也是机器代码,则结果可以是机器代码。
Transpiler与翻译器非常相似,但专门在相同抽象级别的编程语言之间转换源代码。请注意,编程语言的不同之处在于它们抽象的内容很多;抽象级别不同,尤其是当它适用于它们作为抽象支持的不同概念时。因此,转换(转译)通常是在相似的、不同的抽象级别之间进行的。
编译器- 它充当人与计算机之间的接口,用于将人类理解语言转换为机器理解语言。
编译器类型
- Native Code Compiler : 编译器仅用于为相同类型的平台编译源代码。这种类型的编译器生成的输出只能在编译器本身运行的同一类型的计算机系统和操作系统(OS)上运行。
- 交叉编译器:用于编译不同种类平台的源代码的编译器。用于制作可在多个平台上使用的嵌入式系统的软件。
- Source to Source Compiler:将HLL(高级语言)或源语言转换为LLL(低级语言)或机器语言。
- Transpiler:将HLL(高级语言)转换为另一个 HLL