2010-06-23 13 views
5

Me preguntaba si las extensiones de GHC se pueden dividir en básicamente dos diferentes categoríasextensiones categorización GHC

  • los que proporcionan "azucar sintáctica" o conveniencia
  • y los que introducir algo nuevo, un nuevo paradigma para la instancia .

Ahora, siempre se podría dividir las extensiones existentes en las categorías anteriores, ¿qué extensión cabría en qué categoría?

+2

No estoy seguro de cuán significativa es esa distinción, dada la exhaustividad de Turing, en cierto sentido, todo lo demás es solo "conveniencia". Por supuesto, escribir Haskell en lugar de, oh, Lazy K es ** extremadamente ** conveniente de hecho ... –

Respuesta

8

creo una clasificación más apropiada sería dividirlo por el oleoducto compilador:

extensiones sintácticas

  • -XMagicHash
  • -XUnicodeSyntax
  • -XNewQualifiedOperators
  • -XViewPatterns
  • - XNPlusKPatterns
  • -XDoRec
  • -XTransformListComp
  • -XNoImplicitPrelude
  • -XPostfixOperators
  • -XTupleSections
  • -XDisambiguateRecordFields
  • -XNamedFieldPuns
  • -XRecordWildCards
  • -XPackageImports
  • -XExplicitForAll
  • -XKindSignatures
  • ...

extensiones de tipos de sistema

  • -XUnboxedTuples
  • -XLiberalTypeSynonyms
  • -XGADTs
  • -XMultiParamTypeClasses
  • -XFlexibleContexts
  • -XConstrainedClassMethods
  • -XOverlappingInstances y -XIncoherentInstances
  • -XTypeFamilies
  • -XImplicitParams

extensiones transversales

  • -XTemplateHaskell
  • -XForeignFunctionInterface

Optimizatsions

  • -fenable-reescritura-reglas
  • -fspec-Constr Extensiones
  • -O2

generación de código

  • -fllvm
  • -fasm
  • -fvia-C

extensiones de tiempo de ejecución

  • -enhebrado

¿Qué opinas? No todos los indicadores son (a) definibles en términos de construcciones existentes, o (b) una nueva parte del compilador. Es más sutil.

También hay muchas otras extensiones, fíjate si puedes clasificarlas de esta forma.

+0

¿Por qué "Cross-Cutting" como una etiqueta para FFI y TH? – solidsnack

+1

@Jason Dusek: Debido a que tienen un gran impacto en múltiples aspectos del lenguaje, me imagino que invocarán un código externo arbitrario o realizarán cambios arbitrarios al código en tiempo de compilación. –

+1

Oh, porque modifican todos los aspectos del compilador y el tiempo de ejecución: sintaxis, tipos, generación de código y compatibilidad con el tiempo de ejecución. –

2

Las banderas ya están categorizadas en el flag reference en la guía del usuario de GHC, y las extensiones de idioma se desglosan en varias categorías en la sección language features.