Das ist das Ende von C++!
-
Optimizer schrieb:
Generics, welche auch primitive Datentypen als Typparameter erlauben, findet man in C#. Ihr redet also über längst gegessene Eier. Dass es in Java nicht möglich ist, hat erstmal nur historische Gründe.
Nee, gibts in C# auch nicht - weil es erst gar keine primitiven Typen in C# gibt.
-
Simon2 schrieb:
Auch sonst bleibt Dir außer Deinen persönlichen Empfindlichkeiten kein Argument dafür, dass ich hier Javahetze betreiben würde....
Wenn du behauptest, dass es besser ist eine Inkompatibilität zu bisherigen Java Anwendungen einzuführen (und die wären viel weitreichender als es Generics oder sonstiges Java 5 Features) nur damit du "int" statt "Integer" in den spitzen Klamern schreiben kannst, dann ist das Javahetze und noch dazu völlig unberechtigte.
-
quote experte schrieb:
Simon2 schrieb:
Auch sonst bleibt Dir außer Deinen persönlichen Empfindlichkeiten kein Argument dafür, dass ich hier Javahetze betreiben würde....
Wenn du behauptest, dass es besser ist eine Inkompatibilität zu bisherigen Java Anwendungen einzuführen ...
Hä ?
Wen interessiert hier denn Java ?
Ich dachte, wir sprechen von D ?Ich warte noch auf den Basic-Fanboy, der mir Basic-Hetze vorwirft, weil ich "Inkompatibilität zu bisherigen Basic-Anwendungen forderte" ....

Ich treffe hier lediglich Aussagen dazu, worauf in meinen Augen bei einer neuen Sprache (bzgl. diesem Aspekt) besonderes Augenmerk in Sachen Konsistenz geworfen werden sollte ....
BTW: Wurde hier nicht gerade als besonderer Vorteil von D gepriesen, dass auf "Altlastenkompatibilität" verzichtet werde ?
Gruß,
Simon2.
-
Also, wenn Simon2 etwas an einer anderen Sprache aussetzt, kommt das Argument "Das war schon immer so und ist gewollt... hal by-design. und du hetzt gegen X." Aber wenn jemand was gegen C++ sagt, zählt das Argument "by-Design" nicht mehr. Komisch...
-
Simon2 schrieb:
Optimizer schrieb:
Generics, welche auch primitive Datentypen als Typparameter erlauben, findet man in C#. Ihr redet also über längst gegessene Eier. Dass es in Java nicht möglich ist, hat erstmal nur historische Gründe.
Es geht hier auch nicht um C#, Java, C++, Basic, Algol oder sonstwas, sondern nur um D .... und die Aussage, dass D (angeblich)
- primitive Typen und Klassen bzgl. Kopie/Referenz so behandelt wie in Java und gleichzeitig
- templates unterstützt.
... sowie um meine Vermutung, dass das zu Inkonsistenzen in D führen könnte.
Gruß,
Simon2.
Du vermutest auch, dass es in Java Parameterübergabe per Referenz gäbe. Vielleicht solltest du nicht so viele Vermutungen anstellen, ohne dir D vorher wenigstens angesehen zu haben.
-
Zwergli schrieb:
Optimizer schrieb:
Generics, welche auch primitive Datentypen als Typparameter erlauben, findet man in C#. Ihr redet also über längst gegessene Eier. Dass es in Java nicht möglich ist, hat erstmal nur historische Gründe.
Nee, gibts in C# auch nicht - weil es erst gar keine primitiven Typen in C# gibt.
Naja, das ist irgendwo auch Ansichtssache. Im Framework wird ein System.Int32 und seine Konsorten als Struktur mit Methoden dargestellt, allerdings handelt es sich dabei schon um einen besonderen Typ. Er ist nicht aus anderen kleineren Typen zusammengesetzt und hat im IL-Code seine eigenen, fest eingebauten Typcode, was bei anderen value types nicht der Fall. Man möchte es natürlich schon gerne so aussehen lassen, als wäre er nichts besonderes und meistens gelingt das ja auch ganz gut.
-
Artchi schrieb:
Also, wenn Simon2 etwas an einer anderen Sprache aussetzt, kommt das Argument "Das war schon immer so und ist gewollt... hal by-design. und du hetzt gegen X." Aber wenn jemand was gegen C++ sagt, zählt das Argument "by-Design" nicht mehr. Komisch...
Ja, der feine Unterschied ist, wenn jemand das Design versteht und nicht toll findet, dass man das als persönliche Meinung stehen lassen kann, wohingegen woanders vielleicht Klärungsbedarf besteht. Aber keine Angst, D wird schon nicht das Ende von C++ sein. :xmas1:
-
Ja besonders wenn man die Specs liest und dann mit D nachprogrammiert und der Kompiler error schmeisst, könnte DM nicht wenigstens ne aktuelle Spec bieten.
-
ist das hier ein schrecken ohne ende oder ein ende mit schrecken?
-
Optimizer schrieb:
...Du vermutest auch, dass es in Java Parameterübergabe per Referenz gäbe. Vielleicht solltest du nicht so viele Vermutungen anstellen, ohne dir D vorher wenigstens angesehen zu haben.
Was war jetzt genau Dein Argument zum Thema ?
Gruß,
Simon2.
-
Ganz einfach. Eigentlich steht es da und ich kann es nur mit anderen Worten wiederholen. Du stellst Vermutungen auf, was an D inkonsequent wäre, hast es dir aber selber noch nicht wirklich gut angesehen. Das das keine gute Idee ist, sieht man am anderen Beispiel. Die Macher von D haben sich sicherlich genauso wie du Gedanken gemacht, aber sind sicherlich auch noch weiter gegangen und haben konkrete Ansätze ausprobiert.
Zu D selber sage ich nichts, weil ich es mir ebenfalls nicht ausführlich genug dafür angesehen habe. Ich wollte dich also lediglich ermutigen, das selbe zu tun, bevor komische Vergleiche zu Java gezogen werden, über das dann auch noch inkorrekte Aussagen getroffen werden.
-
Mal ganz abseit: was für ne Parameterübergabe gibt's denn bitte in Java, wenn nicht per Referenz? Oder bezog sich das nur auf eingebaute Typen?
-
Optimizer schrieb:
...Zu D selber sage ich nichts, weil ich es mir ebenfalls nicht ausführlich genug dafür angesehen habe. Ich wollte dich also lediglich ermutigen, das selbe zu tun, bevor komische Vergleiche zu Java gezogen werden, über das dann auch noch inkorrekte Aussagen getroffen werden.
Ach so - ich hatte die ganze Zeit gedacht, dass Du mir inhaltlich widersrechen würdest.
Gruß,
Simon2.
P.S.: java-Strings halte ich (aus den besagten Gründen) immer noch für "zwittrig", aber das soll Dich nicht weiter stören.

-
Jester schrieb:
Mal ganz abseit: was für ne Parameterübergabe gibt's denn bitte in Java, wenn nicht per Referenz? Oder bezog sich das nur auf eingebaute Typen?
Welche Aussage meinst Du (die sich auf eingebaute Typen beziehen könnte oder eben nicht) ?
Gruß,
Simon2.
-
Jester schrieb:
Mal ganz abseit: was für ne Parameterübergabe gibt's denn bitte in Java, wenn nicht per Referenz? Oder bezog sich das nur auf eingebaute Typen?
Naja es ist doch in Java immer by value. Wenn du einen Zeiger übergibst, wird der Zeiger kopiert. In jedem Fall wird es dir nie gelingen, einen Parameter für den Aufrufer zu manipulieren (also den Zeiger zu verbiegen). Du kannst auch noch so viel kopieren, nur mal angenommen wenn Java auch noch das referenzierte Objekt kopieren würde, könnte dieses wieder andere Objekte referenzieren und die würden wieder nicht kopiert. Man muss sich also schon auf die unterste Ebene stellen und mal klar sehen, dass ein *Zeiger* übergeben wird und dieser wird kopiert.
Das ist das gleiche Verhalten wie in C++, deshalb hat es mich auch stark verwundert, wieso man da einen Unterschied diesbzgl. zu C++ sehen kann. Ich habe ja auch geschrieben, dass man es vielleicht kritisieren könnte, dass man in Java Objekte nie ohne Zeiger anfassen kann. Aber das Verhalten ist doch durchgehend, Parameter by value zu übergeben und einen C++ler sollte sowas wirklich nicht verwirren.
-
Optimizer schrieb:
Jester schrieb:
Mal ganz abseit: was für ne Parameterübergabe gibt's denn bitte in Java, wenn nicht per Referenz? Oder bezog sich das nur auf eingebaute Typen?
Naja es ist doch in Java immer by value. Wenn du einen Zeiger übergibst, wird der Zeiger kopiert. In jedem Fall wird es dir nie gelingen, einen Parameter für den Aufrufer zu manipulieren (also den Zeiger zu verbiegen).
Das ist dann wohl eine Frage der sichtweise. Letztlich wird natürlich immer irgendeine Adresse by value übergeben. Ich möchte meinen Funktionen üblicherweise bestimmte Objekte übergeben und sehe es dann so, dass das ein Aufruf by reference ist. Schließlich kann man Änderungen, die in der Funktion am Objekt stattfinden auch außen sehen. Ich finde aber auch, dass einen Pointer in C++ zu übergeben ein Call by reference ist.
-
Optimizer schrieb:
Das ist das gleiche Verhalten wie in C++, deshalb hat es mich auch stark verwundert, wieso man da einen Unterschied diesbzgl. zu C++ sehen kann. Ich habe ja auch geschrieben, dass man es vielleicht kritisieren könnte, dass man in Java Objekte nie ohne Zeiger anfassen kann. Aber das Verhalten ist doch durchgehend, Parameter by value zu übergeben und einen C++ler sollte sowas wirklich nicht verwirren.
Der Unterschied ist, daß du in C++ selber entscheiden kannst, ob du das Objekt oder nur einen Zeiger darauf übergeben kannst. In Java ist (fast) alles ein Zeiger - das heißt du kannst zwar nicht die Variable des Aufrufers umbeigen, aber du kannst auf jeden Fall ihren Inhalt manipulieren.
(und das Verhalten ist nicht durchgehend - primitive Typen werden als Wert, alle anderen über einen Zeiger weitergereicht)
-
CStoll schrieb:
(und das Verhalten ist nicht durchgehend - primitive Typen werden als Wert, alle anderen über einen Zeiger weitergereicht)
Auf welche Sprache bezieht sich das? o.O
-
Zeus schrieb:
CStoll schrieb:
(und das Verhalten ist nicht durchgehend - primitive Typen werden als Wert, alle anderen über einen Zeiger weitergereicht)
Auf welche Sprache bezieht sich das? o.O
Java (zumindest so, wie ich es kennengelernt habe) - in C(++) kannst du schließlich detailliert festlegen, ob ein Objekt als Wert (
func(T x);) oder als "Referenz" (func(T& x);bzw. im erweiterten Sprachgebrauchfunc(T* x);übergeben wird, und das unabhängig ob T ein build-in oder ein selbstdefinierter Typ ist.
-
Hi,
ich denke, die Verwirrung liegt einfach darin, dass hier bisweilen schleichend die Perspektive gewechselt wird:
Ein oft genanntes Schlagwort (gerade in der Abgrenzung zu C/C++) bzgl. Java ist doch "Es gibt keine Zeiger !". Das steht in krassem Widerspruch dazu, dass tatsächlich in Java fast ausschließlich mit Zeigern gearbeitet wird - weiß eigentlich auch jeder, aber in den Sprachgebrauch ist das noch nicht so recht eingegangen: Es wird immer gesagt "Man bekommt/nimmt/übergibt ein Objekt" ... und das bezeichnet (im Fall von "übergeben") gerade den Fall "call-by-value". Das Übergeben einer Referenz (auch, wenn der Inhalt der Referenzvariable dazu kopiert wird) nennt man klassisch "call-by-reference" .... was sonst sollte man call-by-ref" nennen ?
Niemand käme wohl auf die Idee in C++
void f(MyType*); void f(MyType&);als "call-by-value" zu bezeichnen - obwohl doch auch hier die Referenzvariable kopiert wird ...
Der eigentliche Knackpunkt ist eigentlich, dass man gar nicht die Wahl hat, ob man ein Objekt oder eine Referenz in die Finger bekommt: Man bekommt entweder immer eine Referenz (Klassentypen) oder immer ein Objekt (primitive Typen).
Wer bei Klassentypen "call-by-value" implementieren will, muß von Hand kopieren (entweder vor dem Call oder in der Funktion) ...Gruß,
Simon2.