hilfe : von c++ zu java
-
Bashar schrieb:
denn es spricht überhaupt nichts dagegen, dass Java-Referenzen Pointer sind. Es würde alles noch genauso funktionieren.
Ausgangspunkt war
Optimizer schrieb:
Pointer sind nach allgemeinem Verständnis Variablen, die Adressen enthalten. Das trifft auf die Referenzen in Java nicht unbedingt zu.
Ich habe nicht ausgeschlossen, dass Referenzen als Pointer implementiert sind. Das es nicht so sein muss, kann man aber ruhig sagen. Fakt ist, du weißt als Programmierer nicht, was eine Referenz ist, es kann beliebig gemacht werden. Wir hatten den Punkt mit dem GC schon einmal. Objekte zu verschieben erfordert entweder die Anpassung aller Pointer oder eines Pointers, wenn Referenzen Pointer auf Pointer sind. Bedenke, dass der GC in den wenigstens Fällen full collections macht und damit alle Pointer durchläuft. Er muss entweder wissen, was es alles für Pointer auf jedes Objekt gibt, oder er ändert einen Pointer-Pointer einfach ab. Es gibt Vor- und Nachteile bei beiden Systemen und Java schreibt nicht vor, was gemacht wird (außer du zitierst die Stelle in der Java vm specification ).
Da du die obere Stelle mitzitiert hast, bist du wohl auch der Meinung, dass,
Irgendwer schrieb:
du scheinst zu viel Java programmiert zu haben und gar nicht mehr zu wissen wie man mit Pointern in C++ umgeht. Schon allein die Tatsache, dass du den Begriff "Pointer" mit Begriffen wie "Basis-Adresse" oder "Offset" assoziierst zeigt doch schon, dass alle Pointer für dich gleich Pointer auf Arrays sind.
Natürlich mag es schon sein, dass nicht immer der Zugriff auf Elemente exakt so implementiert ist, wie ich kurz angedeutet habe, aber darf ich denn kein Beispiel mehr geben, wo der Wert eines Pointers als Basisadresse benutzt wird?
-
Wieso "leider"?
-
Optimizer schrieb:
Ausgangspunkt war
Optimizer schrieb:
Pointer sind nach allgemeinem Verständnis Variablen, die Adressen enthalten. Das trifft auf die Referenzen in Java nicht unbedingt zu.
Ja, aber warum die ganze Aufregung? Das ist doch im Grunde das gleiche. Oder sollte zumindest in der Anschauung so sein, denn wenn du bei Pointern immer gleich die Adressen vor Augen hast, machst du dir die Abstraktion kaputt und belegst unnötig Gehirnkapazität.
-
llf schrieb:
C++ kann leider keine Null-Pointer Arithmethik
wie meinen?
-
Optimizer schrieb:
Irgendwer schrieb:
Ach komm, du scheinst zu viel Java programmiert zu haben und gar nicht mehr zu wissen wie man mit Pointern in C++ umgeht. Schon allein die Tatsache, dass du den Begriff "Pointer" mit Begriffen wie "Basis-Adresse" oder "Offset" assoziierst zeigt doch schon, dass alle Pointer für dich gleich Pointer auf Arrays sind.
Wenn man keine Ahnung hat...
Habe ich irgendwas von Arrays gesagt? Ein Pointer in C++, so wie du ihn wahrscheinlich öfters mal benutzt, zeigt auf die Basisadresse eines Objekts und die einzelnen Datenelemente sind offset. Einfache Pointerarithmetik. Du hast zu wenig maschinennah programmiert, vielleicht in dem Maße, wie ich zu viel Java programmiert habe, oder mehr. Achso, es ist ja völlig falsch, was haben Pointer schon mit Adressen zu tun??Ich habe ja auch nicht gesagt, dass Pointer keine Adressen sind, lern doch lesen. Ich sagte, dass der der bei Pointer als allerstes an eine Basisadresse denkt welche man einen Offset hinzufügen muss keine Ahnung von Programmierung in C++ hat. In C++ sieht man nun einmal eine Folge von Bytes abstrakt als ein Objekt an und Datenelemente als Member. Wer dies nicht tut der kann auch gleich C oder ASM benutzen.
Es gibt aber auch Pointer die auf ganz einfache Objekte zeigen. Diese sind entweder NULL, zeigen auf ein Objekt oder auf ein ehemaliges Objekt.
Alles uninteressant.
Sag ich ja, hast keine Ahnung von Objektabstraktion in C++.
Interessiert den Pointer gar nicht, was das ist.
Vielleicht wird dir so der Unterschied klar:
Pointer in C++ oder einer maschinennahen Sprache: 0x2ee37c22
Referenzen in Java: Objekt #632 oder null
Der Pointer zeigt auf eine Basisadresse, die Referenz kann intern als Pointer repräsentiert werden, muss aber nicht. Kann völlig anders sein. Kann eine Objekt-ID sein. Kann ein Array-Index sein, wo der wahre Pointer gespeichert ist. Hat Vorteile bei der Implementierung des GC.Ja und das ändert natürlich alles in der Denkweise des Programmiere und ist natürlich ein völlig anderes Verfahren der Objektabstraktion.
Deshalb zeigen sie noch lange nicht in die Pampa.
Ne noch schlimmer : Man hat ein Speicherloch und es fliegt einem noch nicht mal um die Ohren.
Du hast weder gesagt, was sie sind,
Interessiert mich auch nicht und eigentlich geht es mich auch nichts an. Ein Pointer kann dereferenziert werden alles andere ist nicht die feine Art und muss als "hacken" und nicht als "programmieren" bezeichnet werden. Pointerarithmetik funktioniert nur bei Arraypointern und gehört eigentlich in das Interface des Arrays ist also ein C Relict.
Übrigens: dass du NULL sagst, zeigt mir schon, dass du dich mit C++ nicht vollständig auskennst und mit dem Konzept des Überladen von Methoden nicht vertraut bist. Hast du dir schon mal überlegt, dass man foo(Auto*) und foo(int) haben kann? Weißt du was passiert, wenn du foo(NULL) aufrufst? Richtig, nicht das, was man vielleicht als erstes erwarten würde. Womit zweifelsfrei bewiesen wäre, dass du noch nie was vom Überladen von Methoden gehört hast. Einleuchtend, oder?
Ne, eigentlich nicht. Dein Argument zeigt aber, dass du keine Ahnung von C++ hast denn hätte ich 0 geschrieben gäbe es das gleiche Problem. :p
Natürlich mag es schon sein, dass nicht immer der Zugriff auf Elemente exakt so implementiert ist, wie ich kurz angedeutet habe, aber darf ich denn kein Beispiel mehr geben, wo der Wert eines Pointers als Basisadresse benutzt wird?
Natürlich darfst du ein Beispiel geben, aber doch bitte eins das sich nicht unter Compilerhaube befindet. Ich sehe ich nicht wieso ein Compiler Objekte nicht wie folgt implementieren dürfte: (Pseudo code)
vector<int>member_1_of_T; vector<char>member_2_of_T; vector<short>member_3_of_T; void T::foo(this){ member_1_of_T[this] = 5; member_3_of_T[this] = 7; }
Und selbst wenn du jetzt eine Stelle im Standard finden solltest welche ein Pointer als x86 virtuelle RAM Adresse ähnliches Gebilde bezeichnen sollte dann zitiere ich den Gummiparagraphen:
[defns.well.formed] 1.3.14 wellformed program
a C++ program constructed according to the syntax rules, diagnosable semantic rules, and the One Definition
Rule (3.2).Das heißt du musst auch noch ein Beispielprogramm zeigen, das sämtlichen Regeln des Standard entspricht und trotzdem bei der obigen Implementierung Scheiße baut. Da die Speicherauslegung von Objekten absolut nicht vorgeschrieben ist wird es schwierig werden zu beweisen, dass Member durch Offsets und Basispointer adressiert werden müssen.
-
Irgendwer schrieb:
Deshalb zeigen sie noch lange nicht in die Pampa.
Ne noch schlimmer : Man hat ein Speicherloch und es fliegt einem noch nicht mal um die Ohren.
Ich diskutiere bestimmt nicht darüber, ob es besser ist, wenn ein Zeiger auf ein gelöschtes (und damit ungültiges) Objekt zeigen kann, oder wenn er immer auf ein gültiges Objekt zeigt. Aus zwei Gründen: es ist vollkommen klar was besser ist, insbesondere, weil ein Programm eben nicht immer abstürzt, wenn man den Zeiger dereferenziert. Und zweitens, weil ich genau das Thema vermeiden will, weil das wieder damit endet, dass entweder C++ oder Java die bessere Programmiersprache sein muss.
Übrigens: dass du NULL sagst, zeigt mir schon, dass du dich mit C++ nicht vollständig auskennst und mit dem Konzept des Überladen von Methoden nicht vertraut bist. Hast du dir schon mal überlegt, dass man foo(Auto*) und foo(int) haben kann? Weißt du was passiert, wenn du foo(NULL) aufrufst? Richtig, nicht das, was man vielleicht als erstes erwarten würde. Womit zweifelsfrei bewiesen wäre, dass du noch nie was vom Überladen von Methoden gehört hast. Einleuchtend, oder?
Ne, eigentlich nicht. Dein Argument zeigt aber, dass du keine Ahnung von C++ hast denn hätte ich 0 geschrieben gäbe es das gleiche Problem. :p
Nein, gäbe es nicht, weil bei foo(0) klar ist, dass foo(int) aufgerufen wird. Außerdem sollte die Folgerung, dass du deshalb kein Overloading kennst nur genauso absurd sein, wie deine, dass ich, weil einmal Basisadresse in den Mund genommen habe, keine Ahnung von C++ habe. Das hast du aber nicht offenbar nicht bemerkt und es stattdessen weiter oben (nicht zitiert) weiterhin mindestens 3mal behauptet. Mehr noch, du hast behauptet
Schon allein die Tatsache, dass du den Begriff "Pointer" mit Begriffen wie "Basis-Adresse" oder "Offset" assoziierst zeigt doch schon, dass alle Pointer für dich gleich Pointer auf Arrays sind.
Ich habe es aber eigentlich nicht nötig, mich rechtzufertigen und Dinge abzustreiten, die einfach unsachlich und unbegründet in den Raum gestellt werden, oder gar das Gegenteil zu beweisen. Daher: </Diskussion>
-
Ausserdem ist Java langsamer als C++.
-
Aus zwei Gründen: es ist vollkommen klar was besser ist, insbesondere, weil ein Programm eben nicht immer abstürzt, wenn man den Zeiger dereferenziert.
Na wenn man das so absolut sagen kann bin ich ja beruhigt. Es ist ja klar, dass es besser ist dass ein Zeiger auf veralteten Müll zeigt als in die Pampa.
Ich habe es aber eigentlich nicht nötig, mich rechtzufertigen und Dinge abzustreiten, die einfach unsachlich und unbegründet in den Raum gestellt werden, oder gar das Gegenteil zu beweisen. Daher: </Diskussion>
Ich verstehe dich, es ist ja auch schwer zu begründen, dass ein Zeiger kein Zeiger ist.
-
meinung schrieb:
Ausserdem ist Java langsamer als C++.
Huuh... Dabei dachte ich immer, das wäre andersrum. Jetzt bin ich ja ganz entsetzt.
-
meinung schrieb:
Ausserdem ist Java langsamer als C++.
Das Stimmt !!!
Java ist definitiv langsamer.
Nur wen interressiert das ?
Mein Rechner hat 2.x GHz, und evtl. noch 2 Threads gleichzeitig dank Intel...
Kommerziell gesehen, ist das KEIN Argument.
Da zählt mehr Entwicklungszeit usw. Eclipse für Java ist
zwar 'langsam' aber brauchbar. Ich verlier pro Tag vielleicht
durch Java in Eclipse 5 min, aber dafür gewinn ich auch wieder
Zeit durch Plugins...
C++ mag 5% schneller sein, Java ist aber eine Plattform,
d.h. ich kann unter XP entwickeln, und es dann unter Linux laufen lassen,
ist doch egal, ist ja Java. In C++ müsste ich erstmal neu kompilieren.
Sicher wäre dann C++ schneller, aber wo hab ich einen Rechner zum compilieren ?
In Java pack ich es einfach in eine Jar Datei, und fertig, läuft immer
auf der VM, wo, hm, das kann mir egal sein.
Desktops sind heute häufig noch Windows (XP/2000/NT/98),
Server eher Unix/Linux.Und wenn ich beides haben möchte, nehm ich .net.
Mit Mono existiert eine Implementation für nicht Windows
die schon weiter ist, als der Release von MS, und 100%
kompatibel.phlox
-
phlox81 schrieb:
meinung schrieb:
Ausserdem ist Java langsamer als C++.
Das Stimmt !!!
Java ist definitiv langsamer.
Nur wen interressiert das ?
Mein Rechner hat 2.x GHz, und evtl. noch 2 Threads gleichzeitig dank Intel...
Kommerziell gesehen, ist das KEIN Argument.
Da zählt mehr Entwicklungszeit usw. Eclipse für Java ist
zwar 'langsam' aber brauchbar. Ich verlier pro Tag vielleicht
durch Java in Eclipse 5 min, aber dafür gewinn ich auch wieder
Zeit durch Plugins...
C++ mag 5% schneller sein, Java ist aber eine Plattform,
d.h. ich kann unter XP entwickeln, und es dann unter Linux laufen lassen,
ist doch egal, ist ja Java. In C++ müsste ich erstmal neu kompilieren.
Sicher wäre dann C++ schneller, aber wo hab ich einen Rechner zum compilieren ?
In Java pack ich es einfach in eine Jar Datei, und fertig, läuft immer
auf der VM, wo, hm, das kann mir egal sein.
Desktops sind heute häufig noch Windows (XP/2000/NT/98),
Server eher Unix/Linux.Und wenn ich beides haben möchte, nehm ich .net.
Mit Mono existiert eine Implementation für nicht Windows
die schon weiter ist, als der Release von MS, und 100%
kompatibel.phlox
willst du damit etwa sagen das java besser als c++ ist?
-
phlox81 schrieb:
Und wenn ich beides haben möchte, nehm ich .net.
Mit Mono existiert eine Implementation für nicht Windows
die schon weiter ist, als der Release von MS, und 100%
kompatibel.Das muss man sich mal auf der Zunge zergehen lassen.
-
omg! schrieb:
willst du damit etwa sagen das java besser als c++ ist?
Keks?
Ihr Trolle werdets wohl nie kapieren: es gibt kein "x ist besser als y", es gibt nur ein "x ist für den Fall Sowieso besser als y" Deine Bemerkung zeigt, dass du nix verstehst.
-
ok, aber windows ist in jedem fall besser als linux.
-
omg! schrieb:
ok, aber windows ist in jedem fall besser als linux.
Yeah, endlich mal wieder ein objektiver Beitrag zu dem noch nie diskutierten Thema!
-
omg! schrieb:
ok, aber windows ist in jedem fall besser als linux.
Ich hoffe du bist im RL nicht so ein Stümper wie du hier zu beweisen versuchst.
-
Bashar schrieb:
phlox81 schrieb:
Und wenn ich beides haben möchte, nehm ich .net.
Mit Mono existiert eine Implementation für nicht Windows
die schon weiter ist, als der Release von MS, und 100%
kompatibel.Das muss man sich mal auf der Zunge zergehen lassen.
Ja gut, nur 99 % :p
-
lol, wo ist dein Schild?
-
merke: jeder thread in dessen namen "c++" und "java" vorkommen ist verloren
obwohl... "auf java programmieren die Leute auch in C++"...wär mal einen test wert...
-
interessant zu sehen dass nicht eine antwort auf die eigentliche frage des threaderstellers gekommen ist, sondern nur dummes rumgeflame was nix mit dem thema zu tun hat :S
zu den letzten intelligeten kommentaren sach ich mal nix weiter