Programmier-"Niveau"



  • Shade Of Mine schrieb:

    Xin schrieb:

    Ich kann Dich auch nur darauf hinweisen, dass nur weil Du keine Scopes siehst, da trotzdem welche sind und auch da wo Du keine Variablen siehst, da trotzdem Variablen sind, die genauso aus Scopes laufen, wie ich es zuvor beschrieben habe.

    Deine Terminologie ist einfach komplett falsch. Das ist das Problem 😉

    Neues Problem...? ^^

    Shade Of Mine schrieb:

    Fuer dich bedeutet Scope/Stack das selbe und zwar, dass Objekte eine Lebenszeit haben und Objekte heissen bei dir Variablen.

    Hehehe, da bist Du gerade mal komplett auf dem Holzweg, was Deine Vermutung über meine Definition von Variablen angeht.

    There is no Spoon... ich leugne in C++ sogar die Existenz von Variablen, ergo können sie nicht die Objekte sein 😉

    Eine "Variable" ist ein Hilfskonstrukt, um ein Objekt zu identifizieren. Eine Variable selbst kann dabei auch ein Objekt sein, z.B. in Perl, die Variable kann aber nicht das Objekt sein mit dem der Programmierer zu arbeiten glaubt.
    Man unterscheidet ja auch gerne zwischen Referenztypen und Primitiven, trotzdem kann man von beiden Variablen erzeugen, wobei die eine Variable nicht so funktioniert wie die andere. Deswegen ist eine C++-Variable auch nicht das gleiche wie eine Perl-Variable, weil beide Sprachen diese Identifizierung unterschiedlich handhaben. Es ist in beiden Fällen ein Hilfskonstrukt, das mal so, mal so implementiert wird, aber mit dem eigentlichen Objekt nur indirekt zu tun hat.

    Eine Variable ist eine Identifikation einer Speicherstelle mit der zusätzlichen Information, was dort zu erwarten ist - auch dann, wenn sie einen primitiven Datentyp beschreibt. In Perl dynamisch zur Laufzeit, in C++ statisch zur Kompilierzeit. Ich würde sagen in C++ sind 90% aller Variable ein Integer kleiner 100, selbst dann, wenn der Entwickler

    int a = 200;
    

    geschrieben hat. Auch ein "int" ist am Schluss doch wieder ein '(char )' und in 90% der Fälle eben ein (char)+x, nämlich dann, wenn der Stack oder 'this' ins Spiel kommt, also bei allen nicht statisch lokalen Variablen, bei allen Parametern, Membern und bei allen "Variablen", die unbenannt sind und Du als Programmierer gar nicht zu Gesicht bekommst. Auch die unbenannten sind voll typisiert und rufen entsprechend beim Verlassen ihres Scopes den Destruktor auf.

    Perl ist da noch aufwendiger, weil die Information zur Laufzeit noch in einem dafür vorgesehenen Objekt existieren muss. Was eine Variable in beiden Sprachen definitiv nicht ist, ist das Objekt mit dem der Programmierer zu arbeiten glaubt.

    Ab hier geht's los. An der Stelle bin ich auch nicht "implementierungsabhängig", denn ab hier spielt es keine Rolle mehr, ob Du RAII in C++ oder Perl beschreibst. Ab hier stellt sich nur noch die Frage nach dem Konzept. Die Sprache klärt nur die Frage, ab wo dem Programmierer erlaubt wird, Einfluss zu nehmen. Aber das spielt für das Konzept selbst ja keine Rolle, solange der Programmierer die für das Konzept passenden fehlenden Befehle anweist. Da ist in Perl weniger erforderlich als in C++, weil einem Perl hier das Konzept schon soweit fertig ungefragt vor die Nase setzt.

    Shade Of Mine schrieb:

    Wenn du statt

    wir sprachen eigentlich immer davon, dass die Variablen/Objekte auf dem Stack liegen

    die korrekte Terminologie verwendest:
    wir sprachen eigentlich immer davon, dass Objekte am Ende ihrer Lebenszeit ihre Resourcen selber aufraeumen
    dann passt es ja.

    Ooookay... wir sind uns grundsätzlich ja einig was RAII macht, schließlich werden bei Objekten, die auf dem Stack liegen nach Ablauf der Lebenszeit der Destruktor aufgerufen, der ihre Resourcen aufräumt... genau darum legt man die Dinger ja auch auf den Stack... Vase oder Gesicht...

    Also habe ich jetzt die Funktionsweise des Destruktors hier nicht verstanden, wenn mir man mir erklärt, dass ich RAII nicht verstehe? "Resource Acquisition Is Initialization" heißt also übersetzt, dass Objekte am Ende ihrer Lebenszeit ihre Resourcen aufräumen und schon hätten wir uns sofort verstanden? Gut, das muss einem ja mal so gesagt werden. 😉

    Das erwarte ich von allen Klassen, dass sie die zu verantworteten Resourcen freigeben, da brauche ich eigentlich gar kein Buzzword zu. Ich habe da einfach ein Wort für Klassen, die das nicht machen: Defekt.
    Mir war also nicht bewusst, dass ich für RAII explizit erwähnen muss, dass der Destruktor funktioniert, denn das halte ich für implizit, wenn ich Objekt sage. Und bevor jetzt der Pointer kommt, bei dem das nicht geht - auch der hat einen funktionierenden Destruktor, nur darf dieser nicht delete aufrufen, aber das Pointerobjekt wird entsprechend seiner Verantwortung und Definition korrekt abgebaut. Hätte man ein delete gewünscht, hätte man ja einen SmartPointer genommen.

    Shade Of Mine schrieb:

    ich weiss, ich kanns nicht lassen 😞

    Hehehe. Und ich weiß das auch. 😃



  • Eine Variable ist eine Identifikation einer Speicherstelle mit der zusätzlichen Information, was dort zu erwarten ist - auch dann, wenn sie einen primitiven Datentyp beschreibt. In Perl dynamisch zur Laufzeit, in C++ statisch zur Kompilierzeit. Ich würde sagen in C++ sind 90% aller Variable ein Integer kleiner 100, selbst dann, wenn der Entwickler

    Das ist falsch. Register haben keine Addresse. Variablen können raus optimiert wrden, wnn der Compiler das Ergebnis bereits selbst berechnen kann usw. Aber ein "das ist falch" hat dich noch nie abgehalten, dich weiter zu verrennen. "Konsequent ist, wer Holzwegen bis an ihr Ende folgt"

    message delivered, over and out.



  • otze schrieb:

    Eine Variable ist eine Identifikation einer Speicherstelle mit der zusätzlichen Information, was dort zu erwarten ist - auch dann, wenn sie einen primitiven Datentyp beschreibt. In Perl dynamisch zur Laufzeit, in C++ statisch zur Kompilierzeit. Ich würde sagen in C++ sind 90% aller Variable ein Integer kleiner 100, selbst dann, wenn der Entwickler

    Das ist falsch. Register haben keine Addresse. Variablen können raus optimiert wrden, wnn der Compiler das Ergebnis bereits selbst berechnen kann usw. Aber ein "das ist falch" hat dich noch nie abgehalten, dich weiter zu verrennen. "Konsequent ist, wer Holzwegen bis an ihr Ende folgt"

    message delivered, over and out.

    Abgesehen von dem "Das ist falsch" hast du nichts Falsches gesagt, wobei in dem Fall das, was Du als Variable bezeichnet, das Objekt ist, welches herausoptimiert wird, welches Dir als Entwickler als Variable angeboten wird, die zur Laufzeit in Wirklichkeit nie existiert hat.

    Ich weiß es auch nicht, soviele Leute sagen mir, dass was ich tue alles falsch ist, ich muss ein schrecklicher Informatiker sein. Was ich nur nie verstehe ist, dass das Falsche, was ich tue funktioniert und die Leute, nachdem sie das Problem dann richtig gelöst und implementiert haben, genau die selben Fehler machen, damit etwas funktionierendes dabei rauskommt.

    Solange "richtig" nicht funktioniert und ich in der Umsetzung mit "falsch" erfolgreich bin, bleibe ich gerne auf dem Holzweg. Am Ende entscheiden nämlich nicht die erfahrenen C++-Entwickler im C++-Forum, sondern die Frage, ob ein Programm fehlerfrei das gewünschte Ergebnis liefert. Aber das ist vermutlich auch falsch. 😉



  • @Xin
    Variablen existieren - wenn wir mal C-artige Sprachen ohne Reflection als Grundlage nehmen - grundsätzlich nur im Source-Code.
    Genaugenommen existiert alles nur im Source-Code, bzw. der Vorstellung des Programmierers. Ausgenommen vielleicht bestimmte Werte-Folgen die man bei als beobachtbar klassifizierten Dingen in bestimmten Speicherbereichen wiederfinden wird, wenn man ein Programm laufen lässt.

    Zu sagen eine Variable sei eine Adresse oder ein Offset oder sonstwas ist Unfug. Der C- bzw. C++-Standard garantiert unter Verwendung bestimmter definierter Begriffe wie "Objekt" etc. ein bestimmtes Verhalten, und das Programm setzt es um.
    Dabei können zur Umsetzung von etwas was im Source-Code Variablen verwendet durchaus Adressen oder Offsets zum Einsatz kommen. Eine Variable *ist* deswegen aber weder eine Adresse noch ein Offset.

    Davon abgesehen halte ich die Unterscheidung der Begriffe "Variable" und "Objekt" für fragwürdig. Ich würde eher sagen: Variablen sind in C++ eine Möglichkeit über Objekte zu sprechen.



  • @cooky451
    Sorry falls der Artikel schon verlinkt wurde, ich hab nicht den ganzen Thread gelesen.
    Passt auf jeden Fall für mich genau zu deiner Frage.

    http://www.damninteresting.com/unskilled-and-unaware-of-it/

    Und ja, mich wundert es auch immer wieder wie manche Leute ernsthaft von sich behaupten können sie könnten programmieren.



  • hustbaer schrieb:

    Zu sagen eine Variable sei eine Adresse oder ein Offset oder sonstwas ist Unfug. Der C- bzw. C++-Standard garantiert unter Verwendung bestimmter definierter Begriffe wie "Objekt" etc. ein bestimmtes Verhalten, und das Programm setzt es um.

    Jaja, der C++-Standard... der interessiert unter genau einer Bedingung: Dass man C++ programmiert. Ansonsten interessiert nur die Maschine, die sagt, ob ein Konzept umgesetzt werden kann oder nicht.

    hustbaer schrieb:

    Dabei können zur Umsetzung von etwas was im Source-Code Variablen verwendet durchaus Adressen oder Offsets zum Einsatz kommen. Eine Variable *ist* deswegen aber weder eine Adresse noch ein Offset.

    Verstehe... Du sagtest ja schon, dass ich Unfug schreibe.

    Dann schreib mal eine Implementierung und dann schauen wir mal, welche Member bei Dir in der class Variable auftauchen. 🙂
    Für die Implementierung wirst Du das nämlich scharf definieren müssen und feststellen, dass eine Variable in der Regel ein Integer ist oder eine Adresse.

    hustbaer schrieb:

    Davon abgesehen halte ich die Unterscheidung der Begriffe "Variable" und "Objekt" für fragwürdig. Ich würde eher sagen: Variablen sind in C++ eine Möglichkeit über Objekte zu sprechen.

    "Ich würde" sagen, "ich halte" nicht, sondern "ich habe". Ich habe implementiert. Diese Begriffe sind nicht wirklich fragwürdig.

    Es ist absolut verständlich, dass man sich diese Sachen erstmal genau definieren muss und dass das im Programmieralltag gar nicht so tief in eine Sprache einsteigen muss. Aber das macht meine Aussage nicht zu Unfug.

    Und das ist die Ecke aus der ich Konzepte aufbaue und verstehe, da juckt mich kein C++-Standard, kein Perl, kein sonstwas. Und daher reden Shade of Mine und ich über das gleiche ohne, dass es jemandem auffällt. 😉



  • @hustbaer
    Erinnert mich an ein Bewertungsschema für Vorträge das ich mal gelesen habe:

    Excellent
    Very Good
    Good
    Average
    Poor

    Schön zu sehen hier wie "average" schon abwertend benutzt wird, quasi wie ein "almost poor". Average ist wohl einfach nicht genug. Ich würde mal schätzen der Durchschnitt der Bewertungen wird zwischen Good und Very Good liegen - wobei schon die Annahme dass durchschnittliche Vorträge nicht gut sein können verstörend ist. 😉



  • Xin schrieb:

    hustbaer schrieb:

    Zu sagen eine Variable sei eine Adresse oder ein Offset oder sonstwas ist Unfug. Der C- bzw. C++-Standard garantiert unter Verwendung bestimmter definierter Begriffe wie "Objekt" etc. ein bestimmtes Verhalten, und das Programm setzt es um.

    Jaja, der C++-Standard... der interessiert unter genau einer Bedingung: Dass man C++ programmiert. Ansonsten interessiert nur die Maschine, die sagt, ob ein Konzept umgesetzt werden kann oder nicht.

    Unsinn ein Compilerbauer schafft eine widerspruchsfreie Abbildung von abstrakte Konzepten auf die Maschine.



  • Zeus schrieb:

    Xin schrieb:

    hustbaer schrieb:

    Zu sagen eine Variable sei eine Adresse oder ein Offset oder sonstwas ist Unfug. Der C- bzw. C++-Standard garantiert unter Verwendung bestimmter definierter Begriffe wie "Objekt" etc. ein bestimmtes Verhalten, und das Programm setzt es um.

    Jaja, der C++-Standard... der interessiert unter genau einer Bedingung: Dass man C++ programmiert. Ansonsten interessiert nur die Maschine, die sagt, ob ein Konzept umgesetzt werden kann oder nicht.

    Unsinn ein Compilerbauer schafft eine widerspruchsfreie Abbildung von abstrakte Konzepten auf die Maschine.

    Was mich in diesem Forum immer wieder wundert, dass viele erstmal erklären müssen, dass sie dagegen ist, um dann eine Begründung dahinter zu liefern, die überhaupt keinen Zusammenhang mit der Aussage hat, die zuvor als "Unsinn" bezeichnet wurde. Dabei muss Deine nachfolgende Aussage ja nichtmals falsch sein - meine aber auch nicht. Es besteht einfach kein Zusammenhang und daher ist es auch keine Begründung dafür, erstmal dagegen zu sein.

    Da Du offenbar Compilerbauexperte bist, fällt Dir sicherlich eine bessere Begründung dafür ein, mir "Unsinn" zu unterstellen. Ich könnte mir aber auch vorstellen, dass Du bloß einen Satz in diesem Thread gelesen hast und ohne Zusammenhang dieses Threads mal ein "Unsinn" posten wolltest.



  • Xin schrieb:

    Zeus schrieb:

    Xin schrieb:

    hustbaer schrieb:

    Zu sagen eine Variable sei eine Adresse oder ein Offset oder sonstwas ist Unfug. Der C- bzw. C++-Standard garantiert unter Verwendung bestimmter definierter Begriffe wie "Objekt" etc. ein bestimmtes Verhalten, und das Programm setzt es um.

    Jaja, der C++-Standard... der interessiert unter genau einer Bedingung: Dass man C++ programmiert. Ansonsten interessiert nur die Maschine, die sagt, ob ein Konzept umgesetzt werden kann oder nicht.

    Unsinn ein Compilerbauer schafft eine widerspruchsfreie Abbildung von abstrakte Konzepten auf die Maschine.

    Was mich in diesem Forum immer wieder wundert, dass viele erstmal erklären müssen, dass sie dagegen ist, um dann eine Begründung dahinter zu liefern, die überhaupt keinen Zusammenhang mit der Aussage hat, die zuvor als "Unsinn" bezeichnet wurde. Dabei muss Deine nachfolgende Aussage ja nichtmals falsch sein - meine aber auch nicht. Es besteht einfach kein Zusammenhang und daher ist es auch keine Begründung dafür, erstmal dagegen zu sein.

    Krass, ich hab dir mit diesen Satz in zwei Fakten sofort wiederspruchen und du kommst damit an.



  • Ich hab das Gefühl, hier reden alle aneinander vorbei. Jedenfalls kann ich in dem letzten Kaskadenzitat bei keiner Aussage begreifen, wie die mit der letzten zusammenhängt.



  • Eisflamme schrieb:

    Ich hab das Gefühl, hier reden alle aneinander vorbei. Jedenfalls kann ich in dem letzten Kaskadenzitat bei keiner Aussage begreifen, wie die mit der letzten zusammenhängt.

    Ich habe diesen Eindruck auch und verstehe das Thema als solches nicht.



  • @Xin
    Variablen sind ein abstraktes Konzept und existieren nur im Source-Code.

    Je nach Sprache und Compiler wird es im kompilierten Programm etwas geben was diesem Konzept mehr oder weniger entspricht. Oder eben auch nicht. Eine 1:1 Abbildung ist bei einem halbwegs leistungsfähigen Compiler nicht möglich.
    Daher ist auch die Aussage "eine Variable ist ein Offset/Adresse" Quatsch.

    Ganz konkret: die selben Variable kann im Kompilat einmal in einem Register stehen, danach an Offset X und ein paar Befehle weiter an Offset Y. Oder eben auch gar nicht vorkommen.
    Beispielsweise können viele Compiler Laufvariablen in Schleifen rausoptimieren.

    T* p = ...;
    size_t const len = ...;
    for (size_t i = 0; i < len; i++)
        p[i].Something();
    

    Im fertigen Kompilat können hier p, len und i zu zwei Registern/Werten zusammengefasst werden: dem Zeiger auf das aktuelle p[i] und einem Zeiger auf p[len] bzw. p[len - 1].

    Also wieder nach C++ zurückübersetzt:

    T* p2 = ...;
    T* pend = p2 + ...;
    while (p2 != pend)
    {
        p2->Something();
        p2++;
    }
    

    Und nun beantworte mir bitte: welchen Offset bzw. welche Adresse haben hier jeweils p, len und i?

    Das Beispiel ist jetzt in C++, das selbe gilt aber für quasi jede Sprache.



  • hustbaer schrieb:

    @Xin
    Variablen sind ein abstraktes Konzept und existieren nur im Source-Code.

    ...

    Und nun beantworte mir bitte: welchen Offset bzw. welche Adresse haben hier jeweils p, len und i?

    Die übliche Antwort des Experten: Das ist implementierungsabhängig. ^^

    Die Antwort kann ich auch nicht geben, weil ich die Verschachtelung des Scopes nicht kenne.
    Variablen, die rausoptimiert werden, existieren nicht. Was nicht existiert, braucht auch kein Offset.

    long long int add( int a, int b )
    {
      long long int c = a+b;
      return c;
    }
    

    Implementierungsabhängig! Eine Möglichkeit innerhalb des Scopes wäre: c ist -8, a ist 0, b ist 4, <unnamed result> ist 8.


  • Mod

    Xin schrieb:

    Variablen, die rausoptimiert werden, existieren nicht. Was nicht existiert, braucht auch kein Offset.

    Interessant. Wie kommt es dann, dass trotzdem ihre Konstruktoren und Destruktoren ausgeführt werden, obwohl sie gar nicht existieren?

    #include <iostream>
    
    struct foo
    {
      int damit_du_nicht_meckerst_foo_waere_leer;
      ~foo() {std::cout << "Et tu, Brute?\n"; }
    };
    
    int main()
    {
     foo bar;
     bar.damit_du_nicht_meckerst_foo_waere_leer = 123;
    }
    

    Übersetz das mal optimiert mit dem Compiler deiner Wahl und guck dir den Maschinencode/Debugcode an. Kein Stackpointer, kein this-Zeiger, kein Symbol bar. Trotzdem wird bar erdolcht. Doch wer ist der Täter? Ist es Mord, wenn es das Opfer gar nicht gibt?



  • Xin schrieb:

    hustbaer schrieb:

    @Xin
    Variablen sind ein abstraktes Konzept und existieren nur im Source-Code.

    ...

    Und nun beantworte mir bitte: welchen Offset bzw. welche Adresse haben hier jeweils p, len und i?

    Die übliche Antwort des Experten: Das ist implementierungsabhängig. ^^

    Die Antwort kann ich auch nicht geben, weil ich die Verschachtelung des Scopes nicht kenne.
    Variablen, die rausoptimiert werden, existieren nicht. Was nicht existiert, braucht auch kein Offset.

    Und damit sind wir bei dem Schluss angekommen: die Aussage "Variablen sind Offsets/Adressen" ist Quatsch.
    War doch nicht so schwer.



  • SeppJ schrieb:

    Xin schrieb:

    Variablen, die rausoptimiert werden, existieren nicht. Was nicht existiert, braucht auch kein Offset.

    Interessant. Wie kommt es dann, dass trotzdem ihre Konstruktoren und Destruktoren ausgeführt werden, obwohl sie gar nicht existieren?

    Variablen gehen bei der Übersetzung einer nativen Sprache immer (meint grundsätzlich) verloren. Man kann sie für Reflection unabhängig vom Code halten, macht man in C++ aber nicht. Werden Konstruktoren ausgeführt, sind die Objekte(!) nicht herausoptimiert, sonst könnte man die Konstruktoren nicht ausführen?!

    Wird ein Programm allerdings durch eine Optimierung gezogen, kann es durchaus sein, dass vom Code nur noch die erforderlichen Teile übrigbleiben. Das wäre vergleichbar, wenn Du ein Rind durch einen Fleischwolf ziehst und behauptest, es wäre kein Rind mehr, weil ein bisschen was im Fleischwolf hängen geblieben ist.

    Wo kein Objekt, da auch kein Offset, um es wieder zu finden. Bei nicht wegoptimierten Variablen wirst Du das Offset im Code wiederfinden.

    hustbaer schrieb:

    Xin schrieb:

    hustbaer schrieb:

    @Xin
    Variablen sind ein abstraktes Konzept und existieren nur im Source-Code.

    ...

    Und nun beantworte mir bitte: welchen Offset bzw. welche Adresse haben hier jeweils p, len und i?

    Die übliche Antwort des Experten: Das ist implementierungsabhängig. ^^

    Die Antwort kann ich auch nicht geben, weil ich die Verschachtelung des Scopes nicht kenne.
    Variablen, die rausoptimiert werden, existieren nicht. Was nicht existiert, braucht auch kein Offset.

    Und damit sind wir bei dem Schluss angekommen: die Aussage "Variablen sind Offsets/Adressen" ist Quatsch.
    War doch nicht so schwer.

    Blödsinn.

    Die Größe und Position des Offsets ist implementierungsabhängig. Visual C++ liefert Dir zwei Schlüsselwörter mit, um die Art der Implementierung festzulegen.

    Aber da ich eh nur "Unsinn" rede, werden die Experten des Forums sicherlich wissen sicherlich auch wissen, dass Microsoft auch nur Unsinn implementiert.

    Den Spruch "Das ist implementierungsabhängig" ist übrigens nicht von mir, um den Experten mit mir zu verbinden: den wirst Du auf jeder zweiten Schulung eines beliebigen Themas wiederfinden, weil kein Mensch alle Implementierungen aufzählen wird, sondern einfach darauf hinweist, dass es mehr als eine Möglichkeit gibt. Die Möglichkeit, dass die das Hilfskonstrukt "Variable" das Objekt ist, dass damit beschreiben wird, sehe ich nicht als technisch machbar. Ich wüsste zumindest nicht wie.

    Ich sehe mich allerdings auch nicht in der Defensive, als dass ich euch bitten müsste, Informationen von mir als Beweis meiner Aussage abzusegnen. Offenbar ist ja sowieso niemand an Informationen interessiert. Von daher, mache ich meinen "Unsinn" weiter und ihr euren.

    PS: Ich habe nicht das Gefühl, dass keiner von euch beiden den Thread soweit verfolgt hat.... von daher hier eigentlich einfach mal querwidersprochen wird. Schlagwort gefunden und dagegen sein.
    Ich habe keinen Bock auf den nächsten 20 Seiten Thread... als es um RAII ging habe ich auch Google angeworfen und mein Wissen in Frage gestellt. Wenn ihr euch damit beschäftigen wollt... Google, Wikipedia, ... Wenn ihr nur widersprechen wollt... /dev/null. Wenn ihr was nicht versteht und wissen wollt, wären die Fragen entsprechend formuliert und ich gerne bereit zu erklären. So dürft ihr gerne eure Abschlusserklärung machen, dass ich keine Ahnung habe und fertig.



  • Xin schrieb:

    Und damit sind wir bei dem Schluss angekommen: die Aussage "Variablen sind Offsets/Adressen" ist Quatsch.
    War doch nicht so schwer.

    Blödsinn.

    Xin schrieb:

    Wird ein Programm allerdings durch eine Optimierung gezogen, kann es durchaus sein, dass vom Code nur noch die erforderlichen Teile übrigbleiben. [...]
    Wo kein Objekt, da auch kein Offset, um es wieder zu finden.

    Also wie jetzt?

    PS: Ich habe nicht das Gefühl, dass keiner von euch beiden den Thread soweit verfolgt hat.... von daher hier eigentlich einfach mal querwidersprochen wird. Schlagwort gefunden und dagegen sein.
    Ich habe keinen Bock auf den nächsten 20 Seiten Thread... als es um RAII ging habe ich auch Google angeworfen und mein Wissen in Frage gestellt. Wenn ihr euch damit beschäftigen wollt... Google, Wikipedia, ... Wenn ihr nur widersprechen wollt... /dev/null. Wenn ihr was nicht versteht und wissen wollt, wären die Fragen entsprechend formuliert und ich gerne bereit zu erklären. So dürft ihr gerne eure Abschlusserklärung machen, dass ich keine Ahnung habe und fertig.

    Und diese Aussage kam mit Ansage 🙂

    Shade Of Mine schrieb:

    Aber ich weiss wie die Diskussion hier weiter gehen wird

    😉

    Ich wiederhole deshalb:
    nur weil man dir widerspricht, heisst es nicht dass man dich angreifen will.



  • @Xin
    Du kannst nicht ernsthaft etwas in einem Satz als implementierungsabhängig bezeichnen (und zwar so weit dass es sogar ganz entfernt werden kann), und dann im nächsten darauf beharren die Beschreibung der Natur eben dieses implementierungsabhängigen Dings sei akkurat.
    Ich meine, hallo ...?

    Und du bist auf mein "aus 3 mach 2" Beispiel nicht eingegangen. Das funktioniert nämlich so überhaupt nicht mehr mit deiner Beschreibung. Hier werden die Variablen nämlich weder ganz wegoptimiert noch findet man sie 1:1 als Speicherstellen mit Offsets/Adressen/was auch immer.

    Und nochwas: du redest hier (wenn du mit mir redest) nicht mit einem Vollidioten. Ich habe eine sehr genaue Vorstellung davon was Compiler so machen, wie der übersetzte Code aussieht etc. Und auch eine halbwegs gute davon was verschiedene Compiler so für Optimierungen durchführen können. Das "aus 3 mach 2" Beispiel ist z.B. keineswegs erfunden.

    ps: Ich will nicht behaupten dass du von der Sache keine Ahnung hättest, denn den Eindruck habe ich nicht. Ich hab' aber ganz stark den Eindruck dass du dich mit Händen und Füssen dagegen wehrst eine Ausdrucksweise anzunehmen die andere verstehen können. Klassisches Einzelkämpfersyndrom. "Ich hab da immer so zu gesagt und deswegen hab ich recht".



  • Shade Of Mine schrieb:

    Xin schrieb:

    Und damit sind wir bei dem Schluss angekommen: die Aussage "Variablen sind Offsets/Adressen" ist Quatsch.
    War doch nicht so schwer.

    Blödsinn.

    Xin schrieb:

    Wird ein Programm allerdings durch eine Optimierung gezogen, kann es durchaus sein, dass vom Code nur noch die erforderlichen Teile übrigbleiben. [...]
    Wo kein Objekt, da auch kein Offset, um es wieder zu finden.

    Also wie jetzt?

    Objekt != Variable. Die Variable identifiziert Objekt, eine Variable ist häufig Offset zu Stack, gelegentlich Adresse (static var).

    Was rausoptimiert wurde, war nicht die Variable, sondern das Objekt. Die Variable, das Offset/Addresse, um das Objekt zu finden, fällt damit auch weg.

    Shade Of Mine schrieb:

    Shade Of Mine schrieb:

    Und diese Aussage kam mit Ansage 🙂

    ...
    Aber ich weiss wie die Diskussion hier weiter gehen wird

    😉

    Ich wiederhole deshalb:
    nur weil man dir widerspricht, heisst es nicht dass man dich angreifen will.

    Ich fühle mich nicht angegriffen - schrieb ich ja. Ich habe nur keine Lust, den nächsten 20 Seiten Thread mitzumachen, weil das in dem Moment Zeitverschwendung ist, wo es nur noch darum geht, sich zu widersprechen. Man kann fragen, man kann in Zweifel ziehen und man versuchen jemand in Bedrängnis zu bringen. Ich lasse mich gerne anzweifeln, ich erkläre auch gerne schon alleine deswegen weil man mit der Erklärung Chancen hat, Dinge noch tiefergehender zu verstehen. Ich hatte hier eine Diskussion über 55 oder mehr Seiten, wo ich eine wunderbare Idee hatte, die alle scheiße fanden und die ich derzeit implementiere.
    Das kann alles durchaus einen guten Sinn haben, aber es muss ein Ziel haben. Hier sehe ich keins.

    Das Ziel zu erklären, um zu beweisen, dass man kein Idiot ist, ist... uninteressant. Ich habe das, worum es derzeit hier offtopic geht, implementiert, ich weiß warum und ich kann das auch begründen. Aber das macht keinen Sinn, wenn es in Wirklichkeit keinen interessiert.
    Der Thread geht um Programmiererniveau. Hier werfe ich mal "RAII" als Buzzword rein und erfahre, dass ich RAII nicht verstehe. Dann debattieren wir, dass ich RAII verstehe, aber ich mein Verständnis aus einer ganz anderen Perspektive aufbaue. RAII ist jetzt abgehakt, darf ich RAII als verstanden ansehen? Mit C++-Forums-Ordnen am blauen Bande? 😉 Dafür habe ich jetzt keinen Plan von Compilerbau. Irgendwo wird das ganze langweilig. Diskutieren, um Fronten gegeneinander zu stellen? Langweilig.

    Ich habe dann die Auswahl, zu erklären bis wir auf Seite 40 angekommen sind, obwohl es keinen wirklich interessiert, um dann irgendwann wieder an die Schiene "Du debatierst Dich zu Tode" zu kommen. Das ganze obwohl sich keiner damit beschäftigt, weil man auch dagegen sein kann, ohne überhaupt einen zusammengehörenden Satz formulieren zu können, z.b. "Das ist Unsinn". Da habe ich einfach keine Lust eine mehrzeilige Erklärung drunter zu setzen.

    Wenn's keinen interessiert, interessiert's halt nicht. Wenn es doch einen interessiert, wird er die richtigen Worte für seine Frage finden. Und den richtigen Weg.
    Also wähle ich heute Tor 2, das spart uns allen Zeit. 🙂

    Die Diskussion ging um Programmiererniveau. Wir sollten also zum Threadthema zurückkommen und das noch ein paar Seiten vertiefen, statt auf der Realisation von Variablen rumzuklopfen, die der Anwender einer Programmiersprache in der Regel sowieso nicht nachvollziehen muss.

    hustbaer schrieb:

    @Xin
    Du kannst nicht ernsthaft etwas in einem Satz als implementierungsabhängig bezeichnen (und zwar so weit dass es sogar ganz entfernt werden kann), und dann im nächsten darauf beharren die Beschreibung der Natur eben dieses implementierungsabhängigen Dings sei akkurat.
    Ich meine, hallo ...?

    Ich verstehe nichtmals, was Du da mitteilen möchtest. "Beschreibung der Natur eben dieses"?
    2. Absatz steht schon oben.

    hustbaer schrieb:

    Und nochwas: du redest hier (wenn du mit mir redest) nicht mit einem Vollidioten. Ich habe eine sehr genaue Vorstellung davon was Compiler so machen, wie der übersetzte Code so aussieht etc. Und auch eine halbwegs gut davon was verschiedene Compiler so für Optimierungen durchführen können. Das "aus 3 mach 2" Beispiel ist z.B. keineswegs erfunden.

    Die Variable wird nie im Registerlanden, sondern das Objekt, dass die Variable identifiziert.
    Nehmen wir "i". Behaupten wir, dass "i" auf dem Stack bei -4 liegt. Das Objekt, dass mit "i" identifiziert werden soll, hat also das Offset -4 zum Stack und heißt im Quelltext eben "i". Das ist Deine Variable.
    Die Optimierung greift. Sie lädt das Objekt, welches sich 4 Bytes vor dem Stackpointer befindet als 32 Bit Datenwert in das Register und iteriert über das Register.
    Die For-Schleife erlaubt nicht die Entfernung des Objektes, sie erlaubt aber, dass i nie auf dem Stack angelegt werden muss, in dem sofort das Register mit 0 initialisiert wird. Die Variable i muss kein Objekt auf dem Stack identifizieren und auch keine statische Adresse. Hier muss sie das Register addressieren, dass durch die Optimierung statt der stackrelativen Position ausgewählt wurde.
    Hier wird nichts rausoptimiert, hier wird nur in die CPU verlagert.

    Nach dem Compilervorgang ist die Variable komplett weg, das Objekt, das mit 'i' identifiziert wurde, existiert weiterhin im Register.

    hustbaer schrieb:

    ps: Ich will nicht behaupten dass du von der Sache keine Ahnung hättest, denn den Eindruck habe ich nicht. Ich hab' aber ganz stark den Eindruck dass du dich mit Händen und Füssen dagegen wehrst eine Ausdrucksweise anzunehmen die andere verstehen können. Klassisches Einzelkämpfersyndrom. "Ich hab da immer so zu gesagt und deswegen hab ich recht".

    Ich möchte nicht wissen, wie lang dieses Posting hier wieder wird... Wieso kommst Du auf einen solchen Spruch "Klassisches Einzelkämpfersyndrom"? Du möchtest nicht behaupten, dass ich keine Ahnung habe, aber eine solche Behauptung wie "klassisches Einzelkämpfersyndrom" kommt Dir dafür leicht über die Lippen.

    Shaaaaade... ist das eigentlich ein Angriff? 😉

    Ganz ehrlich, hustbaer - es kostet mich Zeit auf drei, vier Leute einzugehen und zu erklären und es macht einfach keinen Spaß, wenn man dazwischen immer wieder liest, dass man als Mensch mit "klassischem Einzelkämpfersyndrom" abgestempelt wird und man gleichzeitig liest, dass hier mehrere C++-Experten erkannt haben, dass ich was nicht verstehe.
    Warum soll ich mich Leuten erklären, die mir ihren Stempel schon aufgedrückt haben und diesen gerne noch bestätigt sehen wollen?

    Was habe ich davon? Wenn ich darauf eingehe, kommt nur das nächste Posting, wo irgendwer irgendwas nicht behaupten möchte, aber davon überzeugt ist, dass ich der klassische Fall von was auch immer bin, was aber in keinem Fall ein Angriff darstellen soll. 🤡

    Also bestätige ich Dir hiermit den Einzelkämpfer. 🙂 Ein Einzelkämpfer ist nicht daran interessiert mit anderen zu diskutieren.

    Falls Du doch fachlich(!) mit mir diskutieren möchtest, dann gerne, aber nicht hier. Ich habe keinen Bock, gegen eine Front von drei, vier Leuten anzudiskutieren und mir dabei das Geschwafel über herbeigedichtete psychische Probleme durchzulesen, weil ich als Einzelkämpfer viel zu lange Postings schreibe. 😉


Anmelden zum Antworten