|
News:
|
|
Das, was F# verspricht, wurde von Haskell, Ocaml und Co. schon besser realisiert. Vielleicht hilft: http://neilmitchell.blogspot.com/2008/12/f-from-haskell-perspective.html
– knivil 20.09.2009
|
||
|
Ach ja, laut FAQ ist das eine sehr schlechte Frage.
– knivil 20.09.2009
|
||
|
@knivil, ja hast schon recht :/
– MyWorld 20.09.2009
|
|
|
|
|
|
Metaprogrammierung = Reflektion oder nicht?
"Für jeden Bereich seine eigene Spezielle Sprache ausnutzen!" Du sagst es. Aber wer soll alle speziellen Sprachen beherrschen? Nur ein wenig können reicht nicht aus ;) – gfoidl 20.09.2009
|
||
|
Vorteile von F#:
- funktionale Sprache wie Lisp oder Haskell (nothing special) Nachteile von F#: - gebunden an Microsoft - gebunden an eine virtuelle Maschine In anderen Sprachen habe ich die Moeglichkeit Machinencode zu erzeugen. So kann ich auch fuer andere Plattformen entwickeln und bin weniger eingeschraenkt. – knivil 21.09.2009
|
Ein praktischer Feature schein dass Einheiten zu den Variablen gespeichert werden können und somit der Compiler prüfen kann ob die Zuweisungen korrekt sind.Aehm, ist nichts neues und kann auch mit Boardmitteln in C++ schoen implementiert werden, siehe: boost MPL.
Schönes Feature aber hat das praktisch Relevanz? NeinNaja, die Marssonde ist abgestuerzt, weil das eine System mit Fuss und das andere mit Meter gerechnet hat. Koppelt man den Wert an eine Einheit, so findet man Bugs schon zur Kompilezeit (naja fuer C++ braucht man es nicht mal explizit in die Sprache aufnehmen).
Ist die Realität aber nicht durch Objekte besser zu beschreiben?Dude, not every problem is an object.
ich nun eine mathematische Formel als Einzeiler codieren kann oder nicht ist für mich auch nicht entscheidend.Fuer mich schon. Untersuchungen haben ergeben, dass im Schnitt 1 Programmierfehler alle 10 Zeilen (oder 20 oder 100 oder .. habe ich vergessen) auftritt, ganz unabhaengig von der Programmiersprache. Logische Konsequenz ist: Weniger Codezeilen => weniger Fehler. Oder wie viel Zeilen brauchst du fuer Hanoi? In Haskell:
dohanoi(0, _, _, _) = []
dohanoi(n, from, to, using) = dohanoi(n - 1, from, using, to) ++
[(from, to)] ++ dohanoi(n - 1, using, to, from)
hanoi(n) = dohanoi(n, 1, 3, 2)
Ich habe mich nicht intensiv mit F# beschäftigt und daher kann es sein dass ich wesentliche Kernpunkte der Sprache falsch aufgefasstWenn du F# durch Funktionale Sprache ersetzt, dann hast du wesentliche Kernpunkte nicht verstanden. Bestes Beispiel: in Haskell gibt es eine Library QuickCheck. Diese bietet weit mehr als jedes Unit-Test-Toll dir in anderen Sprachen (und das ist erst der Anfang). Auch stammt Funktionale Programmierung nicht aus den 80er, sondern ist so alt wie Lisp (ca. 1960). Als theoretische Grundlage dient das Lambda-Kalkuel (also noch aelter). Und frage dich doch mal selbst: Warum nehmen moderne Sprachen wie C++, Java oder C# immer mehr funktionale Elemente in ihre Sprache mit auf?
|
|
|
Huch, das sollte ein Kommentar zu Günther werden, leider kann ich nichts mehr rueckgaengig machen.
– knivil 20.09.2009
|
||
|
"Dude, not every problem is an object"
Kommt auf die Modellbildung darauf an - es lässt sich alles als Objekt darstellen. "dass im Schnitt 1 Programmierfehler alle 10 Zeilen" Ist wahrscheinlich falsch interpretiert. Logischer/sinnvoller wäre "im Schnitt 1 Fehler pro 10 Anweisungen". In einer Formel als Einzeiler lassen sich genauso viele Fehler einbauen wie in einem Mehrzeilen - daher finde ich / Anweisung passender. Danke für den Kommentar. Ist ein wertvolle Ergänzung zu meiner Kritik. – gfoidl 20.09.2009
|
||
| 1 |
"im Schnitt 1 Programmierfehler alle 10 Zeilen". Dh. wenn ich mein C#-Programm als 1Zeiler schreibe, hab ich 0 Fehler drin? Wow .. danke für den Tip!
– Floyd 20.09.2009
|
|
|
Hier eine Kurzreferenz: http://amartester.blogspot.com/2007/04/bugs-per-lines-of-code.html
– knivil 21.09.2009
|
||
|
Die Kernaussage stimmt, aber die Definition pro Zeile ist statistisch nicht sinnvoll. Besser ist und bleibt - wie schon oben erwähnt - die Angabe pro n x Anweisung. [Sarkasmus]Ist halt eine amerikansiche Studie ;)[/Sarkasmus]
– gfoidl 21.09.2009
|
int DoSomething()
{
return DoA(5)+ DoB(6);
}
|
|
|
return DoA(5)+ DoB(6);...und DoA und DoB müssen in dieser Reihenfolge ausgeführt werden...
Ist es schlechtes Beispiel denn die Addition ist kommutativ und das sollte auch in Programmen so sein ;) – gfoidl 20.09.2009
|
||
|
Das ist ja der Witz dabei. Obwohl '+' kommutativ ist kann es sein, dass DoA() einen Zustand ändert, der in die Berechnung von DoB() einfließt.
Daher schreibt der C# Standard die "links nach rechts"-Ausführung vor. In funktionalen Sprachen ist so eine Vorschrift natürlich sinnlos. – Michri 20.09.2009
|
|
|