Ich freue mich darauf, in Haskell für mein nächstes (relativ einfaches) persönliches Projekt einzutauchen. Die Gründe, warum ich Haskell angreife, sind:
- Bringe meinen Kopf in eine rein funktionale Sprache
- Geschwindigkeit. Obwohl ich mir sicher bin, dass dies argumentiert werden kann, habe ich ein Profil erstellt, bei dem ich Haskell in der Nähe von C ++ gesehen habe (und das ziemlich viel schneller zu sein scheint als Erlang).
- Geschwindigkeit. Der Warp-Webserver scheint im Vergleich zu fast allem anderen schnell verrückt zu sein .
Vor diesem Hintergrund suche ich nach den Nachteilen oder Problemen, die mit Haskell einhergehen. Das Web hat eine enorme Menge an Informationen darüber, warum Haskell eine gute Sache ist, aber ich habe nicht viele Themen über seine hässliche Seite gefunden (abgesehen von den Griffen über seine Syntax, die mir überhaupt nichts ausmachen).
Ein Beispiel für das, wonach ich suche, könnte Pythons GIL sein. Etwas, das seinen Kopf nicht aufrichtete, bis ich wirklich anfing, Parallelität in einer CPython-Umgebung zu verwenden.
Antworten:
Ein paar Nachteile, die ich mir vorstellen kann:
quelle
Die meisten Nachteile von Haskell (wie auch die meisten Nachteile von Haskell) beruhen auf den beiden Hauptmerkmalen: Es ist faul und rein funktional.
Faul zu sein macht es schwieriger, über die Leistung nachzudenken. Besonders für Leute, die nicht an Faulheit gewöhnt sind, aber selbst für erfahrene Haskeller kann es schwierig sein zu sehen, wie Faulheit in bestimmten Fällen die Leistung beeinflusst.
Faulheit bedeutet auch, dass es schwieriger ist, genaue Benchmarks zu erstellen, ohne Bibliotheken wie Criterion zu verwenden.
Rein funktional zu sein bedeutet, dass Sie immer dann, wenn Sie veränderbare Datenstrukturen verwenden müssen (in Fällen, in denen es nicht möglich ist, die gewünschte Leistung ohne diese zu erzielen - obwohl dies dank des Optimierers von GHC nicht so oft vorkommt, wie Sie vielleicht denken) stecken in der IO (oder ST) Monade, was den Code umständlicher macht.
Da Sie Geschwindigkeit als eines Ihrer Ziele genannt haben, sollte ich darauf hinweisen, dass es zwischen handoptimiertem Haskell-Code und Haskell-Code, der geschrieben wurde, oft enorme Leistungsunterschiede gibt, ohne die Leistung zu berücksichtigen (mehr als in anderen Sprachen). Und handoptimierter Haskell-Code ist oft ziemlich hässlich (obwohl ich annehme, dass dies auch in den meisten anderen Sprachen zutrifft).
quelle
Ich bin kein Haskell-Experte: Ich habe die Grundlagen gelernt, aber leider hatte ich keine Gelegenheit, ein ernstes Projekt in Haskell zu machen (ich würde es jedoch mögen, weil ich diese Sprache sehr mag).
Nach dem, was ich weiß, und nach einer Diskussion mit jemandem, der auf einem Gebiet arbeitet, das der funktionalen Programmierung sehr nahe steht, ist Haskell möglicherweise nicht die beste Lösung, wenn Sie Algorithmen für Diagramme implementieren möchten, bei denen Sie z Viele lokale Änderungen in der Diagrammstruktur.
Da ein Diagramm im Allgemeinen keine rekursive Struktur hat, ist es meines Erachtens der beste Ansatz, eine Kopie des Diagramms unter Verwendung von Strukturen und Zeigern zwischen ihnen zu erstellen (wie Sie es z. B. in C ++ tun können) und diese Kopie durch Ändern von Zeigern zu manipulieren. Erstellen oder Zerstören von Knoten und so weiter.
Ich frage mich, wie solche Datenstrukturen und Operationen in Haskell richtig gehandhabt werden können, da es meines Wissens in Haskell nicht möglich ist, die obige Darstellung / Vorgehensweise zu verwenden. In diesem Artikel werden einige Probleme mit Diagrammalgorithmen in Haskell kurz erläutert
BEARBEITEN
Ich habe kürzlich mit einem Experten für funktionale Programmierung gesprochen und er hat bestätigt, dass es in Haskell sehr schwierig sein kann, bestimmte Grafikalgorithmen effizient zu implementieren: Das Bewegen von Zeigern wie in C oder C ++ kann viel schneller sein.
quelle
Die Kehrseite von Haskell ist, dass es anders ist. Es ist ein größerer Schritt weg von Sprachen, die häufiger unterrichtet oder über die gesprochen wird, und es wird eine größere Lernkurve geben. Es ist auch weniger beliebt in einer Sprache, die die Verfügbarkeit von Hilfe einschränkt, wenn Sie nicht weiterkommen. Dies sind jedoch keine großen Nachteile.
Ein möglicher Nachteil ist, dass es sich um eine funktionale Sprache handelt, die für bestimmte Problembereiche weniger nützlich ist. Dies gilt jedoch auch für objektorientierte Sprachen. Im Allgemeinen haben Sprachen keine echten Negative jenseits der Lernkurven, zumindest für die relativ populären Sprachen. Solange eine Sprache vollständig ist, ist sie theoretisch zu allem fähig.
quelle
Die "Probleme mit Haskell" treten in der Regel in bestimmten Domänen auf. Haskell ist eine wunderbare Sprache für die Anwendungsprogrammierung, die viel angenehmer zu schreiben ist als alles andere. Die Probleme treten in der Regel auf, wenn Sie versuchen, etwas zu tun, für das es keine gute Unterstützung gibt, beispielsweise:
quelle