Während Programmlaufzeit Name einer Variable ändern?



  • Hi, geht das? Übrigens reine Interessen-Frage.



  • Variablen haben zur Laufzeit keinen Namen.


  • Mod

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



  • Naja...
    Bei interpretierten Sprachen wäre es nichtmal unmöglich Variablen zur Laufzeit umzubenennen.
    Gibt ja Sprachen die das zumindest bei Membern durchaus erlauben.
    Lokale Variablen, Parameter etc. könnte man theoretisch gleich behandeln.
    Macht zwar mMn. keinen Sinn, aber möglich wäre es schon.

    In C++ ist das freilich gänzlich anders - da gibt's zur Laufzeit ja sowieso so-gut-wie nichts mehr. Nichtmal Klassen sind noch wirklich greifbar (mal ganz abgesehen von veränderbar).



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



  • SeppJ schrieb:

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

    Das musst Du näher erläutern. Ist denn eine Speicherstelle im RAM oder Register nicht veränderbar also variabel?



  • ie Variabl muss nichtmal mehr im programmcode existieren.



  • 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.


  • 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.


Anmelden zum Antworten