F#
-
Hallo
Hat sich jemand von euch die Programmiersprache F# mal genauer angesehen? Die soll ja relativ neu sein.
Der deutsche Wikipedia Artikel sieht gut aus und ich könnte es mir durchaus vorstellen, F# kennen zulernen.let mutable x = 0 // x wird durch das "mutable"-Schlüsselwort als veränderlich gekennzeichnet x <- 5 // x wird ein neuer Wert zugewiesen printfn "%i" x // Gibt 5 aus
let x = ref 0 // x hat den Typ "int ref", ist also eine Referenz auf einen Integer x := 5 // x wird ein neuer Wert zugewiesen printfn "%i" !x // Mittels des "!"-Operators wird x dereferenziert. Gibt 5 aus.
Wow! Drei verschiedene Zuweisungsoperatoren.
let u = (3, 6) //F# unterstützt Tupel let v = (2, -3) let add (a, b) (c, d) = (a + c, b + d)
type Person = //Neue Klasse val name : string val mutable age : int new(n, a) = { name = n; age = a } //Haha! Toller CTor (erinnert mich an D) member x.Name = x.name member x.Age //Properties with get() = x.age and set(v) = x.age <- v member x.Print() = printfn "%s ist %i Jahre alt." x.name x.age
Und es ist eine Compiler- und eine Interpretersprache (Leider mit Sprachunterschieden)!
MfG, EOutOfResources
PS:
printfn "Hello World"
-
F# ist eine Multiparadigmensprache.
Das tolle an dieser Sprache ist das du es mit anderen .Net assemblies Mischen kannst.- Du kannst also eine F# assembly erstellen und sie in eine WPF C# umgebung einsetzen
- Ebenso anders herum
- Du kannst das .Net Framework komplett ausnutzenIch hatte mir um es zu lernen dieses Buch geholt:
Programming F# | ISBN: 0596153643
Aber bin noch nicht sehr weit, fehlt einfach die Zeit.
Und es gibt (für mich) gravierende nachteile warum ich es (noch) nicht mehr einsetzeNachteile:
- Direktes WPF geht, ist aber sehr fummelig
- Eine Ordner Struktur muss man selber machen durch anlegen von Verzeichnissen und editieren der Projektdatei (Was soll der schei*)
- Die Dateie reihenfolge im Projekt ist wichtigVorteile:
- Kann alles machen was ich in C# auch kann, nur anders geschrieben (brauch also nicht bei 0 anfangen)
- Man ist die schei* klammern '{ }' fast losIch mag die nicht
- Man kann, wenn man es beherscht, performance kritische sachen in eine F# lib auslagern und in C# verwendenPS. es gibt nicht nur den new() ctor
-
Das Buch war auch mein erster Treffer auf Amazon. Aber die letzten beiden Nachteile die Du genannt hast, sind doch Compiler- oder IDE-Spezifisch, nicht?
EDIT: Gross- / Kleinschreibung
-
So viel neues ist nicht in F#. Schau dir lieber das Original SML oder OCaml an. Fuer den Start wirst du wohl recht wenig in Kombination mit .Net machen. Wenn doch, dann bleibe bei C#.
-
Warum eigentlich zwei Zuweisungsoperatoren (zwei, nicht drei!)? Das
ref
, mit<-
und!
, ist aus ML, aber dasmutable
mit dem:=
? Ist das wegen .NET-Interop?
-
mutable
habe ich auch schon in OCaml gesehen.
-
Ja, es gibt
mutable
Recordelemente, aber keinemutable
Variablen.
-
EOutOfResources schrieb:
Das Buch war auch mein erster Treffer auf Amazon. Aber die letzten beiden Nachteile die Du genannt hast, sind doch Compiler- oder IDE-Spezifisch, nicht?
Fast richtig
Das mit den Ordnern ist sache der IDE only, aber die reihenfolge der Dateien muss man den Compiler irgendwie sagen, da es nur in einer richtigen reihenfolge baubar ist. Ein Objekt kennt nur objekte die schon gebaut wurden, und das "main" muss das letzte sein.VS 2010 hat den besten F# support, und selbst der kann das nicht -.-
-
EOutOfResources schrieb:
Aber die letzten beiden Nachteile die Du genannt hast, sind doch Compiler- oder IDE-Spezifisch, nicht?
F# ist auch "Compiler- oder IDE-Spezifisch"
Soweit ich das sehe, ist jedenfalls das Hauptargument für F#, dass es eine funktionale Programmiersprache ist, die von Microsoft und der Visual-Studio-IDE unterstützt wird. Also für .NET-Programmierer erste Wahl. Ansonsten wüsste ich nicht, warum ich F# gegenüber Haskell, Scala, Clojure oder was es im Moment noch so gibt bevorzugen sollte.
-
David W schrieb:
VS 2010 hat den besten F# support, und selbst der kann das nicht -.-
Wird das nächste VS F# abdecken?
Bashar schrieb:
Ja, es gibt
mutable
Recordelemente, aber keinemutable
Variablen.Wie in C++.
-
EOutOfResources schrieb:
Bashar schrieb:
Ja, es gibt
mutable
Recordelemente, aber keinemutable
Variablen.Wie in C++.
Ne, C++ hat mutable Variablen. Erkennt man am fehlenden const
-
EOutOfResources schrieb:
David W schrieb:
VS 2010 hat den besten F# support, und selbst der kann das nicht -.-
Wird das nächste VS F# abdecken?
Da hab ich mich eventuell falsch ausgedrückt.
VS 2010 Unterstützt F# 2.0 von allen IDEs die F# können am besten, aber schafft es selber nicht eine Ordner Struktur zu unterstützen.Es gibt zwar ein schönes Plugin wo man die Reihenfolge der Dateien separat verwalten kann:
http://www.hill30.com/MikeFeingoldBlog/index.php/2010/02/08/a-better-f-project-system/
Aber nichts desto trotz ist es eine ziemliche fummelei wenn das Projekt größer wird.