WikiDer > Haskell (Programmiersprache)
Haskell | ||||
| Paradigma | rein funktional | |||
| erschien | 1990 | |||
| Entwickelt von | Simon Peyton Jones, Paul Hudak, Philip Wadler und andere | |||
| Aktuelle Version | Haskell 2010 (Juli 2010) | |||
| Typensystem | statisch, stark, gefolgert | |||
| Implementierungen | GHC, Umarmungen und andere | |||
| Dialekte | Helium, Mädchen für alles | |||
| Beeinflusst von | lispeln, APL, hoffen, Miranda, ML, ICH WÜRDE | |||
| Einfluss auf | C#, Curry, F#, LINQ, Perle 6, Python, Reichweite | |||
| Betriebssystem | Multiplattform | |||
| Dateierweiterungen | .hs, .lhs | |||
| Webseite | https://haskell.org/ | |||
| ||||
Haskell ist ein funktionale Programmiersprache benannt nach dem MathematikerHaskell Brooks Curry.
Geschichte
Haskell wird hauptsächlich an der Universität Glasgow.
Loslegen
Mit dem Erscheinen der Programmiersprache Miranda im Jahr 1985 (herausgegeben von Research Software Ltd.) faulfunktionale Sprachen. Bis 1987 waren bereits viele funktionale Sprachen im Einsatz. Miranda war die am weitesten verbreitete Sprache, war aber proprietäre Software. Auf der Internationalen Konferenz für Funktionale Sprachen 1987 in Portland Es bestand Einigkeit darüber, dass a offener Standard sollten für solche Sprachen erstellt werden. Ziel des Ausschusses war es, bestehende Funktionalitäten in einer gemeinsamen Sprache zu konsolidieren, um als Grundlage für die weitere Erforschung funktionaler Sprachen zu dienen.[1]
Haskell 1.0 bis 1.4
Die erste Version von Haskell, Haskell 1.0, wurde 1990 erstellt. Die Arbeit des Ausschusses führte zu einer Reihe von Sprachdefinitionen (1.0, 1.1, 1.2, 1.3 und 1.4).[2]
Haskell 98
Ende 1997 führte die Reihe von Definitionen zu Haskell 98, das darauf abzielt, eine stabile, minimale, tragbar Version der Sprache und des zugehörigen Standards. Das Komitee erwartete und ermöglichte ausdrücklich, Erweiterungen der Sprache über . hinzuzufügen experimentelle Funktionen.[1]
Im Februar 1999 wurde der Standard für Haskell 98 veröffentlicht als Der Haskell 98-Bericht. Im Januar 2003 erschien eine überarbeitete Ausgabe als Haskell 98 Sprache und Bibliotheken: Der überarbeitete Bericht.[1] Die Sprache entwickelt sich weiter stark. Der Glasgow Haskell Compiler ist de facto die Standardimplementierung.[3]
Haskell 2010
Anfang 2006 wurden die ersten Schritte unternommen, um einen Nachfolger von Haskell 98 unter dem Namen Haskell Prime.[4] Ziel war es, inkrementelle Updates mit höchstens einer neuen Version pro Jahr zu produzieren. Die erste Überarbeitung, Haskell 2010, wurde im November 2009 angekündigt und im Juli 2010 veröffentlicht.[5]
Haskell 2010 ist ein inkrementelles Update, das mehrere häufig verwendete und nicht umstrittene Funktionen hinzufügt, die zuvor über Compiler-Flags aktiviert werden mussten:
- Hierarchische Modulnamen., zB.
Daten.ListeAnstatt vonaufführen. Diese Funktionalität wurde Haskell 98 ursprünglich durch ein Addendum hinzugefügt und wird universell verwendet. - Mit der Fremdfunktionsschnittstelle ist es möglich, andere Programmiersprachen anzusprechen. Im Standard nur Bindungen an C definiert, aber das Design lässt andere Sprachen zu. Diese Funktion war ursprünglich auch ein Nachtrag zu Haskell 98.
- Die sogenannte Patronen sind nicht mehr erlaubt.
- Die Regeln bzgl Typ-Inferenz wurden gelockert, um den Programmen mehr Möglichkeiten zu geben.
- Einige Syntaxprobleme wurden behoben.
- das Pragma
SPRACHEwurde hinzugefügt, um mit Erweiterungen besser zu arbeiten.
Implementierungen
Parallel zur Entwicklung der theoretischen Haskell-Sprache wurden eine Reihe von Arbeitsumgebungen für Haskell entwickelt. Die bekanntesten davon sind die Umarmungen- und Gofer-Systeme und die Glasgow Haskell Compiler, die alle von den daran arbeitenden Hochschulteams kostenlos zur Verfügung gestellt werden. Speziell zum Erlernen von Haskell ist die Universität UtrechtHelium mit Blick auf die Verständlichkeit der Fehlermeldungen entwickelt.
Im Nimwegen ist die Programmiersprache sauber die Haskell sehr ähnlich ist, dem Programmierer jedoch mehr Kontrolle über die faule Auswertung gibt.
Funktionsbasis
Im Gegensatz zu vielen bekannten Programmiersprachen wie C, C und Java ist Haskell Nr zwingende Sprache, aber ein funktionale Sprache. Das heißt, die Sprache basiert nicht auf dem Turing Maschine-Berechnungsmodell, aber auf der Modell der Lambda-Rechnung von Alonzo-Kirche bei denen sich bewerben Funktionen zu Konditionen und Laufzeitverkürzung ist die Berechnungsgrundlage.
Haskell ist ein faul ("faul"), rein funktionale Sprache. Rein funktional zu sein bedeutet, dass darin definierte Funktionen keine Nebenwirkungen aufweisen können. Beispiele für nicht-reine funktionale Programmiersprachen sind Standard-ML und planen. Verwenden einer faulen funktionalen Sprache faule Bewertung um nicht verwendete Berechnungsergebnisse zu vermeiden. Obwohl dies nicht von allen als intuitives Feature angesehen wird, wird die faule Evaluierung als eine Möglichkeit angesehen, mehr Modularisierung zu erreichen.
Die Programmiersprache ist stark und statisch typisiert (Tippfehler können während der Programmausführung nicht auftreten) und stützt sich stark auf Typ-Inferenz (normalerweise können die Typen von Funktionen und Variablen vom Compiler erkannt werden). Das Typsystem ist sehr umfangreich und unterstützt das Konzept von Typenklassen, wobei diese Klassen voneinander abgeleitet werden können.
Beispiele
Hallo Welt
ModulMain(Main)wo-- nicht benötigt mit Interpreter, Standard bei ModuldateienMain::IO()-- optional, der Compiler kann dies ermittelnMain=putStrLn"Hallo Welt!"Fakultät
Die folgende Funktion berechnet die Fakultät einer Zahl. Für negative Werte ist die Funktion undefiniert. Es wird auf verschiedene Weise definiert:
-- Typanmerkung (optional, für jede Implementierung gleich)Fakultät::(Integralein)=>ein->ein-- Durch Rekursion (unter Verwendung des "ifthenelschen" Ausdrucks)Fakultätnein=wennnein<2dann1sonstnein*Fakultät(nein-1)-- mit Rekursion (mit Mustervergleich)Fakultät0=1Fakultätnein=nein*Fakultät(nein-1)-- mit Rekursion (mit Wachen)Fakultätnein|nein<2=1|Andernfalls=nein*Fakultät(nein-1)-- Mit einer Liste und der "Produkt"-FunktionFakultätnein=Produkt[1..nein]-- Mit Falz (bearbeitet "Produkt")Fakultätnein=falten(*)1[1..nein]-- Im "punktfreien" StilFakultät=Ordner(*)1.enumFromTo1In eine Liste einfügen
Die folgende Funktion fügt eine Zahl in der Reihenfolge vom kleinsten zum größten in eine Liste ein:
einfügen::int->[int]->[int]einfügenein[]=[ein]einfügeneinaufführen@(X:xs)|ein<=X=ein:aufführen|ein>X=X:einfügeneinxsBeim Einfügen einer Nummer lassen sich zwei Fälle unterscheiden: das Einfügen einer Nummer in eine leere Liste und in eine Liste mit einer oder mehreren Nummern. Das Einfügen in die leere Liste ist einfach, da dies eine Liste mit dieser Nummer ist. Beim Einfügen einer Zahl in eine gefüllte Liste betrachten wir die erste Zahl, X, und der Rest, xs. Wenn die einzufügende Zahl kleiner oder gleich der ersten Zahl ist, setzen wir die Zahl an den Anfang der gesamten Liste. Wenn die Zahl größer als die erste Zahl ist, nehmen wir das erste Element und fügen die Zahl in den Rest der Liste ein. Auf diese Weise wird die Liste fortgesetzt, bis die Stelle gefunden ist, an der die Nummer platziert werden kann.
Funktionen höherer Ordnung und Lazy Evaluation
In Haskell kann man Funktionen höherer Ordnung , dies sind Funktionen, die eine oder mehrere Funktion(en) als Argument annehmen oder eine Funktion zurückgeben. Beispiele dafür sind Mappe, Filter und falten. Die Funktion Filter Ruft beispielsweise eine Funktion (ein Prädikat) und eine Liste ab. Diese Funktion gibt eine Liste zurück, die nur die Elemente aus der angegebenen Liste enthält, die mit dem Prädikat übereinstimmen. Beispielsweise:
FilterEin bisschen[0..]Das obige ergibt eine unendliche Liste von geraden Zahlen (formeller: alle Elemente aus der Liste [0, 1, 2, ..] für die die Funktion Ein bisschen der Wert wahr kehrt zurück). Die Tatsache, dass diese Liste unendlich ist, ist kein Problem, denn da Haskell Lazy Evaluation verwendet, muss die Liste nur bei Bedarf erstellt werden. So kann man schreiben:
nehmen10(Filterisprime[1..])Die Funktion nehmen gibt die ersten n Elemente einer Liste zurück. Wenn die Funktion isprime (die bestimmt, ob eine Zahl eine Primzahl ist) dann ergibt das obige die ersten 10 Primzahlen.
Benutzen
Einige der Anwendungen, die in Haskell geschrieben wurden oder diese verwenden:
- Darcs, ein Versionskontrollsystem, ist in Haskell geschrieben.[6]
- Xmonad ist ein Fenstermanager für die X Window-System, geschrieben in Haskell.[7]
- git-annex ist ein Werkzeug für git um mit großen Dateien zu arbeiten.[8]
- Pandoc, ein Programm zum Konvertieren von Dokumenten zwischen verschiedenen Formaten.[9]
- Facebook verwendet Haskell in seinen Anti-Spam-Programmen.[10]
Kritik
2002 und 2003 diskutierte Jan-Willem Maessen bzw Simon Peyton Jones Probleme im Zusammenhang mit fauler Bewertung. Zusätzlich zu praktischen Erwägungen, wie einer besseren Leistung, machte es die faule Evaluierung für Programmierer schwieriger, über den Code nachzudenken.[11][12]
Andere beobachteten, dass Haskell für Anfänger nicht einfach zu erlernen ist:[13]
Die subtile Syntax und das ausgeklügelte Typensystem von Haskell sind ein zweischneidiges Schwert – von erfahrenen Programmierern sehr geschätzt, aber auch für Anfänger eine Quelle der Frustration, da die Allgemeinheit von Haskell oft zu kryptischen Fehlermeldungen führt.
Dies war auch einer der Gründe für Helium zu machen.
Verwandte Sprachen
sauber ist eine eng verwandte, aber etwas ältere Sprache von Haskell.
Eine Reihe von Sprachen, die von Haskell inspiriert wurden, jedoch mit einem anderen Typsystem, umfassen:
- Agda, eine funktionale Sprache mit abhängigen Typen.
- Idris, eine generische Funktionssprache, entwickelt am Universität St. Andrews.
- Epigramm, eine funktionale Sprache, die zum Nachweis von Eigenschaften von Programmen verwendet wird
- Cayenne, eine funktionale Sprache mit abhängigen Typen.
- Ωmega, ein Dolmetscher ähnlich wie Umarmungen.
- Elm, eine funktionale Sprache, die Web Applikationen damit zu tun.
Weiterlesen
- (NL) Funktionale Programmierung (pdf-Datei). Dies ist das Skript zum Kurs Funktionale Programmierung zum Universität Utrecht (sehen Bachelor-Studiengang Funktionale Programmierung Für mehr Informationen).
Externe Links
- (und) Die Haskell-Seite
- (und) Der Haskell-Sprachbericht 2010 - Über die Sprache selbst und ihre Bibliotheken
- (und) Eine Geschichte von Haskell: faul mit der Klasse sein - Geschichte von Haskell
- (und) Die FAQ der Usenet-Newsgroup comp.lang.functional
- (und) Warum funktionale Programmierung wichtig ist - Ein Papier von John Hughes, das unter anderem die Vorteile der faulen Bewertung beschreibt.
Quellen, Anmerkungen und/oder Verweise
|
| Programmiersprachen |
|---|
ABAP ·ABC ·ActionScript ·Ada ·algol ·APL ·Assemblersprachen ·AWK ·B ·BASIC ·BCPL ·C ·C ·C♯ ·sauber ·Schermaschine ·COBOL ·COMAL ·Curry ·d ·Eiffel ·Erlang ·F♯ ·her ·fortran ·gehen ·Haskell ·Symbol ·J ·Java ·Kotlin ·lispeln ·Logo ·lua ·m4 ·ML ·Modula-2 ·Oberon ·Objekt Pascal ·Ziel c ·Ocamli ·Unze ·Pascal ·perl ·PHP ·PL/I ·PL/SQL ·Prolog ·Prova ·Python ·Rexx ·Rollenspiel ·Rubin ·Frieden ·SAS ·Reichweite ·planen ·Selbst ·Simula ·Smalltalk ·Schnell ·TCL ·Typoskript ·vala ·Visual Basic |