编译器与解释器和透明器

RBT*_*RBT 41 language-agnostic compiler-construction interpreter terminology transpiler

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

Jim*_*m M 27

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

例:

  • "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"


Aja*_*jay 24

作为该中提及维基制品,它是一种类型的编译器,其转换从一个编程语言到另一种编程语言源代码.源代码可能使用某种语言,或者不支持最新的硬件/软件改进,或者根据程序员的方便/偏好.

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

  • 另一个示例是TypeScript语言,它可以将(翻译)为JavaScript。 (2认同)

fum*_*uma 18

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

Transpiling是一个特定的术语,用于获取用一种语言编写的源代码,并转换为另一种具有相似抽象级别的语言 .

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

所以在你的情况下:

  • ' compile'JLX => JavaScript(和HTML),我认为它符合上面的定义.
  • 因此它可以被称为'transpiling'.虽然称它为"编译"也可以.

另一个例子:

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


Ira*_*ter 8

自20世纪80年代以来,我一直在构建这样的工具.

我们称它们为"源程序转换系统 ".

这个任期很好,AFAICT,约45年.这个想法可以追溯到那之前; 请参阅Val Schorre的Meta II编译器编译器,以了解该想法的1963版本.

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

  • 而计算机曾被称为"差异引擎".鼠标曾被称为"显示系统的XY位置指示器".汽车的前身被称为"用于运输货车尤其是火炮的消防车".缩短事物是语言的本质:参见Zipf定律和语言经济."这对我们来说已经足够好了,这些年轻人......"是垃圾.它被称为"转换器",因为"源到源转换编译器"对于日常使用来说太长了,现在转换器*是*日常使用(TypeScript/CoffeeScript/ES6和SCSS是突出的例子). (19认同)
  • 你的例子都是"当我们只有一些时,这是我们使用的笨拙的短语"; 在标准术语建立之前不久,人们还没有发明鼠标替代术语.我的观点是这项技术已经有50多年了.如果你想要语言经济,"转型系统"是缩短长句的方式.这些已经在许多计算领域日常使用; 也许只是你没有注意到它们.出现TypeScript不会突然改变概念,并导致需要一个新术语.你听起来就像那些牧师之一. (8认同)
  • 非@Amadan示例实际上是正确的.为他生根,即使老鼠没有被命名,它也被"描述"了.https://en.wikipedia.org/wiki/Douglas_Engelbart和Ira Baxter,检查了你的linkedin个人资料.你是一个圣人.非常尊重. (6认同)
  • @Amadan你甚至都不准确.巴贝奇的设备被称为分析引擎.它的前身被称为差异引擎,但它不是一台计算机.这是1837年.目前已经理解的"计算机"一词已经使用了七十年, (5认同)
  • @Amadan我认为你的任何一个例子都不准确,而且你的论证基本上都是轶事,它的例子就是你的例子.语言是动态的并不存在争议.问题是我们是否需要一个现有概念的新术语.对语言变化的负面反应与语言评估中的合法推动力一样:语言学家不可忽视的一点. (5认同)
  • @Cozzbie:您引用的是维基百科。我引用的是Engelbart申请的[实际专利](https://www.google.com/patents/US3541541)。但是,我仍然坚持这一观点:我的具体例子是否正确无关紧要。我只是在作出反应时指出我将如何尊重这个答案以及它背后的丰富经验,如果它能抵制无缘无故地剥削人们的冲动(除了使用与他不同的语言以外的其他原因)的话,我会做更多的事情。答案的最后一段是丑陋的,在他的下面。这不是客观的,也不值得成为StackOverflow的答案。 (2认同)

SmS*_*SmS 6

源到源编译器在大致相同抽象级别运行的编程语言之间进行转换,而传统编译器从更高级别的编程语言转换为更低级别的编程语言。

来源:维基百科

  • 编译器- 将源代码从高级语言翻译成低级语言。
    示例:C 编译器(C 到机器码)、JDK 的 javac 工具(java 到字节码)
  • Transpiler - 一种编译器,可在同一抽象级别的源代码之间进行转换。
    示例:Babel(ES6+ 到 ES5) - 您可以使用它来编写 ES6 代码,同时仍然支持 IE 11 及以下的旧浏览器。