C++ vs. Java [Update]
-
Was ist besser ein Porsche oder ein dicker LKW?
Und welche Sprache entspricht jetzt dem Porsche in deiner Analogie? Und welche dem LKW?
-
Porsche == C++
dicker LKW == Java
-
Jo, das hängt doch einzig und allein von der Problemstellun ab. Ich mein, niemand wird auf die Idee kommen, mit Java Fifa 2004 zu programmieren oder mit Javas BigInt ein PI-Programm.
-
Und wofür ist Java dann gut geeignet??
-
Wie schon gesagt wurde, für große Programme. Hinzu kommt, daß Java absolut plattformunabhängig ist, wenn für versch. Plattformen die VM implementiert ist. So sieht z.B. ein Klickibunti Swingprogramm unter Windows haargenau 1:1 exakt so aus wie unter Linux, weil die Komponenten von Java auch noch selber gezeichnet werden. Außerdem gefällt mir persönlich bei Java, daß man wirklcih alles unter einem Hut hat. Fensterbibliothek, Threads, Netzwerkprogrammierung, alles einfach. Man muss keine externen Libs nehmen.
-
((DefaultListModel)m_list.getModel()).addElement(((Unit)iter.next()).getName());
Aber wenn dann sowas dabei rauskommt würde ich echt von Java abraten :p
-
Original erstellt von Doktor Prokt:
Wie schon gesagt wurde, für große Programme. Hinzu kommt, daß Java absolut plattformunabhängig istzum hundertstenmal: java IST eine plattform.
-
Original erstellt von volkard:
zum hundertstenmal: java IST eine plattform.nö eine virtuelle maschine
-
Und was ist eine virtuelle Maschine? Eine Plattform!
-
Original erstellt von volkard:
[quote]Original erstellt von Doktor Prokt:
[qb]Wie schon gesagt wurde, für große Programme. Hinzu kommt, daß Java absolut plattformunabhängig istzum hundertstenmal: java IST eine plattform.[/QB][/QUOTE]
"ich hab so einen muskelkater" - "das heißt nicht muskelkater, sondern alphahydroxipropionsäuresepsis"
"ich nehme jetzt mein lindan und bekämpfe insekten" - "das heißt nicht lindan, sondern 1,2,3,4,5,6 hexacyclohexan"
Hier ist der Begriff doch uninteressant, bedeutend sind doch die Vorteile.
-
Original erstellt von Doktor Prokt:
[QB]"ich nehme jetzt mein lindan und bekämpfe insekten" - "das heißt nicht lindan, sondern 1,2,3,4,5,6 hexacyclohexan"γ-1,2,3,4,5,6-Hexachlorcyclohexan, soviel zeit muß sein!
ich sag ja auch nicht zu wasserstoff einfach wasser.
-
Original erstellt von volkard:
zum hundertstenmal: java IST eine plattform.Java IST eine Programmiersprache! :p ...was man aus seinem Java-Code letztendlich macht, das bleibt jedem selbst überlassen. Es gibt auch Möglichlkeiten, daraus eine ausführbare exe-Datei zu erstellen.
Du sagst IMHO zum hundertstenmal das Falsche! :p
[ Dieser Beitrag wurde am 01.12.2002 um 00:20 Uhr von Gregor editiert. ]
-
Ist eigentlich die java exe datei schneller als wenn man das mit dem java interpreter ausführt? wird das also richtig dabei compiliert. weil ich habe schonmal so einen compiler für perl gesehen. der machte einfach den interpreter und die module (dll) zusammen in ein exe packet. beim ausführen hat sich das ganze dann entpackt und einfach wieder den interpreter ausgeführt. ist das beim java compiler auch so, oder wird da richtig compiliert?
-
Original erstellt von Gregor:
**Java IST eine Programmiersprache! :p ...was man aus seinem Java-Code letztendlich macht, das bleibt jedem selbst überlassen. Es gibt auch Möglichlkeiten, daraus eine ausführbare exe-Datei zu erstellen.
Du sagst IMHO zum hundertstenmal das Falsche! :p
**vielleicht glaubstes dem ja:
http://www.research.att.com/~bs/bs_faq.html#JavaDu sagtes sowas wie
Hinzu kommt, daß Java absolut plattformunabhängig ist, wenn für versch. Plattformen die VM implementiert ist. So sieht z.B. ein Klickibunti Swingprogramm unter Windows haargenau 1:1 exakt so aus wie unter Linux, weil die Komponenten von Java auch noch selber gezeichnet werden. Außerdem gefällt mir persönlich bei Java, daß man wirklcih alles unter einem Hut hat. Fensterbibliothek, Threads, Netzwerkprogrammierung, alles einfach. Man muss keine externen Libs nehmen.
betrachte das mal unter der idee, daß die "absolute plattformunabhängigkeit" daher kommt, daß programme, die in der sprache java geschrieben wurden auf der plattform java laufen sollen. nur dann machts sinn. alles andere würde mir übrigens gestatten, so frei zu sein, die selbe "absolute plattformunabhängigkeit" für c++ zu postulieren, denn keiner hindert einen daran, ne vm und ne kleine lib für c++ zu bauen und die vm auf alle möglichen architekturen zu portieren. dann hättest du nur ein windargument erzeugt.
-
Diese "absolute" Plattformunabhängigkeit würde ich dann aber doch gerne mal sehen...
Wie kommt es dann, daß unter Linux die Prioritäten meiner Threads nicht beachtet werden. Unter Windows aber schon (so wie man's eigentlich erwarten könnte).
Dafür weckt Windows einen Thread, der mit sleep schlafen gelegt wurde erst wieder auf, wenn er wirklich dran ist. Linux gibt ihm Rechenzeit sobald wie möglich, also egal, wie viele Threads warten, der aufgewachte kriegt sofort Rechenzeit.Fazit: Exaktes Timing unter Windows mit Prioritäten, exaktes Timing unter Linux mit sleep, wenn ich beide haben will muß ichs über Prioritäten und sleep lösen. Ist das nicht umständlich?
Deswegen war es zum Beispiel (mir) nicht möglich einen Thread-Dispatcher in Java zu schreiben, der ohne Mitarbeit der Threads funktionierte.Wo ist sie denn nun, diese Plattformunabhängigkeit? (ich mein natürlich die "absolute")
[ Dieser Beitrag wurde am 01.12.2002 um 12:31 Uhr von Jester editiert. ]
-
Original erstellt von volkard:
**
vielleicht glaubstes dem ja:
http://www.research.att.com/~bs/bs_faq.html#Java
**Da steht :
Java isn't platform independent; it is a platform. Like Windows, it is a proprietary commercial platform. That is, you can write programs for Windows/Intel or Java/JVM, and in each case you are writing code for a platform owned by a single corporation and tweaked for the commercial benefit of that corporation.
Gehen wir mal durch :
- Single Corporation : Unsinn. Es gibt nicht nur ne JVM von Sun. Es gibt z.B. auch JVMs von IBM oder von BEA. Zudem werden auch JVMs unter der GPL entwickelt. Z.B. Kaffe.
- "you can write programs for Windows/Intel or Java/JVM" : Unsinn. Normalerweise schreibt man Code für die JVM, weil das klug ist. Der Code läßt sich aber auch für andere Plattformen kompilieren. AFAIK kann man das z.B. mit dem GJC machen, oder? Außerdem gibt es Programme, wie "Excelsior Jet". Man kann sich aus Java-Code also auch ausführbare Dateien für andere Plattformen erzeugen. ...und dafür muss man NICHTS portieren, wie man es aus C++ kennt.
Java ist platformunabhängig. Allerdings wird aus Java-Code meistens Code für eine virtuelle Platform erzeugt. Die JVM. Das muss man aber nicht machen.
BTW : C++ ist nicht platformunabhängig, weil es keinen Compiler gibt, der C++-Code für die JVM kompiliert. :p Schonmal eine Platform, die häufig genutzt wird, auf der man mit C++ verloren hat. :p
[ Dieser Beitrag wurde am 01.12.2002 um 14:14 Uhr von Gregor editiert. ]
-
Original erstellt von volkard:
alles andere würde mir übrigens gestatten, so frei zu sein, die selbe "absolute plattformunabhängigkeit" für c++ zu postulierenTust du doch sowieso. Ich bin mir sicher, dass ich hier nen Thread finde, wenn ich suchen würde, in dem du sagst, dass C++ platformunabhängig ist, Java aber nicht.
Auch das ist natürlich Unsinn. In C++ sind ja sogar schon die Größen der primitiven Datentypen plattformabhängig. In Java nicht.
-
Original erstellt von Gregor:
Auch das ist natürlich Unsinn. In C++ sind ja sogar schon die Größen der primitiven Datentypen plattformabhängig. In Java nicht.Alle datentypen haben eine mindestgroesse!
Wenn eine Plattform diesen Datentyp groesser macht, um effektiver arbeiten zu koennen, dann darf sie das!wenn ich also nicht portieren will, dann nehme ich einfach die plattformspezifische groesse -> ansonsten verlasse ich mich nicht darauf.
dank typedefs kann man auch ueberall die selben datentypengroessen haben!
"you can write programs for Windows/Intel or Java/JVM" : Unsinn. Normalerweise schreibt man Code für die JVM, weil das klug ist.
Ob du das fuer klug haeltst oder nicht steht doch nicht zur debatte.
Java bzw. die JVM ist eine Plattform - daruber braucht man garnicht zu diskutieren!wann wirst du endlich begreifen, dass C++ einen anderen Ansatz der Plattformunabhaengigkeit hat?
Java verlangt eine VM
C++ einen CompilerBTW : C++ ist nicht platformunabhängig, weil es keinen Compiler gibt, der C++-Code für die JVM kompiliert. Schonmal eine Platform, die häufig genutzt wird, auf der man mit C++ verloren hat.
Was meinst du: gibt es mehr Plattformen mit einem C++ Compiler oder mit einer Java VM?
-
Original erstellt von Shade Of Mine:
**
Was meinst du: gibt es mehr Plattformen mit einem C++ Compiler oder mit einer Java VM?**Für C++ gibt es so gut, wie garkeinen standardkonformen Compiler. Wir haben ja letzt schon gesehen, dass es anscheinend Probleme macht, Programme zu schreiben, die auf mehreren Compilern kompilieren. In C++ gibt es also noch nichtmal Compilerunabhängigkeit. Wie soll der C++-Ansatz der Platformunabhängigkeit dann überhaupt funktionieren?
-
Original erstellt von Gregor:
Für C++ gibt es so gut, wie garkeinen standardkonformen Compiler. Wir haben ja letzt schon gesehen, dass es anscheinend Probleme macht, Programme zu schreiben, die auf mehreren Compilern kompilieren. In C++ gibt es also noch nichtmal Compilerunabhängigkeit. Wie soll der C++-Ansatz der Platformunabhängigkeit dann überhaupt funktionieren?Also mein aktuelles Projekt laeuft sowohl unter Unix mit gcc und icc sowie unter windows mit VC++ 6 und 7, sowie Borland C++ Compiler 5.5 (somit wahrscheinlich auch Borland C++ Builder 5 und 6) sowie gcc (mingw) und digital mars c++ compiler.
andere compiler habe ich nicht zum testen verwendet da ich sie nicht besitze - aber wie du siehst, scheint das ja ganz gut zu funktionieren!
Wenn ich dann noch threads und sockets einbauen werde, dann werde ich cross-plattform bibliotheken verwenden und somit auch Plattformunabhaengig (diesmal im Sinne von Java) zu sein.
Im Sinne von Java deswegen - weil ich auf meiner ziel Plattformeinfach eine implementierung der Runtime Library erwarte.
wenn man nicht aufpasst, dann kann es natuerlich schwer sein ein Programm zu portieren, aber ich denke, man kann in Java genauso sich auf eine Plattform festlegen und dann gezielt diese API nutzen...
ich kenn mich mit Java nicht aus, deshalb kann ich keine gegen Argumente bringen, aber deine contra C++ Argumente scheinen mir auch nicht gerade sehr stichhaltig!