Das ist das Ende von C++!



  • lol, Simon2, warum überlässt du probleme der informatik nicht den informatikern undgehst wieder an deinen computer und programmierst brav weiter...



  • groovemaster schrieb:

    Wie kann man eigentlich in D ein Objekt erstellen, dass nach der Initialisierung, welche laufzeitabhängig ist, nicht mehr verändert werden darf? Also was in C++ mittels const gemacht wird. Soweit ich das verstanden habe, ist das const in D nur für compile-time Konstanten verwendbar?

    Und wofür sind eigentlich diese Mixins in D nützlich? Werde aus den Beispilen nicht so richtig schlau.

    mixins sind da
    http://www.digitalmars.com/d/mixin.html
    ganz gut beschrieben

    const siehe da:
    http://www.digitalmars.com/d/attribute.html#const



  • hallo,

    ich weiß immernoch nicht wo jetzt das problem liegt.
    man sollte sich einfach mal einen disassembler zur hand nehmen und sich anschauen wie der compiler das macht.
    dann sieht man ganz schnell, anhand der register, stack usw. was der wesentliche unterschied zwischen call-by-val und call-by-ref ist.
    man sollte sich dabei natürlich auch das verlassen der funktion anschauen, also abbauen des stacks usw.

    gruß, mdoemli



  • Optimizer schrieb:

    Ich denke aber du verstehst es nicht völlig so, wie es gemeint ist. Du kritisiertest dass die primitiven Typen als Parameter eine Sonderrolle in Java hätten, haben sie aber nicht. Es gibt als Parameter nur primitive Typen oder Referenzen, beide werden kopiert. Es werden nicht Objekte übergeben. Zu denken, dass man Objekte übergibt und die dann by ref, führt erst diese sinnlose Unterscheidung ein.

    Für den Theoretiker mag das ja so klappen, aber für einen Programmierer ist dieser Unterschied vorhanden 😉

    Als Programmierer ist mir nämlich die Referenz als eigenständiges Gebilde egal, da interessiert mich eher das dahinterliegende Objekt (und die Referenz ist bestenfalls ein Mittel zum Zweck, dieses Objekt anzusprechen). Und dadurch liefert Java schon die Fallunterscheidung von Haus aus: Primitive Datentypen können als Parameter verwendet werden, Objekttypen nicht.

    PS: Es ist übrigens interessant zu sehen, wie sich ein Thread über "D" zu einer Diskussion "Java vs. C++" ausweiten kann. Aber bei den verhärteten Fronten glaube ich nicht, daß diese Diskussion zu einem Ergebnis führt.

    PPS: Nur zur Einordnung: Ich studiere Informatik.



  • quote experte schrieb:

    Vielleicht ist mein Source schon zu weit weg, deswegen nochmal:
    Wenn ich (ALS TEMPLATE-PROGRAMMIERER !!!) etwas schreiben will wie ("Kopiersemantik"):

    ...auch in C++ lassen sich nicht zwangsweise alle Objekte kopieren. Die Sache mit dem generischen Ansatz in Templates kannst du also ohnehin vergessen, da auch in C++ Fallunterscheidungen zu treffen sind....

    Natürlich kann ich myClass "unkopierbar" machen (und da bin ich auch froh drüber), aber dann kann ich eben das template nicht verwenden .... was mir der Compiler mitteilt.
    Das habe ich dann als Klassendesigner von myClass bewusst in Kauf genommen und werde die Funktionalität anders implementieren (ohne dieses template).
    Das Argument stärkt aber sogar die Konsistenz des templates UND des generischen Ansatzes, weil die Kopiersemantik nicht stillschweigend gebrochen und durch Referenzsemantik ersetzt wird (oder anders herum).

    quote experte schrieb:

    ...Es ist ein Fehler anzunehmen, dass der Autor einer Funktion oder Methode darüber entscheidet, wie Parameter übergeben wird, denn das kann er nicht so objektiv entscheiden, wie die Entwickler der einzelnen Parameter-Typen. ...

    Dass der Klassenentwickler sich Gedanken machen muss, wie Objekte seines Typs auf verschiedene Semantiken reagieren, bedeutet nicht, dass der template-Programmierer keine Verantwortung mehr dafür hat, was seine Funktion mit den übergebenen Parametern macht, oder ?
    Leider haben beide in diesem Fall nicht die Möglichkeiten dazu: Kein myClass-Programmierer kann seine Klasse so schreiben, dass sie so funktioniert wie primitive Typen und kein template-Programmierer kann sein template so entwerfen, dass sie mit primitiven Typen genauso arbeiten wie mit Klassentypen.

    quote experte schrieb:

    ...

    Kennst Du den Unterschied zwischen Strukturellem ubd Konkretem ? ....

    ...kann man ja daraus schließen, dass C++ für theoretische Probleme und Java für praktische Probleme geeignet ist. ...

    Hä ? Das war jetzt aber nicht der Versuch eines logischen Schlusses, sondern nur der Ausdruck des Wunsches, mich anzugreifen, oder ?
    Ich spreche Dich als Person an und Du siehst Dich als armes unterdrücktes Mitglied der weltweiten Javagemeinde ? 🙄

    Aber komm, lass stecken: Du hast offensichtlich schon viiiiiieeeeel templates programmiert und seeeeehr großes interesse daran, Dich damit auseinanderzusetzen.
    Und Java ist offensichtlich üüüüüüüüüberhaupt keine heilige Kuh von Dir !
    Weitermachen .....

    Gruß,

    Simon2.



  • ....... schrieb:

    Badestrand schrieb:

    Will nichts zu den zahllosen Einzeldiskussionen beitragen, aber ich wäre für ein D-Unterforum; Einfach der Vollständigkeit halber und damit man eine Anlaufstelle hat, falls man es mal ausprobieren möchte 🙂

    Neue Unterforen werden erst bei Bedarf erstellt.

    Ich hab Bedarf... 😃



  • Badestrand schrieb:

    ....... schrieb:

    Badestrand schrieb:

    Will nichts zu den zahllosen Einzeldiskussionen beitragen, aber ich wäre für ein D-Unterforum; Einfach der Vollständigkeit halber und damit man eine Anlaufstelle hat, falls man es mal ausprobieren möchte 🙂

    Neue Unterforen werden erst bei Bedarf erstellt.

    Ich hab Bedarf... 😃

    Ich denke der Bedarf wäre schon da, ansonsten könnte man es ja auch wieder löschen. Immerhin ist D C-kompatibel und ähnlich zu C++, insofern würde es genau so gut wie Java und C# in dieses Forum passen (namensmäßig sogar besser als Java 🙂 )



  • Worum geht es gerade?



  • *gg* Da wiedersprichst aber einige. Unter anderem war die Motivation D zu entwickeln, weil C++ so eine grosse riesenggrosse C kompatibilät hat.
    Unter D kannst du C funktionen nutzen und D-Typen sind kompatible zu C-Typen aber dabei Endes auch, so weit ich gesehen habe.



  • Zeus schrieb:

    *gg* Da wiedersprichst aber einige. Unter anderem war die Motivation D zu entwickeln, weil C++ so eine grosse riesenggrosse C kompatibilät hat.
    Unter D kannst du C funktionen nutzen und D-Typen sind kompatible zu C-Typen aber dabei Endes auch, so weit ich gesehen habe.

    Ich hab jetzt nicht gesagt dass D und C source-kompatibel sind, aber man kann alles aus C in D umsetzen, nicht kompilieren. Bevor jetzt der Präprozessor genannt wird, der lässt sich in D durch Templates und mehr Schreibarbeit umsetzen :p . Kompatibel zwischen D und C sind noch die in statische Bibliotheken exportierten Konstanten, Funktionsaufrufe und Struktur-Alignments... Aber was meinst du mit "dabei Endes auch" ?
    Kompatibel sind D und C++ zwar nicht zwingend, aber größtenteils lässt sich C++ in D recht leicht übersetzen mit nur wenigen Änderungen. Ein D-Unterforum könnte bei solchen Übersetzungsproblemen helfen und bei generellen Problemen mit D. Fragen über sprachübergreifende APIs könnten ja in die anderen Foren.



  • daHa schrieb:

    mixins sind da
    http://www.digitalmars.com/d/mixin.html
    ganz gut beschrieben

    const siehe da:
    http://www.digitalmars.com/d/attribute.html#const

    Sehr hilfreich. Ohne dich hätte ich die Dokumentation wohl nie gefunden. 🙄
    Btw, erstes war mir schon halbwegs klar. Es ging mir um die konkrete Anwendung, was mit anderen Sprachmitteln nicht oder nur sehr umständlich möglich wäre. Zweites ist keine Antwort auf meine Frage.



  • Simon2 schrieb:

    Das Argument stärkt aber sogar die Konsistenz des templates UND des generischen Ansatzes, weil die Kopiersemantik nicht stillschweigend gebrochen und durch Referenzsemantik ersetzt wird (oder anders herum).

    Aber das primitive Datentypen nicht mit Generics verwendbar sind, weil die Kopiersemantik nicht ins Konzept passt, also gebrochen werden müsste, das stört dich ... Ich denke hiermit hat sich der Widerspruchszähler auf 2 erhöht.

    Simon2 schrieb:

    Leider haben beide in diesem Fall nicht die Möglichkeiten dazu: Kein myClass-Programmierer kann seine Klasse so schreiben, dass sie so funktioniert wie primitive Typen und kein template-Programmierer kann sein template so entwerfen, dass sie mit primitiven Typen genauso arbeiten wie mit Klassentypen.

    Ich kann schon die ganze Zeit nicht nachvollziehen, warum du überhaupt primitive Datentypen und Klassen gleich behandeln willst, aber bitte, dann reduzieren wir es auf den gemeinsamen Nenner: nichts. Was willst du denn mit primitiven Datentypen großartig anstellen? Operatoren stehen dir ja in Generics nicht zur Verfügung. Dadurch sollte eigentlich klar sein, dass deine Kritiken absolut am Ziel vorbei gehen, da sie keinerlei Praxisbezug besitzen. Ich habe dir ein Beispiel (von vielen) genannt, dass auch ganz gut ohne Gleichbehandlung von primitiven Datentypen und Klassen auskommt, aber Praxisbezug ist ja anscheinend unwesentlich. Hauptsache die Theorie ist so, wie es C++ Entwickler gewöhnt sind, ja nicht umdenken ...

    Simon2 schrieb:

    Dass der Klassenentwickler sich Gedanken machen muss, wie Objekte seines Typs auf verschiedene Semantiken reagieren, bedeutet nicht, dass der template-Programmierer keine Verantwortung mehr dafür hat, was seine Funktion mit den übergebenen Parametern macht, oder ?

    Das "Was" stand nie in Frage, sondern das "Wie".

    Simon2 schrieb:

    Aber komm, lass stecken: Du hast offensichtlich schon viiiiiieeeeel templates programmiert und seeeeehr großes interesse daran, Dich damit auseinanderzusetzen.

    Ich hab genau so wie die meisten anderen auch meine Erfahrung mit Templates gemacht, auch Modern C++ Design und genau so mit Boost als konkreten Anwendungsfall gearbeitet, aber nachdem ich ja auch Java programmiere, habe ich Templates anscheinend wirklich nicht verstanden. 🙄

    Simon2 schrieb:

    Und Java ist offensichtlich üüüüüüüüüberhaupt keine heilige Kuh von Dir !

    Nein, denn ich kann von mir ja behaupten beide "Welten" zu kennen, wie sieht es da mit dir aus? ... 🙄



  • Clw schrieb:

    Badestrand schrieb:

    ....... schrieb:

    Badestrand schrieb:

    Will nichts zu den zahllosen Einzeldiskussionen beitragen, aber ich wäre für ein D-Unterforum; Einfach der Vollständigkeit halber und damit man eine Anlaufstelle hat, falls man es mal ausprobieren möchte 🙂

    Neue Unterforen werden erst bei Bedarf erstellt.

    Ich hab Bedarf... 😃

    Ich denke der Bedarf wäre schon da

    Warum gibts dann so gut wie keine Threads zum Thema D? 😉



  • Ok. Der Thread kann geschlossen werden.

    Cool

    Der gewünschte Benutzername wurde vom Administrator gesperrt.



  • quote experte schrieb:

    ...
    Ich kann schon die ganze Zeit nicht nachvollziehen, warum du überhaupt primitive Datentypen und Klassen gleich behandeln willst, ...

    std::vector ... um nur ein Beispiel zu nennen ...
    Ich weiß, alles Schrott, den sich nur ein Durchgeknallter ausgedacht hat.

    Gruß,

    Simon2.



  • Waerst Du zufrieden, wenn man die primitven Datentypen ganz rausnimmt?



  • groovemaster schrieb:

    daHa schrieb:

    mixins sind da
    http://www.digitalmars.com/d/mixin.html
    ganz gut beschrieben

    const siehe da:
    http://www.digitalmars.com/d/attribute.html#const

    Sehr hilfreich. Ohne dich hätte ich die Dokumentation wohl nie gefunden. 🙄
    Btw, erstes war mir schon halbwegs klar. Es ging mir um die konkrete Anwendung, was mit anderen Sprachmitteln nicht oder nur sehr umständlich möglich wäre. Zweites ist keine Antwort auf meine Frage.

    also die frage war

    groovemaster schrieb:

    Wie kann man eigentlich in D ein Objekt erstellen, dass nach der Initialisierung, welche laufzeitabhängig ist, nicht mehr verändert werden darf?

    aus der doku:

    http://www.digitalmars.com/d/attribute.html#const schrieb:

    A const declaration without an initializer must be initialized in a constructor (for class fields) or in a static constructor (for static class members, or module variable declarations)

    also zB

    class A {
    	this(int i){
    		mi = i;
    	}
    	const int mi;
    }
    
    int main(char[][] args)
    {
    	//zur laufzeit const 100
    	A a = new A(100);
    	//zur laufzeit const 200
    	A b = new A(200);
    
        return 0;
    }
    

    und das mit den mixin, du kannst das ja, ebenfalls aus der doku, in anderen sprachen nachprogrammieren und dir den unterschied anschaun, die anderen bsps ebenfalls dementsprechend evaluieren

    int y = 3;
    
    template Foo()
    {
        int abc() { return y; }
    }
    
    void test()
    {
        int y = 8;
        mixin Foo;  // local y is picked up, not global y
        assert(abc() == 8);
    }
    

    bezueglich einsatzgebiet, lass deine fantasie spielen

    also ein bissl hilfreich sind die urls schon, weil sie beinhalten sehr wohl antworten auf deine fragen, ist aber nur meine persoenliche meinung, du musst das natuerlich nicht so sehen



  • std::vector ... um nur ein Beispiel zu nennen ...

    Wäre ein gutes Beispiel, wenn es nicht etwas analoges dazu in Java geben würde, dass diese Klasse als Argument entkräftet ..



  • Die Mods stinken. Mal sehen ob die hier noch lesen oder das ganze auch schon langweilig finden.



  • quote experte schrieb:

    std::vector ... um nur ein Beispiel zu nennen ...

    Wäre ein gutes Beispiel, wenn es nicht etwas analoges dazu in Java geben würde, dass diese Klasse als Argument entkräftet ..

    Ein gutes Beispiel für ein template mit Kopiersemantik (auch für Klassentypen) ? Da bin ich wirklich gespannt...

    Übrigens: IIRC C hat dasselbe Problem ...

    Gruß,

    Simon2.


Anmelden zum Antworten