2009-08-03 25 views
164

¿En qué idiomas está escrito el compilador Java (javac), la máquina virtual (JVM) y el iniciador java?¿En qué idioma están escritos el compilador Java y JVM?

+21

trabajo en Java, así que quiero saber sobre el idioma ... :) –

+0

Sí, pero no estoy involucrado (ni Rahul o él no haría la pregunta presumiblemente) al escribir compiladores o intérpretes de Java . Escribo código Java y es útil saber cómo funcionan determinados bits de él (para seleccionar clases) pero si está escrito en C, BCPL o COBOL, realmente no me importa. – paxdiablo

+24

Es su perspectiva. Digamos que trabajó en alguna tecnología durante 20 años y el entrevistador le pregunta qué idioma está escrito o cómo funciona, entonces puede decir que no le importa, quiere decir que solo quiere escribir si no en el idioma que no quiero realmente entender el lenguaje. –

Respuesta

140

La redacción precisa de la pregunta es un poco engañoso: no es "JVM" o "el compilador" ya que hay vendedores JVM múltiples (JRockit es uno, IBM otra) y múltiples compiladores por ahí.

  • La JVM de Sun es escrito en C, aunque esto no es necesariamente el caso - la JVM ya que se ejecuta en su máquina es una dependiente de la plataforma ejecutable y, por tanto, podría haber sido escrito originalmente en cualquier idioma. Por ejemplo, el original de IBM JVM fue escrito en Smalltalk

  • Las bibliotecas de Java (java.lang, java.util etc, a menudo referido como la API de Java) son a su vez escrito en Java, aunque los métodos marcados como native tendrá ha sido escrito en C o C++.

  • Creo que el compilador de Java proporcionado por Sun también está escrito en Java. (Aunque, de nuevo, hay múltiples compiladores por ahí)

+0

Creo que quiere decir "java" el programa que usas para iniciar una JVM. –

+1

En realidad, * one * library en Sun's JRE está escrito en NetRexx. (Es una de las bibliotecas matemáticas de precisión arbitraria, ya sea BigInteger, BigNum o BigDecimal. Olvidé cuál). En teoría, podría usar cualquier lenguaje para implementar JRE, siempre que pueda compilar a una representación que un programa Java pueda entender. –

+18

Proporcione una referencia a Sun JVM escrito en C. –

7

En principio casi cualquier cosa, por lo general C

53

De Java Docs

El compilador está escrito en Java y el tiempo de ejecución está escrito en ANSI C

+1

El primer compilador de Java desarrollado por Sun Microsystems fue escrito en C usando algunas bibliotecas de C++ http://en.wikipedia.org/wiki/Java_compiler –

+3

Este es realmente un documento bastante viejo (> 10 años por el aspecto de las cosas). Por ejemplo, dice * "Los códigos de bytes de Java se traducen sobre la marcha a instrucciones nativas de la máquina (interpretadas) y no se almacenan en ningún lugar" * ¡lo cual no ha sido así durante aproximadamente 5 años! –

+2

Bueno, ¿desde cuándo la documentación ha estado realmente actualizada, especialmente después de grandes cambios? :) – Esko

8

This link debe responder a su pregunta

Parece que el compilador ahora está escrito en Java, pero el tiempo de ejecución está escrito en A NSI C

3

Jikes RVM, una JVM autohospedada que se utiliza ampliamente con fines de investigación está escrita en Java. No es la persona que ejecuta en sus escritorios, pero está muy arriba en mi lista de "ahora vamos a mostrar el poder general del idioma".

+0

¿Las tortugas * están abajo *? ¿Tiene algún tipo de microkernel? Si es así, ¿en qué idioma está escrito? – Raedwald

2

Suponiendo que está hablando el Hotspot JVM, que se IIRC proporcionada por Sun, está escrito en C++. Para obtener más información sobre las diversas máquinas virtuales para Java, puede consultar este link. javac, como la mayoría de los compiladores de Java, está escrito en Java.

-2

La mayoría de sistemas operativos, JVM están escritos en ISO C++. Dudo que se use ANSI C, un lenguaje completamente diferente que es bastante anticuado hoy en día.

+20

Tienes que estar bromeando. La mayoría de las versiones de Linux están escritas en C. Una gran cantidad de Windows está escrita en assember, al igual que muchos sistemas operativos integrados.La mayoría de los escritores de sistemas operativos se mantendrán alejados de lenguajes como C++, donde elementos como constructores y destructores que no están presentes en el código fuente se insertan automáticamente por el compilador. –

+0

linux está escrito en "C". hasta algún momento jrockit jvm fue escrito en "C". solo el hotspot jvm está escrito en "C++". – techcraver

46

El primer compilador de Java fue desarrollado por Sun Microsystems y fue escrito en C usando algunas bibliotecas de C++. Hoy en día, el compilador de Java está escrito en Java, mientras que el JRE está escrito en C.

Podemos imaginar cómo el compilador Java fue escrito en Java como esto:

El compilador de Java está escrito como un programa Java y luego compilado con el compilador de Java escrito en C (el primer compilador de Java). Por lo tanto, podemos utilizar el compilador de Java recién compilado (escrito en Java) para compilar programas Java.

+19

+1 para explicar cómo se puede escribir un compilador Java en Java :) –

Cuestiones relacionadas