Esta es una guía para utilizar el compilador Glasgow Haskell (GHC): un sistema de compilación interactivo y por lotes para Haskell 2010 idioma.

GHC tiene dos componentes principales: un intérprete interactivo de Haskell (también conocido como GHCi), que se describe en Usando GHCi, y un compilador de lotes, descrito a lo largo Usando GHC. De hecho, GHC consiste en un solo programa que se ejecuta con diferentes opciones para proporcionar el sistema interactivo o por lotes.

El compilador por lotes se puede usar junto con GHCi: los módulos compilados se pueden cargar en una sesión interactiva y usarse de la misma manera que el código interpretado y, de hecho, cuando se usa GHCi, la mayor parte del código de la biblioteca se compilará previamente. Esto significa que obtiene lo mejor de ambos mundos: código de biblioteca precompilado rápido y respuesta de compilación rápida para las partes de su programa que se están desarrollando activamente.

GHC admite numerosas extensiones de idioma, incluida la concurrencia, una interfaz de función externa, excepciones, extensiones de sistema de tipos como clases de tipos de múltiples parámetros, cuantificación local universal y existencial, dependencias funcionales, variables de tipo con alcance y tipos explícitos sin caja. Todos estos se describen en Extensiones de idioma.

GHC tiene un optimizador completo, por lo que cuando realmente desee hacerlo (y tenga tiempo de sobra), GHC puede producir un código bastante rápido. Alternativamente, la opción predeterminada es compilar lo más rápido posible sin hacer demasiado esfuerzo para optimizar el código generado (aunque GHC probablemente no sea lo que describiría como un compilador rápido :-).

El sistema de creación de perfiles de GHC admite “pilas de centros de costos”: una forma de ver el perfil de un programa Haskell en una estructura similar a un gráfico de llamadas. Ver Perfilado para más detalles.

GHC viene con varias bibliotecas. Estos se describen en documentación separada.

1.1. Obtener GHC

Ve a la Página de inicio de GHC y siga el enlace “descargar” para descargar GHC para su plataforma.

Alternativamente, si desea construir GHC usted mismo, diríjase al Guía de construcción de GHC para averiguar cómo obtener las fuentes y compilarlas en su sistema. Tenga en cuenta que GHC en sí está escrito en Haskell, por lo que aún necesitará instalar GHC para construirlo.

1.2. Metainformación: sitios web, listas de correo, etc.

En la World-Wide Web, hay varias URL de posible interés:

Ejecutamos las siguientes listas de correo sobre GHC. Lo alentamos a unirse, si lo considera apropiado.

glasgow-haskell-users

Esta lista es para que los usuarios de GHC conversen entre ellos. Si tiene una pregunta específica sobre GHC, consulte la Preguntas más frecuentes primero.

Los suscriptores pueden publicar en la lista enviando su mensaje a glasgow-haskell-users@Haskell.org. Puede encontrar más información en el Página del cartero.

ghc-devs

Los desarrolladores de GHC pasan el rato aquí. Si está trabajando con la API de GHC o tiene una pregunta sobre la implementación de GHC, no dude en intervenir.

Los suscriptores pueden publicar en la lista enviando su mensaje a ghc-devs@Haskell.org. Puede encontrar más información en el Página del cartero.

Hay varias otras listas de correo relacionadas con Haskell y GHC atendidas por www.haskell.org. Ir a http://www.haskell.org/mailman/listinfo/ para ver la lista completa.

1.3. Informar errores en GHC

Glasgow Haskell es un sistema cambiante, por lo que seguramente habrá errores. Si encuentra uno, consulte esta página wiki para obtener información sobre cómo denunciarlo.

1.4. Política de numeración de versiones de GHC

A partir de la versión 6.8 de GHC, hemos adoptado la siguiente política para numerar las versiones de GHC:

Las ramas estables están numeradas x.y, donde ⟨y⟩ es incluso. Lanzamientos en la rama estable x.y están numerados x.y.z, donde ⟨z⟩ (> = 1) es el número de nivel de parche. Los niveles de parche son solo versiones de corrección de errores y nunca cambian la interfaz del programador a ningún código proporcionado por el sistema. Sin embargo, si instala un nuevo nivel de parche sobre uno anterior, deberá volver a compilar cualquier código que se compiló con las bibliotecas antiguas.

El valor de __GLASGOW_HASKELL__ (ver Opciones que afectan al preprocesador C) para un lanzamiento importante x.y.z es el número entero ⟨xyy⟩ (si ⟨y⟩ es un solo dígito, entonces se agrega un cero a la izquierda, por lo que, por ejemplo, en la versión 6.8.2 de GHC tendríamos __GLASGOW_HASKELL__==608).

Podemos hacer lanzamientos instantáneos de la rama estable actual disponible para descarga, y las últimas fuentes están disponibles en los repositorios de git.

Los lanzamientos de instantáneas estables se nombran x.y.z.YYYYMMDD. dónde YYYYMMDD es la fecha de las fuentes a partir de las cuales se creó la instantánea, y x.y.z+1 es la próxima versión que se realizará en esa rama. Por ejemplo, 6.8.1.20040225 sería una instantánea de la 6.8 rama durante el desarrollo de 6.8.2.

Podemos hacer lanzamientos instantáneos de HEAD disponible para descarga, y las últimas fuentes están disponibles en los repositorios de git.

Los lanzamientos de instantáneas inestables se nombran x.y.YYYYMMDD. dónde YYYYMMDD es la fecha de las fuentes a partir de las cuales se creó la instantánea. Por ejemplo, 6.7.20040225 sería una instantánea de HEAD antes de la creación del 6.8 rama.

El valor de __GLASGOW_HASKELL__ para una versión instantánea es el número entero ⟨xyy⟩. Sin embargo, nunca debe escribir ningún código condicional que pruebe este valor: dado que las interfaces cambian día a día y no tenemos una granularidad más fina en los valores de __GLASGOW_HASKELL__, solo debe compilar condicionalmente utilizando predicados que prueben si __GLASGOW_HASKELL__ es igual, posterior o anterior a una versión principal determinada.

El número de versión de su copia de GHC se puede encontrar invocando ghc con el --version bandera (ver Opciones de verbosidad).

La versión del compilador se puede probar dentro del código compilado con el MIN_VERSION_GLASGOW_HASKELL CPP macro (definido solo cuando CPP se utiliza). Ver Macros CPP estándar para detalles.

1.5. La licencia de compilador de Glasgow Haskell

Copyright 2002 – 2007, Tribunal Universitario de la Universidad de Glasgow. Reservados todos los derechos.

La redistribución y el uso en formato fuente y binario, con o sin modificaciones, están permitidos siempre que se cumplan las siguientes condiciones:

  • Las redistribuciones del código fuente deben conservar el aviso de derechos de autor anterior, esta lista de condiciones y el siguiente descargo de responsabilidad.
  • Las redistribuciones en formato binario deben reproducir el aviso de derechos de autor anterior, esta lista de condiciones y el siguiente descargo de responsabilidad en la documentación y / u otros materiales proporcionados con la distribución.
  • Ni el nombre de la Universidad ni los nombres de sus colaboradores pueden usarse para respaldar o promover productos derivados de este software sin un permiso previo específico por escrito.

ESTE SOFTWARE ES PROPORCIONADO POR EL TRIBUNAL DE LA UNIVERSIDAD DE LA UNIVERSIDAD DE GLASGOW Y LOS COLABORADORES “TAL CUAL” Y CUALQUIER GARANTÍA EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS IMPLÍCITAS DE COMERCIABILIDAD E IDONEIDAD PARA UN PROPÓSITO PARTICULAR. EN NINGÚN CASO EL TRIBUNAL DE LA UNIVERSIDAD DE LA UNIVERSIDAD DE GLASGOW O LOS COLABORADORES SERÁN RESPONSABLES DE CUALQUIER DAÑO DIRECTO, INDIRECTO, INCIDENTAL, ESPECIAL, EJEMPLAR O CONSECUENTE (INCLUYENDO, PERO NO LIMITADO A, LA ADQUISICIÓN DE BIENES O SERVICIOS SUSTITUTOS; , DATOS O BENEFICIOS O INTERRUPCIÓN COMERCIAL) SIN EMBARGO Y EN CUALQUIER TEORÍA DE RESPONSABILIDAD, YA SEA POR CONTRATO, RESPONSABILIDAD ESTRICTA O AGRAVIO (INCLUYENDO NEGLIGENCIA O DE OTRO MODO) QUE SURJA DE CUALQUIER MODO DEL USO DE ESTE SOFTWARE, INCLUSO SI SE RECOMIENDA LA POSIBILIDAD DE TAL DAÑO.