Funktionssprachen: Was sie sind, wohin sie gehen

Auch wenn einige genau argumentieren, was es ist, zieht die funktionale Programmierung immer wieder Entwickler an. Drei der beliebtesten Funktionssprachen - Clojure, F # und Scala - stehen für Verbesserungen zur Verfügung.

Die funktionale Programmierung hat für einige Entwickler einen zentralen Reiz, sagt Scala-Gründer Martin Odersky: "Die Programmierer in diesem Segment mögen die funktionale Programmierung, weil sie den Code klarer und besser strukturiert macht und viele Fehlerklassen verhindert." Einige argumentieren jedoch, dass funktionale Programmierung zu weniger effizienter Software führt.

Funktionale Programmierung erfordert auch ein neues Nachdenken über die Programmierung, sagt David Stephens, Microsoft-Programmmanager für .Net und Sprecher von F #. Abstraktionen können ein Problem sein: "Wenn Sie Code abstrakter machen, wenn Sie sich weiter von der Manipulation von Bits entfernen und explizit Schleifen durchlaufen, kann es länger dauern, diese Abstraktionen zu verstehen."

Was genau ist eine funktionale Sprache?

Bei der funktionalen Programmierung geht es im Grunde darum, Berechnungen als mathematische Funktionen zu behandeln. Zusätzlich zu den Sprachen, die von Anfang an als funktional in Rechnung gestellt wurden, sind Java und C # durch die Unterstützung von Lambda-Ausdrücken funktionsfähiger geworden.

Eine genaue Definition der funktionalen Programmierung kann jedoch schwierig zu bestimmen sein. Der Clojurefun-Blog zitiert mehrere Definitionen, die seiner Meinung nach falsch sind, einschließlich der Definition der funktionalen Programmierung als Ermöglichung eines funktionalen Stils mit Funktionen höherer Ordnung oder einer Sprache, die Lambdas unterstützt. Es heißt, die richtige Definition sei eine Sprache, die Funktionen und unveränderliche Daten hervorhebt.

Aber die bevorzugte Definition des Clojure-Blogs ist nicht unbedingt korrekt, sagen andere. "Der Autor wählt einen aus, der übrigens am besten zu Clojure passt - kein Wunder, dass dies ein Clojure-Blog ist", sagt Odersky von Scala. "Ich habe eine Interpretation, die seiner nahe kommt, aber nicht dieselbe."

Eine Funktion, sagt Odersky, ist ein Code, der Eingaben auf Ausgaben abbildet und darüber hinaus keine weiteren Auswirkungen hat. "Es ist die mathematische Definition der Funktion, die wir hier verwenden. Manchmal werden diese Funktionen 'rein' genannt, um sie beispielsweise von Funktionen in C zu unterscheiden." Eine funktionale Sprache konzentriert sich auf das Programmieren mit reinen Funktionen, was dies einfach und leistungsstark macht, sagt Odersky, der Typesafe, den Anbieter der Typesafe JVM-Anwendungsentwicklungsplattform, gegründet hat.

Funktionale Programmierung kann mit anderen Paradigmen kombiniert werden, bemerkt er. "Zum Beispiel passt funktional sehr gut zu objektorientiert. Scala ist in diesem Sinne eine funktionale Sprache. Ich stimme zu, dass nur Lambdas eine Sprache nicht funktional macht; es ist notwendig, aber nicht ausreichend."

Der Clojure-Entwickler Rich Hickey, der auch CTO beim Systementwickler Cognitect ist, stimmt einer Hauptaussage des Clojure-Blogs zu. "Der Artikel weist zutreffend darauf hin, dass es bei der funktionalen Programmierung nicht um erstklassige Funktionen oder Funktionen höherer Ordnung geht. Bei der funktionalen Programmierung geht es darum, die Programmierung der Mathematik ähnlicher zu machen", sagt er. Das heißt, es gibt immer noch ein Spektrum von Definitionen für die funktionale Programmierung, sagt Hickey.

Stephens von Microsoft sieht funktionale Funktionen, die über Sprachen allein hinausgehen. "Die beliebteste funktionale Programmiersprache der Welt ist Excel", sagt er. Ein einfaches Excel-Arbeitsblatt enthält möglicherweise eine Spalte mit einer Reihe von Werten, z. B. A1 X 2. "Dies ist eine reine Funktion von A1, und A1 ändert sich nicht. Sie berechnen also Werte aus diesen vorhandenen Daten."

Die Linq-Technologie (Language Integrated Query) von Microsoft ermöglicht auch die funktionale Programmierung. "Fast jede Programmiersprache übernimmt jetzt Funktionen aus funktionalen Sprachen."

Stephens nennt unveränderliche Daten als kritisch für die funktionale Programmierung. Parallelität - Programme mit mehreren Threads, die gleichzeitig mit Daten arbeiten - profitiert auch von unveränderlichen Daten, stellt er fest. "Wir nennen [F #] eine funktionale Erstsprache, weil sie aus einem Erbe anderer Sprachen stammt." Es unterstützt auch objektorientierte Programmierung und arbeitet mit C # und Visual Basic, sagt er.

Clojures Hickey sieht die Einführung funktionaler Sprachen als Reaktion auf den zunehmenden Druck, dem Entwickler ausgesetzt sind, die sich heutzutage größeren Problemen stellen müssen. "Um dies zu erreichen, müssen sie die zufällige Komplexität ihrer Programme reduzieren. Es ist mittlerweile allgemein anerkannt, dass der allgegenwärtige Zustand und die Nebenwirkungen eine Hauptursache für Komplexität und Fehler in Programmen sind", sagt Hickey. "Während es möglich ist, den Status in Programmen zu reduzieren, die in nicht funktionierenden Sprachen geschrieben sind, ist dies in einer Sprache, die die funktionale Programmierung idiomatisch und die Standardeinstellung macht, dramatisch einfacher und schneller."

Was kommt als nächstes für die drei wichtigsten Funktionssprachen?

Die 13-jährige Scala ist eine Hauptsprache in der Datenwissenschaft, sagt Scala-Gründer Odersky. Unterstützt von der JVM, hat es geschätzte 400.000 bis 500.000 Benutzer. Kurzfristige Pläne sehen eine Optimierung für Java 8 vor, bei der Bytecode-Anweisungen aus dem neuesten Standard-Java-Upgrade es Scala ermöglichen würden, effizienteren Code zu generieren.

Langfristig wird Scala ein bereinigtes System, sicherere Makros und mehr Plattformunterstützung erhalten, wobei ein LLVM-Compiler-Backend in Betracht gezogen wird. Weitere Verbesserungen sind geplant, um die Benutzerfreundlichkeit von Scala.js für die Kompilierung von Scala zu JavaScript zu verbessern.

Der neunjährige Clojure, der ebenfalls auf der JVM basiert, wurde laut Hickey in den Bereichen Finanzen, Einzelhandel, Software und Unterhaltung eingesetzt. "Es wurde in verschiedenen Anwendungsbereichen wie Transaktionsverarbeitung und -analyse, Big Data, Netzwerkbetrieb, Predictive Analytics, Suche, Sicherheit und Verbraucherangeboten eingesetzt."

Der 11-jährige F # wurde von Microsoft Research von Don Syme gegründet und wird von der F # Foundation betreut. Es wird in einer Vielzahl von Anwendungen verwendet und läuft unter Linux, OS X, Android, iOS, Windows und Browsern. "Wir arbeiten derzeit daran, dass es mit .Net Core funktioniert", einer plattformübergreifenden Open Source-Version des .Net Frameworks, sagt Stephens. Die Zeichenfolgeninterpolation, die das Schreiben von Zeichenfolgen erleichtert, befindet sich auf dem Zeichenbrett.