En lo que respecta a GHC, las listas de importación solo están ahí para facilitar la lectura y evitar los conflictos de nombres; no afectan a lo que está vinculado en absoluto.
Además, incluso si solo importó algunas funciones de una biblioteca, aún podrían depender de la mayor parte de la biblioteca internamente, por lo que no debería esperar necesariamente ver una disminución de tamaño utilizando solo algunas de las disponibles. interfaz en general.
De forma predeterminada, los enlaces GHC en bibliotecas completas, en lugar de solo las piezas que utiliza; usted podría evitar esto mediante la construcción de bibliotecas con la opción -split-objs
a GHC (o poner split-objs: True
en el archivo de configuración Cabal a instalar (~/.cabal/config
en Unix)), pero ralentiza la compilación, y aparentemente no es recomendado por los desarrolladores de GHC:
-split-objs
Informe a todo el enlazador para dividir el archivo único objeto que normalmente se genera en varios archivos de objetos, uno por cada nivel superior función de Haskell o escribe en el módulo. Esto solo tiene sentido para las bibliotecas, donde significa que los ejecutables vinculados a la biblioteca son más pequeños, ya que solo enlazan con los archivos objeto que necesitan. Sin embargo, ensamblar todas las secciones por separado es costoso, por lo que es más lento que compilar normalmente. Además, el tamaño de la biblioteca en sí (el archivo .a) puede ser un factor de 2 a 2,5 más grande. Usamos esta característica para construir bibliotecas de GHC.
- The GHC manual
Esto omitir partes no utilizadas de las bibliotecas que utiliza, independientemente de lo que se importa.
También te puede interesar usar shared Haskell libraries.
Citando a ehird: "En lo que respecta a GHC, las listas de importación solo están ahí para facilitar la lectura y evitar los conflictos de nombres, ya que no afectan a lo que está vinculado en absoluto". Eso no puede ser cierto, ya que el crecimiento en tamaño ocurre incluso si solo pongo un "módulo de importación" en el módulo principal sin usar nada dentro de ese módulo. – Josephine
"Lista de importación" se refiere a la lista de identificadores para importar entre paréntesis después del nombre del módulo, no la lista de declaraciones de importación en la parte superior de un módulo. – ehird
Correcto, eso tiene sentido. Gracias por la aclaración y la respuesta muy informativa! – Josephine