Quote:
Originally Posted by antrix99
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+2 ]
c++ ca. 1.5s => 2s (WTF !)
PHP Code:
int main() { int *y = new int [30000001] ; for (int x = 0;x<30000000;x++) y[x]=x+2 ; }
AutoIt ca. 121.532s => 122s (WTF ?)
PHP Code:
Dim $y1[15000000] Dim $y2[15000001]
For $x = 0 To 14999999 $y1[$x] = 2 + $x Next
For $x = 15000000 To 30000000 $y2[$x-15000000] = 2 + $x Next
2. Test Möglichst viele Funktionsaufrufe in 10 sek
F# ca. 41050
PHP Code:
for i = 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 = 0 ; i< 999999999;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
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 := x+1 // 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
x := 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
x := x+ ref (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 ...