Forum: PC-Programmierung Programmiersprache F#


von Student (Gast)


Lesenswert?

Ich studiere gerade E-Technik mit Spezialisierung auf hardwarenaher 
Software und bin jetzt im neuen Visual Studio auf F# gestoßen.

Hat jemand von euch Erfahrungen mit der Programmiersprache F#?

Für welchen Einsatzbereich wurde diese Sprache vorallem entwickelt? 
Macht diese Sprache im technischen Bereich Sinn, oder sollte man hier 
lieber auf die herkömmlichen Sprachen wie C, C++ etc. zurück greifen?

Welchen Zukunftschancen seht ihr in dieser Sprache?

von Arc N. (arc)


Lesenswert?

Student schrieb:
> Ich studiere gerade E-Technik mit Spezialisierung auf hardwarenaher
> Software und bin jetzt im neuen Visual Studio auf F# gestoßen.
>
> Hat jemand von euch Erfahrungen mit der Programmiersprache F#?
>
> Für welchen Einsatzbereich wurde diese Sprache vorallem entwickelt?
> Macht diese Sprache im technischen Bereich Sinn, oder sollte man hier
> lieber auf die herkömmlichen Sprachen wie C, C++ etc. zurück greifen?
>
> Welchen Zukunftschancen seht ihr in dieser Sprache?

Auch wenn's nach Werbung klingt:
F# ist imo eine der z.Z. besten Programmiersprachen überhaupt, da sie 
zum einem eine gute, rein funktionale Sprache ist, zum anderen auch die 
Möglichkeit bietet, wenn es erforderlich ist, imperativ oder 
objektorientiert zu arbeiten.
Für wissenschaftliche/technische Anwendungen hat gerade die funktionale 
Seite einige Vorteile: Zum einen ist die Syntax (wesentlich) näher an 
der mathematischen Darstellung (und kürzer), zum anderen gibt es etliche 
Details in F# (und z.T. anderen funktionalen Sprachen) wie:
- REPL: Repeat-Evaluate-Print-Loop, zum schnellen ausprobieren/testen
- Units of Measure (Maßeinheiten, die bspw. einem Parameter "mitgegeben" 
werden und auch verrechnet werden d.h. wenn irgendwo <kg> gefordert ist, 
kann man kein <lb> übergeben)
- Operator overloading inkl. Definition eigener Operatoren
- Type inference: Der Compiler berechnet den Typ bspw. einer Funktion 
und man braucht diese nicht selbst nochmals mit dazu zuschreiben,
- Automatic Generalization: Der Compiler erzeugt autom. generische 
Funktionen, wenn es zulässig ist let max a b = if a > b then a else b 
ist autom. für alle Typen def. die > unterstützen.
- Pattern matching
- Asynchronous Workflows: Sehr einfache Möglichkeit parallele Tasks 
auszuführen und die Ergebnisse einzusammeln
- Type extensions, object expressions, code quotations, scripting etc.
die die Arbeit stark vereinfachen.
Zukunftsaussichten: Rosig, die Community wächst und gedeiht prächtig, 
auch andere Bereiche wie z.B. der Finanz/Banksektor setzen vermehrt auf 
F# und andere funktionale Sprachen.
Interessant ist bspw. auch sowas: 
http://blogs.msdn.com/dsyme/archive/2008/10/24/from-parallel-f-to-parallel-fpgas-from-avalda.aspx

Die Standardlinks zu F#:
http://blogs.msdn.com/dsyme/
http://cs.hubfs.net/
http://fsharpnews.blogspot.com/
http://feeds.feedburner.com/planet_fsharp?format=xml
http://www.ffconsultancy.com

Bücher:
F# for Scientists
http://www.amazon.com/F-Scientists-Jon-Harrop/dp/0470242116/ref=sr_1_7?ie=UTF8&s=books&qid=1274559467&sr=8-7

F# for Technical Computing (bzw. die nächste Auflage)
http://www.ffconsultancy.com/products/fsharp_for_technical_computing/

Expert F#
http://www.amazon.com/Expert-F-2-0-Definitive-Guide/dp/1430224312/ref=sr_1_1?ie=UTF8&s=books&qid=1274559467&sr=8-1

Anwendung:
http://vslab.codeplex.com/

von Zwie B. (zwieblum)


Lesenswert?

Warum kommt's mir nur so vor als ob diese tollen einzigartigen 
"Neuerungen" schon eine ganze Weile vor M$ in freier Wildbahn 
existierten?

von Arc N. (arc)


Lesenswert?

Zwie Blum schrieb:
> Warum kommt's mir nur so vor als ob diese tollen einzigartigen
> "Neuerungen" schon eine ganze Weile vor M$ in freier Wildbahn
> existierten?

DFTT aber dennoch, welche?
wenn mit "freier Wildbahn" der wissenschaftliche Elfenbeinturm gemeint 
ist, dann müsste man sogar zustimmen. Funktionale Programmiersprachen, 
die auch von großen Firmen unterstützt werden, gibt es, bis auf das 
wenig erfolgreiche Erlang, nicht. Zudem fehlt den restlichen Sprachen 
aus diesem Bereich das passende Framework bzw. die Integration. Die 
einzigen Sprachen die sowas zurzeit bieten sind Clojure, F# und  Scala.
Zum anderen gibt es in diesem Bereich schon seit längerem keine 
wirklichen Neuerungen mehr, die Grundlagen sind größtenteils schon seit 
den 50er und 60er Jahren bekannt. Was es aber gibt, sind neue 
Kombinationen und Verbesserungen, dazu zählen u.a. die o.a. Punkte.

von Daniel -. (root)


Lesenswert?

Student schrieb:
> Ich studiere gerade E-Technik mit Spezialisierung auf hardwarenaher
> Software und bin jetzt im neuen Visual Studio auf F# gestoßen.

wenn die Betonung auf hardwarenah liegt, dann kann man ausser
C selten etwas anderes gebrauchen.

>
> Hat jemand von euch Erfahrungen mit der Programmiersprache F#?
>

nur vom Namen. Und zwar schon vor einer langen Zeit.

> Für welchen Einsatzbereich wurde diese Sprache vorallem entwickelt?
> Macht diese Sprache im technischen Bereich Sinn, oder sollte man hier
> lieber auf die herkömmlichen Sprachen wie C, C++ etc. zurück greifen?
>
> Welchen Zukunftschancen seht ihr in dieser Sprache?

schwer zu sagen. Ich würde schauen wieviele unabhängige Parteien
Compiler/Interpreter bereitstellen, wie gross die Community ist und
welche Tools stark darauf aufbauen.

Aus meiner Sicht würde ich jedem eine
- traditionelle imperative (C,Pascal)
- imperative OO (C++,Java,C#)
- funktionalle (Haskell, Scheme, Clisp)
- und zuletzt eine saubere Allzweck Skriptsprache (Python, Ruby)
empfehlen.

Aus jeder Gruppe reicht natürlich eine ;)
Damit kann man sehr viel abdecken

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ich finde funktionale Programmierung auch Klasse. Leider gilt sie immer
noch als exotisch, so dass man sie in der professionellen Software-
entwicklung kaum einsetzen kann. Insbesondere dann, wenn man im Team
programmiert, sind nach wie vor die Klassiker C, C++ und Java (für
Web-Anwendungen zusätzlich noch Perl, PHP, Python und Ruby) angesagt.

Auch wenn die funktionale Programmierung bisher kaum in die Industrie
Einzug gehalten hat, ist sie doch ein sehr aktuelles Forschungsthema,
da sie neben einigen anderen Vorteilen die Codeverifikation und die
Entwicklung paralleler Algorithmen sehr gut unterstützt.

Obwohl es mittlerweile fast mehr funktionale Programmiersprachen als
Programmierer zu geben scheint, schickt nun Microsoft mit F# noch eine
weitere ins Rennen. Wenn ich das richtig verstanden habe, ist F# ein
abgespecktes Ocaml mit ein paar kleineren zusätzlichen Features, wie
bspw. die von Arc Net angesprochenen Units of Measure. F# wird also
zunächst einmal vor allem das Funktionalsprachenbabylon vergrößern. Da
F# an .NET und damit an Windows gebunden ist, sind zudem die Einsatz-
möglichkeiten eingeschränkt. Alles in allem wird die Sprache deswegen
nur wenige eingefleischte Ocaml- oder gar Haskell-Programmierer hinter
dem Ofen hervorlocken.

Trotzdem sehe ich es durchaus positiv, dass Microsoft neuerdings F#
zusammen mit dem Visual Studio ausliefert:

- Wenn ein Softwareriese F# "für jeden" anbietet, erkennen die Leute
  (hoffentlich), dass funktionale Programmierung nicht die Domäne von
  ein paar abgespaceten Wissenschaftlern sein muss.

- Dadurch, dass F# bei VS ohne Mehraufwand einfach mitinstalliert wird,
  wird der eine oder andere VS-User sicher dazu bewegt, sich die Sache
  in einer ruhigen Stunde wenigstens einmal anzuschauen. Vielleicht
  merkt er dann, dass F# durchaus seinem Geschmack entspricht und steigt
  dann intensiver in das Thema ein.

- Ist der Bann des Unheimlichen erst einmal gebrochen, könnte das der
  funktionalen Programmierung insgesamt einen Schub nach vorne geben,
  was dann auch anderen Funktionalsprachen zugute käme.

Ich selbst habe mit F# keine Erfahrungen und bitte deswegen um Nachsicht
und Korrektur, wenn ich oben Müll geschrieben habe.

Beruflich kann ich aus o.g. Gründen keine Funktionalsprachen einsetzen,
allerdings beschäftige ich mich in meiner Freizeit hin und wieder mit
Haskell. Nicht nur das Programmierparadigma, sondern auch die äußerst
elegante Syntax dieser Sprache haben mich sehr überzeugt. Ich kenne
jedenfalls keine andere Sprache, in der man Algorithmen so kurz und
gleichzeitig so verständlich¹ formulieren kann.



Zu den Ursprungsfragen, die ich mangels Kenntnis von F# allgemein für
Funktionalsprachen beantworten möchte:

> Für welchen Einsatzbereich wurde diese Sprache vorallem entwickelt?

Funktionalsprachen sind vor allem dort interessant, wo komplizierte und
deswegen schwer zu durchschauende Algorithmen programmiert werden. Durch
die deklarative, mathematikähnliche Notation verliert man nicht so
schnell den Überblick wie bei imperativen Sprachen. Das Debuggen zur
Laufzeit ist etwas schwieriger, dafür sieht man bei aufmerksamem Durch-
lesen des Quellcodes leichter, ob das Programm das Gewünschte tut. Da
zudem viele typische, aus der imperativen Programmierung bekannte
Fehlerquellen in der funktionalen Programmierung gar nicht erst
existieren, werden meist deutlich weniger Edit-Compile-Test-Zyklen
benötigt, bis ein Programm fehlerfrei läuft.

Sind die entwickelten Programme zwar groß und komplex, aber algorith-
misch nicht sehr anspruchsvoll, ist aber auch die objektorientiete
Programmierung ein adäquates Mittel, den Überblick zu behalten.

> Macht diese Sprache im technischen Bereich Sinn, oder sollte man hier
> lieber auf die herkömmlichen Sprachen wie C, C++ etc. zurück greifen?

Was meinst du mit dem "technischen Bereich"? Ein paar Beispiele:

- Bei einfachen Mikrocontrollersteuerungen können Funktionalsprachen
  ihre Vorteile gegenüber C nicht ausspielen, haben aber einen deutlich
  höheren Ressourcen-, vor allem Speicherbedarf. Auch für direkte
  Hardwarezugriffe, Detailoptimierungen (ggf. mittels Inlineassembler)
  ist C viel geeigneter.

- Für PC-basierte Steuerungen größerer Anlagen bieten sich objektorien-
  tierte Sprachen an. Ich würde C++ nehmen, weil man damit bei Bedarf
  immer noch die Hardwarenähe und das gute Echtzeitverhalten von C hat.

- Ein hochoptimierendes FPGA-Synthesetool oder ein intelligenter Auto-
  router für Leiterplatten wären aber in meinen Augen Beispiele, wo
  funktionale Programmierung die Entwicklungszeit beträchtlich verkürzen
  könnte.

> Welchen Zukunftschancen seht ihr in dieser Sprache?

Dass die funktionale Programmierung zwar langsam, aber stetig im Kommen
ist, sieht man daran, dass fast alle der neueren Universalprogrammier-
sprachen (z.B. Python, D und C#) zumindest ansatzweise einige Elemente
funktionaler Programmiersprachen zur Verfügung stellen. Damit ist eine
allmähliche "Gewöhnung" der Programmierer an die neuen Konzepte möglich,
bis irgendwann der Sprung zu einer echten Funktionalsprache vielleicht
gar keiner mehr ist.

Und alleine die Tatsache, dass F# von Microsoft kommt und von dieser
Firma aktiv unter die Leute gebracht wird, gibt dieser Sprache die
Chance, die erste "Mainstream"-Funktionalsprache zu werden. Selbst C#,
das im Vergleich zu F# völlig langweilig und im Vergleich zu C++ und
Java sprachlich kaum wesentliche Neuerungen gebracht hat, hat sich in
kurzer Zeit einen relativ großen Anhängerkreis geschaffen.

Die Frage ist allerdings, wieviele Programmierer überhaupt aus der
funktionalen Programmierung einen Nutzen ziehen können. Das sind vor
allem diejenigen, die es gewohnt sind, in mathematischen Strukturen zu
denken. Da aber bei weitem nicht alle Programmierer Akademiker sind,
dürfte der Umstieg den meisten sehr schwer fallen, wenn nicht sogar
unmöglich sein.

——————————————
¹) zumindest für Leute, die mit der Notation der Mathematiker einigerma-
   ßen vertraut sind

von Goon (Gast)


Lesenswert?

Yalu X. schrieb:
> ¹) zumindest für Leute, die mit der Notation der Mathematiker einigerma-
>    ßen vertraut sind

Damit habe ich als Nicht-Akademiker ohne Abi so meine Probleme. Kannst 
du eventuell (Web-)Lektüre empfehlen, die einem wie mir das Nachholen 
ermöglicht?

Zum Tread:

Habe zuvor noch nie von F# gehört, werds mir aber mal anschauen. (Yalu 
orakelt da ganz richtig, glaube ich)

von High Performer (Gast)


Lesenswert?

Eine neue, plattformabhängige Sprache eines Herstellers, der bislang 
nicht allzu sehr von freien Systemen angetan ist, muss sehr kritisch 
betrachtet werden. Mehr möchte ich dazu nicht sagen.

von Zwie B. (zwieblum)


Lesenswert?

ceterum censeo redmond esse delendam

von visitor (Gast)


Lesenswert?

Warte auf G# oder doch lieber auf H## ??? So´n Schwachsinn !!!

Ständig der Quatsch mit den neuen Programmiersprachen. Alles nur 
Marketing.

von Marc (Gast)


Lesenswert?

Ist F# eine Konsolenanwendung oder besteht auch die Möglichkeit 
grafische Interfaces zu erzeugen wie mit C# im Visual Studio?

von Arc N. (arc)


Lesenswert?

High Performer schrieb:
> Eine neue, plattformabhängige Sprache eines Herstellers, der bislang
> nicht allzu sehr von freien Systemen angetan ist, muss sehr kritisch
> betrachtet werden. Mehr möchte ich dazu nicht sagen.

http://www.microsoft.com/downloads/details.aspx?FamilyID=444005fb-e627-4feb-b51d-13d6a3b4b8ed&displaylang=en
Compiler und Libs gibt's als Sourcecode


Marc schrieb:
> Ist F# eine Konsolenanwendung oder besteht auch die Möglichkeit
> grafische Interfaces zu erzeugen wie mit C# im Visual Studio?

Es gibt weder UI-Designer im VS noch kann Expression Blend F#-Code 
erzeugen, wenn das die Frage war. Es ist aber problemlos möglich den 
meist sehr überschaubaren UI-Teil in C#, VB zu machen und den Rest in F# 
(man kann natürlich auch alles "per Hand" in F# machen).
http://blogs.msdn.com/b/dsyme/archive/2008/01/05/learning-wpf-through-f-and-vice-versa-by-john-liao.aspx
http://code.msdn.microsoft.com/fsharpsamples

von Daniel -. (root)


Lesenswert?

Yalu X. schrieb:
> Dass die funktionale Programmierung zwar langsam, aber stetig im Kommen
> ist, sieht man daran, dass fast alle der neueren Universalprogrammier-
> sprachen (z.B. Python, D und C#) zumindest ansatzweise einige Elemente
> funktionaler Programmiersprachen zur Verfügung stellen. Damit ist eine
> allmähliche "Gewöhnung" der Programmierer an die neuen Konzepte möglich,
> bis irgendwann der Sprung zu einer echten Funktionalsprache vielleicht
> gar keiner mehr ist.

wobei ich eine hybride Sprache eher bevorzuge. Mir ist übrigens
aufgefallen, dass Python auch von Haskell inspiriert worden ist.
"list comprehension" ist mit etwas anderer Syntax abgekufpert worden,
lambda,map,tuple,module,import... sind andere Beispiele.
Man kann sich mit lambda eine partielle Funktion basteln,
ala map(lambda x: f(a,x,b), somelist). Oder soetwas wie currying
log = lambda base: lambda x: log10(x)/log10(base), wo log(2) eine
weitere Funktion zurückgibt. Das ist zumindest ähnlich zu Haskell
log::Double->Double->Double

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.