Das ist das Ende von C++!



  • <off-topic>

    groovemaster schrieb:

    TactX schrieb:

    Aber woher weisst du das eigentlich? 😕 :p

    Weil zu den Kommentaren auf Heise auch ein TactX gepostet hat. Ich habe einfach mal vermutet, dass der Nick nicht so oft verwendet wird.

    Täusch dich da mal nicht. Ist mir schon fast zu oft über den Weg gelaufen. Google mal nach TactX und wundere dich wieviel man da findet: Firmen, andere mit dem Nick, Clans, ja sogar ganze Organisationen (siehe derzeitige Sig) 🤡



  • Und warst du es nun oder nicht? 😃



  • Ja 😞

    </off-topic>



  • kleine Frage schrieb:

    Hat D eigentlich einen Garbage Collector?

    hat es, ist aber optional...
    :xmas2:[/quote]
    Na gut... so richtig optional ist der GC in D nicht, wenn man dafür in Kauf nehmen muss, die komplette Phobos-runtime-library nicht zu benutzen, denn die basiert darauf. Es gibt zwar die Möglichkeit Ares, Deimos (veraltet) oder bald Tango (nur angekündigt, closed-beta) zu benutzen, aber deren Status ist nicht wirklich zufriedenstellend.
    Der GC lässt sich aber für kritische Stellen abstellen, jedoch nicht so einfach aus dem Programm entfernen.



  • TactX schrieb:

    Ja 😞

    </off-topic>

    😃 👍



  • Optimizer schrieb:

    ...

    Hi,

    was ich meinte, war Folgendes:
    z.B. Was erwartest Du von diesem Konstrukt:

    class A {
    private:
        Type a;
    public:
    //... restliches Zeug
        Type getA() { return a; }
    };
    
    // call: 
    A a; // oder a = new A();
    a.getA() = 1;
    

    Ich erwarte entweder:
    A Rückgabe einer Kopie (C++) oder
    B Rückgabe einer Referenz (Java).
    Funktioniert prima, wenn Type Klassentyp hat. In C++ bearbeite ich die (tmeporäre) Kopie, in Java auf der Referenz (also auf dem privaten a) - vollkommen in Ordnung, wenn es immer so ist.
    Aber halt: Wenn Type ein eingebauter java-Typ ist, habe ich plötzlich eine Kopie in der Hand und weiß das nur, weil ich das in dem Buch nachgelesen habe. Ersetze ich string, int, ... durch meine myString-, MyInt-, ... -Klasse, verändert sich sofort das Verhalten ... so sehr ich mich auch an der Original-Implementation von string (z.B.) orientieren mag.
    So etwas finde ich konzeptionell einfach sehr unschön.

    Das soll jetzt keine "Java-Schelte" sein, es gibt auch IMO in C++ "Inkonsistenzen" mit primitiven Typen (z.B. bzgl. der Vererbung), so dass ich prinzipiell kein Freund von denen bin.

    Ach ja: Und das Argument "Das haben die halt so gemacht" (bzgl "string") entkräftet irgendwie die Kritik "Das ist aber schlecht" nicht so recht, oder ? Der C++-Programmierer kann sich immerhin noch mit dem "Das ist nur irgendein Lib-Progger gewesen" rausreden ( 😉 ) aber in Java gehört dieses Verhalten zur Sprachdefinition .... 😃

    Gruß,

    Simon2.



  • TactX schrieb:

    Ja 😞

    Hehe. 😃 :p
    Soll aber kein Vorwurf gewesen sein. Ist nur schön zu sehen, dass Moderatoren auch nur Menschen sind. :xmas2:



  • Simon2 schrieb:

    Ich erwarte entweder:
    A Rückgabe einer Kopie (C++) oder
    B Rückgabe einer Referenz (Java).
    Funktioniert prima, wenn Type Klassentyp hat. In C++ bearbeite ich die (tmeporäre) Kopie, in Java auf der Referenz (also auf dem privaten a) - vollkommen in Ordnung, wenn es immer so ist.
    Aber halt: Wenn Type ein eingebauter java-Typ ist, habe ich plötzlich eine Kopie in der Hand und weiß das nur, weil ich das in dem Buch nachgelesen habe.

    Java übergibt *immer* eine Kopie. Wenn natürlich nur ein Zeiger kopiert wird, ist das referenzierte Objekt wieder das selbe. Ist in C++ genauso. Was dich vielleicht stört ist, dass man ein Objekt gar nicht ohne Zeiger anfassen kann.

    Ach ja: Und das Argument "Das haben die halt so gemacht" (bzgl "string") entkräftet irgendwie die Kritik "Das ist aber schlecht" nicht so recht, oder ?

    "So gemacht" wurde, dass Strings unveränderlich sind, aber ich habe hier nirgendwo Kritik diesbzgl. gelesen.



  • Simon2 schrieb:

    Optimizer schrieb:

    ...

    Sich auf ein Zitat beziehen, aus dem man alles gestrichen hat, ist wohl ungefähr so sinnvoll wie dieser Beitrag.



  • Optimizer: Wieso gehst du nicht auf den eigentlichen Inhalt von Simon2s Beitrag ein?



  • Michael E. schrieb:

    Optimizer: Wieso gehst du nicht auf den eigentlichen Inhalt von Simon2s Beitrag ein?

    Nachdem ja eine Unstimmigkeit von Simon2 geklärt wurde, ist Optimizer ja zur Genüge auf Simon2s Beitrag eingegangen. Sich darüber aufzuregen, dass sich das Verhalten beim Wechsel zwischen primitiven Datentypen und allen anderen ändert, ist, als würde ich mich beschweren, dass sich das Verhalten ändert wenn ich in C++ beim Rückgabetyp ein & hinzufüge bzw. entferne. Das hat aber absolut nichts mit Sprachinkonsistenzen zu tun.



  • rüdiger schrieb:

    Und warum ist dann 10 keine Instanz von java.lang.Integer? (bzw. const java.lang.Integer oder kann man etwa so etwas machen "abc".erase(1);?)

    Wer sagt denn das es nicht so ist ? Prinzipiell ist eine 10 nach wie vor ein primitiver Datentyp. Seit Java 5 wurde allerdings Autoboxing/Unboxing eingeführt, d.h. du kannst ein Integer-Literal genauso wie ein Integer-Objekt benutzen.



  • Worüber es eigentlich keinen Diskussionsbedarf gibt, ist dass die Exceptionbehandlung in C++ viel schlechter ist, als die von Java.



  • Optimizer schrieb:

    ...Java übergibt *immer* eine Kopie. ...

    Echt ?
    Wo wird denn in meinem Beispiel bei Java (für Klassentypen) eine Kopie erzeugt ? (also so richtig mit "2mal im Speicher" und so)

    Also das habe ich anders gelernt.

    Ach ja: Und das Argument "Das haben die halt so gemacht" (bzgl "string") entkräftet irgendwie die Kritik "Das ist aber schlecht" nicht so recht, oder ?

    "So gemacht" wurde, dass Strings unveränderlich sind, aber ich habe hier nirgendwo Kritik diesbzgl. gelesen.[/quote]
    Naja, irgendwann ist immer das erste Mal. 😉
    Ach ja, noch eine Nachfrage: Wenn das eine "ganz normal designte Klasse" ist .... wie muss ich als Normalentwickler denn meine Klasse stricken, damit sie genauso wie string arbeitet ? Auch so in Zusammenarbeit mit "+" und "=" ?

    Aber nochmal:
    - Ich habe nicht das Thema "string und eingebaute Typen" aufgebracht
    - Es geht mir darum, ob mit D in diesem Zusammenhang ein Fortschritt erreicht wird oder nicht.
    - Java und C++ dienen mir dabei lediglich als "Erfahrungspool" ... nicht als eigentliches Streitobjekt.
    - Ich sähe es für D als einen Vorteil, wenn sie von der Sonderstellung "eingebauter Typen" abrückten ....
    - ... gerade, weil sie umfangreich templates unterstützen (soll).

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Optimizer schrieb:

    ...Java übergibt *immer* eine Kopie. ...

    Echt ?
    Wo wird denn in meinem Beispiel bei Java (für Klassentypen) eine Kopie erzeugt ? (also so richtig mit "2mal im Speicher" und so)

    Also das habe ich anders gelernt.

    Hättest du mal richtig gelernt. Bei Java wird nicht das Object, sondern ein Zeiger darauf übergeben und dieser Zeiger ist eine Kopie des Original(zeiger)s.

    Programmier doch mal mit Javascript, da ist alles vom Typ var. Es gibt kein int usw.



  • Optimizer schrieb:

    Oder man macht es halt so wie es in C++ aktuell ist: Man freut sich darüber, dass man gar nichts hat. Das ist aber eine Einstellung die ich nur bedingt nachvollziehen kann. 😃

    Dinkumware schrieb:

    for_each

    template<class InIt, class Fn1>
        Fn1 for_each(InIt first, InIt last, Fn1 func);
    

    The template function evaluates func(*(first + N)) once for each N in the range [0, last - first). It then returns func.

    Wieso meinen eigentlich immer Alle, es gäbe kein "foreach" in C++? Es ist zwar auf einer "freestanding"-Implementierung nicht vorhanden, aber zur Standardbibliothek gehört es doch... Wenn du jetzt sagst, dass man dafür Iteratoren braucht - oder Objekte, die sich so verhalten, z.B. Zeiger - : In C# muss man ja auch - wie du selber sagst - ein Interface dafür implementieren:

    Optimizer schrieb:

    Es ist in C#, einer objektorientierten Programmiersprache, der übliche Weg, Schnittstellen zu definieren.

    Felix :xmas2:

    P.S.:

    EchterCoder schrieb:

    Wer braucht schon nen GC, ist doch was für Kinder. 😃

    👍 😃



  • Phoemuex schrieb:

    ...Es ist zwar auf einer "freestanding"-Implementierung nicht vorhanden, ...

    und selbst das ist IIRC nicht der Fall: Es ist nur erlaubt, sie da wegzulassen.
    Ich bin ja mal gespannt, welchen Komfort D auf solchen Systemen bieten wird....

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Phoemuex schrieb:

    ...Es ist zwar auf einer "freestanding"-Implementierung nicht vorhanden, ...

    und selbst das ist IIRC nicht der Fall: Es ist nur erlaubt, sie da wegzulassen.

    Genau so isses.

    Simon2 schrieb:

    Ich bin ja mal gespannt, welchen Komfort D auf solchen Systemen bieten wird....

    *g*



  • Es ist zwar auf einer "freestanding"-Implementierung nicht vorhanden,

    Was soll das heißen?



  • Dass gewisse Teile des C++ Standards für eine "freestanding implementation" optional sind. Dazu gehört z.B. std::string und std::vector.

    Two kinds of implementations are defined: hosted and freestanding. For a hosted implementation, this International Standard defines the set of available libraries. A freestanding implementation is one in which execution may take place without the benefit of an operating system, and has an implementationdefined set of libraries that includes certain languagesupport
    libraries (17.4.1.3).


Anmelden zum Antworten