Arten von Fehlern, die in Haskell-Programmen häufiger vorkommen als in anderen Sprachen?

8

Eine der vielbeachteten Funktionen ist, dass wenn ein Programm kompiliert wird, es sehr wahrscheinlich meistens korrekt ist, mehr als ein Programm, das in einer Sprache mit einem weniger ausgeklügelten oder strikten System geschrieben ist.

Das heißt, Haskell ist ein System zum Übersetzen von Laufzeitfehlern in Compilerfehler: -)

Ich frage mich, ob die Programmierung in Haskell Situationen hervorruft, in denen ein Programmierer einen Runtime-Bug einführen könnte, der kein offensichtliches Analogon (in Erscheinung und Häufigkeit) in einer weniger stark typisierten Sprache hat?

Einige grundlegende Beispiele, die mir in den Sinn kommen: (nicht großartig, ich suche Ratschläge, worüber ich vorsichtig sein kann)

  • asymptotische Performance-Bugs aufgrund von Faulheit
  • Endlosschleife wegen falsch strukturierter Rekursion
  • fundeps / type-families, die die Logik auf Typ-Level schieben, wo Code "arkaner" ist und Fehler schwerer zu erkennen sind?

Andere / bessere Beispiele für Fehler?

    
misterbee 13.01.2014, 17:02
quelle

3 Antworten

7

Es muss nicht asymptotisch sein, aber Platzverluste aufgrund von Faulheit sind ein Problem in realen Anwendungen von Haskell. Ich kenne Haskell-nutzende Firmen, die komplett auf strikte Datentypen umgestellt haben (während sie immer noch die Faulheit der Funktionsparameter verwenden).

Quellen für diese Ansicht finden Sie unter:

  • E. Hesselink. Seide: das sematic web funktionsfähig machen. Functional Programming Exchange 2012, London, März 2012.
  • C. J. Sampson. Erfahrungsbericht: Haskell in der 'realen Welt': eine kommerzielle Anwendung in einer faulen, funktionalen Sprache schreiben. In ICFP '09, Seiten 185-190, 2009.
  • S. Wehr. Kommerzielle Softwareentwicklung mit Haskell. Hal6, Leipzig, Oktober 2011. Slides (auf Deutsch).
Joachim Breitner 13.01.2014 17:21
quelle
4

Faulheit, besonders faule E / A, wo reine Funktionen IO Aktionen erzwingen oder eine Datei Handle vor dem Lesen schließen können. Der Haskell-Kurs von der Stanford University hat gute Informationen dazu in der Iteratee Vorlesung. Imho, diese Vortragsreihe ist sehr gut geschrieben und deckt viel Boden ab.

    
Akaberto 13.01.2014 17:34
quelle
1

Betrachten Sie den folgenden Dataype:

%Vor%

Ich möchte ein U Int mit zufälligen Werten erstellen. Mit der Traversable -Instanz ist es einfach:

%Vor%

Jetzt erstelle ich eine zufällige unendliche U Int und drucke die ersten drei Werte der Liste:

%Vor%

Funktioniert auch gut. Als letzten Test drucken wir den einzelnen Wert auf der rechten Seite:

%Vor%

Pfui. Das hängt.

    
danidiaz 13.01.2014 19:41
quelle

Tags und Links