Haskell

Haskell
Logo of Haskell
Paradigma Rein funktionell
Entworfen von Lennart Augustson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, John Hughes, Thomas Johnsson, Mark Jones, Simon Peyton Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, Philip Wadler
Erstmals erschienen 1990; Vor 32 Jahren[1]
Stabile Version
Haskell 2010[2] / Juli 2010; vor 12 Jahren
Vorschau -Version
Haskell 2020 kündigte an[3]
Disziplin tippen Gefolgert, statisch, stark
OS Plattformübergreifend
Dateiname -Erweiterungen .hs, .lhs
Webseite www.haskell.org
Haupt Implementierungen
GHC, Umarmungen, NHC, JHC, Yhc, Uhc
Dialekte
Mädchen für alles
Beeinflusst von
Sauber,[4] FP,[4] Mädchen für alles,[4] Hoffnung und Hoffnung+,[4] Ausweis,[4] ICH SCHWIMME,[4] KRC,[4] Lispeln,[4] Miranda,[4] Ml und Standard ml,[4] Orwell, Sasl,[4] Planen,[4] Sisal[4]
Beeinflusst
Agda,[5] Bluespec,[6] C ++ 11/Konzepte,[7] C#/Linq,[8][9][10][11] Cal, Cayenne,[8] Sauber,[8] Clojure,[12] CoffeeScript,[13] Curry,[8] Ulme, Epigramm, Escher,[14] F#,[15] Hacken,[16] Idris,[17] Isabelle,[8] Java/Generika,[8] Livescript,[18] Quecksilber,[8] Ωmega, Pureskript,[19] Python,[8][20] Raku,[21] Rost,[22] Scala,[8][23] Schnell,[24] Visual Basic 9.0[8][9]

Haskell (/ˈhæskəl/[25]) ist ein allgemeiner Zweck, statisch typiert, rein funktionell Programmiersprache mit Geben Sie Inferenz ein und faule Bewertung.[26][27] Haskell wurde für die Lehre, Forschung und industrielle Anwendungen entwickelt und hat eine Reihe von Programmiersprachenfunktionen wie z. Geben Sie Klassen ein, was ermöglicht Typ-Safe Bedienerüberlastung. Haskells Hauptimplementierung ist die Glasgow Haskell Compiler (GHC). Es ist nach nach Logiker Haskell Curry.[1]

Haskells Semantik basieren historisch gesehen auf denen der der Miranda Programmiersprache, die dazu diente, die Bemühungen der ersten Haskell -Arbeitsgruppe zu konzentrieren.[28] Die letzte formale Spezifikation der Sprache wurde im Juli 2010 vorgestellt, während die Entwicklung von GHC Haskell durch Sprachverlängerungen weiter erweitert.

Haskell wird in Akademie und Industrie verwendet.[29][30][31] Ab Mai 2021Haskell war die 28. beliebteste Programmiersprache von Google -Suche Für Tutorials,[32] und machte weniger als 1% der aktiven Benutzer auf der GitHub Quellcode -Repository.[33]

Geschichte

Nach der Veröffentlichung von Miranda Von Research Software Ltd. im Jahr 1985 wuchs das Interesse an faulen funktionalen Sprachen. Bis 1987 mehr als ein Dutzend nichtstriktEs gab rein funktionale Programmiersprachen. Miranda war der am häufigsten verwendete, aber es war es proprietäre Software. Auf der Konferenz über Funktionale Programmiersprachen und Computerarchitektur (FPCA '87) in Portland, OregonEs gab einen starken Konsens darüber, dass ein Komitee gebildet wird, um eine zu definieren offener Standard Für solche Sprachen. Der Zweck des Ausschusses war es, bestehende Konsolidierung zu konsolidieren Funktionssprachen in eine gemeinsame, um als Grundlage für zukünftige Forschungen im funktionalsprachigen Design zu dienen.[34]

Haskell 1.0 bis 1.4

Geben Sie Klassen ein, was ermöglicht Typ-Safe Bedienerüberlastungwurden zuerst vorgeschlagen von Philip Wadler und Stephen Blott für Standard ml wurden jedoch erstmals zwischen 1987 und Version 1.0 in Haskell implementiert.[35][36]

Die erste Version von Haskell ("Haskell 1.0") wurde 1990 definiert.[1] Die Bemühungen des Ausschusses führten zu einer Reihe von Sprachdefinitionen (1,0, 1.1, 1,2, 1,3, 1,4).

Hierarchie von Geben Sie Klassen ein im Haskell -Präludium als GHC 7.10. Die Einbeziehung faltbarer und durchquerbarer Aufnahme (mit entsprechenden Änderungen an den Typsignaturen einiger Funktionen) und von anwendbarem als Zwischenprodukt zwischen Functor und Monad sind Abweichungen vom Haskell 2010 -Standard.

Haskell 98

Ende 1997 gipfelte die Serie in Haskell 98, soll eine stabile, minimale, tragbare Version der Sprache und einen dazugehörigen Standard angeben Bibliothek für den Unterricht und als Grundlage für zukünftige Erweiterungen. Der Ausschuss begrüßte ausdrücklich die Erstellung von Erweiterungen und Varianten von Haskell 98 durch Hinzufügen und Einbeziehung experimenteller Merkmale.[34]

Im Februar 1999 wurde der Haskell 98 -Sprachstandard ursprünglich als veröffentlicht als Der Haskell 98 -Bericht.[34] Im Januar 2003 wurde eine überarbeitete Version veröffentlicht als Haskell 98 Sprache und Bibliotheken: Der überarbeitete Bericht.[27] Die Sprache entwickelt sich weiterhin schnell mit dem Glasgow Haskell Compiler (GHC) Implementierung, die den Strom darstellt de facto Standard.[37]

Haskell 2010

Anfang 2006 definiert der Prozess der Definition eines Nachfolgers des Haskell 98 -Standards, der informell benannt wurde Haskell Prime, begann.[38] Dies sollte ein fortlaufender inkrementeller Prozess sein, um die Sprachdefinition zu überarbeiten und eine neue Überarbeitung bis zu einmal pro Jahr zu erstellen. Die erste Revision, benannt Haskell 2010, wurde im November 2009 bekannt gegeben[2] und im Juli 2010 veröffentlicht.

Haskell 2010 ist ein inkrementelles Update der Sprache, das hauptsächlich mehrere gut verwendete und unumstrittene Funktionen umfasst, die zuvor über Compiler-spezifische Flags aktiviert waren.

  • Hierarchische Modulnamen. Modulnamen dürfen aus dOT-getrennten Sequenzen von Akkordidentifikatoren und nicht nur aus einer solchen Kennung bestehen. Dadurch können Module hierarchisch benannt werden (z. B.,, Data.List Anstatt von Aufführen), obwohl sich technisch Module noch in einem einzigen monolithischen Namespace befinden. Diese Erweiterung wurde in einem Nachtrag zu Haskell 98 angegeben und wurde in der Praxis allgemein verwendet.
  • Das Fremdenfunktionsschnittstelle (FFI) ermöglicht Bindungen an andere Programmiersprachen. Nur Bindungen an C werden im Bericht angegeben, das Design ermöglicht jedoch andere Sprachbindungen. Um dies zu unterstützen, durften Datentyp -Deklarationen keine Konstruktoren enthalten, die robuste Nonce -Typen für Fremddaten ermöglichen, die in Haskell nicht konstruiert werden konnten. Diese Erweiterung wurde zuvor auch in einem Nachtrag zum Haskell 98 -Bericht angegeben und weit verbreitet.
  • Sogenannt n+k Muster (Definitionen der Form FACT (n+1) = (n+1) * Tatsache n) wurden nicht mehr erlaubt. Dies syntethischer Zucker hatte irreführende Semantik, bei der der Code so aussah, als hätte er das verwendete (+) Operator, aber tatsächlich den Code des Codes verwenden (-) und (> =).
  • Die Regeln von Geben Sie Inferenz ein wurden entspannt, um mehr Programme zu überprüfen.
  • Etwas Syntax Probleme (Änderungen in der formalen Grammatik) wurden behoben: Musterwächter wurden hinzugefügt, wobei das Muster -Matching innerhalb der Wachen ermöglicht; Auflösung von Bedienungsfixität wurde auf einfachere Weise angegeben, die die tatsächliche Praxis widerspiegelte; Ein Randfall in der Interaktion der Sprache der Sprache lexikalische Syntax von Operatoren und Kommentaren wurde behandelt, und die Wechselwirkung von Do-nicht-Nichts und If-then-Else wurde optimiert, um unerwartete Syntaxfehler zu beseitigen.
  • Das SPRACHE Pragma wurde angegeben. Bis 2010 waren Dutzende von Erweiterungen der Sprache in großer Bedeutung, und GHC (unter anderem Compiler) stellten die zur Verfügung SPRACHE Pragma, um einzelne Erweiterungen mit einer Liste von Kennungen anzugeben. Haskell 2010 Compiler müssen die unterstützen Haskell2010 Erweiterung und werden ermutigt, mehrere andere zu unterstützen, was den Erweiterungen in Haskell 2010 entspricht.

Zukünftige Standards

Die nächste formale Spezifikation war für 2020 geplant.[3] Am 29. Oktober 2021 wurde die GHC2021 -Erweiterung mit GHC Version 9.2.1 veröffentlicht. Dies ist zwar keine formelle Sprachspezifikation, kombiniert eine Reihe stabiler, weit verbreiteter GHC-Erweiterungen an Haskell 2010. [39]

Merkmale

Haskell features faule Bewertung, Lambda -Ausdrücke, Musteranpassung, Listenverständnis, Geben Sie Klassen ein und Typ Polymorphismus. Es ist ein rein funktionale Sprache, was bedeutet, dass Funktionen im Allgemeinen keine haben Nebenwirkungen. Ein unterschiedliches Konstrukt gibt es, um Nebenwirkungen darzustellen, senkrecht zu der Art der Funktionen. Eine reine Funktion kann einen Nebeneffekt zurückgeben, der anschließend ausgeführt wird, wodurch die modelliert wird unreine Funktionen von anderen Sprachen.

Haskell hat a stark, statisch Typ System basierend auf Hindley -Milner -Typ -Inferenz. Seine Hauptinnovation in diesem Bereich sind Typklassen, die ursprünglich als prinzipielle Methode zum Hinzufügen konzipiert werden Überlastung zur Sprache,[40] Aber da es viele weitere Verwendungszwecke gefunden hat.[41]

Das Konstrukt, das Nebenwirkungen darstellt, ist ein Beispiel für a monad: Ein allgemeines Framework, das verschiedene Berechnungen modellieren kann, z. B. Fehlerbehandlung, Nichtdeterminismus, Parsing und Software -Transaktionsspeicher. Sie sind definiert als gewöhnliche Datenatypen, aber Haskell bietet einige syntethischer Zucker für ihre Verwendung.

Haskell hat eine offene, veröffentlichte Spezifikation,[27] und Es gibt mehrere Implementierungen. Seine Hauptimplementierung, die, die Glasgow Haskell Compiler (GHC) ist beide Dolmetscher und nativen Code Compiler Das läuft auf den meisten Plattformen. GHC ist bekannt für sein reiches Typsystem, das jüngste Innovationen wie z. Verallgemeinerte algebraische Datentypen und Typ Familien. Das Computer mit Computersprachen -Benchmarks Spiel unterstreicht auch seine Hochleistungsimplementierung von Parallelität und Parallelität.[42]

Eine aktive, wachsende Community existiert in der Sprache, und im Online-Paket-Repository sind mehr als 5.400 Open-Source-Bibliotheken und -Tools von Drittanbietern verfügbar Hackage.[43]

Codebeispiele

A "Hallo Welt!" Programm In Haskell (nur die letzte Zeile ist ausschließlich notwendig):

Modul Hauptsächlich (hauptsächlich) wo  - Nicht in Interpreter benötigt, ist die Standardeinstellung in einer Moduldatei hauptsächlich :: Io ()  - Der Compiler kann diese Typdefinition schließen hauptsächlich = putstrln "Hallo Welt!" 

Das Fakultät Funktion in Haskell, auf verschiedene Arten definiert:

- [[Typ Signatur | Typ Annotation]] (optional, gleiche für jede Implementierung) Fakultät :: (Integral a) => a -> a - Verwenden von Rekursion (mit dem Ausdruck "iFthenelse") Fakultät n = wenn n < 2  dann 1  anders n * Fakultät (n - 1) - Verwenden von Rekursion (mit Musteranpassung) Fakultät 0 = 1 Fakultät n = n * Fakultät (n - 1) - Verwenden von Rekursion (mit Wachen) Fakultät n  | n < 2  = 1  | Andernfalls = n * Fakultät (n - 1) - Verwenden einer Liste und der "Produkt" -Funktion Fakultät n = Produkt [1..n] - Verwenden Sie Fold (implementiert "Produkt") Fakultät n = falten (*) 1 [1..n] -Punktfreier Stil Fakultät = ordr (*) 1 . enumfromto 1 

Als die Ganze Zahl Typ hat willkürliche PräzisionDieser Code berechnet Werte wie z. Fakultät 100000 (eine 456.574-stellige Zahl), ohne Präzisionsverlust.

Eine Implementierung eines Algorithmus ähnlich wie schnelle Sorte Über Listen, bei denen das erste Element als Drehpunkt angenommen wird:

- Geben Sie Annotation ein (optional, dieselbe für jede Implementierung) schnelle Sorte :: Ord a => [a] -> [a] - Verwenden von Listenverständnissen schnelle Sorte []  = []  - Die leere Liste ist bereits sortiert schnelle Sorte (x:xs) = schnelle Sorte [a | a <- xs, a < x]  - Sortieren Sie den linken Teil der Liste  ++ [x] ++  - Pivot zwischen zwei sortierten Teilen einfügen  schnelle Sorte [a | a <- xs, a > = x]  - Sortieren Sie den richtigen Teil der Liste - Verwenden Sie Filter schnelle Sorte []  = [] schnelle Sorte (x:xs) = schnelle Sorte (Filter (<x) xs)  ++ [x] ++  schnelle Sorte (Filter (> =x) xs) 

Implementierungen

Alle aufgelisteten Implementierungen sind unter verteilt unter Open Source -Lizenzen.[44]

Implementierungen, die den Haskell 98 -Standard vollständig oder nahezu entsprechen, umfassen:

  • Das Glasgow Haskell Compiler (GHC) kompiliert nativen Code auf vielen verschiedenen Prozessorarchitekturen und zu nativem Code Ansi cüber eine von zwei Zwischensprachen: C--, oder in neueren Versionen,, Llvm (ehemals virtuelle Maschine mit niedriger Ebene) Bitcode.[45][46] GHC ist der geworden de facto Standard -Haskell -Dialekt.[47] Es gibt Bibliotheken (z. B. Bindungen an OpenGL) Das funktioniert nur mit GHC. GHC ist auch mit dem verteilt Haskell -Plattform.
  • JHC, ein von John Meacham geschriebener Haskell -Compiler, betont die Geschwindigkeit und Effizienz generierter Programme und die Erforschung neuer Programmveränderungen.
    • AJHC ist eine Gabel von JHC.
  • Der Utrecht Haskell Compiler (UHC) ist eine Haskell -Implementierung aus Utrecht Universität.[48] Es unterstützt fast alle Haskell 98 -Funktionen sowie viele experimentelle Erweiterungen. Es wird mithilfe von Mitarbeitern implementiert Grammatiken zuschreiben und wird derzeit hauptsächlich für die Erforschung generierter Typsysteme und Sprachverlängerungen verwendet.

Implementierungen nicht mehr aktiv gehalten werden:

  • Das Gofer -System des Haskell -Benutzers (Umarmungen) ist ein Bytecode Dolmetscher. Es war einst eine der am weitesten verbreiteten Implementierungen neben dem GHC -Compiler.[49] wurde aber jetzt größtenteils durch GHCI ersetzt. Es wird auch mit einer Grafikbibliothek geliefert.
  • HBC ist eine frühe Implementierung, die Haskell 1.4 unterstützt. Es wurde von implementiert von Lennart Augustson in und basierend auf, Faul ml. Es wurde seit einiger Zeit nicht mehr aktiv entwickelt.
  • NHC98 ist ein Bytecode -Compiler, der sich auf die Minimierung des Speichergebrauchs konzentriert.
    • Der York Haskell Compiler (Yhc) war eine Gabel von NHC98 mit den Zielen, einfacher, tragbarer und effizienter zu sein und die Unterstützung für Hut, den Haskell -Tracer, zu integrieren. Es hatte auch eine JavaScript Backend, damit Benutzer Haskell -Programme in ausführen können Internetbrowser.

Implementierungen, die nicht vollständig haskell 98 konform und eine Variante Haskell -Sprache verwenden, gehören:

  • ETA und Frege sind Dialekte von Haskell, die auf die abzielen Java virtuelle Maschine.
  • Mädchen für alles war ein pädagogischer Dialekt von Haskell mit einer Funktion namens namens Konstruktorklassen, entwickelt von Mark Jones. Es wurde durch Umarmungen (Gofer -System des Haskell -Benutzers) ersetzt.
  • Helium, ein neuerer Dialekt von Haskell. Der Fokus liegt darauf, das Lernen durch klarere Fehlermeldungen zu erleichtern. Derzeit fehlt die volle Unterstützung für Typklassen und macht es mit vielen Haskell -Programmen unvereinbar.

Bemerkenswerte Anwendungen

  • Der Beweisassistent Agda ist in Haskell geschrieben.[50]
  • Kabale ist ein Werkzeug für Gebäude und Verpackung von Haskell -Bibliotheken und -programmen.[51]
  • Darcs ist ein Revisionskontrollsystem Geschrieben in Haskell mit mehreren innovativen Funktionen, wie z. B. eine genauere Kontrolle von Patches, die angewendet werden sollen.
  • GHC ist auch häufig ein Testbett für erweiterte funktionale Programmierfunktionen und Optimierungen in anderen Programmiersprachen.
  • Git-Annex ist ein Tool zum Verwalten von (großen) Datendateien unter Git Versionskontrolle. Es bietet auch ein verteiltes Datei-Synchronisationssystem (Git-Annex-Assistent).
  • Linspire Linux wählte Haskell für die Entwicklung von Systemwerkzeugen.[52]
  • Pandoc ist ein Werkzeug, um ein Markup -Format in ein anderes umzuwandeln.
  • Mops ist ein Compiler und Dolmetscher für die Raku Programmiersprache (ehemals Perl 6).
  • Tidalcycles ist eine Domain -Spezialsprache für das Live -Codierungs -Musikmuster, eingebettet in Haskell.[53]
  • Xmonad ist ein Fenstermanager für die X Fenstersystem, voll in Haskell geschrieben.[54]

Industrie

  • Bluespec Systemverilog (BSV) ist eine Sprache für das Halbleiterdesign, die eine Erweiterung von Haskell darstellt. Außerdem werden die Tools von Bluespec, Inc. in Haskell implementiert.
  • Kryptol, eine Sprache und Toolchain zur Entwicklung und Überprüfung Kryptographie Algorithmen sind in Haskell implementiert.
  • Facebook implementiert seine Anti-Spam-Programme[55] In Haskell, bei der die zugrunde liegende Datenzugriffsbibliothek als beibehalten wird Quelloffene Software.[56]
  • Das Cardano Blockchain -Plattform wird in Haskell implementiert.[57]
  • GitHub Implementiert Semantic, eine Open-Source-Bibliothek für Analyse, Verbreitung und Interpretation des nicht vertrauenswürdigen Quellcode, in Haskell.[58]
  • Standard Chartered'S Financial Modeling Language MU ist syntaktisch Haskell, die auf einer strengen Laufzeit läuft. [59]
  • Sel4, Der Erste formell verifiziert Mikrokernel,[60] benutzte Haskell als Prototyping -Sprache für den OS -Entwickler.[60]: S.2 Gleichzeitig definierte der Haskell-Code eine ausführbare Spezifikation, mit der die automatische Übersetzung durch das Theorem-Proving-Tool argumentiert werden sollte.[60]: S.3 Der Haskell -Code diente somit vor dem endgültigen Zwischenprototyp als Zwischenprototyp C Raffinesse.[60]: S.3
  • Ziel Die Supply -Chain -Optimierungssoftware der Filialketten ist in Haskell geschrieben. [61]

Netz

Bemerkenswert Webrahmen Für Haskell geschrieben gehören:[62]

Kritik

Jan-Willem Maessen, im Jahr 2002, und Simon Peyton JonesIm Jahr 2003 wurden Probleme im Zusammenhang mit der faulen Bewertung erörtert und gleichzeitig die theoretischen Motive dafür anerkannt.[63][64] Zusätzlich zu rein praktischen Überlegungen wie einer verbesserten Leistung.[65] Sie stellen fest, dass die faule Bewertung zusätzlich zu dem Hinzufügen eines leistungsstarken Aufwands für Programmierer die Leistung ihres Codes (insbesondere der Platzverwendung) schwieriger macht.

Bastiaan Heeren, Daan Leijen und Arjan Van Ijzendoorn im Jahr 2003 beobachteten auch einige Stolpersteine ​​für Haskell -Lernende: "Das subtile Syntax und das ausgefeilte Typ von Haskell sind ein doppelt geschnittenes Schwert, das von erfahrenen Programmierern sehr geschätzt wird, aber auch eine Quelle der Frustration unter Beginnern, die bei Beginnern hoch geschätzt wurden, aber auch eine Quelle der Frustration unter Beginnern, die bei Beginnern sehr geschätzt werden, unter Anfänger -Quellen unter Anfänger sind hochgeschätzt. Da die Allgemeinheit von Haskell oft zu kryptischen Fehlermeldungen führt. "[66] Um diese zu beheben, entwickelten Forscher der Utrecht University einen fortschrittlichen Dolmetscher namens Helium, der die Benutzerfreundlichkeit von Fehlermeldungen verbesserte, indem sie die Allgemeinheit einiger Haskell-Funktionen begrenzte und insbesondere die Unterstützung für Typklassen beseitigt.

Ben Lippmeier entworfener Schüler[67] Als ein streng zu default (Faul durch explizite Annotation) Dialekt von Haskell mit einem Typ-and-Wirkungs-System, um Haskells Schwierigkeiten bei der Argumentation über die faule Bewertung und bei der Verwendung herkömmlicher Datenstrukturen wie veränderlichen Arrays zu beheben.[68] Er argumentiert (S. 20), dass "das destruktive Update den Programmierer mit zwei wichtigen und leistungsstarken Tools ausweist ... eine Reihe effizienter Array-ähnlicher Datenstrukturen für die Verwaltung von Sammlungen von Objekten und ... die Fähigkeit, einen neuen Wert auf Sendung eines neuen Wertes zu übertragen Alle Teile eines Programms mit minimaler Belastung des Programmierers. "

Robert HarperEiner der Autoren von Standard ML hat seine Gründe dafür angegeben, Haskell nicht zum Unterrichten von Einführungsprogrammen zu verwenden. Unter diesen ist die Schwierigkeit, über die Ressourcenverwendung mit nicht strenger Bewertung zu argumentieren, die die Definition von DataTypen und induktivem Denken kompliziert.[69] und die "Minderwertigkeit" des (alten) Klassensystems von Haskell im Vergleich zu ML -Modulsystem.[70]

Haskells Build -Tool, Kabalewurde historisch gesehen dafür kritisiert, dass sie mehrere Versionen derselben Bibliothek schlecht bearbeitet, ein Problem, das als "Cabal Hell" bekannt ist. Der Stackage -Server und Stapel Das Build -Tool wurde als Reaktion auf diese Kritik gemacht.[71] Cabal selbst hat jetzt ein viel ausgefeilteres Bausystem, das stark von inspiriert ist von Nix,[72] das wurde zur Standardeinstellung mit Version 3.0.

Verwandte Sprachen

Sauber ist ein enger, etwas älterer Verwandter von Haskell. Die größte Abweichung von Haskell steht im Einsatz von Einzigartigkeitstypen anstelle von Monaden für E/A und Nebenwirkungen.

Es wurden eine Reihe von Sprachen entwickelt, die von Haskell inspiriert sind, aber mit unterschiedlichen Typsystemen, einschließlich:

Andere verwandte Sprachen sind:

  • Curry, eine funktionale/logische Programmiersprache basierend auf Haskell.

Bemerkenswerte Haskell -Varianten umfassen:

  • Generisches Haskell, eine Version von Haskell mit Typ -Systemunterstützung für generische Programmierung.
  • Hume, eine strenge funktionale Sprache für eingebettete Systeme Basierend auf Prozessen als staatenlose Automata über eine Art Tupel eines Element-Mailbox-Kanäle, in denen der Status von Feedback in die Mailboxen aufbewahrt wird, und eine Zuordnungsbeschreibung von Ausgängen zu Kanälen als Kastenkabel mit einer Haskell-ähnlichen Ausdruckssprache und Syntax.

Konferenzen und Workshops

Die Haskell -Community trifft sich regelmäßig für Forschungs- und Entwicklungsaktivitäten. Die wichtigsten Ereignisse sind:

Ab 2006 eine Reihe von organisierten Hackathons Es ist aufgetreten, die HAC -Serie, die darauf abzielt, die Tools und Bibliotheken der Programmiersprache zu verbessern.[73]

Verweise

  1. ^ a b c Hudak et al. 2007.
  2. ^ a b Marlow, Simon (24. November 2009). "Haskell 2010 ankündigen". Haskell (Mailingliste). Abgerufen 12. März 2011.
  3. ^ a b Riedel, Herbert (28. April 2016). "Ann: Haskell Prime 2020 Komitee hat sich gebildet". Haskell-Prime (Mailingliste). Abgerufen 6. Mai 2017.
  4. ^ a b c d e f g h i j k l m Peyton Jones 2003, p. xi
  5. ^ Norell, ULF (2008). "Abhängig typisierte Programmierung in AGDA" (PDF). Göteborg: Chalmers University. Abgerufen 9. Februar 2012.
  6. ^ Hudak et al. 2007, S. 12–38, 43.
  7. ^ Stroustrup, Bjarne; Sutton, Andrew (2011). "Design der Konzeptbibliotheken für C ++" (PDF). Archiviert von das Original (PDF) am 10. Februar 2012. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  8. ^ a b c d e f g h i j Hudak et al. 2007, S. 12-45–46.
  9. ^ a b Meijer, Erik (2006). "Geständnisse eines gebrauchten Programmiersprachenverkäufers: Die Massen hängen an Haskell". Oopsla 2007. Citeseerx 10.1.1.72.868.
  10. ^ Meijer, Erik (1. Oktober 2009). "C9 Lectures: Dr. Erik Meijer - Grundlagen für funktionale Programmierungen, Kapitel 1 von 13". Kanal 9. Microsoft. Abgerufen 9. Februar 2012.
  11. ^ Drobi, Sadek (4. März 2009). "Erik Meijer auf Linq". Infoq. Qcon Sf 2008: C4Media Inc.. Abgerufen 9. Februar 2012.{{}}: CS1 Wartung: Standort (Link)
  12. ^ Hickey, reich. "Clojure -Bücherregal". Listmania!. Archiviert von das Original am 3. Oktober 2017. Abgerufen 3. Oktober 2017.
  13. ^ Heller, Martin (18. Oktober 2011). "Dreh deine Nase bei Dart hoch und rieche den Coffeescript". InfoWorld. Abgerufen 2020-07-15.
  14. ^ "Deklarative Programmierung in Escher" (PDF). Abgerufen 7. Oktober 2015.
  15. ^ Syme, Don; Granicz, Adam; Cisternino, Antonio (2007). Experte F#. Apress. p. 2. F# zeichnet sich auch aus Haskell insbesondere in Bezug auf zwei fortgeschrittene Sprachmerkmale, die genannt werden Sequenzausdrücke und Workflows.
  16. ^ "Facebook führt 'Hack' vor, die Programmiersprache der Zukunft". VERDRAHTET. 20. März 2014.
  17. ^ "Idris, eine abhängig getippte Sprache". Abgerufen 26. Oktober 2014.
  18. ^ "Livescript Inspiration". Abgerufen 4. Februar 2014.
  19. ^ Freeman, Phil (2016). "Purescript mit Beispiel". Leanpub. Abgerufen 23. April 2017.
  20. ^ Kuchling, A. M. "Funktionales Programmieren Howto". Python v2.7.2 Dokumentation. Python Software Foundation. Abgerufen 9. Februar 2012.
  21. ^ "Glossar der Begriffe und Jargon". Perl Foundation Perl 6 Wiki. Die Perl Foundation. Archiviert von das Original am 21. Januar 2012. Abgerufen 9. Februar 2012.
  22. ^ "Die Rostreferenz: Anhang: Einflüsse". Abgerufen 3. Februar 2016.
  23. ^ Fogus, Michael (6. August 2010). "Martinodersky Take (5) Tolist". Senden Sie mehr Sanitäter. Abgerufen 9. Februar 2012.
  24. ^ Lattner, Chris (3. Juni 2014). "Chris Lattners Homepage". Chris Lattner. Abgerufen 3. Juni 2014. Die schnelle Sprache ist das Produkt unermüdlicher Anstrengungen eines Teams von Sprachenexperten, Dokumentations-Gurus, Compiler-Optimierung Ninjas und einer unglaublich wichtigen internen Dogfooding-Gruppe, die Feedback zur Verfeinerung und den Schlachtstest-Ideen gab. Natürlich profitierte es auch stark von den Erlebnissen, die viele andere Sprachen auf diesem Gebiet hart erkannt haben und Ideen von Objective-C, Rost, Haskell, Ruby, Python, C#, CLU und viel zu vielen anderen zeichnen, um aufzulisten.
  25. ^ Chevalier, Tim (28. Januar 2008). "Jemand kann mir die Aussprache von" Haskell "erzählen?". Haskell-Cafe (Mailingliste). Abgerufen 12. März 2011.
  26. ^ Geben Sie ursprünglich Inferenz an, die ursprünglich verwendet werden Hindley-Milner-Inferenz
  27. ^ a b c Peyton Jones 2003.
  28. ^ Edward Kmett, Edward Kmett - Typklassen gegen die Welt
  29. ^ Mossberg, Erik (8. Juni 2020), Erkmos/Haskell-Kompanien, abgerufen 22. Juni 2020
  30. ^ O'Sullivan, Bryan; Goerzen, John; Stewart, Donald Bruce (15. November 2008). Real World Haskell: Code, an den Sie glauben können. "O'Reilly Media, Inc.". S. xxviii - xxxi. ISBN 978-0-596-55430-9.
  31. ^ "Haskell in Produktion: Risikokobook". Serokell Software Development Company. Abgerufen 7. September 2021.
  32. ^ "Pypl Popularität des Programmiersprachenindex". pypl.github.io. Mai 2021. archiviert von das Original am 7. Mai 2021. Abgerufen 16. Mai 2021.
  33. ^ Frederickson, Ben. "Programmiersprachen durch Github -Benutzer rankieren". www.benfrederickson.com. Abgerufen 6. September 2019.
  34. ^ a b c Peyton Jones 2003, Preface.
  35. ^ "Typklassen, zuerst während des Designs der Haskell -Programmiersprache vorgeschlagen, ..." -John Garrett Morris (2013), "Typklassen und Instanzketten: Ein relationaler Ansatz"
  36. ^ Wadler, Philip (Oktober 1988). "Wie man Ad-hoc-Polymorphismus weniger Ad-hoc macht".
  37. ^ "Haskell Wiki: Implementierungen". Abgerufen 18. Dezember 2012.
  38. ^ "Willkommen bei Haskell '". Das Haskell 'Wiki. Archiviert von das Original am 20. Februar 2016. Abgerufen 11. Februar 2016.
  39. ^ GHC 2020 Team (29. Oktober 2021) GHC 9.2.1 veröffentlicht
  40. ^ Wadler, P.; Blott, S. (1989). "Wie man Ad-hoc-Polymorphismus weniger Ad-hoc macht". Verfahren des 16. ACM Sigplan-Sigact-Symposiums über Prinzipien der Programmiersprachen. ACM: 60–76. doi:10.1145/75277.75283. ISBN 978-0-89791-294-5. S2CID 15327197.
  41. ^ Hallgren, T. (Januar 2001). "Spaß mit funktionalen Abhängigkeiten oder Typen als Werte in statischen Berechnungen in Haskell". Verfahren des gemeinsamen CS/CE -Wintertreffens. Varberg, Schweden.
  42. ^ Computersprach -Benchmarks -Spiel
  43. ^ "Hackagedb Statistics". Hackage.haskell.org. Archiviert von das Original am 3. Mai 2013. Abgerufen 26. Juni 2013.
  44. ^ "Implementierungen" im Haskell Wiki
  45. ^ "Das LLVM -Backend". GHC Trac.
  46. ^ Terei, David A.; Chakravarty, Manuel M. T. (2010). "Ein LLVM -Backend für GHC". Proceedings of ACM Sigplan Haskell Symposium 2010. ACM -Presse.
  47. ^ C. Ryder und S. Thompson (2005). "Hase der GHC -API portieren"
  48. ^ Utrecht Haskell Compiler
  49. ^ Hudak et al. 2007, S. 12–22.
  50. ^ AGDA 2, Agda Github Community, 15. Oktober 2021, abgerufen 16. Oktober 2021
  51. ^ "Die Haskell -Kabale". Abgerufen 8. April 2015.
  52. ^ "Linspire/Freespire Core OS OS -Team und Haskell". Debian Haskell Mailingliste. Mai 2006.
  53. ^ "Live -Code mit Gezeitenzyklen | Gezeitenzyklen". doc.tidalcycles.org. Abgerufen 19. Januar 2022.
  54. ^ xmonad.org
  55. ^ "Spam mit Haskell kämpfen". Facebook -Code. 26. Juni 2015. Abgerufen 11. August 2019.
  56. ^ "Open-Sourcing Haxl, eine Bibliothek für Haskell". Facebook -Code. 10. Juni 2014. Abgerufen 11. August 2019.
  57. ^ "Input-Output-HK/Cardano-Node: Die Kernkomponente, mit der an einer dezentralen Blockchain in Cardano teilnehmen kann". Github. Abgerufen 18. März 2022.
  58. ^ Quellcode analysieren, analysieren und vergleichen: GitHub/Semantic, Github, 7. Juni 2019, abgerufen 7. Juni 2019
  59. ^ "Kommerzielle Benutzer des funktionalen Programmierworkshop -Berichts" (PDF). Abgerufen 10. Juni 2022.
  60. ^ a b c d Ein formeller Nachweis der Funktionskorrektheit wurde 2009 abgeschlossen. Klein, Gerwin; Elphinstone, Kevin; Heiser, Gernot; Andronick, Juni; Schwanz, David; Derrin, Philip; Elkaduwe, Dhammika; Engelhardt, Kai; Kolanski, Rafal; Norrish, Michael; Sewell, Thomas; Tuch, Harvey; Winwood, Simon (Oktober 2009). "SEL4: Formale Überprüfung eines OS -Kernels" (PDF). 22. ACM -Symposium für Betriebssystemprinzipien. Big Sky, MT, USA.
  61. ^ Yula Gavrilova und Gints Dreimais. Top 6 Softwareprojekte in Haskell geschrieben. Serokell -Blog. 17. Oktober 2019. <https://serokell.io/blog/top-software-written-in-haskell>. Zugriff auf den 4. November 2021
  62. ^ "Web/Frameworks - Haskellwiki". Wiki.haskell.org. Abgerufen 11. August 2019.
  63. ^ Jan-Willem Maessen. Eifriger Haskell: Ressourcenrückgestellte Ausführung ergibt eine effiziente Iteration. Verfahren des 2002 Verband für Rechenmaschinen (ACM) Sigplan Workshop über Haskell.
  64. ^ [Dead Link]Simon Peyton Jones. Tragen des Haarhemdes: Eine Retrospektive auf Haskell. Eingeladener Gespräch bei Popl 2003.
  65. ^ "Eine faule Bewertung kann zu einer hervorragenden Leistung führen, z..
  66. ^ Heeren, Bastiaan; Leijen, Daan; Van Ijzendoorn, Arjan (2003). "Helium, um Haskell zu lernen" (PDF). Verfahren des ACM Sigplan -Workshops von 2003 über Haskell: 62–71. doi:10.1145/871895.871902. ISBN 1581137583. S2CID 11986908.
  67. ^ "DDC - Haskellwiki". Haskell.org. 3. Dezember 2010. Abgerufen 26. Juni 2013.
  68. ^ Ben Lippmeier, Typinferenz und Optimierung für eine unreine Welt, Australian National University (2010) Doktorarbeit, Kapitel 1
  69. ^ Robert Harper. "Der Punkt der Faulheit". closed access
  70. ^ Robert Harper. "Module sind wichtigsten". closed access
  71. ^ "Cabal Hell lösen". www.yesodweb.com. Abgerufen 11. August 2019.
  72. ^ "Ankündigung von Cabal New Build: Lokalbuilds im Nix-Stil". Abgerufen 1. Oktober 2019.
  73. ^ "Hackathon - Haskellwiki".

Weitere Lektüre

Berichte
Lehrbücher
Tutorials
Geschichte

Externe Links