In welcher Sprache ist der Compiler der Programmiersprache Go geschrieben?


73

Ich denke, der Titel ist selbsterklärend.


20
Meinen Sie "In welcher Sprache ist Googles Compiler für die Programmiersprache Go geschrieben"? Sprachen sind nicht in Sprachen geschrieben. Implementierungen sind.
Thomas Eding

8
Ja, ich entschuldige mich für die Unbestimmtheit, aber ich denke, wir kennen die Antwort darauf durch die akzeptierte Antwort, die alles klarstellt, was Sie sowieso sagen.
Digiarnie

3
Der Titel ist nicht selbsterklärend, sondern konzeptionell verwirrt.
Jim Balter

Antworten:


149

Programmiersprachen sind keine Programme, daher werden sie in keiner Sprache "geschrieben". Sie werden häufig durch formale Grammatiken (z. B. BNF) beschrieben.

Interpreter und Compiler für Programmiersprachen sind Programme und müssen daher in einer Programmiersprache geschrieben sein.

Go hat mindestens zwei Compiler gcund gccgo. Ersteres wurde in C geschrieben, ist aber jetzt in Go selbst geschrieben. Während letzteres ein gcc-Frontend ist, das hauptsächlich in C ++ geschrieben wurde. Die Bibliotheken von Go sind in Go geschrieben.


1
Werden sie einen in Assembly geschriebenen Compiler veröffentlichen? Ich weiß, dass C kurz vor der Montage steht, aber wäre es vom Standpunkt der Leistung aus nicht das Beste, es vollständig von Grund auf in die Montage zu schreiben?
Cocksure

14
@Cocksure Die zusätzliche Leistung wäre den Schlag in die Wartbarkeit nicht wert. Und das Einzige, was sich beschleunigen würde, ist die Kompilierungszeit.
Litelite

4
Wie kann der Go-Compiler selbst jetzt in Golang geschrieben werden?
Mecampbellsoup

6
@mecampbellsoup das ist nicht ungewöhnlich. Der gccC-Compiler ist in C geschrieben. Der javacJava-Compiler ist in Java geschrieben. Die sehr erste C / Java / Go - Compiler hatte in einer anderen Sprache geschrieben werden, aber wenn man einen Compiler hat , können Sie es nachfolgende Versionen der Compiler zu kompilieren verwenden. Wenn Sie einen Compiler auf eine neue Architektur (wie ARM oder 64-Bit-Intel) portieren möchten, muss Ihr Compiler Cross-Compilieren können, aber die meisten Mainstream-Compiler können dies.
Artelius

@Cocksure die Notwendigkeit der Effizienz auf Compilerebene wäre nicht so wichtig wie die Effizienz der Ausgabe-Binärdatei.
Aran Mulholland


12

Es ist in C geschrieben. Die Bibliotheken sind in Go selbst geschrieben.

Bearbeiten: Jetzt wurde der Compiler in Go neu geschrieben, sodass er sich vollständig selbst hostet.


1
Ich hatte wirklich erwartet, dass es in Go geschrieben wird, nachdem es das erste Mal kompiliert wurde.
Cregox

2
@Cawas Zum ersten Mal kompiliert von was? Bevor Sie ein in X geschriebenes Programm kompilieren können, einschließlich eines Compilers für X, müssen Sie einen Compiler für X in einer anderen Sprache geschrieben haben. In diesem Fall war diese Sprache C. Wenn ein Compiler für Go in C geschrieben ist, warum sollte er dann einen anderen in Go schreiben, insbesondere wenn dieser Compiler geändert werden müsste, wenn die Sprache geändert wird? Go ist immer noch eine experimentelle, instabile und unvollständige Sprache - nicht gut für eine Sprache, in der man Compielrs schreiben kann.
Jim Balter

@ Jim was meinst du mit was? Es ist alles wie du gesagt hast! Sie haben mir gerade Ihre eigene Frage beantwortet. Aber ich wusste nicht, dass Go so ein Kind ist. Ich habe es nie benutzt und bin einfach ein Enthusiast von irgendetwas Google.
Cregox

Nehmen wir also an, ich wollte Go auf eine neue Nicht-x86-Architektur portieren, für die derzeit nur ein C-Compiler und ein Assembler vorhanden sind. Wie würde ich das machen? Müsste ich die alte C-Version des Compilers wiederbeleben und diesen portieren und mich dann von dort aus hochfahren?
ChrisGNZ

@ ChrisGNZ Ja genau.
Charles

-1

"go compiler geschrieben in go und wenig von Assembly"

"aber gccgo ist in c c ++ geschrieben und los"

Rob Pike


Wie kann ein Go-Compiler in Go geschrieben werden? Das macht für mich keinen Sinn
August Jelemson

eine Antwort Online auf meine eigene Frage gefunden Link
August Jelemson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.