Java vs. C#



  • Da hast Du was falsch verstanden.

    C# und Java verwenden den gleichen Ansatz, im Gegensatz zu C++.

    Bei C# wird der C#-Code in MSIL übersetzt, das ist eine Art Assemblercode. Dieser Assemblercode wird von der .NET-Maschine während der Ausführung in echten Maschinenanweisungen compiliert und ausgeführt.

    Bei Java wird der Java-Code in den Java-Bytecode übersetzt, was letztlich die gleiche Ebene ist wie MSIL. Der Bytecode wurde früher(!) bei den ersten Virtuellen Maschinen interpretiert und schrittweise in Maschinencode übersetzt und ausgeführt. Das ist aber seit der Einführung von JIT (Just in Time Compiling) Geschichte, seither wird der Java-Bytecode ebenfalls vor Ausführung compiliert und dann ausgeführt.

    Der Hauptunterschied liegt also bei C/C++ <-> C#/Java, bei C/C++ wird compiliert und daraus ein fertiges Programm gemacht, bei C#/Java wird zwischenübersetzt und ein fertiges Programm gemacht, die Compilierung findet kurz vor/während der Ausführung statt.

    Daher liegt das Laufzeitverhalten von C# irgendwo in der Größenordnung von Java, da die gleichen Probleme, aber auch die gleichen Optimierungsmöglichkeiten vorhanden sind.



  • hi,

    jetzt muß auch mal meinen Senf dazugeben.

    Ich habe das ebenfalls so verstanden, das vor der Ausführung eines C#-Programmes kompiliert wird.

    Weiters habe ich den Eindruck, das C# schneller gegenüber Java ist. Wenn man beispielsweise ein einfaches Fenster mit Text "Hallo Welt" startet. Vielleicht weis ja jemand, woran das genau liegt.

    Und drittens, für mich stellt sich weniger die Frage ob Java oder C#, vielmehr C# oder VB.NET. Diese beiden Sprachen haben zuviel gemeinsam (Vollkommene OO, beide verwenden das selbe Framework). Im Detail gibts unterschiede, aber ob genau die es ausmachen?

    Bis auf z.B. Netscape Communicator oder JBuilder kenne ich keine anderen Javaprogramme, aber alleine diese beiden Programme können mit dem Look & Feel von Windows nicht mithalten. Irgendwie langsam und eckig. Und darauf kommt es doch letztendlich an in einer GUI-Anwendung.

    Zum jetztigen Zeitpunkt würde ich Java (J2EE) im Serverbereich platzieren und C# mit .NET in den Client-Anwendungsbereich.

    Und obwohl ich schon viel mit VB (VB6.0) gemacht habe, weis ich nicht, was VB.NET sein soll, bzw. für welchen Bereich es geschaffen wurde.

    grüße
    ms



  • Original erstellt von ms:
    **
    Weiters habe ich den Eindruck, das C# schneller gegenüber Java ist. Wenn man beispielsweise ein einfaches Fenster mit Text "Hallo Welt" startet. Vielleicht weis ja jemand, woran das genau liegt.
    **

    Es ist mir unbegreiflich, warum Leute auf die Geschwindigkeit einer GUI Wert legen. Ich merke es eigentlich garnicht, wenn sich ein Fenster nach 0,05 Sekunden oder nach 0,1 Sekunden öffnet. ...und ich kann da auch keinen größeren Unterschied feststellen.

    Dich stört das Look & Feel von Java? Dann nimm doch einfach ein anderes. Bei Java kannst du mit Swing das Look & Feel während der Laufzeit umstellen. Ich finde das Standard-Java-Look & Feel (Metal Look & Feel) übrigens sehr gut.

    Und darauf kommt es doch letztendlich an in einer GUI- Anwendung.

    Nein! In einer GUI-Anwendung kommt es darauf an, dass der User gut mit der GUI zurechtkommt, dass die GUI übersichtlich ist und leicht und intuitiv zu bedienen ist. Eine GUI ist eine Schnittstelle zwischen Programm und User. Man kann in jeder Sprache gute und schlechte GUIs machen. Java-GUIs haben den Vorteil, dass sie auf unterschiedlichen Platformen gleich sein können. Der User muss sich dann nicht erst an eine andere GUI gewöhnen.



  • Für solche, die keine Programme kennen, die in Java geschrieben wurden.

    • Webgain StructureBuilder
    • Headway reView
    • Together Control Center
    • NetBeans (SunONE formerly Forté for Java)
    • TOPlink (mittlerweile von Oracle)
    • Borland JBuilder
    • Merant PVCS
    • und weitere viele kleine GUI-Clients für Kazaa, Esel, CVS etc. pp

    Nachtrag: Dass der Netscape Communicator in Java entwickelt wurde wäre mir neu.

    [ Dieser Beitrag wurde am 25.09.2002 um 16:40 Uhr von CengizS editiert. ]



  • java und c# zielen genau auf dasselbe marktsegment ab
    java ist nicht als server sprache konzipiert worden und es gibt viele gute programme die in java geschrieben wurden
    es wird nur mehr im server bereich verwendet

    C# wiederrum ist die ms initiative ein verbessertes java zu nutzen um von anderer leute ideen zu profitieren
    was ja auch nix neues ist und was mich auch nicht wirklich aufregt

    .NET wiederum ist etwas was fuer mich entscheidende vorteile gegenueber java hat
    weil es sehr wahrscheinlich schneller sein wird als java --- NICHT JETZT -- aber ab der naechsten version von windows
    schliesslich wissen die entwickler dort wie das OS aufgebaut ist und sie werden .NET sicherlich in das OS integerieren

    das ist es

    cu

    gomberl



  • Original erstellt von gomberl:
    **
    .NET wiederum ist etwas was fuer mich entscheidende vorteile gegenueber java hat
    weil es sehr wahrscheinlich schneller sein wird als java --- NICHT JETZT -- aber ab der naechsten version von windows
    schliesslich wissen die entwickler dort wie das OS aufgebaut ist und sie werden .NET sicherlich in das OS integerieren
    **

    Ich denke, man darf einen Vergleich zwischen Java und C# nicht auf Windows beschränken. Wenn man das macht, dann misachtet man einen Hauptvorteil von Java. Nämlich die Platformunabhängigkeit, die so bei C# (?noch?) nicht gegeben ist. Wenn man nur eine Platform betrachtet, dann sollte man die entsprechende Sprache mit C++ vergleichen. Was bringt denn eine Zwischensprache, wie MSIL oder Java-Bytecode, wenn ein Programm dadurch nicht auf unterschiedlichen Platformen problemlos ausgeführt werden kann?



  • @Gregor:

    Mit dem Look geb ich dir recht, kann man ein anderes nehmen.
    Bei dem Feel lege ich schon viel Wert darauf, das es halbwegs schnell geht.
    Falls du schon mal den JBuilder vor dir gehabt hast und damit länger gearbeitet hast, dann ist es bestimmt auch dir aufgefallen, das alles ein bisserl eckiger läuft. Mag sein das es dich nicht stört, mir ist es jedenfalls unangenehm aufgefallen. Übrigens programmiere ich viel und gerne in Java.

    @CengizS: Ich korrigiere mich, Netscape´s open-source clone ist in Java geschrieben.

    grüße
    ms



  • @ms
    quatsch das Mozilla Projekt basiert auf den Original Netscape Sourcen und hat diese weiterentwickelt (nunr basiert Netscape auf Mozilla :)) und Netscape/Mozilla sind AFAIK in C++ geschrieben.

    Zur Zeit hat dotNET aber einfach noch zu viele Mängel. Zwar gibt es ECMA Standards für C# und CIL (auch MSIL genannt), aber an höheren System Librarys mangelt es, zwar bietet MS Visual dotNET WinForms an, diese sind aber nicht standardisiert und wurden auch nicht in dotGNU oder Mono eingebaut. MS ist anscheinend auch nicht bemüht diese Dinge von der ECMA standardisieren zu lassen. GTK# ist hier wohl die einzige Alternative.

    Java hat unterdessen unmengen an Dingen zu Verfügung für GUI, Netzwerk, Sound etc.

    Außerdem ist das mit dem mischen von den Programmiersprachen zZ. noch Zukunftsmusik, zwar gibt es schon verschiedene Compiler für dotNET, aber viele sind noch beta, neu (C#) oder zu weit von den Original Sprachen entfernt um irgend einen nutzen zu bringen (C++,VB).

    Ich denke für wirkliche Entwicklung kann man dotNET erst in 2-3 Jahren in betracht ziehen, wenn es die Kinderkrankheiten hinter sich hat und vor allem die dotNET Platform mehr verbreitung hat und auf mehr Systemen läuft.



  • Möchte nochmal C# mit VB.NET vergleichen. Seht ihr das genauso wie ich, das VB.NET neben C# überflüssig geworden ist? Oder gibt es grundsätzliche Problemstellungen, bei denen man mit VB.NET einfacher oder besser gegenüber C# bedient ist?

    grüße
    ms

    Wo hab ich blos diesen Schwachsinn mit "Netscape in Java geschrieben" her?



  • Original erstellt von ms:
    @CengizS: Ich korrigiere mich, Netscape´s open-source clone ist in Java geschrieben.

    War es nicht viel eher so, daß IBM ein Betriebssystem in Java gebaut hat und wegen des großen Erfolges seitdem alle Projekte in Java macht?
    Natürlich wird der nächste große Browser von IBM auch in Java sein. Aber ich bezweifle, daß der Freeware sein wird.



  • Original erstellt von ms:
    **Möchte nochmal C# mit VB.NET vergleichen. Seht ihr das genauso wie ich, das VB.NET neben C# überflüssig geworden ist? Oder gibt es grundsätzliche Problemstellungen, bei denen man mit VB.NET einfacher oder besser gegenüber C# bedient ist?
    **

    VB.NET hat Microsoft wohl entwickelt, um auch ein paar VB-Programmierer nach .NET zu holen.



  • @volkard
    so weit ich weiss, hat nur SUN mal ein OS auf Java Basis geschrieben und auf Thinclients eingesetzt.

    Etwas von einem IBM OS auf Java Basis wär mir neu.

    Genauso wie Pläne von IBM einen Browser zu schreiben 😉



  • Von den angeblichen IBM-Projekten habe ich auch noch nichts gehört, aber egal.

    C# ist rein von der Sprache her Java überlegen. Da ich Mirco$oft hasser bin verwende ich es trotzdem nicht. Ich habe sowieso das gefühl, das kaum einer zu C# migriert, da es den großen Vorteil von Java nicht bringt und wenn ich plattformspezifisch programmiere mit C++ plus spezielle Bibliotheken besser beraten bin.

    @Kingruendi:
    Du scheinst Delphi/Object Pascal nicht sonderlich zu mögen. OK einige Konstrukte, wie diese seltsamen Sets oder auch schon die einfache For-Schleife stören mich ein wenig, aber ansonsten ist es eine vernüpftige und vor allem leicht zu erlernende Sprache, die zudem extrem schnellen Code erstellt.



  • @Helium
    ich finde Object Pascal Programme sehen sehr grässlich aus, ich bin nicht so der Pascal Fan. Mit Object Pascal kenn ich mich noch nicht so gut aus, muss es aber jetzt lernen. Bei Object Pascal werden doch alle Klassen von der Basis Klasse TObject abgeleitet, also so was wie das object Modell in C#/Java? (BTW. wenn man allein den Namen TObject sieht, läuft es einem kalt über den nacken. object ist ja noch ein verünftiger Name). Ich hab gelesen, dass es neben private/protected/public noch einen Modus für Klassen gibt. (BTW. ich mag es auch nicht, wenn ich ständig Caps-Lock anmachen muss, wenn ich programmiere ;)). Ist Object Pascal immer noch so streng typisierend, wie ANSI Pascal?

    BTW.
    Ich glaube noch nicht mal, dass IBM alles in Java entwickelt, da zB. Anwendungen wo es um jeden CPU Takt geht, wie DB2 wohl nicht dafür geeignet sind oder?

    Einige neuere Projekte sind aber in Java, Eclipse (sollte der Nachfolger von Visual Age werden, ist nun Open Source) uvm.



  • vielleicht ein paar Punkte die noch nicht angesprochen worden sind.

    der zu grundeliegende Bytecode : der Javabytecode ist exakt auf Java zugeschnitten. Es gibt zwar diverse Compiler die Javabytecode aus anderen Sprachen generieren aber die Entwickler hatten immer wieder mit etlichen Problemen zu kämpfen(siehe Anfänge von Jython). Hingegen ist die CIL von Anfang an darauf ausgelegt worden das es mehr als eine Sprache gibt die zu ihr compiliert wird.
    Es wurde zwar hier bereits erwähnt, aber es stimmt nicht das die meisten Compiler noch Beta's sind. Es gibt sowohl funktionierende Perl,Oberon,Eiffel als auch Pascal Compiler die IL Code erzeugen der sich dann auch in anderen .net Sprachen nutzen lässt.

    Jeder der sich mal damit beschäftigt hat wird bestätigen das die CIL eine wesentlich angenehmere Basis ist als Javabytecode wenn man einen Compiler für eine Sprache entwickelt.

    Auch wichtig ist das der JVM byte code auch dafür ausgelegt ist interpretiert zu werden, was ja auch am Anfang der Fall war. Dies ist bei der CIL nie so gewessen. Sie war von vorherein dafür gedacht geJITet zu werden, schleppt also einige Lasten nicht mit sich rum. Daher denke ich auch das es dort vielleicht einen kleinen Speedvorteil geben wird.

    Der Hauptunterschied liegt also bei C/C++ <-> C#/Java, bei C/C++ wird compiliert und daraus ein fertiges Programm gemacht, bei C#/Java wird zwischenübersetzt und ein fertiges Programm gemacht, die Compilierung findet kurz vor/ während der Ausführung statt.

    Jap .. nur eine Ergänzung dazu. Bei managed C++ wird der Code auch in IL übersetzt.
    Desweiteren gibt es durchaus die Möglichkeit C# Code direkt zu Maschinencode zu compilieren .. siehe ngen im Framework SDK. Allerdings verliert man damit natürlich die Plattformunabhängigkeit. (Ähnlich als wenn man Java via zB ExcelsiorJet direkt zu Maschinencode compiliert)

    ur Zeit hat dotNET aber einfach noch zu viele Mängel. Zwar gibt es ECMA Standards für C# und CIL (auch MSIL genannt), aber an höheren System Librarys mangelt es, zwar bietet MS Visual dotNET WinForms an, diese sind aber nicht standardisiert und wurden auch nicht in dotGNU oder Mono eingebaut. MS ist anscheinend auch nicht bemüht diese Dinge von der ECMA standardisieren zu lassen. GTK# ist hier wohl die einzige Alternative.

    ja stimmt, leider gibt es noch ein paar Mängel. Allerdings stimmt es nicht das WinForms nicht in mono auftauchen wird. Siehe Mono Website wo man die aktuelle Strategie für die WinForms Implementation in Mono findet.

    Was zum ECMA Standard zählt kann man selber hier nachlesen http://www.dotnetexperts.com/ecma/index.html .. wobei es auch Pläne von MS Seite gibt höhere Libs zu standardisieren! Es wird wohl noch ein Sprachupdate für C# geben was die von vielen vermissten generics ala templates wohl mitbringt. Wenn dies eingereicht wird, werden auch einige der höheren Libs mitfolgen. Dazu gab es ein interessantes Interview mit Hejlsberg auf slashdot oder oreily news *leider nicht mehr genau weiß wo.

    Vergleich Java <-> C# . Bei diesem Vergleich müsste man sich eigentlich NUR auf die Sprachen(Syntax usw.) beschränken. C# ist ja nur eine von vielen .net Sprachen! Wenn man vergleicht dann die Java Platform mit der .net Platform.
    Und damit relativiert sich auch die Aussage das es für Java mehr Libs gibt.
    Man kann alle COM Libs nutzen in .net. Und das ist schon eine ziemlich große Menge.
    Dann kommt hinzu das es auch einen Java Compiler für .net gibt der IL erzeugt. Zwar im Moment nur JDK1.1 kompatible aber das soll sich noch ändern. Nennt sich J# und is gerade Beta 2. Ich habe das mal getestet und konnte den Servercode eine Projektes an dem ich an der Uni mitgewirkt habe ohne Änderungen compilieren. (ja es waren mehr als 30000 Zeilen 😉 ). Fand ich schon nicht schlecht zumal der Server auch wunderbar funktioniert hat. Das man dann mit den Klassen in C# oder anderen .net Sprachen weiterarbeiten kann ist auch ein wesentlicher Punkt.

    Was will ich damit sagen. Javakomponenten kann man oft (mit kleinen Änderungen) auch in .net nutzen. (Sollten sie nicht SDK Features nach 1.1 im Moment nutzen)
    Damit denke ich ist der Vorteil von Java den hier manche anhand der verfügbaren Komponenten gesehen haben dahin.

    Aber am Ende gebe ich kingruedi schon recht. Es müssen noch 1-2 Jahre vergehen und .net etwas reifen zu lassen(vorallem die Akzeptanz). Ich nutze selber die Technologie schon eine ganz Weile und bin überaus zufrieden.

    Nochwas zum Kostenpunkt. Das .net Framework SDK ist kostenlos! Darin enthalten sind sowas Compiler als auch Dokus. Alles was man brauch um .net Anwendungen zu entwickelen.
    Es gibt sogar eine gute freie IDE .. SharpDevelop.(Es soll auch ein C# Eclispe Plugin geben.)
    Man wird also nicht gezwungen Geld an MS zu zahlen ;).

    so ne kleine Anmerkung zur schönen Plattformunabhängigkeit von Java: leider finde ich ist das nicht in alle Fällen gegeben. Unabhängig heißt für mich das sich ein Javaprogramm auf zwei verschiedenen System immer gleich verhält. Beispiel Threading/Timing: Java nutzt kein eigenes System dafür sonder verlässt sich auf das OS. Wie kann man aber 10 Threadprioritäten auf 7 (unter NT) abbilden? Mindestens 2 müssen also die selbe Priorität haben was schon dazu führt das sich das selbe Programm anderst unter Linux als Windows verhalten wird. Ein weiterer Punkt wäre die Timerauflösung. Es gibt in Java keine Möglichkeit diese abzufragen. Nur Verhält sich getCurrentMillis() auf verschiedenen OS recht unterschiedlich, ist somit nicht für vernüftiges Timing geeignet. Somit kommt man um JNI nicht drumherrum und hat wieder eine Plattformabhängigkeit drin. (Soll sich aber wohl beim 1.5 jdk ändern)

    Ich weiß das ist sehr pingelich .. aber es ist halt ein Punkt den man nicht übersehen sollte wenn man von Plattformunabhängigkeit redet.

    Ähnlich dem lahmen AWT/Swing .. wo schon Eclipse angesprochen wurde. IBM hat hier auf eigene plattformabhängige GUI Klassen gesetzt! Jeder der schonmal mit dem JBuilder auf einem langsameren Rechner gearbeitet hat, wird gelernt haben AWT/Swing zu hassen. 🙂



  • Ich hab gelesen (irgend wo bei Slashdot oder Heise), dass die Mono Entwickler eher eine bessere Alternative zu den WinForms suchen würden, da diese wohl sehr viele Mängel haben würden.

    Ich denke, dass MS die WinForms nicht standardisieren lässt und somit wieder für inkompatibilitäten zu anderen Platformen sorgt, ist typisch für MS, einerseits erzählt man überall, dass man dotNET überall haben will, aber in wirklichkeit gehen die Anwendungen nur auf Windows.

    Vielleicht sollte man hier die Chance nehmen MS was eigenes auf's Auge zu drücken, in dem man in Mono keine WinForms integriert, sondern lieber ein eigenes Konzept.

    Managed C++ ist zZ. doch eh nur ein Reinfall, da es sich ja nicht um ISO C++ handelt, sondern nur eine Untermenge.

    Ich denke aber, dass dotNET und C# stark von den Erfahrungen von SUN mit Java profitieren konnte und es deswegen die ein oder anderen Kinderkrankheiten weniger gibt.

    BTW.
    MS hat doch Performance Vergleiche mit seiner dotNET Implementierung verboten oder?

    Naja zumindest sollten wir mal JDK 1.4, Mono und dotNET von der Geschwindigkeit vergleichen, in dem wir ein paar schöne Algorithmen oder so was auf C# und Java portieren (natürlich sollten wir ein C++ Programm als Referenz Wert nehmen, damit man sich etwas drunter vorstellen kann).



  • Original erstellt von kingruedi:
    **
    Naja zumindest sollten wir mal JDK 1.4, Mono und dotNET von der Geschwindigkeit vergleichen, in dem wir ein paar schöne Algorithmen oder so was auf C# und Java portieren (natürlich sollten wir ein C++ Programm als Referenz Wert nehmen, damit man sich etwas drunter vorstellen kann).**

    Au ja! Wenn sich einer findet, der Aufgaben stellt und einer, der das in C# (auch auf Mono lauffähig) implementiert, dann würde ich es in Java implementieren. (...zumindest soweit ich dazu fähig bin)



  • also ich kann kein C# und will es in der nächsten Zeit auch nicht lernen. Ansonsten würde ich das gerne machen. Wir sollten uns aber mal einen Algorithmus aussuchen, der Rest passiert ja fast von selbst ;), vorallem wenn C# und Java wirklich so ähnlich sind.



  • Ich wäre dafür, ganz atomare Dinge zu testen, obwohl die natürlich nicht unbedingt eine große Aussagekraft haben.

    Also sowas wie...

    ...10.000.000 Wurzeln ausrechnen.
    ...10.000.000 "a" an eine Zeichenkette anhängen.
    ...10.000.000 Zeilen auf der Konsole ausgeben.
    ...10.000.000 ints sortieren.
    ...10.000.000 Objekte erzeugen.
    ...10.000.000 mal ein Element an eine Liste anhängen.

    [ Dieser Beitrag wurde am 03.10.2002 um 22:37 Uhr von Gregor editiert. ]



  • @ kingruedi : Du kannst ja das C++ Referenzprogramm schreiben.


Anmelden zum Antworten