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 ausnutzen 🙂

    Ich 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 einsetze

    Nachteile:
    - 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 wichtig

    Vorteile:
    - Kann alles machen was ich in C# auch kann, nur anders geschrieben (brauch also nicht bei 0 anfangen)
    - Man ist die schei* klammern '{ }' fast los 🙂 Ich mag die nicht
    - Man kann, wenn man es beherscht, performance kritische sachen in eine F# lib auslagern und in C# verwenden

    PS. 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 das mutable mit dem := ? Ist das wegen .NET-Interop?



  • mutable habe ich auch schon in OCaml gesehen.



  • Ja, es gibt mutable Recordelemente, aber keine mutable 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 keine mutable Variablen.

    Wie in C++.



  • EOutOfResources schrieb:

    Bashar schrieb:

    Ja, es gibt mutable Recordelemente, aber keine mutable 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.


Anmelden zum Antworten