Estoy escribiendo mi primer lenguaje de programación que está orientado a objetos y hasta ahora es muy bueno para crear una sola 'clase'. Pero, digamos que quiero tener clases, digamos ClassA
y ClassB
. Siempre que estos dos no tengan nada que ver entre sí, entonces todo está bien. Sin embargo, digamos que ClassA
crea un ClassB
--esto plantea 2 preguntas relacionadas:
-¿Cómo sabría el compilador cuando compila ClassA
que ClassB
incluso existe, y, si es así, cómo sabe sus propiedades?
Mis pensamientos hasta ahora habían sido: en lugar de compilar cada clase a la vez (es decir, escanear, analizar y generar código) cada "archivo (no realmente archivo, per se, sino una" clase ") necesito escanear + analizar cada uno primero , luego generar código para todos?
fuente
Los idiomas antiguos a veces son más estrictos; considere lo que es posible en Java:
He visto el antipatrón anterior, y es realmente feo (lo habría prohibido). Ambas unidades de compilación se utilizan entre sí. Pero Ifc se puede compilar en código sin tener un Implem compilado. El código compilado, .class, comparable a un C .obj, contiene "información de enlace:" una importación de Implem, que llama a un constructor sin parámetros
Implem()
. La clase Implem puede compilarse sin problemas. En parte, el ClassLoader: haciendo datos de clase de inicialización / creación de JVM, y en parte la propia máquina virtual Java, juega un poco como enlazador , integrando todo.Por ejemplo, compilar con una versión de una biblioteca específica y ejecutar con otra versión de esa biblioteca reconocerá los errores de tiempo de ejecución.
Entonces la respuesta: la compilación entrega unidades de código de objeto compilado, que uno tiene que ver como código + datos + API para vincular entre sí.
El compilador debe luego también hacer un relleno de juntas, y verificar la API de vinculación; Una segunda fase.
Esto puede irritar y parecer poco elegante, pero las pruebas matemáticas pueden funcionar de la misma manera: al probar la corrección completa, uno ya puede considerar que una parte es verdadera hasta la verificación.
fuente