Frage

AFAIK GHC ist heute der häufigste Compiler, aber ich sehe auch, dass auch einige andere Oompiler erhältlich sind. Ist GHC wirklich die beste Wahl für alle Zwecke oder darf ich stattdessen etwas anderes verwenden? Zum Beispiel habe ich gelesen, dass ein Compiler (den Namen vergessen hat) bei Optimierungen besser macht, aber nicht alle Erweiterungen implementiert.

War es hilfreich?

Lösung

GHC ist bei weitem der am häufigsten verwendete Haskell -Compiler und bietet die meisten Funktionen. Es gibt jedoch andere Optionen, die manchmal einige Vorteile gegenüber GHC haben. Dies sind einige der beliebtesten Alternativen:

Umarmungen - Hugs ist ein Dolmetscher (ich glaube nicht, dass er einen Compiler enthält), der schnell und effizient ist. Es ist auch dafür bekannt, dass es leichter Fehlermeldungen als GHC erstellt wird.

JHC - Ein vollständiger Programm-Compiler. JHC kann einen sehr effizienten Code erzeugen, aber es ist noch nicht mit Features-Vervollständigung (dies ist wahrscheinlich das, woran Sie denken). Beachten Sie, dass es nur manchmal nicht immer schneller als GHC ist. Ich habe JHC nicht viel verwendet, weil es keine Klassen vom Typ mehrerer Parameter implementiert, die ich stark verwende. Ich habe gehört, dass der Quellcode extrem klar und lesbar ist, was dies zu einem guten Compiler macht, um sich zu hacken. JHC ist auch bequemer für das Cross-Compiling und erzeugt normalerweise kleinere Binärdateien.

Uhc - Der Utrecht-Haskell-Compiler ist für Haskell98 nahezu featurecomplete (ich denke, das einzige, was fehlt). Es implementiert auch viele der beliebtesten Erweiterungen von GHC und einige originelle Erweiterungen. Nach dem Dokumentationscode ist der Code noch nicht unbedingt gut optimiert. Dies ist auch ein guter Compiler zum Hacken.

Kurz gesagt, wenn Sie effiziente Code und modernste Funktionen wünschen, ist GHC die beste Wahl. JHC ist es wert, es zu versuchen, wenn Sie keine MPTCs oder einige andere Funktionen benötigen. Die Erweiterungen von UHC mögen in einigen Fällen überzeugend sein, aber ich würde mich noch nicht darauf verlassen, dass schneller Code.

Andere Tipps

  1. Haskell ist informell definiert als die von GHC behandelte Sprache.
  2. GHC ist der Compiler der Haskell -Plattform.
  3. Der Versuch, Ihren Code mit GHC zu optimieren, kann sich mehr auszahlen als auf einen anderen Compiler zu wechseln, da Sie einige Optimierungsfähigkeiten erlernen werden.
  4. Es gibt viele sehr Nützliche Erweiterungen in GHC. Ich kann einfach nicht sehen, wie ich ohne sie leben soll.

Für irgendetwas Ernstes (z. B. nicht akademisch, nicht-experimentell, nichtflüchtig oder mit vielen Paketen) ist die pragmatische Entscheidung, mit GHC zu passen.

Ich denke, es ist auch erwähnenswert NHC98. Vom Klappentext auf der Homepage:

NHC98 ist ein kleiner, einfach zu installierter, konformer Compiler für Haskell 98, die faule funktionale Programmiersprache. Es ist sehr tragbar und zielt darauf ab, kleine ausführbare Produkte zu produzieren, die in geringen Mengen an Speicher ausgeführt werden. Es erzeugt mittelschwerer Code und die Zusammenstellung ist selbst ziemlich schnell. Es bietet auch eine umfassende Tools -Unterstützung für automatische Zusammenstellung, Fremdsprachen -Schnittstelle, Haufen und Zeitprofilerstellung, Verfolgung und Debugging.

Ab 2011 gibt es wirklich keine andere Wahl als GHC für die tägliche Programmierung. Das HP -Team fördert nachdrücklich die Verwendung von GHC durch alle Haskell -Programmierer.


Wenn Sie ein Forscher sind, verwenden Sie möglicherweise UHC. Wenn Sie sich in einem sehr seltsamen System befinden, haben Sie möglicherweise nur Umarmungen oder NHC98 zur Verfügung. Wenn Sie ein Retro-Fan wie ich sind, haben Sie immer noch Gofer, HBC und HBI installiert:

$ 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

HBI ist cool, weil a) es Haskell B implementiert und b) die vollständige Sprache in der Befehlszeile unterstützt:

> 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)

Und der Compiler produziert auch 15 Jahre später einen ziemlich guten Code.

GHC ist ein solider Compiler. Zu sagen, dass es die beste Wahl für alle Zwecke ist, ist sehr stark. Und auf der Suche nach einem solchen Werkzeug ist zwecklos.

Verwenden Sie es, und wenn Sie wirklich etwas anderes benötigen, werden Sie zu diesem Zeitpunkt wahrscheinlich wissen, was es ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top