usar peta para instalar español entornos entorno ejemplos desarrollo compilador como haskell linker gold-linker

para - peta haskell en español



Cómo enlazar con el enlazador de oro GNU en lugar de ld en Haskell (1)

Enlace 3 veces más rápido con gold

Desde GHC 7.8 , puede decirle a GHC y a cabal (en tiempo de ejecución sin tener que recompilar GHC) que se vincule con el oro de GNU.

Necesitas en tu archivo .cabal :

library: ghc-options: -optl-fuse-ld=gold ld-options: -fuse-ld=gold executable myExecutable ghc-options: -optl-fuse-ld=gold ld-options: -fuse-ld=gold

(Tenga en cuenta que es posible que desee pasar estos indicadores a stack / cabal / Setup.hs en la línea de comandos en lugar de codificarlos en el archivo .cabal para no reducir la portabilidad del paquete).

Para mí, es 3.5x más rápido, reduciendo el tiempo total de enlace de un proyecto de 150 segundos a 40 segundos.

Actualización: Enlace 10x más rápido con lld

Vea https://github.com/nh2/link-with-lld-example para un ejemplo completo; partes clave:

library ghc-options: "-pgmP clang" "-pgmc clang" "-pgma clang" "-pgml clang" "-optl-fuse-ld=lld" ld-options: -fuse-ld=lld executable myExecutable ghc-options: "-pgmP clang" "-pgmc clang" "-pgma clang" "-pgml clang" ld-options: -fuse-ld=lld

La comparación del tiempo de enlace para el enlace ejecutable final multiplicado por mi proyecto:

ld 124 seconds gold 36 seconds lld 11 seconds

Mi proyecto Haskell dedica mucho tiempo a Linking dist/build/myapp/myapp ... y también a cargar bibliotecas compartidas al ejecutar el código de TemplateHaskell .

Sospecho que esto es porque ld es lento.

¿Cómo puedo mejorar los tiempos de enlace al cambiar al engarce de gold ?