schönes c++?
-
Edit: Wenn jemand nach der Performanz fragt: Der GC von Java kann sehr gut mit kurzlebigen Objekten umgehen oder vllt. kann der Jit'er es auch Kompelieren. Somit dürfte die Lösung mit der Wrapper Klasse auf die Performanz keinen Ausschlag geben.
Schon klar, aber man muss halt schon wieder einen Wrapper schreiben, weil's sonst der Compiler nicht versteht.
Hat Java eigentlich einen richtigen GC? Der von Python zB ist ziemlicher Schrott ("Igitt, reference counting!").
-
volkard schrieb:
Zeus schrieb:
Jetzt sind wir aber beim Frickeln angekommen - ich meine wir basteln uns Modelle, die wir mit Hilfe von Java nicht ausdrücken können.
keiner verlangt das makro in java.
oder meintest du meine frage nach
//oder für baumknoten swap(parent.left,parent.right.left);
?
Ja damit die Swap-Funktion alle Objekte swappen kann. Siehe mein Code-Post oben.
DEvent schrieb:
Wieso muss NodeRef von Ref erben? Integer erbt doch auch nichts.
Muss nicht, hab mein Post, während du deinen geschrieben hast, bearbeitet.
µngbd schrieb:
Hat Java eigentlich einen richtigen GC? Der von Python zB ist ziemlicher Schrott ("Igitt, reference counting!").
Ja, mehere sorgar, so dass sich seinen GC in Java einstellen kann.
-
Zeus schrieb:
Ja, mehere sorgar, so dass sich seinen GC in Java einstellen kann.
Gefällt mir.
(offtopic)
Wo fängt man denn zu lesen an, wenn man sich Java anschauen will?
-
Google Java Buch Online
-
DEvent schrieb:
Aber egal. Java ist halt für andere Aufgaben und ist, im Gegensatz zu C++, Highlevel Sprache.
C++ ist beides. Aber wieso zählst du
swap()
als Low-Level-Funktionalität?µngbd schrieb:
(offtopic)
Wo fängt man denn zu lesen an, wenn man sich Java anschauen will?Auf der Sun-Homepage findest du auch Tutorials, obwohl ich persönlich ein Buch bevorzugen würde.
-
Zeus schrieb:
oder meintest du meine frage nach
//oder für baumknoten swap(parent.left,parent.right.left);
?
Ja damit die Swap-Funktion alle Objekte swappen kann. Siehe mein Code-Post oben.
So einen ausgemachten Blödsinn lese ich sonst nur im C++-Forum. Man mag doch nicht die Datenstrukturen so vergewaltigen, nur um statt
//swap(parent1.left,parent2.right.left); {Node tmp=parent1.left; parent1.left=parent2.right.left; parent2.right.left=tmp;}
etwas swap-ähnliches schreiben zu dürfen.
Java kann bestimmte Sachen einfach nicht ausdrücken. Da mangelts an Abstraktionsmöglichkeiten und das ist low im Level. In diesem Punkt ist C highleveliger als Java. Tja, traurig aber wahr.
-
volkard schrieb:
;fricky schrieb:
volkard schrieb:
Kannst Du was bauern, das
int a=4; int b=5; swap(a,b);
ermöglicht? Ja oder nein? Wenn ja, gib Code an.
so etwa in Java:
int[] a = {4,5}; swap(a);
wie baust du swap?
und komm mir nicht mit lösungen, die so umständlich zu benutzen sind wieint a=4; int b=5; //begin swap int[] c = {a,b}; swap(c); a=c[0]; b=c[1]; //swapped in only 4 lines of code
nee, in Java swapped man ints nicht so. in Java gibts keine referenzen auf einfache typen. wenn du in Java ein int-swapping intensives programm machen wilst, dann musste arrays nehmen. also so dann:
int[] array = {....}; // n elemente ... swapInts (array, 3, 91); // elemente 3 und 91 tauschen ... public static void swapInts (int[] array, int p, int q) { int temp = array[p]; array[p] = array[q]; array[q] = temp; }
wenn du stattdessen nur mal eben 'nen swap von zwei variablen 'on the fly' brauchst, dann schreibst du's eben direkt hin: int t=a; a=b; b=t;
^^ in unterschiedlichen programmiersprachen geht sowas nunmal anders.
-
volkard schrieb:
//swap(parent1.left,parent2.right.left); {Node tmp=parent1.left; parent1.left=parent2.right.left; parent2.right.left=tmp;}
etwas swap-ähnliches schreiben zu dürfen.
Java kann bestimmte Sachen einfach nicht ausdrücken. Da mangelts an Abstraktionsmöglichkeiten und das ist low im Level. In diesem Punkt ist C highleveliger als Java. Tja, traurig aber wahr.
Das glaubst du doch selbst nicht. Also ist Asm das Highlevelige an allen Sprachen, weil du damit Sachen ausdrücken kannst, die du in Ruby, Php und Java nicht kannst?
Das ist doch die Definition einer hochabstrakten Sprache, dass du eben die Low-Level-Sachen nicht mehr (oder nur umständlich) machen kannst. Bytes zu swappen ist für mich low-level. Mir wäre es sogar lieber, wenn man in Java ganz auf primitive Typen verzichtet hätte.
-
DEvent schrieb:
Bytes zu swappen ist für mich low-level. Mir wäre es sogar lieber, wenn man in Java ganz auf primitive Typen verzichtet hätte.
Ich wiederhole mich gerne nochmals:
Nexus schrieb:
Aber wieso zählst du
swap()
als Low-Level-Funktionalität?Es geht ja gar nicht um Bytes. Wenn man in Java einen Dreieckstausch macht, hat man nie mit Bytes oder Bits zu tun (in C++ übrigens auch fast nie). Trotzdem besitzt der Tausch zweier Objekte eine Semantik, die auch auf höherem Abstraktionslevel von Bedeutung sein kann.
Das Inline-Schreiben des Tauschs über drei Zuweisungen ist meiner Ansicht nach eher Low-Level als ein
swap()
-Funktionsaufruf, weil die temporäre Variable ein Implementierungsdetail ist. In diesem Punkt abstrahiert C++ sogar besser, da es eine fertige Funktion für sowas anbietet und es dem Aufrufer egal sein kann, auf welche Weise zwei Objekte getauscht werden.
-
Schlimmer noch:
ein generisches swap() geht in Java garnicht performant. Da muss man clone() 2 mal aufrufen. Sehr böse Sache sowas.swap() kann in Java immer nur das Objekt selber. Aber auch das funktioniert nur so halb, da du ja keine referenzen tauschen darfst (du weisst ja nicht wer aller handles darauf hat).
Deshalb kopiert man in Java einfach. Sowas kommt halt davon wenn man sich C als Grundlage aussucht :p Aber das kopieren geht schnell genug, ist also mehr ein ästhetisches Problem denn ein praktisches.
-
Nexus schrieb:
DEvent schrieb:
Bytes zu swappen ist für mich low-level. Mir wäre es sogar lieber, wenn man in Java ganz auf primitive Typen verzichtet hätte.
Ich wiederhole mich gerne nochmals:
Nexus schrieb:
Aber wieso zählst du
swap()
als Low-Level-Funktionalität?Es geht ja gar nicht um Bytes. Wenn man in Java einen Dreieckstausch macht, hat man nie mit Bytes oder Bits zu tun (in C++ übrigens auch fast nie). Trotzdem besitzt der Tausch zweier Objekte eine Semantik, die auch auf höherem Abstraktionslevel von Bedeutung sein kann.
Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard). Es gibt halt keine swap() Funktion, die genauso wie in C/C++ aufgebaut ist, trotzdem kannst du Werte durch austauschen sortieren, oder die Teilbäume eines Baumgraphen vertauschen.
Nexus schrieb:
Das Inline-Schreiben des Tauschs über drei Zuweisungen ist meiner Ansicht nach eher Low-Level als ein
swap()
-Funktionsaufruf, weil die temporäre Variable ein Implementierungsdetail ist.In diesem Punkt abstrahiert C++ sogar besser, da es eine fertige Funktion für sowas anbietet und es dem Aufrufer egal sein kann, auf welche Weise zwei Objekte getauscht werden.
Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.
-
DEvent schrieb:
Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard).
War beides kein swap.
Es gibt halt keine swap() Funktion, die genauso wie in C/C++ aufgebaut ist
nehmen wir man swap aus qbasic.
trotzdem kannst du Werte durch austauschen sortieren, oder die Teilbäume eines Baumgraphen vertauschen.
sinnigerweise mit ausgeschriebenem dreieckstausch. die anderen lösungen sind nicht hilfreich, sondern nur unfug.
DEvent schrieb:
Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.
Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.
-
volkard schrieb:
DEvent schrieb:
Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard).
War beides kein swap.
Wieso war beides kein swap?
volkard schrieb:
DEvent schrieb:
Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.
Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.
Hast du auch ein Link dafür?
-
DEvent schrieb:
volkard schrieb:
DEvent schrieb:
Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.
Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.
Hast du auch ein Link dafür?
-
-
DEvent schrieb:
Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.
Dir mag vieles an C++ neu sein. Ja, die Sprache ermöglicht ein einfach anzuwendendes
swap()
, ganz im Gegensatz zu Java, wo sich für einen generischen Tausch eine Inline-Lösung immer noch am meisten lohnt.P.S.: Nein, ich habe grundsätzlich nichts gegen Java. Aber die ganze Zeit oberflächlich von High-Level-Sprache zu sprechen und Probleme, die Low-Level-Workarounds erfordern, damit rechtzufertigen ist etwas fragwürdig.
-
volkard schrieb:
DEvent schrieb:
Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.
Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.
er meint ja die sprache. hat er extra kursiv geschrieben, nicht irgendwelche funktionen einer library (auch wenn sie dabei ist).
btw, kennt einer eigentlich ein sinnvolles beispiel, bei dem objekte selbst geswappt werden müssen? eigentlich reichts doch immer, wenn man referenzen rumschubst anstatt objektinhalte auszutauschen.
-
§25.2.2. Also gehörts zur Sprache. Klugscheißer.
-
volkard schrieb:
DEvent schrieb:
Wieso war beides kein swap?
Nach dieser Definition frag ich mich überhaupt ob eine Funktion in eine funktionale Programmiersprache überhaupt Swap heissen darf. XD
-
Wie ist das eigentlich wieder zu einem weiteren Java vs. C++ - Thread geworden?
Ob Java oder nun C++ besser ist, stand eigentlich nie zur Debatte.