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?
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/
Warum kommt's mir nur so vor als ob diese tollen einzigartigen "Neuerungen" schon eine ganze Weile vor M$ in freier Wildbahn existierten?
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.
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
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
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)
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.
Warte auf G# oder doch lieber auf H## ??? So´n Schwachsinn !!! Ständig der Quatsch mit den neuen Programmiersprachen. Alles nur Marketing.
Ist F# eine Konsolenanwendung oder besteht auch die Möglichkeit grafische Interfaces zu erzeugen wie mit C# im Visual Studio?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.