2010-11-03 3 views
24

AFAIK GHC является наиболее распространенным компилятором сегодня, но я также вижу, что некоторые другие ompilers также доступны. Является ли GHC действительно лучшим выбором для всех целей или я могу вместо этого использовать что-то другое? Например, я читал, что какой-то компилятор (забыл имя) лучше работает на оптимизации, но не реализует все расширения.Компиляторы для Haskell

+2

http://www.haskell.org/haskellwiki/Implementations - это то, что вы ищете. –

ответ

36

GHC на сегодняшний день является наиболее широко используемым компилятором Haskell, и он предлагает большинство функций. Однако есть и другие варианты, которые иногда имеют некоторые преимущества перед GHC. Вот некоторые из наиболее популярных альтернатив:

Hugs - Hugs - это интерпретатор (я не думаю, что он включает компилятор), который является быстрым и эффективным. Это также известно для создания более понятных сообщений об ошибках, чем GHC.

JHC - Компилятор всей программы. JHC может создавать очень эффективный код, но он пока еще не является полным (это, вероятно, то, о чем вы думаете). Обратите внимание, что это не всегда быстрее, чем GHC, только иногда. Я не использовал JHC много, потому что он не реализует классы с несколькими параметрами, которые я использую сильно. Я слышал, что исходный код очень понятен и читабельен, что делает его хорошим компилятором для взлома. JHC также более удобен для кросс-компиляции и обычно создает меньшие двоичные файлы.

UHC - Компилятор Utrecht Haskell близок к полнофункциональному (думаю, единственное, что отсутствует, это n + k узоры) для Haskell98. Он реализует многие из самых популярных расширений GHC и некоторые оригинальные расширения. В соответствии с документом код не обязательно хорошо оптимизирован. Это также хороший компилятор для взлома.

Короче говоря, если вам нужен эффективный код и самые современные функции, GHC - ваш лучший выбор. JHC стоит попробовать, если вам не нужны MPTC или некоторые другие функции. Расширения UHC могут быть убедительными в некоторых случаях, но я бы не стал рассчитывать на это для быстрого кода.

5

ghc - сплошной компилятор. говоря, что это лучший выбор для всех целей, очень сильный. и поиск такого инструмента бесполезен.

Используйте его, и если вам действительно требуется что-то другое, то в этом месте вы, вероятно, знаете, что это такое.

9

Я думаю, что также стоит упомянуть nhc98. Из аннотации на главной странице:

nhc98 представляет собой небольшой, простой в установке, соответствующий стандартам компилятор для Haskell 98, ленивого функционального языка программирования. Это очень портативный и предназначен для создания небольших исполняемых файлов, которые выполняются в небольших количествах памяти. Он производит средне-быстрый код , а компиляция сама по себе довольно быстро. Он также поставляется с обширным инструментальной поддержкой для автоматического компиляция, иностранный язык интерфейс, куча и профилирование времени, отслеживание и отладка.

10
  1. Haskell неформально определяется как язык обрабатываемого GHC.
  2. GHC является компилятором Платформа Haskell.
  3. Попытка оптимизировать код с помощью GHC может окупиться больше, чем переключиться на другой компилятор, так как вы изучите некоторые навыки оптимизации.
  4. Есть много очень полезных расширений в GHC. Я просто не могу понять, как жить без них.

Таким образом, для чего-либо серьезного (например, неакадемического, неэкспериментального, энергонезависимого или с использованием множества пакетов) прагматичным выбором является использование GHC.

+0

Очень интересно и полезно! Спасибо! – fuz

8

С 2011 года на сегодняшний день нет никакого другого выбора, кроме GHC для повседневного программирования. Команда HP настоятельно рекомендует использовать GHC всеми программистами Haskell.


Если вы исследователь, вы можете использовать использовать UHC, если вы на очень странной системе, вы можете иметь только Hugs или nhc98 доступны. Если вы ретро-вентилятор, как я, у вас еще есть побегушках, ЖСК и ГБЖ установлены:

$ hbi 
Welcome to interactive Haskell98 version 0.9999.5c Pentium 2004 Jun 29! 
Loading prelude... 1 values, 4 libraries, 200 types found. 
Type "help;" to get help. 
> help; 
     HBI -- Interactive Haskell B 1.3 

ГБЖ это круто, потому что а) он реализует Haskell B, и б) он поддерживает полный язык по команде line:

> data L a = I | X a (L a) deriving Show; 
data L b = I | X b (L b) deriving (Show) 
> X 4 (X 3 I); 
X 4 (X 3 I) 

и компилятор производит неплохой код даже 15 лет спустя.

+1

Что такое Haskell B? – fuz

+2

Ранняя версия Haskell. –

+3

Где я могу его получить? Кажется, что все ссылки на hbc мертвы. – fuz

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