为什么编译器是用C/C++编写的,而不是使用CoffeeScript(JavaScript,Node JS)?

由于嵌入式系统编程,我接触到C,我认为这是该领域的一种优秀语言.但是,为什么它用于编写编译器?如果gcc在C/C++中实现的原因是当时没有很多好的语言,那么为什么clang采用相同的路径(使用C/C++)没有任何借口.

是出于性能原因吗?与编译语言相比,大多数解释语言都有点慢,但我认为由于Node.js,CoffeeScript(JavaScript)中的差异几乎可以忽略不计.

从开发人员的角度来看,我认为使用高级语言编写一个编译器要容易得多.不幸的是,大多数编译器都是用C/C++编写的.是仅仅因为遗留代码?

回复评论:

> Bootstrapping只是一种说明这种语言足以编写一个编译器的方法.它不应该是我们选择语言来实现编译器的主要原因.
>我同意下面给出的猜测,“大多数编译器开发人员会回答,因为大多数编译器相关工具(bison,yacc)都会发出C代码”.但是,GCC和Clang都没有使用生成的解析器,他们自己实现了一个.这个前端流程独立于目标架构,不应该是C/C++的优势.
>或多或少的共识是,绩效是一个关键因素.实际上,即使对于GCC和Clang来说,构建合理大小的C项目(Linux内核)也需要花费大量时间.是因为前端还是后端.我必须承认,我在编译器的后端方面没有太多经验,因为我们完成了使用生成的LLVM代码的编译器课程.

最佳答案

I am exposed to C because of embedded system programming, and I think
it’s one wonderful language in this field.

是.它比Java更好.

However, why is it used to write compilers?

如果不向开发人员询问,这个问题就无法回答.我怀疑他们中的大多数会告诉你普通的编译器编写软件(yacc,flex,bison等)会产生C代码.

If the reason for gcc is that there aren’t many good languages,
there’s no excuse for clang.

GCC不是编程语言,也不是Clang.它们都是C编程语言的实现.

Is it for performance reasons?

不要将实现与规范混淆.速度是编译器和计算机引入的属性,而不是编程语言. GCC碰巧产生了相当高效的机器代码,这可能会影响开发人员使用C作为他们的主要编程语言……但是在十年的时间里,它可能是node.js比GCC产生更高效的机器代码.别忘了,StackOverflow是永远的.

*可以,但很可能不会.有关详细信息,请参阅下面的Ira Baxters评论.

Mostly interpreted languages are a bit slower compared with compiled
languages, but I guess the difference is almost negligible in
CoffeeScript (JavaScript), because of Node.js.

同样,解释或编译不是语言的选择,而是语言的实现.例如,GCC和Clang选择将C编译为机器代码. Ch和CINT是两个解释器,它们将C代码直接转换为行为,而不是机器代码. Java曾经主要使用解释进行翻译,但现在主要编译成JVM字节码. Javascript似乎也在逐步走向主流编译.谁知道?也许你会看到十年后主要用Javascript编写的编译器……

From the perspective of developers, I suppose it’s much easier to
write one compiler using high level languages.

所有这些编程语言在技术上都是高级的.它们主要是用抽象机器来定义的;他们当然不是低级别的.

Unfortunately, most of compilers out there are written in C/C++.

我不认为C用于编写软件是不幸的;这不是一个糟糕的编程语言.

Is it just because of legacy code?

我认为遗留代码可能会影响程序员的决定.最后,正如我所说,你必须问开发者.他们可能只是决定使用C或C,因为C或C是他们最喜欢的编程语言…为什么你会说英语?

转载注明原文:为什么编译器是用C/C++编写的,而不是使用CoffeeScript(JavaScript,Node JS)? - 代码日志