compiler construction - que - Pragmática de las lenguas intermedias mecanografiadas.
mecanografiado definicion (0)
Una tendencia en la compilación es usar lenguajes intermedios escritos . El ghc
de Haskell con su lenguaje intermedio core
, una variante del Sistema F-omega, es un ejemplo de esta arquitectura [1]. Otro es LLVM, que tiene un lenguaje intermedio escrito en su núcleo [2]. El beneficio de este enfoque es que los errores en las transformaciones que forman parte del generador de código se pueden detectar temprano. Además, la información de tipo se puede utilizar durante la optimización y la generación de código.
Por eficiencia, los IR tipificados se verifican por tipo, en lugar de inferir su tipo. Para que las verificaciones de tipos sean rápidas, cada variable y cada carpeta llevan tipos para una fácil comprobación de tipos.
Sin embargo, muchas transformaciones en la tubería del compilador pueden introducir nuevas variables. Por ejemplo, una transformación de normalización K(.)
Podría transformar una aplicación
M(N)
en una expresión como
let x = K(M) in
let y = K(N) in x(y)
Pregunta. Me pregunto cómo los compiladores manejan el problema de dar tipos a las variables recién introducidas. ¿Se vuelven a verificar, en el ejemplo anterior K(M)
y K(N)
? ¿No es eso mucho tiempo? ¿Y requiere pasar un entorno alrededor? ¿Utilizan los mapas de los nodos AST para escribir información para evitar que se vuelva a ejecutar la verificación de tipos?
S. Marlow, S. Peyton Jones, el compilador de Glasgow Haskell .