haskell bytecode ghc

haskell - GHC Core como "bytecode"?



(1)

Esto no sería práctico; GHC Core no es portátil. Por ejemplo, en una máquina de 32 bits, la aritmética de 64 bits se compila para llamadas de función extrañas en el Core, pero en una máquina de 64 bits, utiliza la aritmética de máquina-máquina nativa.

Más importante aún, GHC no puede leer Core; puede imprimirlo en algunos formatos, pero no hay un código real para leer ninguno de esos formatos nuevamente. No estoy seguro de que haya algún obstáculo importante para hacerlo, pero ha sido la situación documentada durante muchos años. , así que no esperaría que el soporte aparezca pronto.

Core también es bastante cercano a Haskell en general; no está claro qué comprarías al distribuir código en ese formulario. El tiempo que se tarda en convertir Haskell en Core suele ser menor que el tiempo que se tarda en hacer cosas como vincular el programa final, por lo que generalmente no ahorraría mucho tiempo de compilación.

Además, se hace menos comprobación del código fuente de Core que de Haskell (aunque creo que -dcore-lint mitigaría esto), y el sandboxing sería realmente difícil (hay Safe Haskell, pero no Safe Core). Por supuesto, estas desventajas no se aplican si la fuente del código de bytes es confiable.

Básicamente, GHC Core es, en gran medida, un lenguaje intermedio de compilación, a diferencia de los formatos de bytecode portátiles diseñados para este propósito, como el bytecode de Python y la JVM.

Como nota al margen, GHC tiene un intérprete de bytecode, tal como lo usa GHCi. El bytecode utilizado también es no portátil, por lo que no se me ocurren ventajas en comparación con el código de máquina que produce GHC en funcionamiento normal.

Como lo entiendo, GHC (el Glorioso Compilador de Glasgow Haskell) compila Haskell a "Core", y luego compila ese Core en código de máquina. ¿Sería práctico distribuir los programas de Haskell como GHC Core, como si se tratara de "bytecode"? ¿Habría algún beneficio para tal distribución? ¿Por qué o por qué no?