[Uni-Passau] [FMI] [Infosun] [Lehrstuhl für Programmierung] [Lehrtätigkeit]

Was ist funktionale Programmierung?

Die Programmiersprachen kann man wie folgt einteilen. Sprachen für Spezialanwendungen, auch mit hohem Verbreitungsgrad (Datenbanken) sind darin nicht berücksichtigt. In der Vorlesung wird die funktionale Sprache Haskell verwendet, die folgende Eigenschaften hat:
Güte einiger Programmiersprachen (subjektiv)
Eigenschaft C Java Fortran Prolog LISP ML Haskell
Codeeffizienz + o + - o - o
Toolsupport + + o - - o +
Programmentwicklung - + o + - o +
Wartbarkeit - o - + - + +
I/O-Flexibilität + + o - o o o
Speicherkontrolle + o + - - - o
Seiteneffektfreiheit - - - o - o +


Ideale Anwendungsgebiete einiger Programmiersprachen:
Sprache Anwendungsgebiete
C Hardware-Treiber, Betriebssystemkern, Compiler-Zwischensprache
Java Internet-Anwendungen, Graphische Benutzeroberflächen
Fortran Lineare Algebra, Numerisches Lösen von DGl.Sys.
Prolog Spracherkennung, Theorembeweiser
LISP Skriptsprache, z.B. für Editoren, Computer-Algebra Systeme
ML Theorembeweiser
Haskell Rapid Prototyping, Compiler, Hardware-Simulation

Warum funktional programmieren?

siehe auch: Why Functional Programming Matters von John Hughes

Die funktionale Programmierung ist am leistungsstärksten für den Entwurf und die Implementierung von Berechnungsaufgaben, insbesondere solcher symbolischer Natur. Die funktionale Programmierung ermöglicht es, ein Programm als Komposition von Funktionsblöcken zu konstruieren und relativ schnell eine ausführbare Implementierung zu bekommen. Man kann dann die Implementierung schrittweise an den Stellen verfeinern, die effizienzkritisch sind.

Funktionale Programme galten lange Zeit als ineffizient und inflexibel. Die Situation hat sich inzwischen durch die Verfügbarkeit leistungsfähiger Compiler geändert. In Extremfällen kann auch eine Implementierung kleiner Programmteile in einer hardwarenahen Programmiersprache wie C in Erwägung gezogen werden. Die Verbindung zwischen Haskell und C läuft in solchen Fällen über ein Programmiersprachen-Interface.

Besonders wichtig ist das Erlernen fortgeschrittener funktionaler Programmiertechniken. Die direkte Übertragung imperativen Programmierstils in die funktionale Programmierung führt zu ineffizienten und schwer lesbaren Programmen. In der modernen funktionalen Programmierung werden Rekursionen durch ausdrucksstarke Programmskelette ersetzt und es stehen effiziente Datenstrukturen zur Verfügung. Die Implementierung funktionaler Programmiersprachen ist allerdings noch lange nicht ausgereizt, deshalb muß man zur Zeit noch Effizienzeinschränkungen gegenüber hardwarenahen Implementierungen in C oder Fortran in Kauf nehmen. Der Vorteil der funktionalen Programmierung liegt aber in der wesentlich kürzeren Entwicklungszeit.

(C)opyright by University of Passau