Go编程语言的编译器使用哪种语言编写?


73

我认为标题是不言自明的。


21
您是说“用Go语言编写的Google编译器使用哪种语言”?语言不是用语言编写的。实现是。
Thomas Eding

8
是的,我对此含糊不清表示歉意,但我认为我们可以通过已接受的答案(明确了您在说的所有内容)中知道答案。
digiarnie

3
标题不是自我解释,而是概念上的混淆。
Jim Balter

Answers:


150

编程语言不是程序,因此不会以任何语言“编写”它们。它们通常由形式语法(例如BNF)描述。

编程语言的解释器和编译器程序,因此必须以某种编程语言编写。

Go至少有两个编译器,gcgccgo。前者是用C编写的,但现在是用Go本身编写的。后者是主要用C ++编写的gcc前端。Go的库是用Go编写的。


1
他们要推出用汇编语言编写的编译器吗?我知道C接近汇编语言,但是从性能的角度来看,不是完全从头开始完全用汇编语言编写C语言是最好的吗?
Cocksure 2014年

15
@Cocksure增加的性能在可维护性方面不值得一试。无论如何,唯一可以加快速度的是编译时间。
litelite

5
现在如何用golang编写go编译器本身?
mecampbellsoup

6
@mecampbellsoup这并不罕见。在gccC编译器是用C写的javac编译器是用Java编写的Java。非常第一和C / Java /转到编译器有一些其他语言编写,但一旦你有一个编译器,你可以用它来编译编译器的后续版本。如果要将编译器移植到新的体系结构(如ARM或64位Intel),则您的编译器需要能够交叉编译,但是大多数主流编译器都可以做到这一点。
Artelius

@Cocksure要求编译器级别的效率不如输出二进制文件的效率重要。
阿兰·穆赫兰


13

它是用C编写的。库是用Go本身编写的。

编辑:现在编译器已经用Go重写,因此它是完全自托管的。


1
在第一次编译后,我真的希望它可以用Go编写。
cregox

2
@Cawas第一次由什么编译?在编译用X编写的任何程序(包括X的编译器)之前,必须具有以其他某种语言编写的X的编译器。在这种情况下,该语言为C。给定用C语言编写的Go编译器,为什么还要用Go编写另一种语言,尤其是当更改语言时必须修改该编译器时?围棋仍然是一个实验性的,不稳定的,和不完整的语言-在一个语言写compielrs并不好。
吉姆·巴尔特

@Jim你的意思是什么?一切如您所说!您刚刚对我回答了自己的问题。但我不知道Go真是个小孩子。我从未使用过它,并且只是谷歌的任何一个爱好者。
cregox 2011年

因此,可以说我想将Go移植到一个新的非x86体系结构,该体系结构目前仅存在C编译器和汇编器。我该怎么办?我需要复活旧的C版本的编译器并移植该版本,然后从那里引导我的自我吗?
ChrisGNZ '19

@ChrisGNZ是的,完全正确。
查尔斯

1

“用go编写的go编译器,很少汇编”

“但是gccgo是用c c ++编写的,然后运行”

罗伯·派克


如何才能一展身手,编译器去写?这是没有意义的我
八月Jelemson

在我自己的问题链接上
August Jelemson

您是否想查看一种语言,其编译器是使用另一种语言编译器构建的,然后使用其旧编译器构建了新的编译器?总共30秒?前往vlang.io页面
user5857396 '20
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.