enter link description here ¿Cómo se las arregla el compilador de Java para resolver las referencias entre clases tan rápidamente, si tiene un conjunto de clases que se refieren entre sí y utilizan los métodos de los demás?compiladores + referencias entre clases: ¿cómo hace javac rápidamente lo que los compiladores C++ hacen lentamente?
Sé cómo funcionan los compiladores de C++ en este sentido: cada archivo .cpp se compila por separado, y usan esos terribles archivos .h para declarar campos/métodos de clase, de modo que el mismo conjunto de archivos se vuelve a analizar cada vez y/o los compiladores tienen que soportar encabezados precompilados.
Pero Java no hace esto y no hay separación en el origen del programa de las interfaces de clase/implementaciones de la forma en que Turbo Pascal las separó.
Veo que si tiene una clase Foo y se refiere a las clases Bar, Baz, Quux que están todas en un archivo barbazquux.jar separado, entonces las cosas serían sencillas: el archivo .jar ya se ha compilado, así que cuando Foo.java se compila puede ir a ver los archivos .class en barbazquux.jar.
Pero si tiene referencias de clases cíclicas, y la clase Foo hace referencia a la clase Bar que hace referencia a la clase Foo, ¿cómo compila posiblemente Foo.java sin tener que compilar primero Bar.java y luego decidir que tiene que compilar Foo.java y quedar atrapado en un bucle?
¿Qué hace el compilador de Java para manejar las referencias entre clases?
edición: Yair señala another question con respuestas que vagamente menciones compiladores paso múltiple. De acuerdo, entonces hay múltiples pases. ¿Qué sucede exactamente en cada pase y cómo logra Java compilar tan rápido? ¿Tiene que volver a analizar cada archivo en cada pase, o almacena el árbol de sintaxis abstracta para ahorrar tiempo, o qué?
... y ¿cómo se llama este concepto, por lo que puedo obtener más información si elijo buscar en algunos libros de compilación? –
parece una pregunta de dup que fue respondida. Ver [aquí] (http://stackoverflow.com/questions/3032874/how-does-compiling-circular-dependencies-work). – yair
Supongo, pero esa pregunta realmente no tiene respuestas que dicen mucho. –