Während Programmlaufzeit Name einer Variable ändern?


  • Mod

    sC++k schrieb:

    Daraus kann ich mal ein klares "Nein" schließen, oder?

    Nein. Eine passende Antwort wäre "Mu."

    Zur Laufzeit gibt es keine Variable mehr und auch erst Recht keinen Namen. Die Frage an sich ist daher falsch gestellt und man kann keine Ja/Nein Antwort da drauf geben.



  • suchst du vielleicht referenzen?

    int a = 123;
    int& b = a;
    b += 42;
    


  • std::map<std::string, ...> kann solches Verhalten abbilden (mehr oder weniger). Die Frage ist aber, warum man das brauchen sollte.



  • TNA schrieb:

    mgaeckler schrieb:

    Ist denn eine Speicherstelle im RAM oder Register nicht veränderbar also variabel?

    Klar, aber eine Speicherstelle im RAM oder Register hat keinen Namen und ist auch keiner Variablen fest zugeordnet. Variablennamen sind nur Konzepte der Programmiersprachen um den Menschen das Programmieren zu erleichtern, damit diese nicht direkt mir Adressen und Registern arbeiten müssen. Man gibt quasi einem Wert einen Namen über den man den Wert im Quelltext referenzieren kann. Wie der Kompiler das im Maschienencode umsetzt ist ihm überlassen.

    Das ist alles richtig, was Du schreibst. Jedoch nur weil sie keine Namen haben sondern nur Adressen oder wie auch immer (z.B. Register) sind es Variablen auch wenn es nicht unbedingt eine 1:1 Beziehung zw. den Variablen der Hochsprache und dem Maschinencode geben muß.

    mfg Martin
    P.S.: Bin mir nicht sicher, aber wenn ich mich recht erinnere, war in der alten TOS Dokumentation auch von Systemvariablen die Rede.



  • Wobei... eigentlich mach ich das laufend.
    Debug-Session starten, und nebenher weiterprogrammieren. Und das ist ja dann "während Programmlaufzeit Name einer Variable ändern". 🤡



  • hustbaer schrieb:

    Wobei... eigentlich mach ich das laufend.
    Debug-Session starten, und nebenher weiterprogrammieren. Und das ist ja dann "während Programmlaufzeit Name einer Variable ändern". 🤡

    😃 Das war aber sicherlich nicht das, was der Fragesteller meinte. Aber trotzdem, die Antwort ist klasse. 👍

    mfg Martin



  • mgaeckler schrieb:

    P.S.: Bin mir nicht sicher, aber wenn ich mich recht erinnere, war in der alten TOS Dokumentation auch von Systemvariablen die Rede.

    Bei Qbasic wurden auch immer Variablen und Variablennamen erwähnt.


  • Mod

    mgaeckler schrieb:

    Das ist alles richtig, was Du schreibst. Jedoch nur weil sie keine Namen haben sondern nur Adressen oder wie auch immer (z.B. Register) sind es Variablen auch wenn es nicht unbedingt eine 1:1 Beziehung zw. den Variablen der Hochsprache und dem Maschinencode geben muß.

    Wenn es keine 1:1 Beziehung gibt, kannst du auch nicht mehr sagen, dass es die Variablen noch gibt. Ein und dieselbe Speicherstelle/Register kann sich auf gänzlich verschiedene Variablen des Quellcodes beziehen. Eine Variable aus dem Quellcode braucht sich überhaupt gar nicht mehr auf eine Speicherstelle/Register zu beziehen.
    In keiner Richtung funktioniert eine Identifikation zwischen dem Konzept der Variablen im Maschinencode und im Quellcode.



  • mgaeckler schrieb:

    Das ist alles richtig, was Du schreibst. Jedoch nur weil sie keine Namen haben sondern nur Adressen oder wie auch immer (z.B. Register) sind es Variablen auch wenn es nicht unbedingt eine 1:1 Beziehung zw. den Variablen der Hochsprache und dem Maschinencode geben muß.

    Das ist jetzt wie wenn du behauptest dass Kinder ihre Eltern "sind".
    Weil irgendwo sind die ja auch Menschen, und sie kommen klar von ihren Eltern, nur weil da keine 1:1 Beziehung mehr ist...
    -> Unsinn



  • hustbaer schrieb:

    mgaeckler schrieb:

    Das ist alles richtig, was Du schreibst. Jedoch nur weil sie keine Namen haben sondern nur Adressen oder wie auch immer (z.B. Register) sind es Variablen auch wenn es nicht unbedingt eine 1:1 Beziehung zw. den Variablen der Hochsprache und dem Maschinencode geben muß.

    Das ist jetzt wie wenn du behauptest dass Kinder ihre Eltern "sind".
    Weil irgendwo sind die ja auch Menschen, und sie kommen klar von ihren Eltern, nur weil da keine 1:1 Beziehung mehr ist...
    -> Unsinn

    Dieser Assoziation kann ich jetzt leider überhaupt nicht folgen. 😕

    mfg Martin



  • SeppJ schrieb:

    mgaeckler schrieb:

    Das ist alles richtig, was Du schreibst. Jedoch nur weil sie keine Namen haben sondern nur Adressen oder wie auch immer (z.B. Register) sind es Variablen auch wenn es nicht unbedingt eine 1:1 Beziehung zw. den Variablen der Hochsprache und dem Maschinencode geben muß.

    Wenn es keine 1:1 Beziehung gibt, kannst du auch nicht mehr sagen, dass es die Variablen noch gibt.

    Das habe ich ja auch nicht behauptet. Ich meine nur, es gibt immer noch Variablen, da es aber keine 1:1 Beziehung gibt, sind es natürlich andere Variablen.

    SeppJ schrieb:

    Sogar der Begriff der Variablen macht zur Laufzeit kaum mehr Sinn, zumindest wenn es sich um Basisdatentypen handelt.

    SeppJ schrieb:

    In keiner Richtung funktioniert eine Identifikation zwischen dem Konzept der Variablen im Maschinencode und im Quellcode.

    Ist das nicht ein Widerspruch? Zuerst schreibst Du, daß der Begriff der Variable kaum mehr Sinn macht, dann sprichst Du vom Konzept der Variablen im Maschinencode.

    mfg Martin


  • Mod

    Das Problem ist, dass ich gar nicht ausdrücken kann, was im Maschinencode eine Variable ist. Daher das nebulöse Wort "Konzept". Das hast du wohl zu konkret verstanden, als dass es da noch Variablen gäbe. Aber da ist nicht mehr wirklich etwas, was man als Variable bezeichnen kann. Auch das mit den nicht-Basisdatentypen muss ich noch einschränken, da es eigentlich eher eine Frage ist, inwiefern der Compiler noch seine Optimierungsmagie anwenden kann oder nicht, was ihm bei nicht-Basisdatentypen erheblich schwerer fallen sollte. Daher gibt es in dem Fall noch am ehesten so eine Beziehung Variable <-> Speicheradresse. Aber auch nicht immer. Ebenso, wenn der Quellcode explizit anfängt, diese Beziehung explizit zu nutzen, etwa wenn der Adressoperator benutzt wird. Aber im Allgemeinen gibt es solch eine Beziehung nicht.



  • mgaeckler schrieb:

    Das habe ich ja auch nicht behauptet. Ich meine nur, es gibt immer noch Variablen, da es aber keine 1:1 Beziehung gibt, sind es natürlich andere Variablen.

    Du verstrickst dich in Widersprüche.

    Variablen sind ein Konzept einer Programmiersprache. Sie haben keine physikalische Existenz -- anders als Speicherbereiche und Bits. Da bei C++ nach der Übersetzung nicht mehr viel von C++ übrig bleibt, gibt es zur Laufzeit auch keine Variablen mehr.

    Im Maschinencode gibt es andere Konzepte (wie z.B. Register), auf dieser Ebene würde ich nicht mehr von Variablen sprechen.



  • Nexus schrieb:

    ...

    +1
    Kurz und verständlich auf den Punkt gebracht 👍



  • Nexus schrieb:

    mgaeckler schrieb:

    Das habe ich ja auch nicht behauptet. Ich meine nur, es gibt immer noch Variablen, da es aber keine 1:1 Beziehung gibt, sind es natürlich andere Variablen.

    Du verstrickst dich in Widersprüche.

    Wo findest Du 'nen Widerspruch?

    Nexus schrieb:

    Im Maschinencode gibt es andere Konzepte (wie z.B. Register), auf dieser Ebene würde ich nicht mehr von Variablen sprechen.

    Ich schon. Nur weil die Variablen keine Namen sondern nur noch wie auch immer geartete Adressen haben sind es in meinen Augen immer noch Variablen.

    mfg Martin



  • mgaeckler schrieb:

    Nur weil die Variablen keine Namen sondern nur noch wie auch immer geartete Adressen haben sind es in meinen Augen immer noch Variablen.

    Variablen haben zur Laufzeit nicht zwingend eine "wie auch immer geartete" Adresse. Die können in bestimmten Fällen z.B. als Direktoperand direkt in Maschienenbefehle eincompiliert oder komplett wegoptimiert werden. Es gibt zur Laufzeit keine 1:1 Entsprechung mehr von einer Variablen zu einem bestimmten Ort.



  • TNA schrieb:

    mgaeckler schrieb:

    Nur weil die Variablen keine Namen sondern nur noch wie auch immer geartete Adressen haben sind es in meinen Augen immer noch Variablen.

    Variablen haben zur Laufzeit nicht zwingend eine "wie auch immer geartete" Adresse. Die können in bestimmten Fällen z.B. als Direktoperand direkt in Maschienenbefehle eincompiliert oder komplett wegoptimiert werden. Es gibt zur Laufzeit keine 1:1 Entsprechung mehr von einer Variablen zu einem bestimmten Ort.

    Dann sind sie ja auch keine Variable. Also z.B. (ist jetzt zwar Assembler und nicht Maschinencode, weil ich den nicht mehr auswendig habe):

    move.w #10, d0
    

    Da ist #10 keine Variable, aber d0, was ein Register der MC68000er CPU ist.

    mfg Martin
    P.S.: Denkt beim Begriff Variable nicht zu sehr in Hochsprachen



  • mgaeckler schrieb:

    P.S.: Denkt beim Begriff Variable nicht zu sehr in Hochsprachen

    Wenn du hier ein Konzept von Variablen diskutieren möchtest, dass nicht dem von Hochsprachen entspricht bist du wahrscheinlich im falschen Forum. Unter Assembler spricht man aber auch meines Erachtens nicht von Variablen und namen haben die auch dort nicht.



  • Ausserdem ist Assembler != Maschinencode.
    In Assembler gibt's noch Labels und was nicht noch alles. In Maschinencode gibt's im Prinzip gar nix mehr ausser Maschinenbefehle.

    Und wenn man sich ein Binary anguckt, dann verschwimmt auch noch die Grenze zwischen Maschinencode und einer Bytewurst.
    Im Endeffekt kann man nur sagen wo welche Maschinenbefehle stehen, wenn man ein Programm ausführt. Man denke nur an Sprünge mit berechneten Zieladressen, self-modifying Code etc.

    @mgaeckler
    Dein Verständnis des Begriffs "Variable" entspricht nicht dem was die allermeisten anderen Programmierer darunter verstehen.
    Vermutlich wäre es also intelligent dein Verständnis des Begriffs anzupassen. Du kannst aber natürlich auch gerne damit weitermachen gegen den Wind zu laufen. Bringt nur niemandem was.

    Oder Kurzfassung: der Rest der Welt hat Recht, nicht du.



  • hustbaer schrieb:

    Ausserdem ist Assembler != Maschinencode.
    In Assembler gibt's noch Labels und was nicht noch alles. In Maschinencode gibt's im Prinzip gar nix mehr ausser Maschinenbefehle.

    Und wenn man sich ein Binary anguckt, dann verschwimmt auch noch die Grenze zwischen Maschinencode und einer Bytewurst.
    Im Endeffekt kann man nur sagen wo welche Maschinenbefehle stehen, wenn man ein Programm ausführt. Man denke nur an Sprünge mit berechneten Zieladressen, self-modifying Code etc.

    @mgaeckler
    Dein Verständnis des Begriffs "Variable" entspricht nicht dem was die allermeisten anderen Programmierer da5runter verstehen.
    Vermutlich wäre es also intelligent dein Verständnis des Begriffs anzupassen. Du kannst aber natürlich auch gerne damit weitermachen gegen den Wind zu laufen. Bringt nur niemandem was.

    Oder Kurzfassung: der Rest der Welt hat Recht, nicht du.

    Mir kann es ja wurscht sein aber lies das mal

    http://de.wiktionary.org/wiki/Variable


Anmelden zum Antworten