Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03375.jsonl.gz/1

F# - Übergang zur funktionalen Programmierung
Mit F# bereichert Microsoft die .NET-Sprachenfamilie um ein neues Mitglied. Bei VS 2008 muss sie noch nachträglich installiert werden, beim kommenden VS 2010 wird sie von Anfang an fest dabei sein. Das F steht für ,,Funktional", das # deutet die sprachliche Nähe zu C# an. Als Hybridsprache soll F# die Welt der funktionalen Programmierung mit der traditionellen Welt der imperativen (prozeduralen) Sprachen vereinigen. Vorschusslorbeeren hat F# bereits reichlich erhalten.
» Von
Nach objektorientiert und dynamisch scheint funktional das neue Modewort der Programmiersprachenszene zu sein. Tatsächlich wäre ,,Wiederentdeckung" die etwas bessere Umschreibung, denn die Idee, Programmschritte ausschließlich durch Funktionen zu beschreiben, die nicht gezielt aufgerufen, sondern bei der Programmausführung angewendet werden ist natürlich nicht neu. Die Programmiersprache LISP, die bereits aus den 50er Jahren des letzten Jahrhunderts stammt, kann als die Ur-Mutter der funktionalen Sprachen betrachtet werden. In den 90er Jahren wurde das Konzept von Programmiersprachen wie Erlang (die vom Telekommunikationsunternehmen Ericsson sehr erfolgreich eingesetzt wird) und Haskell wieder aufgegriffen (als das direkte Vorbild für die Syntax von F# gilt die Sprache Ocaml). Auch wenn es von Haskell bereits sehr früh eine .NET-Implementierung gab, erst mit dem F#-Projekt, das bei Microsoft Research im "Forschungslabor" seinen Anfang nahm, gelangte die funktionale Programmierung auf den Radarschirm vieler Entwickler.
Funktional = effektiver?
Die zentrale Frage ist natürlich, welche Vorteile F# gegen über C# bringt. Funktionale Programmierung erscheint zunächst deutlich anspruchsvoller als die traditionelle imperative Programmierung, wo ein Computerprogramm aus einer Folge von Schritten besteht, die der Reihe nach abgearbeitet werden. Diese Herangehensweise wird seit Jahrzehnten angewendet und erschließt sich auch ohne, dass man einen mathematischen Background benötigt.
Bei der funktionalen Programmierung wird ein Problem dadurch gelöst, dass es durch Funktionen beschrieben wird, die sehr viel mehr mathematischen Funktionen ähneln, als es bei einer Funktion in einer imperativen Sprache wie C# der Fall ist (Listing 1, das eine Funktion zeigt, die die Quadratzahlen der Zahlen von 1 bis 10 ausgibt, gibt davon einen kleinen Vorgeschmack). Aus diesem Ansatz resultieren gleich mehrere Vorteile:
1. Der Programmcode wird deutlich kürzer und kompakter.
2. Der Programmablauf wird bezüglich seiner Korrektheit beweisbar (was bei imperativen Sprachen bezüglich ihrer ,,unendlichen" Fülle an Variationsmöglichkeiten, die durch Typenvielfalt und Seiteneffekte bedingt werden, im Allgemeinen nicht möglich ist). Klar, dass sich F# damit für Einsatzbereiche empfiehlt, in denen an die Sicherheit sehr hohe Ansprüche gestellt wird.
3. Ein funktionales Programm lässt sich deutlich leichter parallelisieren als ein Programm, das in einer nicht funktionalen Sprache geschrieben ist. Es ist vor allem der letzte Aspekt, der F# gegenüber C# attraktiv macht.
Listing 1: Ein ,,Hallo, Welt"-Programm für F# - es gibt die Quadratzahlen aus
let Quadrat x = x * x
let Zahlen = [1 .. 10]
let QuadratZahlen = List.map Quadrat Zahlen
printfn "N^2 = %A"QuadratZahlen
open System
Console.ReadKey(true)