2010-06-23 2 views
5

мне было интересно, если расширения GHC можно разделить на основном две разные категориикатегоризация GHC расширения

  • те, которые обеспечивают «синтаксический suggar» или удобство
  • и те, привнести что-то новое, новую парадигму, например ,

Теперь можно разделить существующие расширения на вышеуказанные категории, какое расширение будет вписываться в какую категорию?

+2

Я не уверен, насколько значимым является это различие - учитывая полноту Тьюринга, в некотором смысле все остальное является просто «удобством». Конечно, писать Haskell вместо, о, Lazy K ** чрезвычайно удобен ... –

ответ

8

Я думаю, что более подходящая категоризация была бы разделить его по трубопроводу компилятора:

Синтаксических расширения

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

Тип системы Расширения

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

Сквозные расширения

  • -XTemplateHaskell
  • -XForeignFunctionInterface

Optimizatsions

  • -fenable-перезаписи-правила
  • -fspec-КОНСТРУКТОР Расширения
  • -O2

Код поколения

  • -fllvm
  • -fasm
  • -fvia-C

среды выполнения Расширения

  • -threaded

Что вы думаете? Не каждый флаг является либо (а) определяемым с точки зрения существующих конструкций, либо (б) новой частью компилятора. Это более тонкий.

Есть много других расширений, посмотрите, можете ли вы классифицировать их в этой форме.

+0

Почему «Cross-Cutting» как ярлык для FFI и TH? – solidsnack

+1

@ Джейсон Дусек: Я думаю, что они оказывают далеко идущее влияние на несколько аспектов языка, - либо вызывая произвольный внешний код, либо произвольно изменяя код во время компиляции. –

+1

О, потому что они изменяют все аспекты компилятора и среды выполнения: синтаксис, типы, генерация кода и поддержка времени исполнения. –

2

Флаги уже классифицированы в flag reference в руководстве пользователя GHC, а языковые расширения разбиты на несколько категорий в разделе на language features.

Смежные вопросы