Die Geschichte der Programmiersprachen: Wie Haskell zum funktionalen Programmierstandard wurde



    Die theoretischen Grundlagen der imperativen Programmierung wurden in den 30er Jahren des 20. Jahrhunderts von Alan Turing und John von Neumann gelegt. Die dem funktionalen Ansatz zugrunde liegende Theorie wurde in den 20er und 30er Jahren entwickelt. Zu den Entwicklern der mathematischen Grundlagen der funktionalen Programmierung zählen Moses Schönfinkel (Deutschland und Russland) und Haskell Curry (England) sowie Alonzo Church (USA). Schönfinkel und Curry legten den Grundstein für die kombinatorische Logik, und Church ist der Schöpfer der Lambda-Rechnung.

    Die funktionale Programmierung basiert auf Ideen aus der kombinatorischen Logik und der Lambda-Rechnung.

    Aber die Theorie blieb Theorie, bis John McCarthy in den frühen 1950er Jahren die Lisp-Sprache (1958) entwickelte, die die erste fast funktionale Programmiersprache wurde. Lisp hat seit vielen Jahren keine Konkurrenten mehr. Später erschienen die weniger verbreiteten funktionalen Programmiersprachen APL (1964), ISWIM (1966) und FP (1977).

    Mit der Zeit hat Lisp aufgehört, einige Anforderungen von Programmentwicklern zu erfüllen, insbesondere mit dem Anwachsen des Volumens und der Komplexität von Programmcode. In Verbindung mit diesem Umstand begann das Tippen eine zunehmende Rolle zu spielen. In den späten 70er und frühen 80er Jahren des 20. Jahrhunderts wurden intensiv für funktionale Sprachen geeignete Schreibmodelle entwickelt.

    Die meisten dieser Modelle unterstützten leistungsfähige Mechanismen wie Datenabstraktion und Polymorphismus. Viele typisierte funktionale Sprachen sind erschienen: ML, Schema, Hoffnung, Miranda, Sauber und viele andere. Darüber hinaus nahm die Anzahl der Dialekte stetig zu.
    ML (1973) - die erste Hindley-Milner-Schreibsprache;
    Schema (1975) ist einer der beiden beliebtesten Dialekte der Lisp-Sprache;
    SASL, KRC, Miranda (1972–1985) - eine der ersten faulen Sprachen;
    Hope (1980) ist eine der ersten Sprachen mit algebraischen Datentypen.


    Haskell Curry

    Als Ergebnis stellte sich heraus, dass fast jede Gruppe, die sich mit funktionaler Programmierung befasste, ihre eigene Sprache verwendete. Dies verhinderte die weitere Verbreitung dieser Sprachen und verursachte zahlreiche Probleme.

    Die Geschichte der Haskell-Sprache beginnt 1987. Nacheinander erschienen neue funktionale Programmiersprachen. Seit der Veröffentlichung von Miranda (Research Software Ltd, 1985) ist das Interesse an Lazy Computing gewachsen: Bis 1987 waren mehr als ein Dutzend nicht strenger rein funktionaler Programmiersprachen entstanden.

    Miranda wurde am häufigsten verwendet, es war jedoch eine patentierte Software. Bei einer Konferenz über funktionale Programmiersprachen und Computerarchitektur (FPCA, 1987) in Portland, Oregon, einigten sich die Teilnehmer darauf, ein Komitee einzurichten, um einen offenen Standard für solche Sprachen zu definieren. Ziel des Ausschusses war es, die vorhandenen funktionalen Sprachen in einer gemeinsamen Sprache zusammenzufassen, die eine Grundlage für künftige Forschungen zur Entwicklung funktionaler Programmiersprachen bilden würde.

    Da war also Haskell. Es wurde nach einem der Begründer der kombinatorischen Logik, Haskell Curry, benannt.

    Bis Ende der 1980er Jahre wurden viele funktionale Sprachen geschaffen. Einige von ihnen hatten einen signifikanten Einfluss auf Haskell:



    Die neue Sprache sollte eine freie Sprache werden, die sich für Forschungszwecke und praktische Probleme eignet. Freie Sprachen basieren auf einem Standard, der von einem Komitee von Entwicklern formuliert wurde. Dann kann jeder mit der Implementierung des Standards beginnen und einen Sprach-Compiler schreiben. Die erste Version des Haskell-Standards wurde am 1. April 1990 veröffentlicht.

    Haskell 1.0 - 1.4


    Die erste Version von Haskell (Haskell 1.0) wurde 1990 veröffentlicht. Die Versuche des Komitees führten zu einer Reihe von Sprachimplementierungen (1.0, 1.1, 1.2, 1.3, 1.4).



    Haskell 98


    Ende 1997 musste Haskell 98 in einer stabilen, minimalen und portablen Version der Sprache und einer zugehörigen Standardbibliothek für das Studium als Grundlage für die zukünftige Entwicklung spezifiziert werden. Das Komitee hat die Erstellung von Erweiterungen und Variationen von haskell 98 positiv aufgenommen, indem experimentelle Funktionen hinzugefügt und eingeführt wurden.

    Im Februar 1999 wurde der Haskell 98-Sprachstandard erstmals als The Haskell 98 Report veröffentlicht. Im Januar 2003 wurde eine geänderte Version als „Haskell 98 Language and Libraries: The Revised Report“ veröffentlicht. Die Sprache hat sich rasant weiterentwickelt, die Implementierung des Glasgow Haskell Compiler (GHC) ist der eigentliche Sprachstandard.

    Haskell 2010


    Haskells aktueller Standard, Haskell 2010, wurde am 24. November 2009 bekannt gegeben. GHC unterstützt es seit Version 7.0.1.

    Im Vergleich zu Haskell '98 enthielt es die folgenden Änderungen:

    • Do und If Then Else
    • Hierarchische Module
    • Deklarieren von leeren Variablen
    • Ausfallsicherheitslösung
    • Schnittstelle für Funktionen von Drittanbietern
    • Lineare Kommentarsyntax
    • Schützen von Mustern
    • Leichte Abhängigkeitsanalyse
    • Sprachrichtlinien (Pragma)
    • Fehlende n + k-Muster



    Weitere Änderungen wurden am 7. Januar 2011 veröffentlicht:

    • Fehlender Datentypkontext
    • Listen mit Variablen mit Aufzählungszeichen

    Haskell entwickelt sich heute weiter. Die stabilen Versionen basieren jedoch auf den Standards von 1998 bzw. 2010. Abgesehen davon enthält Haskell viele Erweiterungen, und ständig werden neue Ideen eingeführt. Mehrere Länder der Welt arbeiten an der Sprache - das sind England, die Niederlande, Amerika und Australien. Das Interesse an Haskell ist auf die Popularität der Multiprozessor-Technologie zurückzuführen. Das Haskell-Modell eignet sich gut für paralleles Rechnen.

    Vom Schöpfer von Haskell


    Curry ist eine eingebettete Programmiersprache für allgemeine Zwecke, die zusätzlich zur Haskell-Sprache implementiert wird. Die Programmiersprache Curry kombiniert nahtlos die Möglichkeiten der funktionalen Programmierung (verschachtelte Ausdrücke, Funktionen höherer Ordnung, Lazy Computing), der logischen Programmierung (logische Variablen, partielle Datenstrukturen, eingebautes Suchsystem) und der Programmiermethoden für parallele Systeme (parallele Ausdrucksberechnung mit Synchronisation durch logische Variablen) )

    Darüber hinaus bietet Curry zusätzliche Mechanismen im Vergleich zu reinen Programmiersprachen (im Vergleich zu funktionalen Sprachen ist die Suche und Berechnung mit unvollständigen Daten im Vergleich zu logischen Sprachen aufgrund von Determinismus und Aufrufen von Funktionen, falls erforderlich, ein effizienterer Berechnungsmechanismus).

    Popularität


    Github belegt nun den 23. Platz in der Beliebtheit unter den Programmiersprachen.

    Der Index TIOBE er auf dem 38 Platz:



    In der Rangliste der RedMonk Haskell steht hoch genug - in der 16. Position. In diesem Fall basiert die Bewertung auf einer Bewertung der Beliebtheitskombination bei GitHub sowie der Aktivität der Diskussionen zu Stack Overflow.

    Projekte


    Haskell hat viele komplexe Projekte implementiert:

    • Compiler und andere Entwicklungstools.

    • Distributed Darcs- Versionskontrollsystem .

    • Fenstermanager xmonad .

    HAppS Web Application Server .

    Pugs- Interpreter / Compiler für Perl 6.

    • Betriebssystem des Hauses .

    Lava- Hardwarebeschreibungssprache .

    • LOLITA natürliches Sprachverarbeitungssystem.

    • Beweissysteme der Theoreme von Equinox / Paradox und Agda .

    Facebook


    Spam-Filterung ist eine der wichtigsten Aufgaben, die Facebook-Ingenieure lösen. Das größte soziale Netzwerk verarbeitet Nachrichten von mehr als 1,5 Milliarden Menschen, so dass das Ausmaß des Problems geschätzt werden kann. Im Jahr 2015 hat das Unternehmen eingeführt , um einen neuen Anti-Spam - Filter, entwickelte die Programmiersprache Haskell verwenden.



    Trotz seiner Jugend, seines experimentellen Status und seiner relativ geringen Beliebtheit hat Facebook Haskell ausgewählt, um ein wichtiges Modul zu erstellen. Einer der Ingenieure, Louis Brandy, der Teil des Entwicklungsteams für den neuen Anti-Spam-Filter ist, hat zwei Jahre mit Kollegen an diesem Projekt gearbeitet. In einem Interview mit Wired erklärte er, wie sie geführt wurden.

    Luis Brandi, der seine Worte sorgfältig auswählte, bezeichnete Haskell als ideal für die Implementierung eines Spamfilters auf Facebook, da er parallele Aufgaben sehr gut handhabt und es Entwicklern ermöglicht, diese Aufgaben schnell und einfach zu erledigen. Facebook ist ein so großes Projekt, und Spammer ändern ihre Taktik so schnell, dass sie ein Tool benötigen, um Spam-Filter zu entwickeln und ständig zu ändern, die sofort wirksam werden.

    Wenn Sie sich die Entwicklung des modernen Internets ansehen, sollten Sie viele Internetprojekte auf diesem Weg verfolgen, für die Skalierbarkeit und Echtzeitreaktion wichtig sind. Laut den Entwicklern von Facebook hat die Haskell-Sprache alle Chancen, weit verbreitet zu sein. Nur die Tatsache, dass sich Haskell von anderen Sprachen unterscheidet, stört - und dies erschwert die Massenmigration.

    Dennoch geht die Branche auf jeden Fall in die richtige Richtung, wie das Beispiel neuer Programmiersprachen zeigt, die sich an parallelen Prozessen orientieren, beispielsweise Go von Google und Rust von Mozilla. Obwohl sie nicht so effektiv sind wie Haskell, sind sie leichter zu erlernen. In jedem Fall kann Haskell dafür gedankt werden, dass er die Entwicklung anderer Programmiersprachen forciert und den Start neuer vielversprechender Projekte erleichtert hat.

    Evgeny Kozlov sprach in seinem Blog über seine Eindrücke von der Arbeit mit Haskell:



    Nachteile

    Erstens eine hohe Schwelle für die Eingabe der Sprache. Ja, Haskell ist schön, sauber und prägnant, aber dies wird nicht kostenlos erreicht, sondern durch eine lange Rekonstruktion des Gehirns und das Studium komplexer Abstraktionen wie Monaden, Monadentransformatoren, Linsen und Maschinen.

    Zweitens ist es die Schwierigkeit, produktiven Code zu schreiben. Da der gesamte Code in Haskell faul ist, können Sie leicht eine Situation erreichen, in der Gigabyte anstehender Berechnungen im Speicher gespeichert, aber nicht berechnet werden, da sie noch nicht angefordert wurden.

    Positive Seite

    Zuallererst natürlich die Reinheit der Sprache. Reinheit in beiden Sinnen: Reinheit der Funktionen und völlige Abwesenheit des OOP-Paradigmas. Es ist großartig, dass Sie sich die Signatur einer Funktion ansehen und sehen können, ob sie Nebenwirkungen hervorruft oder nicht. Das Fehlen von OOP bedeutet, dass es keine Möglichkeit gibt, beängstigende Dinge wie nicht verifizierte Casts von einer Basisklasse in eine Unterklasse auszuführen.

    Wenn der Code geschrieben ist, ist es schwierig, ihn auf zwei Arten zu interpretieren. Zum Beispiel können Sie die Verwendung einer Funktion und einen Verweis auf eine Funktion nicht wie in Scala verwechseln, da Funktionen in Haskell Objekte der ersten Klasse sind. Sie können beispielsweise eine Funktion nicht mit einem Typ oder einer Klasse verwechseln, da alle Funktionen mit einem Kleinbuchstaben und Typen / Klassen mit einem Großbuchstaben beginnen müssen.

    Ein Sprachmerkmal, ohne das Haskell bedeutungslos wäre, ist der Polymorphismus. Es ist unwahrscheinlich, dass es übertrieben ist, wenn ich sage, dass Haskell eine Sprache mit der maximalen Menge an wiederverwendetem Code ist. Zumindest einige sich wiederholende Funktionen werden abstrahiert.

    Jetzt auch beliebt: