D erobert die Welt



  • C>J schrieb:

    rapso schrieb:

    oder welches sprach feature von c# macht es gegenueber java ueberlegen als sprache?

    Properties, generics, events, extension methods, linq, TAP.

    Properties sind Unfug, getter/setter lösen das vollständig und besser.

    Events ebenso unfug, gibt simple Entwurfsmuster dafür.

    Extension methods sind doof wie goto.

    linq ist Fehl am Platz so halb zwischen Sprache und Datenbank.

    TAP ist nur die Antwort auf die inhärente Langsamkeit vobn javaesken Sprachen, also eigentlich Müll, aber wenn man Java gegen C# vergleicht, ein Pluspunkt für C#, fürchte ich. Oder hat's Java schon nachgezogen?



  • volkard schrieb:

    Properties sind Unfug, getter/setter lösen das vollständig und besser.

    a.setValue(a.getValue() + 2); // vs
    a.Value += 2;
    

    Was ist an Variante 1 besser? Einfache Sachen sollten einfach zu schreiben sein. Getter und Setter sind und erzeugen einfach nur Boilerplate Code.

    volkard schrieb:

    Events ebenso unfug, gibt simple Entwurfsmuster dafür.

    For-Schleifen sind Unfug, gibt simple Entwurfsmuster dafür.

    volkard schrieb:

    Extension methods sind doof wie goto.

    Weil?

    volkard schrieb:

    linq ist Fehl am Platz so halb zwischen Sprache und Datenbank.

    Linq hat eigentlich nur am Rande was mit Datenbanken zu tun.

    volkard schrieb:

    TAP ist nur die Antwort auf die inhärente Langsamkeit vobn javaesken Sprachen, also eigentlich Müll, aber wenn man Java gegen C# vergleicht, ein Pluspunkt für C#, fürchte ich.

    TAP hat nichts mit der Geschwindigkeit der Sprache zu tun. Wenn dein Code darauf warten muss dass das Garagentor offen ist, dann muss er das halt. Egal in welcher Sprache (C++ soll ja auch resumable functions bekommen).



  • Es lohnt nicht mit volkard zu "diskutieren" - der lebt noch in der Steinzeit...



  • Arcoth schrieb:

    Ich kann mir schon vorstellen, dass das in D weniger ein Krampf ist, zur Compilezeit mit Stringliteralen was zu machen im Vergleich zu den variadischen literal operator templates in C++11.

    Bitte auf C++14 beziehen. Und zur Compilezeit mit Strings zu arbeiten ist gar nicht so unbequem. Hier ist bspw. eine ganze Implementierung eines std::string -Äquivalents.

    Sieht gut aus. Ich wusste nicht, was constexpr seit C++14 alles so erlaubt. Da fragt man sich langsam, warum man da überall noch constexpr dranschreiben muss. Alexandrescu hatte in seinem letzten Interview (cpp podcast) genau das beklagt.

    Arcoth schrieb:

    Ich mag D trotzdem nicht anfassen.

    Natürlich nicht, schließlich heißt es nicht Rust.

    Keine Ahnung, was Du mit Weglassen meiner Begründung aus dem Zitat und diesem Kommentar bezweckt hast...

    rapso schrieb:

    oder welches sprach feature von c# macht es gegenueber java ueberlegen als sprache?

    Ich habe von diesen zwei genannten Sprachen nur Java benutzt und das ist auch schon eine Weile her. Aber ich denke, die Tatsache, dass man als C# Programmierer auch "Wert-Typen" über struct konstruieren kann und nicht auf "Referenz-Typen" ( class ) beschränkt ist, ist ein Pluspunkt.

    Da gibt es z.B. die Software "SDR#", die genau das ausnutzt und für komplexe Zahlen ein struct verwendet. Diese Software verarbeitet digitale komplexwertige Signale in Echtzeit mit SDR-typischen Abtastraten im Megahertzbereich. In Java könntest Du dir eine Abstraktion der komplexen Zahlen in Form einer Klasse nicht erlauben, weil Dir damit eine Indirektion aufgezwungen wird und Arrays vom Typ Complex[] nur Referenzen speichern würden. Für ein Cache-freundlicheres Speicherlayout könntest Du stattdessen double[] verwenden und Real- und Imaginärteil manuell verzahnen. Das ist doch aber extrem schade, dass man aus Performancegründen in Java auf eine Abstraktion verzichten muss. Dass C# dann noch Operatorüberladung erlaubt, ist hier auch noch praktisch.

    Das ist jetzt das, was mir zuerst zum Thema Java versus C# einfällt.



  • krümelkacker schrieb:

    rapso schrieb:

    oder welches sprach feature von c# macht es gegenueber java ueberlegen als sprache?

    Ich habe von diesen zwei genannten Sprachen nur Java benutzt und das ist auch schon eine Weile her. Aber ich denke, die Tatsache, dass man als C# Programmierer auch "Wert-Typen" über struct konstruieren kann und nicht auf "Referenz-Typen" ( class ) beschränkt ist, ist ein Pluspunkt.

    Ja, Value Semantics und (gewissermaßen als notwendige Folge davon) richtige Generics sind sicherlich die zwei Großen. Leider sind beide Sprachen von GC geplagt...



  • Th69 schrieb:

    Es lohnt nicht mit volkard zu "diskutieren" - der lebt noch in der Steinzeit...

    Ich hüpfe nicht jedem noch so dummen Zeitgeist hinterher.



  • Nachdem ich mir nun endlich mal die Neuerungen in C# 6 angeschaut habe frage ich mich ob die auch nur im entferntesten drüber nachdenken was sie da tun.

    Klar gibt es schöne Features die hinzukommen. Aber zum Beispiel die String Interpolation mittels "$" finde ich sehr suspekt. Ich baue doch in C# keinen String in dem ich fest Variablenbezeichner verwende.

    Beispiel:

    Person person = new Person("Hans", "Peter");
    var data = $"Hallo person.FirstName";
    

    zum Glück ist man aber auch nicht gezwungen die neuen Compiler-Features zu verwenden.

    Im gegenzug dazu finde ich allerdings das neue "nameof()" recht interessant.

    Ich kann also im allgemeinen auch volkard verstehen, wenn er sagt das er nicht jedem Trend hinterer rennt.



  • volkard schrieb:

    Ich hüpfe nicht jedem noch so dummen Zeitgeist hinterher.

    Hast recht! Ich benutze auch noch C++ 98 (und nicht diesen neumodischen Kram ;-).



  • inflames2k schrieb:

    Person person = new Person("Hans", "Peter");
    val data = $"Hallo person.FirstName";
    

    val ?
    Oder meinst du var ?

    Und was hast du gegen String Interpolation?
    Mal abgesehen davon dass es ohne Escape-Character doof ist.

    =>

    Person person = new Person("Hans", "Peter");
    var data = $"Hallo {person.FirstName}";
    

    Sieht doch gleich viel besser (und VIEL weniger problematisch) aus!



  • hustbaer schrieb:

    =>

    Person person = new Person("Hans", "Peter");
    var data = $"Hallo {person.FirstName}";
    

    Sieht doch gleich viel besser (und VIEL weniger problematisch) aus!

    Und das $ ist fast ein Bißchen ist netter als das pythonische .format.

    data = "Hallo {pfn}".format(pfn=person.FirstName)
    

    Wenn ich jetzt sagen würde, daß

    string data = "Hallo " + person.firstName;
    

    auch nicht extrem häßlich wäre, würde ich wieder ausgeschimpft und einen alten Sack genannt werden, gell?

    Th69 darf auch schreiben

    auto data = "Hallo " + person.firstName;
    

    und sich darauf einen runterholen, daß er ein C++11-Mittel benutzt hat.



  • inflames2k schrieb:

    Klar gibt es schöne Features die hinzukommen. Aber zum Beispiel die String Interpolation mittels "$" finde ich sehr suspekt. Ich baue doch in C# keinen String in dem ich fest Variablenbezeichner verwende.

    So wie ich das bei MSDN (Kapitel String Interpolation) verstanden habe (habs selbst noch nicht ausprobiert) wird das aber durch die IDE vollständig unterstützt (also mit Intellisense, Fehlermeldungen und Highlighting). Das wäre schon ein rießen Plus gegenüber dem normalen String.Format, weil man da oft erst zur Laufzeit Fehler bemerkt...

    volkard schrieb:

    Wenn ich jetzt sagen würde, daß

    string data = "Hallo " + person.firstName;
    

    auch nicht extrem häßlich wäre, würde ich wieder ausgeschimpft und einen alten Sack genannt werden, gell?

    Wird halt bei mehreren Objekten schnell unübersichtlich wegen den ganzen Auftrennungen und extra Operatoren. Vor allem kann man so aber halt keine Format-Specifier mitgeben, etc. Ist aber natürlich auch Geschmacksache, bei so einem simplen Fall würd ich wahrscheinlich auch die Variante mit + verwenden.

    Am besten finde ich aber dass man endlich in catch/finally Blöcken awaiten kann - das hätte ich davor schon öfter mal gebraucht (Exception Filter sind auch nett) 👍



  • Was habe ich gegen die String Interpolation? Angefangen dabei, dass ich es merkwürdig finde Variablen fest in einem String zu verwenden über die Tatsache das sich durch Tests herauskristalisiert hat, dass die String Interpolation 5 mal langsamer ist als das reine verketten mit "+" oder die Verwendung von String.Format. War ein spezieller Fall bei dem das Auftrat, wo die Verwendung von String Interpolation fehl am Platz war.



  • inflames2k schrieb:

    über die Tatsache das sich durch Tests herauskristalisiert hat, dass die String Interpolation 5 mal langsamer ist als das reine verketten mit "+" oder die Verwendung von String.Format.

    Hm, fällt mir schwer das zu glauben, überall wo über dieses Feature berichtet wird steht eigentlich dass interpolierte Strings zur Compile-Zeit zu einem äquivalenten String.Format transformiert werden. Dementsprechend sollten die Unterschiede zumindest zu String.Format wenn überhaupt minimal sein.

    Dieser Benchmark kommt auch etwa zu diesem Schluss, 5 mal langsamer kommt mir völlig übertrieben vor. Hast du eine Quelle oder einen Beispielcode dafür?


Anmelden zum Antworten