In welcher Sprache sind der Java-Compiler und die JVM geschrieben?

195

In welchen Sprachen sind der Java- Compiler ( javac), die virtuelle Maschine (JVM) und der javaStarter geschrieben?

Rahul Garg
quelle
23
Ich arbeite an Java, also möchte ich etwas über die Sprache wissen ... :)
Rahul Garg
25
Es ist Ihre Perspektive. Nehmen wir an, Sie haben 20 Jahre lang an einer Technologie gearbeitet und der Interviewer fragt Sie, welche Sprache sie geschrieben hat oder wie sie funktioniert. Dann können Sie sagen, dass es Ihnen egal ist, dass Sie nur schreiben möchten, wenn andere in der Sprache nicht wollen die Sprache wirklich verstehen.
Rahul Garg
21
und darüber hinaus denke ich, dass Wissen niemals verschwendet wird. Etwas zu wissen ist also keine Zeitverschwendung.
Rahul Garg
1
... ein Maschinenbauingenieur oder ein Rennfahrer (um die Metapher zu erweitern)
Epaga
2
@paxdiablo Autofahren ist etwas, was Sie tun, aber nicht Ihr Beruf. Rennfahrer könnten sich darum kümmern, wie Motoren funktionieren. Ich sage nicht, dass es sie alle interessiert. Aber wenn ein Rennfahrer mehr darüber wissen wollte, wie der Motor an dem Auto funktioniert, für das er bezahlt wird, würden Sie das für unvernünftig halten?
JD Isaacks

Antworten:

171

Die genaue Formulierung der Frage ist leicht irreführend: Es handelt sich nicht um "die JVM" oder "den Compiler", da es mehrere JVM-Anbieter (Jrockit ist einer, IBM ein anderer) und mehrere Compiler gibt.

  • Die Sun-JVM ist geschrieben C, obwohl dies nicht der Fall sein muss. Die JVM, wie sie auf Ihrem Computer ausgeführt wird, ist eine plattformabhängige ausführbare Datei und könnte daher ursprünglich in einer beliebigen Sprache geschrieben worden sein. Beispielsweise wurde die ursprüngliche IBM JVM in Smalltalk geschrieben

  • Die Java - Bibliotheken ( java.lang, java.utilusw., die oft als bezeichnet die Java API ) sind selbst in Java geschrieben, obwohl sie als markierte Methoden nativewerden in geschrieben wurden , Coder C++.

  • Ich glaube, dass der von Sun bereitgestellte Java-Compiler auch in Java geschrieben ist. (Obwohl es wieder mehrere Compiler gibt)

oxbow_lakes
quelle
Ich denke, er meint "Java" das Programm, mit dem Sie eine JVM starten.
Stephen C
1
Tatsächlich ist eine Bibliothek in Suns JRE in NetRexx geschrieben. (Es ist eine der willkürlichen Präzisions-Mathematikbibliotheken, entweder BigInteger, BigNum oder BigDecimal. Ich habe vergessen, welche.) Theoretisch können Sie jede Sprache verwenden, um die JRE zu implementieren, solange sie zu einer Darstellung kompiliert werden kann, die ein Java-Programm kann verstehen.
Jörg W Mittag
18
Bitte geben Sie einen Verweis auf die Sun JVM an, die in C.
Mohamed Bana am
8
Die HotSpot JVM ist in C ++ geschrieben - www2.research.att.com/~bs/applications.html
devdimi
5
@devdimi der Link ist defekt und befindet sich jetzt unter: stroustrup.com/applications.html
flup
79

Der allererste Java-Compiler wurde von Sun Microsystems entwickelt und mit einigen Bibliotheken aus C ++ in C geschrieben. Heute ist der Java-Compiler in Java geschrieben, während die JRE in C geschrieben ist.

Wir können uns vorstellen, wie der Java-Compiler wie folgt in Java geschrieben wurde:

Der Java-Compiler wird als Java-Programm geschrieben und dann mit dem in C (dem ersten Java-Compiler) geschriebenen Java-Compiler kompiliert. Somit können wir den neu kompilierten Java-Compiler (in Java geschrieben) verwenden, um Java-Programme zu kompilieren.

Shrinath
quelle
31
+1 für die Erklärung, wie ein Java-Compiler in Java geschrieben werden kann :)
Eduard Luca
2
Zu diesem Zweck wird dieser Prozess des "Upgrades" auf neue Compiler durch Kompilieren ihres Codes in grundlegenderen Compilern als "Bootstrapping" bezeichnet, wie in "Ziehen Sie sich an Ihren Bootstraps hoch", von wo aus ein Computer "gebootet" wird. Computerphile auf YouTube hat ein gutes Video darüber und "T-Diagramme"
iono
Beantwortet das auch das Henne-Ei-Problem :)
Skynet
@ Skynet selbst gehostetes Huhn
sportzpikachu
65

Aus Java Docs

Der Compiler ist in Java und die Laufzeit in ANSI C geschrieben

Sev
quelle
1
Der allererste von Sun Microsystems entwickelte Java-Compiler wurde in C unter Verwendung einiger Bibliotheken aus C ++ geschrieben. En.wikipedia.org/wiki/Java_compiler
Rahul Garg
4
Dies ist wirklich eher ein altes Dokument (> 10 Jahre, wie es aussieht). Zum Beispiel heißt es "Java-Bytecodes werden im laufenden Betrieb in native Maschinenanweisungen übersetzt (interpretiert) und nirgendwo gespeichert", was seit etwa 5 Jahren nicht mehr der Fall ist!
oxbow_lakes
2
Nun, seit wann ist die Dokumentation wirklich aktuell, insbesondere nach großen Änderungen? :)
Esko
Nun - die Antwort ist nicht wirklich richtig; Die Sun JVM ist in C und der Sun Java Compiler in Java geschrieben. Die erste IBM JVM wurde in Smalltalk geschrieben.
oxbow_lakes
8
Was kompiliert Java? Java. Wie kommt man an Java? Kompiliere es. Huh?
9

Dieser Link sollte Ihre Frage beantworten

Es scheint, dass der Compiler jetzt in Java geschrieben ist, aber die Laufzeit ist in ANSI C geschrieben

micmoo
quelle
8

Im Prinzip fast alles, normalerweise C.

djna
quelle
3

Jikes RVM , eine selbsthostende JVM, die häufig für Forschungszwecke verwendet wird, ist in Java geschrieben. Es ist nicht die Person, die auf ihren Desktops läuft, aber es steht ganz oben auf meiner Liste "Jetzt wollen wir die allgemeine Kraft der Sprache demonstrieren".

Sam Harwell
quelle
Es sind Schildkröten ganz unten ? Hat es eine Art Mikrokernel? Wenn ja, in welcher Sprache ist das geschrieben?
Raedwald
3

Angenommen, Sie sprechen von der Hotspot-JVM, die von Sun bereitgestellt wird und in C ++ geschrieben ist. Weitere Informationen zu den verschiedenen virtuellen Maschinen für Java finden Sie unter diesem Link . javac ist wie die meisten Java-Compiler in Java geschrieben.

Michael Foukarakis
quelle
0
  • Bei der Einführung von Java durch Sun Microsystem wurde der Java-Compiler mit einigen Bibliotheken aus C ++ in C geschrieben.
  • Da es im Compiler-Design ein Konzept namens Bootstapping gibt, wird es hauptsächlich in der Compiler-Entwicklung verwendet. Beim Bootstrapping wird ein Compiler (oder Assembler) in der Quellprogrammiersprache geschrieben, die kompiliert werden soll. Es wird verwendet, um einen selbsthostenden Compiler zu erstellen. Die Entwicklung von Compilern für neue Programmiersprachen wurde zunächst in einer vorhandenen Sprache entwickelt und dann in der neuen Sprache umgeschrieben und selbst kompiliert. Aus diesem Grund ist der Java-Compiler heute in Java selbst geschrieben .
  • Java Virtual Machine: Die Java Virtual Machine ist eine abstrakte Maschine. Wie eine echte Rechenmaschine verfügt sie über einen Befehlssatz und bearbeitet verschiedene Speicherbereiche der Laufzeit. Normalerweise interpretiert JVM den Bytecode in Maschinencode.

(Weitere Informationen finden Sie unter folgendem Link: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

Trishant Saxena
quelle