Java <-> C# Vergleich



  • Optimizer schrieb:

    DerDing schrieb:

    java fan schrieb:

    Für wirklich gelungen halte ich allerdings den Debugger von Visual Studio (ich sag nur Edit&Continue).

    Das geht doch mit dem Eclipse Debugger auch, wenn die änderung nicht zu schwerwiegend ist, kann man ganz einfach speichern und die Funktion nochmal debuggen.
    Kann man beim neuen VS Debugger Funktionen auswerten lassen? Kann man schön Multithreading debuggen, also die Callstacks der einzelnen Threads sehen und durch einfaches anklicken zwischen den Threads welcheln?

    Du stellst Fragen. 😉
    Der VS-Debugger ist sogar mit eigenen Debug-Ansichten erweiterbar. Zum Beispiel gibt es für std::vector eine Ansicht im Debugger, die einfach die Elemente Array-mäßig darstellt. Normalerweise sieht man da nämlich vor lauter Template-Gemurks und Implementierungsdetails überhaupt nicht mehr raus, was für Elemente im Vector drin sind. Dito eine Datentabelle. Klickst auf die Lupe und schon kommt ein neues Fenster mit einer Excel-Darstellung der Tabelle (und Editiermöglichkeit). Und man kann auch eigene Debug-Ansichten schreiben. 👍

    Du beantwortest meine Fragen nicht. 😉
    Kann man z.B. sowas während des Debuggens auswerten?

    "Hallo".length() + System.currentTimeMillis()
    

    Wie siehts mit Multithreading-Debugging aus?



  • DeX3 schrieb:

    - Ein paar Worte über die Performance:
    - Java ist von der Geschwinigkeit her eher ... naja ... laaaaaaaaaaaaaangsaaaaaaaaaaaam (obwohl ich auch durchaus komplexe Programme in Java gesehn hab die flüssig liefen
    - C# ist da schon einiges schneller (das liegt wohl am Microsoft-Bonus 🙂 )
    - Zusätzlich soll ab Windows Vista ANGEBLICH das Framework hardwarebeschleunigt laufen und später sogar die WinAPI ersetzen (ob das gut geht?? o.O)

    Wenn Du solche Behauptungen in einem Thread aufstellst, solltest Du sie auch belegen oder zumindest die entsprechenden Quellen angeben, die Dir diesbezüglich als Indizien dienen.

    Ansonsten ist Deine Aussage wertlos. ...nur Blah-Blah.

    Hier ist die Gegenbehauptung: Java muss sich gegenüber C# bezüglich der Performance ganz sicher nicht verstecken.

    Wer hat jetzt Recht?



  • DerDing schrieb:

    "Hallo".length() + System.currentTimeMillis()
    

    Freilich, kein Problem.

    Wie siehts mit Multithreading-Debugging aus?

    Alles, was du aufgezählt hast, gibt es seit VS5. Muss es ja auch, was wäre denn das, wenn ich nur den Start-Thread ansehen kann? Völlig nutzloser Müll wäre das. 🙂

    Ich denke, man kann schon mit großer Wahrscheinlichkeit davon ausgehen, dass der Debugger von VS mit einer großen Wahrscheinlichkeit zu den allerbesten zählt. Dafür kann VS in anderen Bereichen recht wenig, vor allem Code-Analyse, Refactoring und solche Dinge sind recht mager. Der GUI-Designer ist schön zu bedienen, aber leider krass verbuggt. Und er ist vom Konzept her falsch (erzeugt Instanz der Basisklasse und interpretiert seinen eigenen Code um das Panel korrekt darzustellen). Wenn man eigene Properties zuweist, setzt man die der Basisklasse, das ist sehr unintuitiv. Oft steigt der Designer auch einfach nur aus und man muss VS neu starten. Basisklasse darf nicht abstrakt oder generisch sein, Basisklasse darf nicht mal Foo<int> sein sondern man muss von Foo<int> ableiten und das IntFoo als Basisklasse für die zu designende Klasse verwenden.

    Diese Problem kommen alle von dem, wie der Designer vom Konzept her funktioniert. Bei Netbeans ist das besser, das erstellt ein XML File und kann nur daraus immer wieder den kompletten Source neu generieren. Das XML wird auch zur Darstellung der Form benutzt, daher muss auch keine Instanz der Basisklasse erzeugt werden.

    Das ist so mal mein Eindruck von VS, seit einem halben Jahr habe ich eine 40h/Woche damit, deshalb hab ich schon viele Macken selbst erleben müssen. 🙂



  • Gregor schrieb:

    Hier ist die Gegenbehauptung: Java muss sich gegenüber C# bezüglich der Performance ganz sicher nicht verstecken.

    Wer hat jetzt Recht?

    Du, zumindest wenn man das viel zitierte "langsame" Swing betrachtet. In meiner Arbeit benutzen wir GUI-Komponenten von Developer Express, die zeichnen sich auch selbst und zwar grottenlangsam. Sie sind sehr cool, man kann sie schön themen, sind sehr flexibel und können viel. So viel, dass es mit nativen Widgets nicht möglich wäre, das nachzubauen. Wir sind auch sehr zufrieden damit, aber man merkt beim resizen der Forms schon krass, wie langsam der Neuaufbau ist. Solche Probleme hatte ich mit Swing unter Linux auch, aber unter Windows lief das immer schon total flüssig. Wenn mein Linux-Kenntnisse sich nicht auf die Shell beschränken würden, wäre das dort sicherlich auch schön hinzukriegen.



  • SideWinder schrieb:

    @DEvent: Mit deinem Op-Beispiel hast du gerade gezeigt warum es manchmal doch besser ist alles auszuschreiben und keine Operatoren zu verwenden 😉

    MfG SideWinder

    Dabei habs ichs doch extra hingeschrieben das es nur ein Beispiel sein soll...
    Dann eben sowas:

    Integer zahl;
    Integer ergebnis = zahl.add(zahl2.mul(zahl3));
    
    // oder
    ergebnis = zahl + zahl2 * zahl3;
    

    Jetzt plügt das wieder auseiander wie schlecht das Beispiel auch ist und das es Mathematisch nicht korrekt und laber laber.
    es soll nur ein Beispiel sein 😡

    ..und: Ich persönlich gehe eigentlich immer davon aus, dass "*" eine höhere Priorität als "+" hat. Die Beispiele sind somit noch nichtmal äquivalent. ...da wurden im zweiten Fall Klammern vergessen. ...etwas, was ohne Operatorüberladung so nicht möglich ist.

    Extra für dich: es soll nur ein Beispiel sein



  • Optimizer schrieb:

    "Hallo".length() + System.currentTimeMillis()
    

    Freilich, kein Problem.

    Wie? Wenn ich im VS6 strlen("Hallo") in die Überwachung ziehe, bekomme ich als Eergebniss void? 😕 Und viele andere Funktionen kennt er einfach garnicht.

    Wie siehts mit Multithreading-Debugging aus?

    Alles, was du aufgezählt hast, gibt es seit VS5. Muss es ja auch, was wäre denn das, wenn ich nur den Start-Thread ansehen kann? Völlig nutzloser Müll wäre das. 🙂

    Das ich einen Breakpoint irgendwo im Code des gestarteten Threads setzen kann und er dort Anhält geht. Aber wie kann ich jetzt, wenn er da steht, wieder zu einem anderen Thread springen und dort weiter debuggen? Kann ich irgend einen Thread anklicken und einfach mal so anhalten (ohne extra einen Breakpoint zu setzen)? Wo sehe ich welche Threads gerade laufen? So wie hier links oben.



  • DerDing schrieb:

    Optimizer schrieb:

    "Hallo".length() + System.currentTimeMillis()
    

    Freilich, kein Problem.

    Wie? Wenn ich im VS6 strlen("Hallo") in die Überwachung ziehe, bekomme ich als Eergebniss void? 😕 Und viele andere Funktionen kennt er einfach garnicht.

    Ich rede auch nicht vom grottigen C++-Debugger. Du sagst immer "VS", also beziehst dich auf das ganze Visual Studio. Dann kann ich mir auch den besten aussuchen, den für die Java-ähnlichste Sprache (außer J#). Für C++ gibt es nirgendwo einen gescheiten, das ist einfach nochmal eine andere Welt. Du benutzt ein Framework, benutz ich auch eins, dann ist der Vergleich fair. Trotzdem ist vermutlich auch der C++-Debugger von VS einer der besten, aber natürlich nicht so gut wie ein gängiger für Java.

    Wie siehts mit Multithreading-Debugging aus?

    Alles, was du aufgezählt hast, gibt es seit VS5. Muss es ja auch, was wäre denn das, wenn ich nur den Start-Thread ansehen kann? Völlig nutzloser Müll wäre das. 🙂

    Das ich einen Breakpoint irgendwo im Code des gestarteten Threads setzen kann und er dort Anhält geht. Aber wie kann ich jetzt, wenn er da steht, wieder zu einem anderen Thread springen und dort weiter debuggen? Kann ich irgend einen Thread anklicken und einfach mal so anhalten (ohne extra einen Breakpoint zu setzen)? Wo sehe ich welche Threads gerade laufen? So wie hier links oben.

    Dann wirf mal einen Blick in das "Debug->Windows"-Menü. Keine Ahnung ob du es in der C++-IDE an der gleichen Stelle findest, aber das gibt's da auch irgendwo. Geh einfach davon aus, dass ich beide Debugger schon mal in der Hand hatte, das führt aber sowieso zu nichts, du redest hier von der Grundausstattung. Das findest du bei jedem Debugger.

    DEvent schrieb:

    Jetzt plügt das wieder auseiander wie schlecht das Beispiel auch ist und das es Mathematisch nicht korrekt und laber laber.
    es soll nur ein Beispiel sein 😡

    Wenn du zeigen willst, dass operator overloading sinnvoll ist, dann solltest du auch ein sinnvolles Beispiel geben. 🙄



  • Also sorry, aber vieles was hier erzählt wird, finde ich auch in der C++ Welt. Und der C++ Debugger vom VC++ ist nicht grottig. Ich konnte schon 1998 (VC++6.0, vielleicht auch schon früher?) Code zur Laufzeit ändern und mit dem neuen Code weiter arbeiten. Konnte ich das mit Java 1.3 und Eclipse 2.1 machen? NEIN!

    So, dann jetzt der Knaller: gibt es für Java einen Debugger mit dem ich rückwärts debuggen kann? Da ich das nicht 100%ig weiß, frage ich hier wertfrei: gibts das für Java oder C#?
    Für C++ gibts sowas: UndoDB. http://www.undo-software.com/

    So, ich kann jetzt hier wirklich Geschütze auffahren, die C++ zu einer mächtigen Entwicklungs-Sprache machen. Ich kann auch Refactoringtools für C++ nennen, die ähnliches wie Refactorings von Eclipse und NetBeans bieten:

    http://www.refpp.com/ Da unter Demo einfach mal das Video anschauen.

    Man muß sich nur informieren was es alles für C++ gibt, und nicht nur die VC++ IDE von MS anschauen. Die ist zwar schon sehr gut, deckt aber noch lange nicht alles ab, was es für C++ gibt.



  • Ich habe aber gerne mit einer IDE alles abgedeckt. Viele Zusatztools für weitere Features laufen haben müssen ist nicht so meins.

    Und auch völlig wertfrei: Wofür möchte ich rückwärts debuggen? Ist damit nur ein "Ich gehe einen SChritt zurück" gemeint?

    MfG SideWinder



  • Optimizer schrieb:

    Dann wirf mal einen Blick in das "Debug->Windows"-Menü. Keine Ahnung ob du es in der C++-IDE an der gleichen Stelle findest, aber das gibt's da auch irgendwo. Geh einfach davon aus, dass ich beide Debugger schon mal in der Hand hatte, das führt aber sowieso zu nichts, du redest hier von der Grundausstattung. Das findest du bei jedem Debugger.

    Tatsächlich. Ist zwar etwas umständlich sich immer da durchzuklicken, aber es geht.

    Rückwärts debuggen hab ich noch nie gemacht, aber es bringt doch nur für ein paar Schritte was, wenn man mal wieder zu schnell auf "nächsten Schritt" geklickt hat, das fehlt es mir manchmal. Werden dann beim Rückwärtsdebuggen die Operationen wieder rückgängig gemacht z.B. Iterator zurückgesetzt, gezeichnete Sachen wieder entfernt, Daten von der Festplatte/DB gelöscht?



  • Also sorry, aber vieles was hier erzählt wird, finde ich auch in der C++ Welt. Und der C++ Debugger vom VC++ ist nicht grottig. Ich konnte schon 1998 (VC++6.0, vielleicht auch schon früher?) Code zur Laufzeit ändern und mit dem neuen Code weiter arbeiten. Konnte ich das mit Java 1.3 und Eclipse 2.1 machen? NEIN!

    [troll]
    ⚠ Trollalarm! ⚠

    Wir wollen hier auch gar nicht über C++ streiten, der mächtigsten Sprache für das .NET Framework, die bestimmt auch nach wie vor vom Weltmarktführer gepushed wird aufgrund ihrer unverkennlichen Vorteile gegenüber anderen Sprachen wie C# und Java. Es hat ja eben auch seinen Grund warum nahezu sämtliche Artikel bezüglich dem .NET Framework mit C++ Listings erläutert werden, oder warum zu allererst C++/CLI und erst anschließend C# und VB.NET Compiler im Mono Framework Einzug hielten. Das wird unter anderem daher kommen, da es auch entsprechend "verkauft" wird. Man nehme dazu als Beispiel einfach mal SYS-CON Media, dass mit dem C++ Developer Journal berühmt wurde.

    Wer die Anspielungen nicht kapiert, ist selbst zu dumm.
    [/troll]

    Falls du es nicht begriffen hast, aber in diesem Thread geht es um einen Vergleich zwischen Java und C#, demzufolge hat C++ und auch Visual C++ (Microsoft Visual C++ != Microsoft Visual C#) absolut gar nichts hier verloren. Laut deinem Beitrag scheint es ja beinahe eine Anmaßung zu sein C++ nicht ins Spiel zu bringen und warum das denn noch niemand erwähnt hat, hat aber wie gesagt hier nichts verloren.



  • java fan schrieb:

    Ich habe mich bei der Aussage bezüglich den Entwicklungstools auch gar nicht auf Klicki-Bunti-Editoren bezogen, sondern viel grundlegendere Features(...)

    War klar, dass wieder das "Klicki-Bunti"-Argument kommt 🙄
    Visual Studio 2005 bietet grafisches, UML-ähnliches Design von Klassen und Datenstrukturen an, und generiert dabei typensichere Datenanbindungen. Das hat nichts mit "Klicki-Bunti" zu tun, das ist im professionellen Bereich schlicht und ergreifend wertvolle Zeitersparnis. Wenn für Kunden in Kürze neue Funktionen und Anwendermasken implementiert werden sollen, dann ist jeder Tag kostbar.

    Dieses "Klicki-Bunti-ihr-seid-alle-Memmen-ich-programmiere-noch-in-der-Konsole"-Denken ist seit 10 Jahren schrottreif.

    Ich habe sowohl mit Java als auch mit C# .NET gearbeitet, und bevorzuge in jedem Falle C#, wobei ich Java dennoch verwende um Applets zu schreiben. Aber eine lokale Desktopsoftware würde ich damit niemals entwickeln - zumal sich Visual Studio und SQL Server 2005 sehr gut kombinieren lassen und diese Kombination extrem leistungsfähig ist.



  • olo-rolf schrieb:

    War klar, dass wieder das "Klicki-Bunti"-Argument kommt 🙄
    Visual Studio 2005 bietet grafisches, UML-ähnliches Design von Klassen und Datenstrukturen an, und generiert dabei typensichere Datenanbindungen. Das hat nichts mit "Klicki-Bunti" zu tun, das ist im professionellen Bereich schlicht und ergreifend wertvolle Zeitersparnis. Wenn für Kunden in Kürze neue Funktionen und Anwendermasken implementiert werden sollen, dann ist jeder Tag kostbar.

    Ich hab ja auch nie behauptet, dass ich gegen "Klicki-Bunti" Tools bin, sondern nur, dass es Visual Studio an grundlegenden Features mangelt, die einem dann letztendlich beim Programmieren selbst unterstützen sollen.

    Übrigens: http://www.omondo.de/



  • Ok, dann würde ich dir aber empfehlen, die hässliche Beschreibung "Klicki-Bunti" nicht mehr zu verwenden, weil sie meistens von Programmierern genutzt wird, die keine Argumente mehr gegen ein bestimmtes Werkzeug haben und sich dennoch irgendwie profilieren müssen. Pure Rabulistik.

    Dass Java nicht ähnliche Werkzeuge bietet wollte ich damit nicht sagen. Ich persönlich bevorzuge eben C# .NET, du bevorzugst Java, und letztendlich sind die Werkzeuge doch relativ gleich, abgesehen von der Plattform(un)abhängigkeit. Ich persönlich bin aber wirklich der Meinung, dass die Entwicklung reiner Windowsanwendungen unter .NET stattfinden sollte. Es ist das offizielle Entwicklungssystem des Betriebssystemherstellers Microsoft und wird somit auch immer die bessere Integrität unter Windows haben.

    Also programmiert euch einen von der Palme und seid zufrieden mit euren Werkzeugen 🤡


Anmelden zum Antworten