Wofür wird Haskell in der realen Welt verwendet? [geschlossen]

475

Es gibt viel Hype um Haskell, es ist jedoch schwierig, Informationen darüber zu erhalten, wie es in realen Anwendungen verwendet wird. Was sind die beliebtesten Projekte / Anwendungen von Haskell und warum eignet es sich hervorragend zur Lösung dieser Probleme?

Sergio Tapia
quelle
56
Nein, werde ich nicht, weil es eine eindeutige Antwort ist. Kein Spielraum für Meinungen und so. Ich möchte nur wissen, wofür die Sprache erstellt wurde.
Sergio Tapia
12
@ Papuccino1, warte, möchtest du wissen, wofür es nützlich ist oder wofür es erstellt wurde ? Ersteres ist das, was die Frage stellt, und es gibt dort viel Raum für Meinungen ...
Bdonlan
3
@ Papuccino1 - Welchen Nutzen bringen die zusätzlichen Wörter in Ihrem Titel für die Frage? Ich denke auch, dass Sie die Verwendung des Begriffs "funktional" in diesem Zusammenhang falsch verstehen, aber es ist schwer zu sagen.
Chris Lutz
2
Laut ihrer eigenen Website verwenden viele Unternehmen es für verschiedene Zwecke ... haskell.org/haskellwiki/Haskell_in_industry
Julian

Antworten:

309

Was sind einige häufige Verwendungen für diese Sprache?

Schnelle Anwendungsentwicklung.

Wenn Sie wissen möchten, warum Haskell?, Müssen Sie die Vorteile funktionaler Programmiersprachen berücksichtigen (entnommen aus https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ):

  • Funktionsprogramme sind in der Regel viel knapper als ihre Gegenstücke zu ImperativeLanguage. Dies führt häufig zu einer gesteigerten Produktivität der Programmierer

  • FP fördert das schnelle Prototyping. Als solches denke ich, dass es das beste Software-Design-Paradigma für ExtremeProgrammierer ist ... aber was weiß ich?

  • FP ist in der Dimension der Funktionalität modular, während ObjectOrientedProgramming in der Dimension verschiedener Komponenten modular ist.

  • Die Fähigkeit, Ihren Kuchen zu haben und ihn zu essen. Stellen Sie sich vor, Sie haben ein komplexes OO-System, das Nachrichten verarbeitet. Jede Komponente kann abhängig von der Nachricht Statusänderungen vornehmen und die Nachricht dann an einige Objekte weiterleiten, zu denen sie Links enthält. Wäre es nicht einfach zu cool, jede Änderung einfach rückgängig machen zu können, wenn ein Objekt tief in der Anrufhierarchie feststellt, dass die Nachricht fehlerhaft ist? Wie wäre es mit einer Geschichte verschiedener Staaten?

  • Viele Housekeeping-Aufgaben wurden für Sie erledigt: Dekonstruieren von Datenstrukturen (PatternMatching), Speichern von Variablenbindungen (LexicalScope mit Abschlüssen), starke Typisierung (TypeInference), GarbageCollection, Speicherzuweisung, ob Boxed (Zeiger auf Wert) oder Unboxed (Wert direkt) verwendet werden soll ) Darstellung ...

  • Sicheres Multithreading! Unveränderliche Datenstrukturen unterliegen keinen Datenrennbedingungen und müssen daher nicht durch Sperren geschützt werden. Wenn Sie immer neue Objekte zuweisen, anstatt vorhandene Objekte destruktiv zu manipulieren, kann die Sperre im Zuordnungs- und GarbageCollection-System ausgeblendet werden.

Abgesehen davon hat Haskell seine eigenen Vorteile wie:

  • Klare, intuitive Syntax, inspiriert von der mathematischen Notation.
  • Listenverständnis, um eine Liste basierend auf vorhandenen Listen zu erstellen.
  • Lambda-Ausdrücke: Erstellen Sie Funktionen, ohne ihnen explizite Namen zu geben. So ist es einfacher, mit großen Formeln umzugehen.
  • Haskell ist vollständig referenziell transparent . Jeder Code, der E / A verwendet, muss als solcher gekennzeichnet werden. Auf diese Weise werden Sie aufgefordert, Code mit Nebenwirkungen (z. B. das Anzeigen von Text auf dem Bildschirm) von Code ohne (Berechnungen) zu trennen.
  • Lazy Evaluation ist eine wirklich nette Funktion:
    • Selbst wenn etwas normalerweise einen Fehler verursachen würde, funktioniert es trotzdem, solange Sie das Ergebnis nicht verwenden. Sie können beispielsweise 1 / 0das erste Element einer Liste festlegen, und es funktioniert weiterhin, wenn Sie nur das zweite Element verwendet haben.
    • Es ist einfacher, Suchprogramme wie diesen Sudoku-Solver zu schreiben, da nicht jede Kombination gleichzeitig geladen wird, sondern nur im Laufe der Zeit generiert wird. Sie können dies in anderen Sprachen tun, aber standardmäßig tut dies nur Haskell .

Sie können folgende Links überprüfen:

Xinus
quelle
20
Der folgende Gedanke kommt mir oft in den Sinn: In einer reinen Sprache gibt eine Funktion immer das gleiche Ergebnis zurück, wenn dieselben Parameter übergeben werden. Dies ist eine Garantie. Im Gegensatz dazu bauen imperative Sprachen alles auf "Aussagen" auf. Eine Erklärung enthält keinerlei Garantie (außer dass ihre Ausführung Zeit in Anspruch nimmt und Wärme erzeugt). Das Fundament ist also bereits wackelig und alles, was darauf liegt, bleibt wackelig. Für mich war dies einer der Gründe, Haskell zu lernen.
Martin Drautzburg
8
Es ist 6 Jahre her, seit diese Frage gestellt wurde und seit dem Start der Programmiersprache Go. Obwohl es ein schwächeres System gibt und im Allgemeinen "objektiv minderwertig" ist (laut funktionalen / ML-Fans), ist es in diesen 6 Jahren gelungen, mehr (und wichtigere) Software zu liefern als Haskell in seinen 26 Jahren. Ich meine das als Fallstudie; Es gibt eindeutig Dinge, die funktionale Sprachen zurückhalten, und sie können nicht alle dem Hype zugeschrieben werden.
weberc2
3
Du hast einen Punkt vergessen - das Codieren in Haskell ist ein absoluter Knaller;) Ich hatte so viel Spaß daran, mich an einigen Problemen in Haskell zu versuchen.
J Atkin
8
@MartinDrautzburg Natürlich sind Aussagen mit Garantien verbunden. Welche nützliche Sprache hätte Aussagen ohne Garantien? Zum Beispiel in C x = 5;garantiert, dass nach der Ausführung xder Wert enthält 5.
user253751
5
@ E4z9 Ja, aber in C ++ garantiert es, dass operator =es aufgerufen wird. Und es garantiert, was passiert, wenn Sie keinenoperator =
user253751
234

Ich denke, den Leuten in diesem Beitrag fehlt der wichtigste Punkt für jeden, der noch nie eine funktionierende Programmiersprache verwendet hat: Erweitern Sie Ihren Geist. Wenn Sie mit funktionaler Programmierung noch nicht vertraut sind, bringt Sie Haskell dazu, auf eine Weise zu denken, wie Sie es noch nie gedacht haben. Infolgedessen wird Ihre Programmierung in anderen Bereichen und anderen Sprachen verbessert. Wie viel? Schwer zu quantifizieren.

Wheaties
quelle
2
Ich benutze ein iPhone, Mac. Wo wird Haskell eingesetzt? Ich meine, für die Apps, die ich verwendet habe, sind sie in Objective-C oder Swift + geschrieben, etwas für Datenbank und Server. Swift kann auch funktionsfähig sein. Also bin ich wieder verwirrt, wo es verwendet wird
Honey
2
Facebook macht SPAM-Erkennung damit: code.facebook.com/posts/745068642270222/…
Alex
25
Diese Antwort, die in einem anderen Ton geschrieben ist, besagt, dass Haskell eine großartige Übung für einen Programmierer ist, die IMO keine großartige Allzwecksprache ist
Passer By
5
In den Keera Studios schreiben wir iOS- und Android-Spiele und -Apps mit Haskell.
Ivan Perez
1
Dem stimme ich voll und ganz zu. Ich habe über Jahrzehnte viel Code in imperativen Sprachen geschrieben. Ich habe Haskell für ein paar Monate erkundet und es hat mich für Dinge geöffnet, an die ich vorher nicht gedacht hatte.
Adahus
87

Es gibt eine gute Antwort darauf, wofür eine Allzwecksprache wie Haskell gut ist: das Schreiben von Programmen im Allgemeinen.

Für das, wofür es in der Praxis verwendet wird, habe ich drei Ansätze, um dies festzustellen:

Zeigt an, dass es für Grafiken, Netzwerke, Systemprogrammierung, Datenstrukturen, Datenbanken, Entwicklung, Textverarbeitung ... geeignet ist.

Und schließlich meine Meinung dazu, worin es wirklich stark ist:

Ich hoffe, das gibt Ihnen einen Eindruck davon, wie weit Ihre Frage reicht, wenn sie spezifisch beantwortet werden soll.

Don Stewart
quelle
15
Tag Wolke ist gebrochen
Elliot Cameron
Wurde die Tag Cloud mit Wordcloud generiert ?
Janus Troelsen
29

Ein Beispiel für Haskell in Aktion ist xmonad , ein "nützlicher Fenstermanager in weniger als 1200 Codezeilen".

unutbu
quelle
18

Aus dem Haskell-Wiki :

Haskell hat ein vielfältiges kommerzielles Einsatzspektrum, von Luft- und Raumfahrt und Verteidigung über Finanzen bis hin zu Web-Startups, Hardware-Design-Firmen und Rasenmäherherstellern. Diese Seite sammelt Ressourcen zur industriellen Nutzung von Haskell.

Laut Wikipedia wurde die Haskell- Sprache aus der Notwendigkeit heraus geschaffen, vorhandene funktionale Sprachen zu einer gemeinsamen zu konsolidieren, die für zukünftige Forschungen im Bereich des funktionalen Sprachdesigns verwendet werden könnte.

Anhand der verfügbaren Informationen wird deutlich, dass es seinem ursprünglichen Zweck entwachsen ist und weit mehr als nur für Forschungszwecke verwendet wird. Es wird jetzt als funktionale Programmiersprache für allgemeine Zwecke betrachtet.

Wenn Sie sich immer noch fragen: "Warum sollte ich es verwenden?", Lesen Sie das Warum Warum? Abschnitt der Haskell Wiki Einführung.

Robert Groves
quelle
13

Haskell ist eine universelle Programmiersprache. Es kann für alles verwendet werden, wofür Sie eine andere Sprache verwenden. Sie sind nur durch Ihre eigene Vorstellungskraft eingeschränkt. Wofür ist es geeignet? Nun, so ziemlich alles. Es gibt nur wenige Aufgaben, bei denen sich eine funktionale Sprache nicht auszeichnet.

Und ja, ich bin der Rayne von Dreamincode. :) :)

Ich möchte auch erwähnen, dass funktionale Programmierung ein Paradigma ist, falls Sie die Wikipedia-Seite nicht gelesen haben, wie objektorientierte Programmierung ein Paradigma ist. Nur für den Fall, dass Sie es nicht wussten. Haskell ist auch in dem Sinne funktional, dass es funktioniert; das funktioniert ganz gut.

Nur weil eine Sprache keine objektorientierte Sprache ist, heißt das nicht, dass die Sprache durch irgendetwas eingeschränkt ist. Haskell ist eine universelle Programmiersprache und genauso universell wie Java.

Rayne
quelle
9

Ich habe ein cooles, Facebook hat ein automatisiertes Tool zum Umschreiben von PHP-Code erstellt. Sie analysieren die Quelle in einen abstrakten Syntaxbaum und führen einige Transformationen durch:

if ($f == false) -> if (false == $f)

Ich weiß nicht warum, aber das scheint ihr besonderer Stil zu sein und dann drucken sie ihn hübsch aus.

https://github.com/facebook/lex-pass

Wir verwenden haskell, um kleine domänenspezifische Sprachen zu erstellen. Riesige Datenverarbeitung. Web Entwicklung. Webspinnen. Anwendungen testen. Schreiben von Systemverwaltungsskripten. Backend-Skripte, die mit anderen Parteien kommunizieren. Überwachungsskripte (Wir haben ein DSL, das gut mit munin zusammenarbeitet und es viel einfacher macht, den richtigen Überwachungscode für Ihre Anwendungen zu schreiben.)

Eigentlich alles Mögliche. Es ist nur eine alltägliche Allzwecksprache mit einigen sehr mächtigen und nützlichen Funktionen, wenn Sie etwas mathematisch veranlagt sind.

Edgar Klerks
quelle
6
Betreff: Der FB-Stil, bei dem das Falsche vor das == gesetzt wird, bedeutet, dass wenn Sie vergessen und nur ein einzelnes = schreiben, das resultierende Verhalten offensichtlicher falsch ist, anstatt stillschweigend eine unbeabsichtigte Zuweisungsoperation auszuführen und normal fortzufahren
Magnus
Eine, die klug ist, Ihre Kraft, dass besonders Fehler bekannt werden, kompilieren Sie dann die Zeit.
Edgar Klerks
@EdgarKlerks, PHP hat keine Kompilierungszeit. Dies erzwingt, dass die Ausnahme dort ausgelöst wird, wo der Fehler aufgetreten ist, anstatt zu bizarrem Verhalten oder Fehlern im entfernten Code zu führen.
Feuer
Obwohl ich den Vorteil des Schreibens falseauf der linken Seite sehe, sehe ich keinen Sinn darin, ein Tool zu verwenden, um dies automatisch zu tun: Wenn Sie bereits einen ==Operator haben, wissen Sie bereits, dass Sie nicht den Fehler haben, von dem dieser Teil stammt lex-pass soll fangen, und wenn Sie =stattdessen einen haben, gibt es keine sichere Möglichkeit zu sagen, ob es absichtlich so ist oder nicht.
Jeremy List
1
@JeremyList Vielleicht sind sie wirklich streng im Codierungsstil. Ich kann sehen, dass ordentlich formatierter Code dazu einlädt, ordentlich formatierten Code zu schreiben. Nur eine wilde Vermutung.
Edgar Klerks
6

Aus Haskell :

Haskell ist eine standardisierte, rein funktionale Programmiersprache für allgemeine Zwecke mit nicht strenger Semantik und starker statischer Typisierung. Es ist nach dem Logiker Haskell Curry benannt.

Grundsätzlich kann Haskell verwendet werden, um so ziemlich alles zu erstellen, was Sie normalerweise mit anderen Allzwecksprachen (z. B. C #, Java, C, C ++ usw.) erstellen würden.

Andrew Hare
quelle
5

Zum Beispiel zum Entwickeln interaktiver HTML5-Webanwendungen in Echtzeit. Siehe Elm , dessen Compiler in Haskell implementiert ist und dessen Syntax viel von Haskell's leiht.

thSoft
quelle
3

Dies ist eine ziemlich gute Quelle für Informationen über Haskell und seine Verwendung:

Open Source Haskell Releases und Wachstum

Robert Harvey
quelle
Nur-Link-Antworten sind nicht ideal. Da diese Frage jedoch geschlossen ist, ist es möglicherweise besser, sie zu bearbeiten als zu löschen.
dfeuer
3
Diese Ressource wurde anscheinend seit 2009 nicht mehr aktualisiert.
Robert Harvey