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.
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.
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"
Antworten:
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
gc
undgccgo
. 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.quelle
gcc
C-Compiler ist in C geschrieben. Derjavac
Java-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.Schauen Sie sich die Quelle und C selbst an , wenn ich sagen darf.
BEARBEITEN Das Go-Team gab im Dezember 2013 bekannt, dass es den Compiler auf Go umstellen wird . Ab Februar 2015 ist der Compiler ausschließlich selbsthostend, da die C-Implementierung gelöscht wurde . Der neue Compiler wurde zum ersten Mal mit Go 1.5 ausgeliefert .
quelle
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.
quelle
"go compiler geschrieben in go und wenig von Assembly"
"aber gccgo ist in c c ++ geschrieben und los"
Rob Pike
quelle