Was haltet ihr von F# ?

06/02/2010 12:18 Shadow992#1
Ich will die Diskussion mal mit 2 Zitaten eröffnen :
Wikipedia :
Quote:
F# ist eine funktionale Programmiersprache von Microsoft für das .NET-Framework. F# ist mit den Sprachen OCaml und ML verwandt, die Syntax der Sprachen ähneln sich daher stark. Viele Programme, die ungewöhnliche Konstrukte und F#-/Caml-spezifische Bibliotheken vermeiden, können ohne Änderung mit F# und mit Caml kompiliert werden.

Neben den Bestandteilen der funktionalen Programmierung sind in F# objektorientierte sowie imperative Sprachkonstrukte enthalten.

Ursprünglich wurde F# als Forschungsprojekt von Microsoft Research entwickelt, derzeit wird es von Microsofts Entwicklungsabteilung fortgeführt. F# wird als Teil von Visual Studio 2010 erstmals offiziell unterstützt und mit ausgeliefert.[1] Außerdem ist es auch als Erweiterung zu Visual Studio 2008 erhältlich.

[...]

In F# gibt es keine Variablen, wie in anderen Programmiersprachen. Es gibt nur Funktionen, die immer denselben Rückgabewert haben. Diese werden in F# mit dem Schlüsselwort let deklariert und definiert.

Code:
let pi = 3.1415927
F# bietet Typableitung, d.h. Typen von Ausdrücken werden automatisch ermittelt. Beispielsweise bekommt pi automatisch den Typ des Gleitkommazahl-Literals zugewiesen.

let ist dabei keine Variablenzuweisung, sondern eine Deklaration, d.h. der Quelltext

Code:
    let pi = 3.1415927
    let pi = 10.0
kann nicht kompiliert werden, da der Wert pi zweimal innerhalb desselben Gültigkeitsbereichs deklariert wird. Soll der Wert einer Variablen im Programmablauf änderbar sein, muss dies bereits bei der Deklaration kenntlich gemacht werden:
Code:
    let x = ref 0 // x hat den Typ 'int ref', also ein Wert vom Typ int, der im Programmablauf
                  // geändert werden kann.
    let printX = print_any !x
    do x := 5     // An dieser Stelle im Programm wird der ursprüngliche Wert von x geändert.
    do printX
Microsoft Seite ([Only registered and activated users can see links. Click Here To Register...]) :
Quote:
Ein kleiner Teil der .NET-Programmierer weiß, dass das Erlernen einer funktionalen Sprache für .NET Framework ein Schritt in die richtige Richtung für das Schreiben leistungsfähiger Software ist. Für die anderen liegen die Beweggründe, F# zu erlernen, im Verborgenen. Inwiefern profitieren Entwickler von F#?
//Kommentar : Ich kann mir nicht vorstellen , dass dieses F# leistungsfähiger als Java bzw als C/C++ ist ... Wir werden sehen was die Zukunft so bringt ;)

In den letzten drei Jahren ist das Schreiben sicherer paralleler Programmen ein Hauptanliegen geworden, da Mehrkern-CPUs eine immer breitere Anwendung finden. Funktionale Sprachen helfen Entwicklern beim Unterstützen von Parallelität, indem unveränderbare Datenstrukturen unterstützt werden, die zwischen Threads und Computern übertragen werden können, ohne Probleme bei Threadsicherheit und atomarem Zugriff zu verursachen. Funktionale Sprachen erleichtern auch das Schreiben besserer parallelitätsfreundlicher Bibliotheken, wie z. B. asynchroner F#-Workflows, auf die unten genauer eingegangen wird.
Auch wenn Programmierer, die über beide Ohren in der objektorientierten Entwicklung stecken, möglicherweise eine andere Ansicht haben, sind funktionale Programme häufig für bestimmte Arten von Anwendungen einfacher zu schreiben und zu verwalten. Denken Sie zum Beispiel an das Schreiben eines Programms zum Konvertieren eines XML-Dokuments in ein anderes Datenformat. Sicherlich wäre es möglich, ein C#-Programm zu schreiben, dass das XML-Dokument analysiert und eine Vielzahl an Anweisungen zum Bestimmen der an unterschiedlichen Stellen im Dokument zu ergreifenden Aktionen anwendet. Ein weit besserer Ansatz besteht jedoch darin, die Transformation als XSLT-Programm (Extensible Stylesheet Language Transformations) zu schreiben. Es verwundert nicht, dass XSLT und SQL eine Vielzahl an Funktionen besitzen.
In F# wird dringend von der Verwendung von Nullwerten abgeraten, während die Verwendung unveränderbarer Datenstrukturen unterstützt wird. Diese Kombination kann die Häufigkeit von Programmierfehlern verringern, indem weniger Code für Sonderfälle benötigt wird.
In F# geschriebene Programme sind in der Regel auch kürzer. Er wird tatsächlich weniger getippt und typisiert:
Es sind weniger Tastaturanschläge nötig, und es gibt weniger Orte, an denen der Compiler Anweisungen zum Typ der Variablen, der Argumente oder des Rückgabetyps erhalten muss. Dadurch kann die Menge an zu verwaltendem Code erheblich verringert werden.

//Sorry aber auch dieser Kommentar muss sein : Mit ASM werden die Programme noch kleiner und mit Java eventuel auch . Wer sagt denn dass heutzutage jeder VB benutzt ? Dass damit die Programme nicht gerade "klein" werden mag ja sein , aber es gibt Sprachen da sind die Programme noch kleiner und kürzer
[...]
Nachdem ich mal wieder ein bisschen auf msdn gesurft bin und nach paar Windows Befehlen gesucht habe , fand ich F# . Zuerst dachte ich das ist ein schlechter Scherz oder ein Fehler , aber dann fand ich es überall ...

Was haltet ihr von dieser Sprache ? Ich finde sie etwas verrückt und unübersichtlich , da gefällt mir die alte C/C++ Syntax viel besser .
Aber ich möchte auch euere Meinung dazu hören , was haltet ihr davon ?

Edit :
Eben noch gefunden ([Only registered and activated users can see links. Click Here To Register...]) :
Quote:
F# hat folgende Eigenschaften:

* Strenge Typisierung: Jeder Datentyp ist vordefiniert. Sämtliche Konstanten und Variablen verwenden einen dieser Typen.
* Knappheit: Mit wenig Code lässt sich viel machen. Bei der Erstellung von Klassen und ähnlichen Vorgängen gibt es bei Weitem nicht so viel zu beachten wie in C# oder VB.NET.
* Bibliotheken: F# ist .NET - daher ist das Framework bereits vorhanden.
* Skalierbarkeit: Die Architektur von F# ist skalierbar, was wiederum an der .NET-Basis liegt.
* Effizienz: Laut Microsoft ist F# eine effiziente Sprache. Ob das stimmt, wird sich noch zeigen.
Diese ganzen Artikel gehen nur auf C# bzw VB ein .
Ich kennen keine dieser beiden Sprachen wirklich , aber ich werde eine gewagte (vllt. auch etwas freche) Vermutung aufstellen :
Wenn Microsoft zu "dumm" ist die Sprachen VB und C# "richtig gut" zu machen , dann ist es doch klar , das jede Sprache , die danach kommt besser und leistungsfähiger ist :D

Ich werde jetzt noch einen Speedtest machen , AutoIt vs C++ vs F# , mal schauen was F# wirklich kann ;)
06/02/2010 15:11 antrix99#2
naja also ich finde es nicht schlecht das es eine neue sprache gibt aber ist sie auch wirklich effizient einsetzbar?

was für verwendbarkeit gibt es dafür überhaupt?

also ich kann damit leider nix anfangen aber für die die den ganzen kram verstehen wird das sicher ne neue herausforderung

und ich finde..diese sprache wird nix großes reißen..vb.net und c# reichen aus um schon ordentlich sachen zu scripten..wozu dan noch F#?
06/02/2010 16:09 Shadow992#3
Quote:
Originally Posted by antrix99 View Post
naja also ich finde es nicht schlecht das es eine neue sprache gibt aber ist sie auch wirklich effizient einsetzbar?

was für verwendbarkeit gibt es dafür überhaupt?
Laut Microsoft soll sie verdammt schnell Rechnungen lösen ...

Ich habe jetzt mal 2 Tests gemacht und muss sagen , dass F# keineswegs schnell bzw effektiv ist ...
Hier die Ergebnisse :

Quote:
1. Test Länge bis das Programm beendet

F# ca. 43117ms = 43.117s => 43s (wtf ?)
PHP Code:
let evennumbers = [ for x in 0 .. 30000000 -> x+

c++ ca. 1.5s => 2s (WTF !)
PHP Code:
int main()
{
    
int *= new int [30000001] ;
    for (
int x 0;x<30000000;x++)
    
y[x]=x+;

AutoIt ca. 121.532s => 122s (WTF ?)
PHP Code:
Dim $y1[15000000]
Dim $y2[15000001]

For 
$x 0 To 14999999
    $y1
[$x] = $x
Next

For $x 15000000 To 30000000
    $y2
[$x-15000000] = $x
Next 

2. Test Möglichst viele Funktionsaufrufe in 10 sek
F# ca. 41050
PHP Code:
for 0 to 999999999 do
   
printf "%d " (i-10+i+3*50-180+(9-i)-80
C++ ca 269600
PHP Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
for (
int i i999999999;i++)
   
printf ("%d " ,(i-10+i+3*50-180+(9-i)-80));

Wie man sieht ist F# zwar noch schneller als AutoIt bzw effektiver , aber mit C/C++ kann es keineswegs mithalten .

Zum 1. Test :
AutoIt hat leider so große Arrays nicht vertragen , deswegen habe ich die Arrays aufgesplittet .
C++ hat die Arrays auch ohne Stack nicht vertragen , aber dank dem Stack war dann genug Platz da :D

Zum 2. Test :
Ich habe die For-Schleife benutzt , weil ich anscheinend zu blöde bin ne While-Schleife in F# zu machen und um gleiche Bedingungen für alle zu schaffen habe ich C++ auch mit ner Schleife gemacht .
Da AutoIt keine Konsolenfenster "anschreiben" kann habe ich AutoIt komplett weggelassen .

Fazit :
Die Sprach F# erleichter wirklich manches und ist auch Sicherheitstechnisch recht gut , aber so effizient wie Microsoft behauptet ist sie niemals ...
Hinzu kommt , dass ich manchmal echt da sas und mir dachte "Scheise Brainfuck ist Dreck dagegen ..." . Die Sprache kommt mit vielen ungewöhnlichen Regeln , die den Java/C++/AutoIt Coder dazu bringen mit dem Kopf zu schütteln , kleines Beispiel .

Es werden immer "Variablen" (sind ja eig. Funktionen) erstellt , die als konstant (also const) vom Programm angesehen werden , wenn man es nicht explizit darauf hinweist , dass der Wert der Variablen veränderbar ist .

Man kann auch nicht einfach einer Variable einen neuen Wert (mithilfe von Variablen) zu weisen :
PHP Code:
let x ref 0 // ref heist dass die Variable veränderbar ist
:= x+// Doppelpunkt steht für Wertzuweisung 
Das funktioniert nicht , man bekommt die Meldung "the type int does not match the type int ref" , macht man es so :
PHP Code:
let x ref 0 // ref heist dass die Variable veränderbar ist
:= int ref (x+1// Doppelpunkt steht für Wertzuweisung 
Gibt es den Error , dass int ref keine Funktion ist , sondern ein Typ .
Und wenn man es so probiert :
PHP Code:
let x ref 0 // ref heist dass die Variable veränderbar ist
:=  xref (1// Doppelpunkt steht für Wertzuweisung 
Dann heißt es : "The type int ref does not support any operators named +" .
Ich habe also bisher nicht herausgefunden wie man das macht , ist mir aber egal , da die Sprache echt grausam ist und mich sehr stark an Brainfuck erinnert ...

Nichts für Ungut aber die Sprache ist die Hölle und soviel Zeilen Code habe ich auch nicht gespart ...
06/02/2010 18:04 .GlaDos#4
Ich finde die sprache sehr unnötig, da microsoft schon so vile rausgebracht hat und die meisten sprachen großer schrott sind
06/02/2010 18:06 ster0#5
hmm eher fürn müll würd ich sagen...
06/02/2010 23:22 John Dillinger#6
Sowas löse ich im Kopf!
06/03/2010 01:37 Gentleman Jack#7
c++ wird noch für längere zeit die sprache bleiben
06/03/2010 16:00 Artkore#8
leider hab ich von sowas KA